This commit is contained in:
liugang
2019-07-08 10:16:25 +08:00
482 changed files with 13128 additions and 6114 deletions
+85 -30
View File
@@ -1,6 +1,7 @@
VERSION = $(shell head -n 1 VERSION)
XUANPATH = $(shell head -n 1 XUANPATH)
XUANVERSION = $(shell head -n 1 XUANVERSION)
XVERSION = $(strip $(subst v,, $(XUANVERSION)))
all: pms
clean:
@@ -53,33 +54,58 @@ zentaoxx:
cd $(XUANPATH); git archive --format=zip --prefix=xuan/ $(XUANVERSION) > xuan.zip
mv $(XUANPATH)/xuan.zip .
unzip xuan.zip
cp xuan/ranzhi/config/ext/xuanxuan.php zentaoxx/config/ext/
cp -r xuan/ranzhi/lib/phpaes zentaoxx/lib/
cp -r xuan/ranzhi/framework/xuanxuan.class.php zentaoxx/framework/
cp -r xuan/ranzhi/db/*.sql zentaoxx/db/
cp -r xuan/ranzhi/app/sys/chat zentaoxx/module/
cp -r xuan/ranzhi/app/sys/common/ext/model/hook zentaoxx/module/common/ext/model/
cp -r xuan/ranzhi/app/sys/action zentaoxx/module/
cp xuan/xxb/config/ext/xuanxuan.php zentaoxx/config/ext/
cp -r xuan/xxb/lib/phpaes zentaoxx/lib/
cp -r xuan/xxb/framework/xuanxuan.class.php zentaoxx/framework/
cp -r xuan/xxb/db/*.sql zentaoxx/db/
cp -r xuan/xxb/module/chat zentaoxx/module/
cp -r xuan/xxb/module/client zentaoxx/module/
cp -r xuan/xxb/module/common/ext/model/hook zentaoxx/module/common/ext/model/
mkdir -p zentaoxx/module/common/view
cp -r xuan/xxb/module/common/view/header.modal.html.php zentaoxx/module/common/view
cp -r xuan/xxb/module/common/view/marked.html.php zentaoxx/module/common/view
cp -r xuan/xxb/module/common/view/footer.modal.html.php zentaoxx/module/common/view
mkdir -p zentaoxx/www/js/
cp -r xuan/xxb/www/js/markedjs zentaoxx/www/js/
mkdir zentaoxx/module/action
cp -r xuan/xxb/module/action/ext zentaoxx/module/action
cp -r xuanxuan/config/* zentaoxx/config/
cp -r xuanxuan/module/* zentaoxx/module/
cp -r xuanxuan/www/* zentaoxx/www/
mv zentaoxx/db/ zentaoxx/db_bak
mkdir zentaoxx/db/
cp zentaoxx/db_bak/upgradexuanxuan*.sql zentaoxx/db_bak/xuanxuan.sql zentaoxx/db/
rm -rf zentaoxx/db_bak/
sed -i 's/XXBVERSION/$(XVERSION)/g' zentaoxx/config/ext/xuanxuan.php
sed -i "/\$$config->xuanxuan->backend /c\\\$$config->xuanxuan->backend = 'zentao';" zentaoxx/config/ext/xuanxuan.php
sed -i 's/site,//' zentaoxx/module/chat/model.php
sed -i 's/admin, g/g/' zentaoxx/module/chat/model.php
sed -i '/password = md5/d' zentaoxx/module/chat/control.php
sed -i '/getSignedTime/d' zentaoxx/module/chat/control.php
sed -i 's/tree/dept/' zentaoxx/module/chat/control.php
sed -i "s/'yahoo', //g" zentaoxx/module/chat/config.php
sed -i "s/'gtalk', //g" zentaoxx/module/chat/config.php
sed -i "s/'wangwang', //g" zentaoxx/module/chat/config.php
sed -i "s/'site', //g" zentaoxx/module/chat/config.php
sed -i "s/'reload'/inlink('browse')/g" zentaoxx/module/client/control.php
sed -i 's/tree/dept/' zentaoxx/module/chat/model.php
sed -i "s/, 'sys'//" zentaoxx/module/chat/control.php
sed -i 's/system.sys/system/' zentaoxx/module/chat/control.php
sed -i 's/&app=sys//' zentaoxx/module/chat/control.php
sed -i 's/file->createdBy/file->addedBy/' zentaoxx/module/chat/control.php
sed -i 's/file->createdDate/file->addedDate/' zentaoxx/module/chat/control.php
sed -i 's/im_/zt_im_/' zentaoxx/db/*.sql
sed -i 's/sys_user/zt_user/' zentaoxx/db/*.sql
sed -i 's/sys_file/zt_file/' zentaoxx/db/*.sql
sed -i '/sys_entry/d' zentaoxx/db/*.sql
sed -i 's/im_/zt_im_/g' zentaoxx/db/*.sql
sed -i 's/xxb_user/zt_user/g' zentaoxx/db/*.sql
sed -i 's/xxb_file/zt_file/g' zentaoxx/db/*.sql
sed -i '/xxb_entry/d' zentaoxx/db/*.sql
sed -i "s/marked\.html\.php';?>/marked\.html\.php';?>\n<div id='mainMenu' class='clearfix'><div class='btn-toolbar pull-left'><?php common::printAdminSubMenu('xuanxuan');?><\/div><\/div>/g" zentaoxx/module/client/view/checkupgrade.html.php
sed -i '/var serverVersions/d' zentaoxx/module/client/js/checkupgrade.js
sed -i '/var currentVersion/d' zentaoxx/module/client/js/checkupgrade.js
sed -i '/setRequiredFields(/d' zentaoxx/module/common/view/header.modal.html.php
sed -i 's/header.html.php/header.lite.html.php/g' zentaoxx/module/common/view/header.modal.html.php
sed -i 's/getAppRoot/getModuleRoot/g' zentaoxx/module/common/view/header.modal.html.php
sed -i 's/footer.html.php/footer.lite.html.php/g' zentaoxx/module/common/view/footer.modal.html.php
sed -i 's/getAppRoot/getModuleRoot/g' zentaoxx/module/common/view/footer.modal.html.php
sed -i 's/v\.//g' zentaoxx/module/chat/js/debug.js
sed -i "s/lang->goback,/lang->goback, '',/g" zentaoxx/module/chat/view/debug.html.php
sed -i 's/v\.//g' zentaoxx/module/client/js/checkupgrade.js
sed -i 's/xxb_/zt_/g' zentaoxx/db/*.sql
mkdir zentaoxx/tools; cp tools/cn2tw.php zentaoxx/tools; cd zentaoxx/tools; php cn2tw.php
rm -rf zentaopms/tools
rm -rf zentaoxx/tools
zip -rqm -9 zentaoxx.$(VERSION).zip zentaoxx/*
rm -rf xuan.zip xuan zentaoxx
package:
@@ -104,18 +130,6 @@ pms:
make package
zip -rq -9 ZenTaoPMS.$(VERSION).zip zentaopms
rm -fr zentaopms zentaoxx zentaoxx.*.zip
en:
make common
cd zentaopms/; grep -rl 'zentao.net'|xargs sed -i 's/zentao.net/zentao.pm/g';
cd zentaopms/; grep -rl 'http://www.zentao.pm'|xargs sed -i 's/http:\/\/www.zentao.pm/https:\/\/www.zentao.pm/g';
cd zentaopms/config/; echo >> config.php; echo '$$config->isINT = true;' >> config.php
make package
zip -r -9 ZenTaoPMS.$(VERSION).int.zip zentaopms
rm -fr zentaopms
echo $(VERSION).int > VERSION
make deb
make rpm
echo $(VERSION) > VERSION
deb:
mkdir buildroot
cp -r build/debian/DEBIAN buildroot
@@ -143,6 +157,47 @@ rpm:
rpmbuild -ba ~/rpmbuild/SPECS/zentaopms.spec
cp ~/rpmbuild/RPMS/noarch/zentaopms-${VERSION}-1.noarch.rpm ./
rm -rf ~/rpmbuild
en:
make common
cd zentaopms/; grep -rl 'zentao.net'|xargs sed -i 's/zentao.net/zentao.pm/g';
cd zentaopms/; grep -rl 'http://www.zentao.pm'|xargs sed -i 's/http:\/\/www.zentao.pm/https:\/\/www.zentao.pm/g';
cd zentaopms/config/; echo >> config.php; echo '$$config->isINT = true;' >> config.php
make package
mv zentaopms zentaoalm
zip -r -9 ZenTaoALM.$(VERSION).int.zip zentaoalm
rm -fr zentaoalm
echo $(VERSION).int > VERSION
make endeb
make enrpm
echo $(VERSION) > VERSION
endeb:
mkdir buildroot
cp -r build/debian/DEBIAN buildroot
sed -i '/^Version/cVersion: ${VERSION}' buildroot/DEBIAN/control
mkdir buildroot/opt
mkdir buildroot/etc/apache2/sites-enabled/ -p
cp build/debian/zentaopms.conf buildroot/etc/apache2/sites-enabled/
cp ZenTaoALM.${VERSION}.zip buildroot/opt
cd buildroot/opt; unzip ZenTaoALM.${VERSION}.zip; mv zentaoalm zentao; rm ZenTaoALM.${VERSION}.zip
sed -i 's/index.php/\/zentao\/index.php/' buildroot/opt/zentao/www/.htaccess
sudo dpkg -b buildroot/ ZenTaoALM_${VERSION}_1_all.deb
rm -rf buildroot
enrpm:
mkdir ~/rpmbuild/SPECS -p
cp build/rpm/zentaopms.spec ~/rpmbuild/SPECS
sed -i '/^Version/cVersion:${VERSION}' ~/rpmbuild/SPECS/zentaopms.spec
sed -i '/^Name:/cName:zentaoalm' ~/rpmbuild/SPECS/zentaopms.spec
mkdir ~/rpmbuild/SOURCES
cp ZenTaoALM.${VERSION}.zip ~/rpmbuild/SOURCES
mkdir ~/rpmbuild/SOURCES/etc/httpd/conf.d/ -p
cp build/debian/zentaopms.conf ~/rpmbuild/SOURCES/etc/httpd/conf.d/zentaoalm.conf
mkdir ~/rpmbuild/SOURCES/opt/ -p
cd ~/rpmbuild/SOURCES; unzip ZenTaoALM.${VERSION}.zip; mv zentaoalm opt/zentao;
sed -i 's/index.php/\/zentao\/index.php/' ~/rpmbuild/SOURCES/opt/zentao/www/.htaccess
cd ~/rpmbuild/SOURCES; tar -czvf zentaoalm-${VERSION}.tar.gz etc opt; rm -rf ZenTaoALM.${VERSION}.zip etc opt;
rpmbuild -ba ~/rpmbuild/SPECS/zentaopms.spec
cp ~/rpmbuild/RPMS/noarch/zentaoalm-${VERSION}-1.noarch.rpm ./
rm -rf ~/rpmbuild
patchphpdoc:
sudo cp misc/doc/phpdoc/*.tpl /usr/share/php/data/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/
phpdoc:
+1 -1
View File
@@ -1 +1 @@
11.4.stable
11.5.stable
+1 -1
View File
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
if(!function_exists('getWebRoot')){function getWebRoot(){}}
/* 基本设置。Basic settings. */
$config->version = '11.4'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
$config->version = '11.5'; // 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.
+3
View File
@@ -45,6 +45,7 @@ $filter->mail = new stdclass();
$filter->user = new stdclass();
$filter->block = new stdclass();
$filter->file = new stdclass();
$filter->translate = new stdclass();
$filter->block->default = new stdclass();
$filter->block->main = new stdclass();
@@ -210,3 +211,5 @@ $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';
$filter->translate->module->cookie['translateView'] = 'equal::split';
+1
View File
@@ -107,6 +107,7 @@ 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`');
define('TABLE_TRANSLATION', '`' . $config->db->prefix . 'translation`');
if(!defined('TABLE_LANG')) define('TABLE_LANG', '`' . $config->db->prefix . 'lang`');
$config->objectTables['product'] = TABLE_PRODUCT;
+906
View File
@@ -0,0 +1,906 @@
CREATE TABLE `zt_action` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`objectType` varchar(30) NOT NULL DEFAULT '',
`objectID` mediumint(8) unsigned NOT NULL DEFAULT '0',
`product` varchar(255) NOT NULL,
`project` mediumint(9) NOT NULL,
`actor` varchar(30) NOT NULL DEFAULT '',
`action` varchar(30) NOT NULL DEFAULT '',
`date` datetime NOT NULL,
`comment` text NOT NULL,
`extra` text NOT NULL,
`read` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `date` (`date`),
KEY `actor` (`actor`),
KEY `project` (`project`),
KEY `objectID` (`objectID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_block` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`account` char(30) NOT NULL,
`module` varchar(20) NOT NULL,
`title` varchar(100) NOT NULL,
`source` varchar(20) NOT NULL,
`block` varchar(20) NOT NULL,
`params` text NOT NULL,
`order` tinyint(3) unsigned NOT NULL DEFAULT '0',
`grid` tinyint(3) unsigned NOT NULL DEFAULT '0',
`height` smallint(5) unsigned NOT NULL DEFAULT '0',
`hidden` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`),
KEY `account` (`account`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_branch` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
`order` smallint(5) unsigned NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_bug` (
`id` mediumint(8) NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
`branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
`module` mediumint(8) unsigned NOT NULL DEFAULT '0',
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`plan` mediumint(8) unsigned NOT NULL DEFAULT '0',
`story` mediumint(8) unsigned NOT NULL DEFAULT '0',
`storyVersion` smallint(6) NOT NULL DEFAULT '1',
`task` mediumint(8) unsigned NOT NULL DEFAULT '0',
`toTask` mediumint(8) unsigned NOT NULL DEFAULT '0',
`toStory` mediumint(8) NOT NULL DEFAULT '0',
`title` varchar(255) NOT NULL,
`keywords` varchar(255) NOT NULL,
`severity` tinyint(4) NOT NULL DEFAULT '0',
`pri` tinyint(3) unsigned NOT NULL,
`type` varchar(30) NOT NULL DEFAULT '',
`os` varchar(30) NOT NULL DEFAULT '',
`browser` varchar(30) NOT NULL DEFAULT '',
`hardware` varchar(30) NOT NULL,
`found` varchar(30) NOT NULL DEFAULT '',
`steps` text NOT NULL,
`status` enum('active','resolved','closed') NOT NULL DEFAULT 'active',
`color` char(7) NOT NULL,
`confirmed` tinyint(1) NOT NULL DEFAULT '0',
`activatedCount` smallint(6) NOT NULL,
`activatedDate` datetime NOT NULL,
`mailto` text,
`openedBy` varchar(30) NOT NULL DEFAULT '',
`openedDate` datetime NOT NULL,
`openedBuild` varchar(255) NOT NULL,
`assignedTo` varchar(30) NOT NULL DEFAULT '',
`assignedDate` datetime NOT NULL,
`deadline` date NOT NULL,
`resolvedBy` varchar(30) NOT NULL DEFAULT '',
`resolution` varchar(30) NOT NULL DEFAULT '',
`resolvedBuild` varchar(30) NOT NULL DEFAULT '',
`resolvedDate` datetime NOT NULL,
`closedBy` varchar(30) NOT NULL DEFAULT '',
`closedDate` datetime NOT NULL,
`duplicateBug` mediumint(8) unsigned NOT NULL,
`linkBug` varchar(255) NOT NULL,
`case` mediumint(8) unsigned NOT NULL,
`caseVersion` smallint(6) NOT NULL DEFAULT '1',
`result` mediumint(8) unsigned NOT NULL,
`testtask` mediumint(8) unsigned NOT NULL,
`lastEditedBy` varchar(30) NOT NULL DEFAULT '',
`lastEditedDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `project` (`project`),
KEY `status` (`status`),
KEY `plan` (`plan`),
KEY `story` (`story`),
KEY `case` (`case`),
KEY `assignedTo` (`assignedTo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_build` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
`branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`name` char(150) NOT NULL,
`scmPath` char(255) NOT NULL,
`filePath` char(255) NOT NULL,
`date` date NOT NULL,
`stories` text NOT NULL,
`bugs` text NOT NULL,
`builder` char(30) NOT NULL DEFAULT '',
`desc` text NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `project` (`project`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_burn` (
`project` mediumint(8) unsigned NOT NULL,
`task` mediumint(8) unsigned NOT NULL DEFAULT '0',
`date` date NOT NULL,
`estimate` float NOT NULL,
`left` float NOT NULL,
`consumed` float NOT NULL,
PRIMARY KEY (`project`,`date`,`task`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_case` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
`branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
`lib` mediumint(8) unsigned NOT NULL DEFAULT '0',
`module` mediumint(8) unsigned NOT NULL DEFAULT '0',
`path` mediumint(8) unsigned NOT NULL DEFAULT '0',
`story` mediumint(30) unsigned NOT NULL DEFAULT '0',
`storyVersion` smallint(6) NOT NULL DEFAULT '1',
`title` varchar(255) NOT NULL,
`precondition` text NOT NULL,
`keywords` varchar(255) NOT NULL,
`pri` tinyint(3) unsigned NOT NULL DEFAULT '3',
`type` char(30) NOT NULL DEFAULT '1',
`stage` varchar(255) NOT NULL,
`howRun` varchar(30) NOT NULL,
`scriptedBy` varchar(30) NOT NULL,
`scriptedDate` date NOT NULL,
`scriptStatus` varchar(30) NOT NULL,
`scriptLocation` varchar(255) NOT NULL,
`status` char(30) NOT NULL DEFAULT '1',
`color` char(7) NOT NULL,
`frequency` enum('1','2','3') NOT NULL DEFAULT '1',
`order` tinyint(30) unsigned NOT NULL DEFAULT '0',
`openedBy` char(30) NOT NULL DEFAULT '',
`openedDate` datetime NOT NULL,
`reviewedBy` varchar(255) NOT NULL,
`reviewedDate` date NOT NULL,
`lastEditedBy` char(30) NOT NULL DEFAULT '',
`lastEditedDate` datetime NOT NULL,
`version` tinyint(3) unsigned NOT NULL DEFAULT '0',
`linkCase` varchar(255) NOT NULL,
`fromBug` mediumint(8) unsigned NOT NULL,
`fromCaseID` mediumint(8) unsigned NOT NULL,
`fromCaseVersion` mediumint(8) unsigned NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
`lastRunner` varchar(30) NOT NULL,
`lastRunDate` datetime NOT NULL,
`lastRunResult` char(30) NOT NULL,
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `story` (`story`),
KEY `module` (`module`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_casestep` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`parent` mediumint(8) unsigned NOT NULL DEFAULT '0',
`case` mediumint(8) unsigned NOT NULL DEFAULT '0',
`version` smallint(3) unsigned NOT NULL DEFAULT '0',
`type` varchar(10) NOT NULL DEFAULT 'step',
`desc` text NOT NULL,
`expect` text NOT NULL,
PRIMARY KEY (`id`),
KEY `case` (`case`),
KEY `version` (`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_company` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(120) DEFAULT NULL,
`phone` char(20) DEFAULT NULL,
`fax` char(20) DEFAULT NULL,
`address` char(120) DEFAULT NULL,
`zipcode` char(10) DEFAULT NULL,
`website` char(120) DEFAULT NULL,
`backyard` char(120) DEFAULT NULL,
`guest` enum('1','0') NOT NULL DEFAULT '0',
`admins` char(255) DEFAULT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_config` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`owner` char(30) NOT NULL DEFAULT '',
`module` varchar(30) NOT NULL,
`section` char(30) NOT NULL DEFAULT '',
`key` char(30) NOT NULL DEFAULT '',
`value` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_cron` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`m` varchar(20) NOT NULL,
`h` varchar(20) NOT NULL,
`dom` varchar(20) NOT NULL,
`mon` varchar(20) NOT NULL,
`dow` varchar(20) NOT NULL,
`command` text NOT NULL,
`remark` varchar(255) NOT NULL,
`type` varchar(20) NOT NULL,
`buildin` tinyint(1) NOT NULL DEFAULT '0',
`status` varchar(20) NOT NULL,
`lastTime` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `lastTime` (`lastTime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_dept` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(60) NOT NULL,
`parent` mediumint(8) unsigned NOT NULL DEFAULT '0',
`path` char(255) NOT NULL DEFAULT '',
`grade` tinyint(3) unsigned NOT NULL DEFAULT '0',
`order` tinyint(3) unsigned NOT NULL DEFAULT '0',
`position` char(30) NOT NULL DEFAULT '',
`function` char(255) NOT NULL DEFAULT '',
`manager` char(30) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `parent` (`parent`),
KEY `path` (`path`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_doc` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL,
`project` mediumint(8) unsigned NOT NULL,
`lib` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL,
`title` varchar(255) NOT NULL,
`keywords` varchar(255) NOT NULL,
`type` varchar(30) NOT NULL,
`views` smallint(5) unsigned NOT NULL,
`collector` text NOT NULL,
`addedBy` varchar(30) NOT NULL,
`addedDate` datetime NOT NULL,
`editedBy` varchar(30) NOT NULL,
`editedDate` datetime NOT NULL,
`acl` varchar(10) NOT NULL DEFAULT 'open',
`groups` varchar(255) NOT NULL,
`users` text NOT NULL,
`version` smallint(5) unsigned NOT NULL DEFAULT '1',
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `project` (`project`),
KEY `lib` (`lib`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_doccontent` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`doc` mediumint(8) unsigned NOT NULL,
`title` varchar(255) NOT NULL,
`digest` varchar(255) NOT NULL,
`content` text NOT NULL,
`files` text NOT NULL,
`type` varchar(10) NOT NULL,
`version` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `doc_version` (`doc`,`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_doclib` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(30) NOT NULL,
`product` mediumint(8) unsigned NOT NULL,
`project` mediumint(8) unsigned NOT NULL,
`name` varchar(60) NOT NULL,
`acl` varchar(10) NOT NULL DEFAULT 'open',
`groups` varchar(255) NOT NULL,
`users` text NOT NULL,
`main` enum('0','1') NOT NULL DEFAULT '0',
`collector` text NOT NULL,
`order` tinyint(5) unsigned NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `project` (`project`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_effort` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`user` char(30) NOT NULL DEFAULT '',
`todo` enum('1','0') NOT NULL DEFAULT '1',
`date` date NOT NULL,
`begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`type` enum('1','2','3') NOT NULL DEFAULT '1',
`idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0',
`name` char(30) NOT NULL DEFAULT '',
`desc` char(255) NOT NULL DEFAULT '',
`status` enum('1','2','3') NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `user` (`user`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_entry` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`account` varchar(30) NOT NULL DEFAULT '',
`code` varchar(20) NOT NULL,
`key` varchar(32) NOT NULL,
`ip` varchar(100) NOT NULL,
`desc` text NOT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
`editedBy` varchar(30) NOT NULL,
`editedDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_extension` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(150) NOT NULL,
`code` varchar(30) NOT NULL,
`version` varchar(50) NOT NULL,
`author` varchar(100) NOT NULL,
`desc` text NOT NULL,
`license` text NOT NULL,
`type` varchar(20) NOT NULL DEFAULT 'extension',
`site` varchar(150) NOT NULL,
`zentaoCompatible` varchar(100) NOT NULL,
`installedTime` datetime NOT NULL,
`depends` varchar(100) NOT NULL,
`dirs` mediumtext NOT NULL,
`files` mediumtext NOT NULL,
`status` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `code` (`code`),
KEY `name` (`name`),
KEY `installedTime` (`installedTime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_file` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`pathname` char(100) NOT NULL,
`title` char(255) NOT NULL,
`extension` char(30) NOT NULL,
`size` int(10) unsigned NOT NULL DEFAULT '0',
`objectType` char(30) NOT NULL,
`objectID` mediumint(9) NOT NULL,
`addedBy` char(30) NOT NULL DEFAULT '',
`addedDate` datetime NOT NULL,
`downloads` mediumint(8) unsigned NOT NULL DEFAULT '0',
`extra` varchar(255) NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `objectType` (`objectType`),
KEY `objectID` (`objectID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_group` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(30) NOT NULL,
`role` char(30) NOT NULL DEFAULT '',
`desc` char(255) NOT NULL DEFAULT '',
`acl` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_grouppriv` (
`group` mediumint(8) unsigned NOT NULL DEFAULT '0',
`module` char(30) NOT NULL DEFAULT '',
`method` char(30) NOT NULL DEFAULT '',
UNIQUE KEY `group` (`group`,`module`,`method`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_history` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`action` mediumint(8) unsigned NOT NULL DEFAULT '0',
`field` varchar(30) NOT NULL DEFAULT '',
`old` text NOT NULL,
`new` text NOT NULL,
`diff` mediumtext NOT NULL,
PRIMARY KEY (`id`),
KEY `action` (`action`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_lang` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`lang` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL,
`section` varchar(30) NOT NULL,
`key` varchar(60) NOT NULL,
`value` text NOT NULL,
`system` enum('0','1') NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_log` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`objectType` varchar(30) NOT NULL,
`objectID` mediumint(8) unsigned NOT NULL,
`action` mediumint(8) unsigned NOT NULL,
`date` datetime NOT NULL,
`url` varchar(255) NOT NULL,
`contentType` varchar(30) NOT NULL,
`data` text NOT NULL,
`result` text NOT NULL,
PRIMARY KEY (`id`),
KEY `objectType` (`objectType`),
KEY `obejctID` (`objectID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_module` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`root` mediumint(8) unsigned NOT NULL DEFAULT '0',
`branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
`name` char(60) NOT NULL DEFAULT '',
`parent` mediumint(8) unsigned NOT NULL DEFAULT '0',
`path` char(255) NOT NULL DEFAULT '',
`grade` tinyint(3) unsigned NOT NULL DEFAULT '0',
`order` smallint(5) unsigned NOT NULL DEFAULT '0',
`type` char(30) NOT NULL,
`owner` varchar(30) NOT NULL,
`collector` text NOT NULL,
`short` varchar(30) NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `root` (`root`),
KEY `type` (`type`),
KEY `path` (`path`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_notify` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`objectType` varchar(50) NOT NULL,
`objectID` mediumint(8) unsigned NOT NULL,
`action` mediumint(9) NOT NULL,
`toList` varchar(255) NOT NULL,
`ccList` text NOT NULL,
`subject` varchar(255) NOT NULL,
`data` text NOT NULL,
`createdBy` char(30) NOT NULL,
`createdDate` datetime NOT NULL,
`sendTime` datetime NOT NULL,
`status` varchar(10) NOT NULL DEFAULT 'wait',
`failReason` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_product` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(90) NOT NULL,
`code` varchar(45) NOT NULL,
`line` mediumint(8) NOT NULL,
`type` varchar(30) NOT NULL DEFAULT 'normal',
`status` varchar(30) NOT NULL DEFAULT '',
`desc` text NOT NULL,
`PO` varchar(30) NOT NULL,
`QD` varchar(30) NOT NULL,
`RD` varchar(30) NOT NULL,
`acl` enum('open','private','custom') NOT NULL DEFAULT 'open',
`whitelist` text NOT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
`createdVersion` varchar(20) NOT NULL,
`order` mediumint(8) unsigned NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `order` (`order`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_productplan` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL,
`branch` mediumint(8) unsigned NOT NULL,
`parent` mediumint(9) NOT NULL DEFAULT '0',
`title` varchar(90) NOT NULL,
`desc` text NOT NULL,
`begin` date NOT NULL,
`end` date NOT NULL,
`order` text NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `end` (`end`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_project` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`isCat` enum('1','0') NOT NULL DEFAULT '0',
`catID` mediumint(8) unsigned NOT NULL,
`type` varchar(20) NOT NULL DEFAULT 'sprint',
`parent` mediumint(8) unsigned NOT NULL DEFAULT '0',
`name` varchar(90) NOT NULL,
`code` varchar(45) NOT NULL,
`begin` date NOT NULL,
`end` date NOT NULL,
`days` smallint(5) unsigned NOT NULL,
`status` varchar(10) NOT NULL,
`statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1',
`pri` enum('1','2','3','4') NOT NULL DEFAULT '1',
`desc` text NOT NULL,
`openedBy` varchar(30) NOT NULL DEFAULT '',
`openedDate` datetime NOT NULL,
`openedVersion` varchar(20) NOT NULL,
`closedBy` varchar(30) NOT NULL DEFAULT '',
`closedDate` datetime NOT NULL,
`canceledBy` varchar(30) NOT NULL DEFAULT '',
`canceledDate` datetime NOT NULL,
`PO` varchar(30) NOT NULL DEFAULT '',
`PM` varchar(30) NOT NULL DEFAULT '',
`QD` varchar(30) NOT NULL DEFAULT '',
`RD` varchar(30) NOT NULL DEFAULT '',
`team` varchar(90) NOT NULL,
`acl` enum('open','private','custom') NOT NULL DEFAULT 'open',
`whitelist` text NOT NULL,
`order` mediumint(8) unsigned NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `parent` (`parent`),
KEY `begin` (`begin`),
KEY `end` (`end`),
KEY `status` (`status`),
KEY `order` (`order`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_projectproduct` (
`project` mediumint(8) unsigned NOT NULL,
`product` mediumint(8) unsigned NOT NULL,
`branch` mediumint(8) unsigned NOT NULL,
`plan` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`project`,`product`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_projectstory` (
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`product` mediumint(8) unsigned NOT NULL,
`story` mediumint(8) unsigned NOT NULL DEFAULT '0',
`version` smallint(6) NOT NULL DEFAULT '1',
`order` smallint(6) unsigned NOT NULL,
UNIQUE KEY `project` (`project`,`story`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_release` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
`branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
`build` mediumint(8) unsigned NOT NULL,
`name` varchar(255) NOT NULL DEFAULT '',
`marker` enum('0','1') NOT NULL DEFAULT '0',
`date` date NOT NULL,
`stories` text NOT NULL,
`bugs` text NOT NULL,
`leftBugs` text NOT NULL,
`desc` text NOT NULL,
`status` varchar(20) NOT NULL DEFAULT 'normal',
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `build` (`build`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_score` (
`id` bigint(12) unsigned NOT NULL AUTO_INCREMENT,
`account` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL DEFAULT '',
`method` varchar(30) NOT NULL,
`desc` varchar(250) NOT NULL DEFAULT '',
`before` int(11) NOT NULL DEFAULT '0',
`score` int(11) NOT NULL DEFAULT '0',
`after` int(11) NOT NULL DEFAULT '0',
`time` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `account` (`account`),
KEY `model` (`module`),
KEY `method` (`method`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_story` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
`branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
`module` mediumint(8) unsigned NOT NULL DEFAULT '0',
`plan` text,
`source` varchar(20) NOT NULL,
`sourceNote` varchar(255) NOT NULL,
`fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0',
`title` varchar(255) NOT NULL,
`keywords` varchar(255) NOT NULL,
`type` varchar(30) NOT NULL DEFAULT '',
`pri` tinyint(3) unsigned NOT NULL DEFAULT '3',
`estimate` float unsigned NOT NULL,
`status` enum('','changed','active','draft','closed') NOT NULL DEFAULT '',
`color` char(7) NOT NULL,
`stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released','closed') NOT NULL DEFAULT 'wait',
`mailto` text,
`openedBy` varchar(30) NOT NULL DEFAULT '',
`openedDate` datetime NOT NULL,
`assignedTo` varchar(30) NOT NULL DEFAULT '',
`assignedDate` datetime NOT NULL,
`lastEditedBy` varchar(30) NOT NULL DEFAULT '',
`lastEditedDate` datetime NOT NULL,
`reviewedBy` varchar(255) NOT NULL,
`reviewedDate` date NOT NULL,
`closedBy` varchar(30) NOT NULL DEFAULT '',
`closedDate` datetime NOT NULL,
`closedReason` varchar(30) NOT NULL,
`toBug` mediumint(9) NOT NULL,
`childStories` varchar(255) NOT NULL,
`linkStories` varchar(255) NOT NULL,
`duplicateStory` mediumint(8) unsigned NOT NULL,
`version` smallint(6) NOT NULL DEFAULT '1',
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `status` (`status`),
KEY `assignedTo` (`assignedTo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_storyspec` (
`story` mediumint(9) NOT NULL,
`version` smallint(6) NOT NULL,
`title` varchar(255) NOT NULL,
`spec` text NOT NULL,
`verify` text NOT NULL,
UNIQUE KEY `story` (`story`,`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_storystage` (
`story` mediumint(8) unsigned NOT NULL,
`branch` mediumint(8) unsigned NOT NULL,
`stage` varchar(50) NOT NULL,
KEY `story` (`story`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_suitecase` (
`suite` mediumint(8) unsigned NOT NULL,
`product` mediumint(8) unsigned NOT NULL,
`case` mediumint(8) unsigned NOT NULL,
`version` smallint(5) unsigned NOT NULL,
UNIQUE KEY `suitecase` (`suite`,`case`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_task` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`parent` mediumint(8) NOT NULL DEFAULT '0',
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`module` mediumint(8) unsigned NOT NULL DEFAULT '0',
`story` mediumint(8) unsigned NOT NULL DEFAULT '0',
`storyVersion` smallint(6) NOT NULL DEFAULT '1',
`fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0',
`name` varchar(255) NOT NULL,
`type` varchar(20) NOT NULL,
`pri` tinyint(3) unsigned NOT NULL DEFAULT '0',
`estimate` float unsigned NOT NULL,
`consumed` float unsigned NOT NULL,
`left` float unsigned NOT NULL,
`deadline` date NOT NULL,
`status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait',
`color` char(7) NOT NULL,
`mailto` text,
`desc` text NOT NULL,
`openedBy` varchar(30) NOT NULL,
`openedDate` datetime NOT NULL,
`assignedTo` varchar(30) NOT NULL,
`assignedDate` datetime NOT NULL,
`estStarted` date NOT NULL,
`realStarted` date NOT NULL,
`finishedBy` varchar(30) NOT NULL,
`finishedDate` datetime NOT NULL,
`finishedList` text NOT NULL,
`canceledBy` varchar(30) NOT NULL,
`canceledDate` datetime NOT NULL,
`closedBy` varchar(30) NOT NULL,
`closedDate` datetime NOT NULL,
`closedReason` varchar(30) NOT NULL,
`lastEditedBy` varchar(30) NOT NULL,
`lastEditedDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `project` (`project`),
KEY `story` (`story`),
KEY `assignedTo` (`assignedTo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_taskestimate` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`task` mediumint(8) unsigned NOT NULL DEFAULT '0',
`date` date NOT NULL,
`left` float unsigned NOT NULL DEFAULT '0',
`consumed` float unsigned NOT NULL,
`account` char(30) NOT NULL DEFAULT '',
`work` text,
PRIMARY KEY (`id`),
KEY `task` (`task`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_team` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`root` mediumint(8) unsigned NOT NULL DEFAULT '0',
`type` enum('project','task') NOT NULL DEFAULT 'project',
`account` char(30) NOT NULL DEFAULT '',
`role` char(30) NOT NULL DEFAULT '',
`limited` char(8) NOT NULL DEFAULT 'no',
`join` date NOT NULL DEFAULT '0000-00-00',
`days` smallint(5) unsigned NOT NULL,
`hours` float(2,1) unsigned NOT NULL DEFAULT '0.0',
`estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00',
`consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00',
`left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00',
`order` tinyint(3) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `team` (`root`,`type`,`account`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_testreport` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL,
`project` mediumint(8) unsigned NOT NULL,
`tasks` varchar(255) NOT NULL,
`builds` varchar(255) NOT NULL,
`title` varchar(255) NOT NULL,
`begin` date NOT NULL,
`end` date NOT NULL,
`owner` char(30) NOT NULL,
`members` text NOT NULL,
`stories` text NOT NULL,
`bugs` text NOT NULL,
`cases` text NOT NULL,
`report` text NOT NULL,
`objectType` varchar(20) NOT NULL,
`objectID` mediumint(8) unsigned NOT NULL,
`createdBy` char(30) NOT NULL,
`createdDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_testresult` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`run` mediumint(8) unsigned NOT NULL,
`case` mediumint(8) unsigned NOT NULL,
`version` smallint(5) unsigned NOT NULL,
`caseResult` char(30) NOT NULL,
`stepResults` text NOT NULL,
`lastRunner` varchar(30) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `case` (`case`),
KEY `version` (`version`),
KEY `run` (`run`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_testrun` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`task` mediumint(8) unsigned NOT NULL DEFAULT '0',
`case` mediumint(8) unsigned NOT NULL DEFAULT '0',
`version` tinyint(3) unsigned NOT NULL DEFAULT '0',
`assignedTo` char(30) NOT NULL DEFAULT '',
`lastRunner` varchar(30) NOT NULL,
`lastRunDate` datetime NOT NULL,
`lastRunResult` char(30) NOT NULL,
`status` char(30) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `task` (`task`,`case`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_testsuite` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
`desc` text NOT NULL,
`type` varchar(20) NOT NULL,
`addedBy` char(30) NOT NULL,
`addedDate` datetime NOT NULL,
`lastEditedBy` char(30) NOT NULL,
`lastEditedDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL,
PRIMARY KEY (`id`),
KEY `product` (`product`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_testtask` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(90) NOT NULL,
`product` mediumint(8) unsigned NOT NULL,
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`build` char(30) NOT NULL,
`owner` varchar(30) NOT NULL,
`pri` tinyint(3) unsigned NOT NULL DEFAULT '0',
`begin` date NOT NULL,
`end` date NOT NULL,
`mailto` text,
`desc` text NOT NULL,
`report` text NOT NULL,
`status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait',
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `build` (`build`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_todo` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`account` char(30) NOT NULL,
`date` date NOT NULL,
`begin` smallint(4) unsigned zerofill NOT NULL,
`end` smallint(4) unsigned zerofill NOT NULL,
`type` char(10) NOT NULL,
`cycle` tinyint(3) unsigned NOT NULL DEFAULT '0',
`idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0',
`pri` tinyint(3) unsigned NOT NULL,
`name` char(150) NOT NULL,
`desc` text NOT NULL,
`status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait',
`private` tinyint(1) NOT NULL,
`config` varchar(255) NOT NULL,
`assignedTo` varchar(30) NOT NULL DEFAULT '',
`assignedBy` varchar(30) NOT NULL DEFAULT '',
`assignedDate` datetime NOT NULL,
`finishedBy` varchar(30) NOT NULL DEFAULT '',
`finishedDate` datetime NOT NULL,
`closedBy` varchar(30) NOT NULL DEFAULT '',
`closedDate` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `account` (`account`),
KEY `assignedTo` (`assignedTo`),
KEY `finishedBy` (`finishedBy`),
KEY `date` (`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_user` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`dept` mediumint(8) unsigned NOT NULL DEFAULT '0',
`account` char(30) NOT NULL DEFAULT '',
`password` char(32) NOT NULL DEFAULT '',
`role` char(10) NOT NULL DEFAULT '',
`realname` varchar(100) NOT NULL DEFAULT '',
`nickname` char(60) NOT NULL DEFAULT '',
`commiter` varchar(100) NOT NULL,
`avatar` char(30) NOT NULL DEFAULT '',
`birthday` date NOT NULL DEFAULT '0000-00-00',
`gender` enum('f','m') NOT NULL DEFAULT 'f',
`email` char(90) NOT NULL DEFAULT '',
`skype` char(90) NOT NULL DEFAULT '',
`qq` char(20) NOT NULL DEFAULT '',
`mobile` char(11) NOT NULL DEFAULT '',
`phone` char(20) NOT NULL DEFAULT '',
`weixin` varchar(90) NOT NULL DEFAULT '',
`dingding` varchar(90) NOT NULL DEFAULT '',
`slack` varchar(90) NOT NULL DEFAULT '',
`whatsapp` varchar(90) NOT NULL DEFAULT '',
`address` char(120) NOT NULL DEFAULT '',
`zipcode` char(10) NOT NULL DEFAULT '',
`join` date NOT NULL DEFAULT '0000-00-00',
`visits` mediumint(8) unsigned NOT NULL DEFAULT '0',
`ip` char(15) NOT NULL DEFAULT '',
`last` int(10) unsigned NOT NULL DEFAULT '0',
`fails` tinyint(5) NOT NULL DEFAULT '0',
`locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`ranzhi` char(30) NOT NULL DEFAULT '',
`score` int(11) NOT NULL DEFAULT '0',
`scoreLevel` int(11) NOT NULL DEFAULT '0',
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `account` (`account`),
KEY `dept` (`dept`),
KEY `email` (`email`),
KEY `commiter` (`commiter`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_usercontact` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`account` char(30) NOT NULL,
`listName` varchar(60) NOT NULL,
`userList` text NOT NULL,
PRIMARY KEY (`id`),
KEY `account` (`account`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_usergroup` (
`account` char(30) NOT NULL DEFAULT '',
`group` mediumint(8) unsigned NOT NULL DEFAULT '0',
UNIQUE KEY `account` (`account`,`group`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_userquery` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`account` char(30) NOT NULL,
`module` varchar(30) NOT NULL,
`title` varchar(90) NOT NULL,
`form` text NOT NULL,
`sql` text NOT NULL,
`shortcut` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `account` (`account`),
KEY `module` (`module`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_usertpl` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`account` char(30) NOT NULL,
`type` char(30) NOT NULL,
`title` varchar(150) NOT NULL,
`content` text NOT NULL,
`public` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `account` (`account`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_userview` (
`account` char(30) NOT NULL,
`products` mediumtext NOT NULL,
`projects` mediumtext NOT NULL,
UNIQUE KEY `account` (`account`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_webhook` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(10) NOT NULL DEFAULT 'default',
`name` varchar(50) NOT NULL,
`url` varchar(255) NOT NULL,
`domain` varchar(255) NOT NULL,
`contentType` varchar(30) NOT NULL DEFAULT 'application/json',
`sendType` enum('sync','async') NOT NULL DEFAULT 'sync',
`products` text NOT NULL,
`projects` text NOT NULL,
`params` varchar(100) NOT NULL,
`actions` text NOT NULL,
`desc` text NOT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
`editedBy` varchar(30) NOT NULL,
`editedDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+910
View File
@@ -0,0 +1,910 @@
CREATE TABLE `zt_action` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`objectType` varchar(30) NOT NULL DEFAULT '',
`objectID` mediumint(8) unsigned NOT NULL DEFAULT '0',
`product` varchar(255) NOT NULL,
`project` mediumint(9) NOT NULL,
`actor` varchar(30) NOT NULL DEFAULT '',
`action` varchar(30) NOT NULL DEFAULT '',
`date` datetime NOT NULL,
`comment` text NOT NULL,
`extra` text NOT NULL,
`read` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `date` (`date`),
KEY `actor` (`actor`),
KEY `project` (`project`),
KEY `objectID` (`objectID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_block` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`account` char(30) NOT NULL,
`module` varchar(20) NOT NULL,
`title` varchar(100) NOT NULL,
`source` varchar(20) NOT NULL,
`block` varchar(20) NOT NULL,
`params` text NOT NULL,
`order` tinyint(3) unsigned NOT NULL DEFAULT '0',
`grid` tinyint(3) unsigned NOT NULL DEFAULT '0',
`height` smallint(5) unsigned NOT NULL DEFAULT '0',
`hidden` tinyint(1) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `accountModuleOrder` (`account`,`module`,`order`),
KEY `account` (`account`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_branch` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
`order` smallint(5) unsigned NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_bug` (
`id` mediumint(8) NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
`branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
`module` mediumint(8) unsigned NOT NULL DEFAULT '0',
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`plan` mediumint(8) unsigned NOT NULL DEFAULT '0',
`story` mediumint(8) unsigned NOT NULL DEFAULT '0',
`storyVersion` smallint(6) NOT NULL DEFAULT '1',
`task` mediumint(8) unsigned NOT NULL DEFAULT '0',
`toTask` mediumint(8) unsigned NOT NULL DEFAULT '0',
`toStory` mediumint(8) NOT NULL DEFAULT '0',
`title` varchar(255) NOT NULL,
`keywords` varchar(255) NOT NULL,
`severity` tinyint(4) NOT NULL DEFAULT '0',
`pri` tinyint(3) unsigned NOT NULL,
`type` varchar(30) NOT NULL DEFAULT '',
`os` varchar(30) NOT NULL DEFAULT '',
`browser` varchar(30) NOT NULL DEFAULT '',
`hardware` varchar(30) NOT NULL,
`found` varchar(30) NOT NULL DEFAULT '',
`steps` text NOT NULL,
`status` enum('active','resolved','closed') NOT NULL DEFAULT 'active',
`color` char(7) NOT NULL,
`confirmed` tinyint(1) NOT NULL DEFAULT '0',
`activatedCount` smallint(6) NOT NULL,
`activatedDate` datetime NOT NULL,
`mailto` text,
`openedBy` varchar(30) NOT NULL DEFAULT '',
`openedDate` datetime NOT NULL,
`openedBuild` varchar(255) NOT NULL,
`assignedTo` varchar(30) NOT NULL DEFAULT '',
`assignedDate` datetime NOT NULL,
`deadline` date NOT NULL,
`resolvedBy` varchar(30) NOT NULL DEFAULT '',
`resolution` varchar(30) NOT NULL DEFAULT '',
`resolvedBuild` varchar(30) NOT NULL DEFAULT '',
`resolvedDate` datetime NOT NULL,
`closedBy` varchar(30) NOT NULL DEFAULT '',
`closedDate` datetime NOT NULL,
`duplicateBug` mediumint(8) unsigned NOT NULL,
`linkBug` varchar(255) NOT NULL,
`case` mediumint(8) unsigned NOT NULL,
`caseVersion` smallint(6) NOT NULL DEFAULT '1',
`result` mediumint(8) unsigned NOT NULL,
`testtask` mediumint(8) unsigned NOT NULL,
`lastEditedBy` varchar(30) NOT NULL DEFAULT '',
`lastEditedDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `project` (`project`),
KEY `status` (`status`),
KEY `plan` (`plan`),
KEY `story` (`story`),
KEY `case` (`case`),
KEY `assignedTo` (`assignedTo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_build` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
`branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`name` char(150) NOT NULL,
`scmPath` char(255) NOT NULL,
`filePath` char(255) NOT NULL,
`date` date NOT NULL,
`stories` text NOT NULL,
`bugs` text NOT NULL,
`builder` char(30) NOT NULL DEFAULT '',
`desc` text NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `project` (`project`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_burn` (
`project` mediumint(8) unsigned NOT NULL,
`task` mediumint(8) unsigned NOT NULL DEFAULT '0',
`date` date NOT NULL,
`estimate` float NOT NULL,
`left` float NOT NULL,
`consumed` float NOT NULL,
PRIMARY KEY (`project`,`date`,`task`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_case` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
`branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
`lib` mediumint(8) unsigned NOT NULL DEFAULT '0',
`module` mediumint(8) unsigned NOT NULL DEFAULT '0',
`path` mediumint(8) unsigned NOT NULL DEFAULT '0',
`story` mediumint(30) unsigned NOT NULL DEFAULT '0',
`storyVersion` smallint(6) NOT NULL DEFAULT '1',
`title` varchar(255) NOT NULL,
`precondition` text NOT NULL,
`keywords` varchar(255) NOT NULL,
`pri` tinyint(3) unsigned NOT NULL DEFAULT '3',
`type` char(30) NOT NULL DEFAULT '1',
`stage` varchar(255) NOT NULL,
`howRun` varchar(30) NOT NULL,
`scriptedBy` varchar(30) NOT NULL,
`scriptedDate` date NOT NULL,
`scriptStatus` varchar(30) NOT NULL,
`scriptLocation` varchar(255) NOT NULL,
`status` char(30) NOT NULL DEFAULT '1',
`color` char(7) NOT NULL,
`frequency` enum('1','2','3') NOT NULL DEFAULT '1',
`order` tinyint(30) unsigned NOT NULL DEFAULT '0',
`openedBy` char(30) NOT NULL DEFAULT '',
`openedDate` datetime NOT NULL,
`reviewedBy` varchar(255) NOT NULL,
`reviewedDate` date NOT NULL,
`lastEditedBy` char(30) NOT NULL DEFAULT '',
`lastEditedDate` datetime NOT NULL,
`version` tinyint(3) unsigned NOT NULL DEFAULT '0',
`linkCase` varchar(255) NOT NULL,
`fromBug` mediumint(8) unsigned NOT NULL,
`fromCaseID` mediumint(8) unsigned NOT NULL,
`fromCaseVersion` mediumint(8) unsigned NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
`lastRunner` varchar(30) NOT NULL,
`lastRunDate` datetime NOT NULL,
`lastRunResult` char(30) NOT NULL,
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `story` (`story`),
KEY `module` (`module`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_casestep` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`parent` mediumint(8) unsigned NOT NULL DEFAULT '0',
`case` mediumint(8) unsigned NOT NULL DEFAULT '0',
`version` smallint(3) unsigned NOT NULL DEFAULT '0',
`type` varchar(10) NOT NULL DEFAULT 'step',
`desc` text NOT NULL,
`expect` text NOT NULL,
PRIMARY KEY (`id`),
KEY `case` (`case`),
KEY `version` (`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_company` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(120) DEFAULT NULL,
`phone` char(20) DEFAULT NULL,
`fax` char(20) DEFAULT NULL,
`address` char(120) DEFAULT NULL,
`zipcode` char(10) DEFAULT NULL,
`website` char(120) DEFAULT NULL,
`backyard` char(120) DEFAULT NULL,
`guest` enum('1','0') NOT NULL DEFAULT '0',
`admins` char(255) DEFAULT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_config` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`owner` char(30) NOT NULL DEFAULT '',
`module` varchar(30) NOT NULL,
`section` char(30) NOT NULL DEFAULT '',
`key` char(30) NOT NULL DEFAULT '',
`value` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `unique` (`owner`,`module`,`section`,`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_cron` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`m` varchar(20) NOT NULL,
`h` varchar(20) NOT NULL,
`dom` varchar(20) NOT NULL,
`mon` varchar(20) NOT NULL,
`dow` varchar(20) NOT NULL,
`command` text NOT NULL,
`remark` varchar(255) NOT NULL,
`type` varchar(20) NOT NULL,
`buildin` tinyint(1) NOT NULL DEFAULT '0',
`status` varchar(20) NOT NULL,
`lastTime` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `lastTime` (`lastTime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_dept` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(60) NOT NULL,
`parent` mediumint(8) unsigned NOT NULL DEFAULT '0',
`path` char(255) NOT NULL DEFAULT '',
`grade` tinyint(3) unsigned NOT NULL DEFAULT '0',
`order` tinyint(3) unsigned NOT NULL DEFAULT '0',
`position` char(30) NOT NULL DEFAULT '',
`function` char(255) NOT NULL DEFAULT '',
`manager` char(30) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `parent` (`parent`),
KEY `path` (`path`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_doc` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL,
`project` mediumint(8) unsigned NOT NULL,
`lib` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL,
`title` varchar(255) NOT NULL,
`keywords` varchar(255) NOT NULL,
`type` varchar(30) NOT NULL,
`views` smallint(5) unsigned NOT NULL,
`collector` text NOT NULL,
`addedBy` varchar(30) NOT NULL,
`addedDate` datetime NOT NULL,
`editedBy` varchar(30) NOT NULL,
`editedDate` datetime NOT NULL,
`acl` varchar(10) NOT NULL DEFAULT 'open',
`groups` varchar(255) NOT NULL,
`users` text NOT NULL,
`version` smallint(5) unsigned NOT NULL DEFAULT '1',
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `project` (`project`),
KEY `lib` (`lib`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_doccontent` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`doc` mediumint(8) unsigned NOT NULL,
`title` varchar(255) NOT NULL,
`digest` varchar(255) NOT NULL,
`content` text NOT NULL,
`files` text NOT NULL,
`type` varchar(10) NOT NULL,
`version` smallint(5) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `doc_version` (`doc`,`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_doclib` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(30) NOT NULL,
`product` mediumint(8) unsigned NOT NULL,
`project` mediumint(8) unsigned NOT NULL,
`name` varchar(60) NOT NULL,
`acl` varchar(10) NOT NULL DEFAULT 'open',
`groups` varchar(255) NOT NULL,
`users` text NOT NULL,
`main` enum('0','1') NOT NULL DEFAULT '0',
`collector` text NOT NULL,
`order` tinyint(5) unsigned NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `project` (`project`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_effort` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`user` char(30) NOT NULL DEFAULT '',
`todo` enum('1','0') NOT NULL DEFAULT '1',
`date` date NOT NULL,
`begin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`end` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`type` enum('1','2','3') NOT NULL DEFAULT '1',
`idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0',
`name` char(30) NOT NULL DEFAULT '',
`desc` char(255) NOT NULL DEFAULT '',
`status` enum('1','2','3') NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `user` (`user`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `zt_entry` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`account` varchar(30) NOT NULL DEFAULT '',
`code` varchar(20) NOT NULL,
`key` varchar(32) NOT NULL,
`ip` varchar(100) NOT NULL,
`desc` text NOT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
`calledTime` int(10) unsigned NOT NULL DEFAULT '0',
`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;
CREATE TABLE `zt_extension` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(150) NOT NULL,
`code` varchar(30) NOT NULL,
`version` varchar(50) NOT NULL,
`author` varchar(100) NOT NULL,
`desc` text NOT NULL,
`license` text NOT NULL,
`type` varchar(20) NOT NULL DEFAULT 'extension',
`site` varchar(150) NOT NULL,
`zentaoCompatible` varchar(100) NOT NULL,
`installedTime` datetime NOT NULL,
`depends` varchar(100) NOT NULL,
`dirs` mediumtext NOT NULL,
`files` mediumtext NOT NULL,
`status` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `code` (`code`),
KEY `name` (`name`),
KEY `installedTime` (`installedTime`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_file` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`pathname` char(100) NOT NULL,
`title` char(255) NOT NULL,
`extension` char(30) NOT NULL,
`size` int(10) unsigned NOT NULL DEFAULT '0',
`objectType` char(30) NOT NULL,
`objectID` mediumint(9) NOT NULL,
`addedBy` char(30) NOT NULL DEFAULT '',
`addedDate` datetime NOT NULL,
`downloads` mediumint(8) unsigned NOT NULL DEFAULT '0',
`extra` varchar(255) NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `objectType` (`objectType`),
KEY `objectID` (`objectID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_group` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(30) NOT NULL,
`role` char(30) NOT NULL DEFAULT '',
`desc` char(255) NOT NULL DEFAULT '',
`acl` text,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_grouppriv` (
`group` mediumint(8) unsigned NOT NULL DEFAULT '0',
`module` char(30) NOT NULL DEFAULT '',
`method` char(30) NOT NULL DEFAULT '',
UNIQUE KEY `group` (`group`,`module`,`method`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_history` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`action` mediumint(8) unsigned NOT NULL DEFAULT '0',
`field` varchar(30) NOT NULL DEFAULT '',
`old` text NOT NULL,
`new` text NOT NULL,
`diff` mediumtext NOT NULL,
PRIMARY KEY (`id`),
KEY `action` (`action`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_lang` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`lang` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL,
`section` varchar(30) NOT NULL,
`key` varchar(60) NOT NULL,
`value` text NOT NULL,
`system` enum('0','1') NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `lang` (`lang`,`module`,`section`,`key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_log` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`objectType` varchar(30) NOT NULL,
`objectID` mediumint(8) unsigned NOT NULL,
`action` mediumint(8) unsigned NOT NULL,
`date` datetime NOT NULL,
`url` varchar(255) NOT NULL,
`contentType` varchar(30) NOT NULL,
`data` text NOT NULL,
`result` text NOT NULL,
PRIMARY KEY (`id`),
KEY `objectType` (`objectType`),
KEY `obejctID` (`objectID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_module` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`root` mediumint(8) unsigned NOT NULL DEFAULT '0',
`branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
`name` char(60) NOT NULL DEFAULT '',
`parent` mediumint(8) unsigned NOT NULL DEFAULT '0',
`path` char(255) NOT NULL DEFAULT '',
`grade` tinyint(3) unsigned NOT NULL DEFAULT '0',
`order` smallint(5) unsigned NOT NULL DEFAULT '0',
`type` char(30) NOT NULL,
`owner` varchar(30) NOT NULL,
`collector` text NOT NULL,
`short` varchar(30) NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `root` (`root`),
KEY `type` (`type`),
KEY `path` (`path`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_notify` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`objectType` varchar(50) NOT NULL,
`objectID` mediumint(8) unsigned NOT NULL,
`action` mediumint(9) NOT NULL,
`toList` varchar(255) NOT NULL,
`ccList` text NOT NULL,
`subject` varchar(255) NOT NULL,
`data` text NOT NULL,
`createdBy` char(30) NOT NULL,
`createdDate` datetime NOT NULL,
`sendTime` datetime NOT NULL,
`status` varchar(10) NOT NULL DEFAULT 'wait',
`failReason` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_product` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(90) NOT NULL,
`code` varchar(45) NOT NULL,
`line` mediumint(8) NOT NULL,
`type` varchar(30) NOT NULL DEFAULT 'normal',
`status` varchar(30) NOT NULL DEFAULT '',
`desc` text NOT NULL,
`PO` varchar(30) NOT NULL,
`QD` varchar(30) NOT NULL,
`RD` varchar(30) NOT NULL,
`acl` enum('open','private','custom') NOT NULL DEFAULT 'open',
`whitelist` text NOT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
`createdVersion` varchar(20) NOT NULL,
`order` mediumint(8) unsigned NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `order` (`order`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_productplan` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL,
`branch` mediumint(8) unsigned NOT NULL,
`parent` mediumint(9) NOT NULL DEFAULT '0',
`title` varchar(90) NOT NULL,
`desc` text NOT NULL,
`begin` date NOT NULL,
`end` date NOT NULL,
`order` text NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `end` (`end`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_project` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`isCat` enum('1','0') NOT NULL DEFAULT '0',
`catID` mediumint(8) unsigned NOT NULL,
`type` varchar(20) NOT NULL DEFAULT 'sprint',
`parent` mediumint(8) unsigned NOT NULL DEFAULT '0',
`name` varchar(90) NOT NULL,
`code` varchar(45) NOT NULL,
`begin` date NOT NULL,
`end` date NOT NULL,
`days` smallint(5) unsigned NOT NULL,
`status` varchar(10) NOT NULL,
`statge` enum('1','2','3','4','5') NOT NULL DEFAULT '1',
`pri` enum('1','2','3','4') NOT NULL DEFAULT '1',
`desc` text NOT NULL,
`openedBy` varchar(30) NOT NULL DEFAULT '',
`openedDate` datetime NOT NULL,
`openedVersion` varchar(20) NOT NULL,
`closedBy` varchar(30) NOT NULL DEFAULT '',
`closedDate` datetime NOT NULL,
`canceledBy` varchar(30) NOT NULL DEFAULT '',
`canceledDate` datetime NOT NULL,
`PO` varchar(30) NOT NULL DEFAULT '',
`PM` varchar(30) NOT NULL DEFAULT '',
`QD` varchar(30) NOT NULL DEFAULT '',
`RD` varchar(30) NOT NULL DEFAULT '',
`team` varchar(90) NOT NULL,
`acl` enum('open','private','custom') NOT NULL DEFAULT 'open',
`whitelist` text NOT NULL,
`order` mediumint(8) unsigned NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `parent` (`parent`),
KEY `begin` (`begin`),
KEY `end` (`end`),
KEY `status` (`status`),
KEY `order` (`order`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_projectproduct` (
`project` mediumint(8) unsigned NOT NULL,
`product` mediumint(8) unsigned NOT NULL,
`branch` mediumint(8) unsigned NOT NULL,
`plan` mediumint(8) unsigned NOT NULL,
PRIMARY KEY (`project`,`product`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_projectstory` (
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`product` mediumint(8) unsigned NOT NULL,
`story` mediumint(8) unsigned NOT NULL DEFAULT '0',
`version` smallint(6) NOT NULL DEFAULT '1',
`order` smallint(6) unsigned NOT NULL,
UNIQUE KEY `project` (`project`,`story`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_release` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
`branch` mediumint(8) unsigned NOT NULL DEFAULT '0',
`build` mediumint(8) unsigned NOT NULL,
`name` varchar(255) NOT NULL DEFAULT '',
`marker` enum('0','1') NOT NULL DEFAULT '0',
`date` date NOT NULL,
`stories` text NOT NULL,
`bugs` text NOT NULL,
`leftBugs` text NOT NULL,
`desc` text NOT NULL,
`status` varchar(20) NOT NULL DEFAULT 'normal',
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `build` (`build`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_score` (
`id` bigint(12) unsigned NOT NULL AUTO_INCREMENT,
`account` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL DEFAULT '',
`method` varchar(30) NOT NULL,
`desc` varchar(250) NOT NULL DEFAULT '',
`before` int(11) NOT NULL DEFAULT '0',
`score` int(11) NOT NULL DEFAULT '0',
`after` int(11) NOT NULL DEFAULT '0',
`time` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `account` (`account`),
KEY `model` (`module`),
KEY `method` (`method`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `zt_story` (
`id` mediumint(8) unsigned NOT NULL auto_increment,
`product` mediumint(8) unsigned NOT NULL default '0',
`branch` mediumint(8) unsigned NOT NULL default '0',
`module` mediumint(8) unsigned NOT NULL default '0',
`plan` text,
`source` varchar(20) NOT NULL,
`sourceNote` varchar(255) NOT NULL,
`fromBug` mediumint(8) unsigned NOT NULL default '0',
`title` varchar(255) NOT NULL,
`keywords` varchar(255) NOT NULL,
`type` varchar(30) NOT NULL default '',
`pri` tinyint(3) unsigned NOT NULL default '3',
`estimate` float unsigned NOT NULL,
`status` enum('','changed','active','draft','closed') NOT NULL default '',
`color` char(7) NOT NULL,
`stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released', 'closed') NOT NULL DEFAULT 'wait',
`stagedBy` char(30) NOT NULL,
`mailto` text,
`openedBy` varchar(30) NOT NULL default '',
`openedDate` datetime NOT NULL,
`assignedTo` varchar(30) NOT NULL default '',
`assignedDate` datetime NOT NULL,
`lastEditedBy` varchar(30) NOT NULL default '',
`lastEditedDate` datetime NOT NULL,
`reviewedBy` varchar(255) NOT NULL,
`reviewedDate` date NOT NULL,
`closedBy` varchar(30) NOT NULL default '',
`closedDate` datetime NOT NULL,
`closedReason` varchar(30) NOT NULL,
`toBug` mediumint(8) unsigned NOT NULL,
`childStories` varchar(255) NOT NULL,
`linkStories` varchar(255) NOT NULL,
`duplicateStory` mediumint(8) unsigned NOT NULL,
`version` smallint(6) NOT NULL default '1',
`deleted` enum('0','1') NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `status` (`status`),
KEY `assignedTo` (`assignedTo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_storyspec` (
`story` mediumint(9) NOT NULL,
`version` smallint(6) NOT NULL,
`title` varchar(255) NOT NULL,
`spec` text NOT NULL,
`verify` text NOT NULL,
UNIQUE KEY `story` (`story`,`version`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `zt_storystage` (
`story` mediumint(8) unsigned NOT NULL,
`branch` mediumint(8) unsigned NOT NULL,
`stage` varchar(50) NOT NULL,
`stagedBy` char(30) NOT NULL,
UNIQUE KEY `story_branch` (`story`,`branch`),
KEY `story` (`story`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_suitecase` (
`suite` mediumint(8) unsigned NOT NULL,
`product` mediumint(8) unsigned NOT NULL,
`case` mediumint(8) unsigned NOT NULL,
`version` smallint(5) unsigned NOT NULL,
UNIQUE KEY `suitecase` (`suite`,`case`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_task` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`parent` mediumint(8) NOT NULL DEFAULT '0',
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`module` mediumint(8) unsigned NOT NULL DEFAULT '0',
`story` mediumint(8) unsigned NOT NULL DEFAULT '0',
`storyVersion` smallint(6) NOT NULL DEFAULT '1',
`fromBug` mediumint(8) unsigned NOT NULL DEFAULT '0',
`name` varchar(255) NOT NULL,
`type` varchar(20) NOT NULL,
`pri` tinyint(3) unsigned NOT NULL DEFAULT '0',
`estimate` float unsigned NOT NULL,
`consumed` float unsigned NOT NULL,
`left` float unsigned NOT NULL,
`deadline` date NOT NULL,
`status` enum('wait','doing','done','pause','cancel','closed') NOT NULL DEFAULT 'wait',
`color` char(7) NOT NULL,
`mailto` text,
`desc` text NOT NULL,
`openedBy` varchar(30) NOT NULL,
`openedDate` datetime NOT NULL,
`assignedTo` varchar(30) NOT NULL,
`assignedDate` datetime NOT NULL,
`estStarted` date NOT NULL,
`realStarted` date NOT NULL,
`finishedBy` varchar(30) NOT NULL,
`finishedDate` datetime NOT NULL,
`finishedList` text NOT NULL,
`canceledBy` varchar(30) NOT NULL,
`canceledDate` datetime NOT NULL,
`closedBy` varchar(30) NOT NULL,
`closedDate` datetime NOT NULL,
`closedReason` varchar(30) NOT NULL,
`lastEditedBy` varchar(30) NOT NULL,
`lastEditedDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `project` (`project`),
KEY `story` (`story`),
KEY `assignedTo` (`assignedTo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_taskestimate` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`task` mediumint(8) unsigned NOT NULL DEFAULT '0',
`date` date NOT NULL,
`left` float unsigned NOT NULL DEFAULT '0',
`consumed` float unsigned NOT NULL,
`account` char(30) NOT NULL DEFAULT '',
`work` text,
PRIMARY KEY (`id`),
KEY `task` (`task`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_team` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`root` mediumint(8) unsigned NOT NULL DEFAULT '0',
`type` enum('project','task') NOT NULL DEFAULT 'project',
`account` char(30) NOT NULL DEFAULT '',
`role` char(30) NOT NULL DEFAULT '',
`limited` char(8) NOT NULL DEFAULT 'no',
`join` date NOT NULL DEFAULT '0000-00-00',
`days` smallint(5) unsigned NOT NULL,
`hours` float(2,1) unsigned NOT NULL DEFAULT '0.0',
`estimate` decimal(12,2) unsigned NOT NULL DEFAULT '0.00',
`consumed` decimal(12,2) unsigned NOT NULL DEFAULT '0.00',
`left` decimal(12,2) unsigned NOT NULL DEFAULT '0.00',
`order` tinyint(3) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `team` (`root`,`type`,`account`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_testreport` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL,
`project` mediumint(8) unsigned NOT NULL,
`tasks` varchar(255) NOT NULL,
`builds` varchar(255) NOT NULL,
`title` varchar(255) NOT NULL,
`begin` date NOT NULL,
`end` date NOT NULL,
`owner` char(30) NOT NULL,
`members` text NOT NULL,
`stories` text NOT NULL,
`bugs` text NOT NULL,
`cases` text NOT NULL,
`report` text NOT NULL,
`objectType` varchar(20) NOT NULL,
`objectID` mediumint(8) unsigned NOT NULL,
`createdBy` char(30) NOT NULL,
`createdDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_testresult` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`run` mediumint(8) unsigned NOT NULL,
`case` mediumint(8) unsigned NOT NULL,
`version` smallint(5) unsigned NOT NULL,
`caseResult` char(30) NOT NULL,
`stepResults` text NOT NULL,
`lastRunner` varchar(30) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `case` (`case`),
KEY `version` (`version`),
KEY `run` (`run`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_testrun` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`task` mediumint(8) unsigned NOT NULL DEFAULT '0',
`case` mediumint(8) unsigned NOT NULL DEFAULT '0',
`version` tinyint(3) unsigned NOT NULL DEFAULT '0',
`assignedTo` char(30) NOT NULL DEFAULT '',
`lastRunner` varchar(30) NOT NULL,
`lastRunDate` datetime NOT NULL,
`lastRunResult` char(30) NOT NULL,
`status` char(30) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `task` (`task`,`case`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_testsuite` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`product` mediumint(8) unsigned NOT NULL,
`name` varchar(255) NOT NULL,
`desc` text NOT NULL,
`type` varchar(20) NOT NULL,
`addedBy` char(30) NOT NULL,
`addedDate` datetime NOT NULL,
`lastEditedBy` char(30) NOT NULL,
`lastEditedDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL,
PRIMARY KEY (`id`),
KEY `product` (`product`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_testtask` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` char(90) NOT NULL,
`product` mediumint(8) unsigned NOT NULL,
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
`build` char(30) NOT NULL,
`owner` varchar(30) NOT NULL,
`pri` tinyint(3) unsigned NOT NULL DEFAULT '0',
`begin` date NOT NULL,
`end` date NOT NULL,
`mailto` text,
`desc` text NOT NULL,
`report` text NOT NULL,
`status` enum('blocked','doing','wait','done') NOT NULL DEFAULT 'wait',
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `product` (`product`),
KEY `build` (`build`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_todo` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`account` char(30) NOT NULL,
`date` date NOT NULL,
`begin` smallint(4) unsigned zerofill NOT NULL,
`end` smallint(4) unsigned zerofill NOT NULL,
`type` char(10) NOT NULL,
`cycle` tinyint(3) unsigned NOT NULL DEFAULT '0',
`idvalue` mediumint(8) unsigned NOT NULL DEFAULT '0',
`pri` tinyint(3) unsigned NOT NULL,
`name` char(150) NOT NULL,
`desc` text NOT NULL,
`status` enum('wait','doing','done','closed') NOT NULL DEFAULT 'wait',
`private` tinyint(1) NOT NULL,
`config` varchar(255) NOT NULL,
`assignedTo` varchar(30) NOT NULL DEFAULT '',
`assignedBy` varchar(30) NOT NULL DEFAULT '',
`assignedDate` datetime NOT NULL,
`finishedBy` varchar(30) NOT NULL DEFAULT '',
`finishedDate` datetime NOT NULL,
`closedBy` varchar(30) NOT NULL DEFAULT '',
`closedDate` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `account` (`account`),
KEY `assignedTo` (`assignedTo`),
KEY `finishedBy` (`finishedBy`),
KEY `date` (`date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_user` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`dept` mediumint(8) unsigned NOT NULL DEFAULT '0',
`account` char(30) NOT NULL DEFAULT '',
`password` char(32) NOT NULL DEFAULT '',
`role` char(10) NOT NULL DEFAULT '',
`realname` varchar(100) NOT NULL DEFAULT '',
`nickname` char(60) NOT NULL DEFAULT '',
`commiter` varchar(100) NOT NULL,
`avatar` char(30) NOT NULL DEFAULT '',
`birthday` date NOT NULL DEFAULT '0000-00-00',
`gender` enum('f','m') NOT NULL DEFAULT 'f',
`email` char(90) NOT NULL DEFAULT '',
`skype` char(90) NOT NULL DEFAULT '',
`qq` char(20) NOT NULL DEFAULT '',
`mobile` char(11) NOT NULL DEFAULT '',
`phone` char(20) NOT NULL DEFAULT '',
`weixin` varchar(90) NOT NULL DEFAULT '',
`dingding` varchar(90) NOT NULL DEFAULT '',
`slack` varchar(90) NOT NULL DEFAULT '',
`whatsapp` varchar(90) NOT NULL DEFAULT '',
`address` char(120) NOT NULL DEFAULT '',
`zipcode` char(10) NOT NULL DEFAULT '',
`join` date NOT NULL DEFAULT '0000-00-00',
`visits` mediumint(8) unsigned NOT NULL DEFAULT '0',
`ip` char(15) NOT NULL DEFAULT '',
`last` int(10) unsigned NOT NULL DEFAULT '0',
`fails` tinyint(5) NOT NULL DEFAULT '0',
`locked` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`ranzhi` char(30) NOT NULL DEFAULT '',
`score` int(11) NOT NULL DEFAULT '0',
`scoreLevel` int(11) NOT NULL DEFAULT '0',
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `account` (`account`),
KEY `dept` (`dept`),
KEY `email` (`email`),
KEY `commiter` (`commiter`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_usercontact` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`account` char(30) NOT NULL,
`listName` varchar(60) NOT NULL,
`userList` text NOT NULL,
PRIMARY KEY (`id`),
KEY `account` (`account`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_usergroup` (
`account` char(30) NOT NULL DEFAULT '',
`group` mediumint(8) unsigned NOT NULL DEFAULT '0',
UNIQUE KEY `account` (`account`,`group`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_userquery` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`account` char(30) NOT NULL,
`module` varchar(30) NOT NULL,
`title` varchar(90) NOT NULL,
`form` text NOT NULL,
`sql` text NOT NULL,
`shortcut` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `account` (`account`),
KEY `module` (`module`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_usertpl` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`account` char(30) NOT NULL,
`type` char(30) NOT NULL,
`title` varchar(150) NOT NULL,
`content` text NOT NULL,
`public` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `account` (`account`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_userview` (
`account` char(30) NOT NULL,
`products` mediumtext NOT NULL,
`projects` mediumtext NOT NULL,
UNIQUE KEY `account` (`account`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
CREATE TABLE `zt_webhook` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`type` varchar(10) NOT NULL DEFAULT 'default',
`name` varchar(50) NOT NULL,
`url` varchar(255) NOT NULL,
`domain` varchar(255) NOT NULL,
`contentType` varchar(30) NOT NULL DEFAULT 'application/json',
`sendType` enum('sync','async') NOT NULL DEFAULT 'sync',
`products` text NOT NULL,
`projects` text NOT NULL,
`params` varchar(100) NOT NULL,
`actions` text NOT NULL,
`desc` text NOT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
`editedBy` varchar(30) NOT NULL,
`editedDate` datetime NOT NULL,
`deleted` enum('0','1') NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+5
View File
@@ -0,0 +1,5 @@
ALTER TABLE `zt_entry` ADD `calledTime` int(10) unsigned NOT NULL DEFAULT '0' AFTER `createdDate`;
ALTER TABLE `zt_story` CHANGE `toBug` `toBug` mediumint(8) unsigned NOT NULL AFTER `closedReason`;
UPDATE `zt_story` SET `stage` = 'closed' WHERE `status` = 'closed';
ALTER TABLE `zt_story` ADD `stagedBy` char(30) COLLATE 'utf8_general_ci' NOT NULL AFTER `stage`;
ALTER TABLE `zt_storystage` ADD `stagedBy` char(30) COLLATE 'utf8_general_ci' NOT NULL;
+2
View File
@@ -0,0 +1,2 @@
ALTER TABLE `zt_burn` ADD `task` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `project`;
ALTER TABLE `zt_burn` ADD PRIMARY KEY `project_date_task` (`project`, `date`, `task`), DROP INDEX `PRIMARY`;
+18
View File
@@ -0,0 +1,18 @@
CREATE TABLE `zt_translation` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`lang` varchar(30) NOT NULL,
`module` varchar(30) NOT NULL,
`key` varchar(100) NOT NULL,
`value` text NOT NULL,
`refer` text NOT NULL,
`status` varchar(30) NOT NULL,
`translator` char(30) NOT NULL,
`translationTime` datetime NOT NULL,
`reviewer` char(30) NOT NULL,
`reviewTime` datetime NOT NULL,
`reason` text NOT NULL,
`version` varchar(20) NOT NULL,
`mode` varchar(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `lang_module_key_mode` (`lang`,`module`,`key`,`mode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+7 -2
View File
@@ -125,11 +125,12 @@ CREATE TABLE IF NOT EXISTS `zt_build` (
-- DROP TABLE IF EXISTS `zt_burn`;
CREATE TABLE IF NOT EXISTS `zt_burn` (
`project` mediumint(8) unsigned NOT NULL,
`task` mediumint(8) unsigned NOT NULL DEFAULT '0',
`date` date NOT NULL,
`estimate` float NOT NULL,
`left` float NOT NULL,
`consumed` float NOT NULL,
PRIMARY KEY (`project`,`date`)
PRIMARY KEY (`project`,`date`,`task`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_case`;
CREATE TABLE IF NOT EXISTS `zt_case` (
@@ -566,6 +567,7 @@ CREATE TABLE IF NOT EXISTS `zt_story` (
`status` enum('','changed','active','draft','closed') NOT NULL default '',
`color` char(7) NOT NULL,
`stage` enum('','wait','planned','projected','developing','developed','testing','tested','verified','released', 'closed') NOT NULL DEFAULT 'wait',
`stagedBy` char(30) NOT NULL,
`mailto` text,
`openedBy` varchar(30) NOT NULL default '',
`openedDate` datetime NOT NULL,
@@ -578,7 +580,7 @@ CREATE TABLE IF NOT EXISTS `zt_story` (
`closedBy` varchar(30) NOT NULL default '',
`closedDate` datetime NOT NULL,
`closedReason` varchar(30) NOT NULL,
`toBug` mediumint(9) NOT NULL,
`toBug` mediumint(8) unsigned NOT NULL,
`childStories` varchar(255) NOT NULL,
`linkStories` varchar(255) NOT NULL,
`duplicateStory` mediumint(8) unsigned NOT NULL,
@@ -603,6 +605,8 @@ CREATE TABLE IF NOT EXISTS `zt_storystage` (
`story` mediumint(8) unsigned NOT NULL,
`branch` mediumint(8) unsigned NOT NULL,
`stage` varchar(50) NOT NULL,
`stagedBy` char(30) NOT NULL,
UNIQUE KEY `story_branch` (`story`,`branch`),
KEY `story` (`story`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
-- DROP TABLE IF EXISTS `zt_suitecase`;
@@ -898,6 +902,7 @@ CREATE TABLE IF NOT EXISTS `zt_entry` (
`desc` text NOT NULL,
`createdBy` varchar(30) NOT NULL,
`createdDate` datetime NOT NULL,
`calledTime` int(10) unsigned NOT NULL DEFAULT '0',
`editedBy` varchar(30) NOT NULL,
`editedDate` datetime NOT NULL,
`deleted` enum('0', '1') NOT NULL DEFAULT '0',
+42
View File
@@ -1,3 +1,45 @@
2019-05-08 11.5.stable
完成的需求:
3505 产品和项目增加填写备注功能
3557 增加动态的显示内容的过滤功能
3602 xxb代码独立,调整禅道集成喧喧的代码
3608 优化多平台下面的排版
3612 打开首次登录修改密码后,使用客户端可以正常登录禅道
3627 调整接口的调用逻辑
3637 计划关联需求时弹窗里面的按钮保持居中对齐
3638 创建需求时的优先级按照1234的顺序排列
3639 创建操作增加类似提bug页面的模板功能
3640 创建文档的时候增加动作记录,记录上传附件的动作,记录上传者和文件名
3650 需求复制页面不要弹窗
3652 调整Bug添加页面操作系统控件的宽度
3656 更改禅道登录页的PMS 英文
3664 多人任务的工时计算逻辑需要调整
3668 任务详情页面增加创建子任务的链接
3669 父子任务间关联、取消动作记录到父任务历史记录中
3672 子任务维护的内容可以在父任务显示
修复的bug:
2432 官方docker镜像启动问题
2470 测试管理方式创建项目版本功能异常
2479 项目激活顺延任务的起止日期不生效
2489 对客户端中消息直接创建需求,需求来源选择不上
2490 产品项目编辑修改新负责人无法访问产品项目
2491 后台下载喧喧服务端和下载配置文件没有反应
2492 测试单报表统计问题
2493 禅道无法记录客户端日志信息
2494 去掉后台"捐助我们"的入口
2495 源码安装mysql8报错
2496 取消路线图权限后,还是在可以在产品概况页面看到
2497 zbox中的数据库adminer访问存在问题
2501 报表默认显示功能异常
2505 bug统计报表问题
2506 版本关联需求页面搜索会显示已经关联的需求页面
2510 待办添加备注后,窗口关闭按钮消失
2512 需求批量编辑状态不生效
2019-03-25 11.4.1
完善细节,修复bug。
完成相关调整支持专业版里相关功能。
2019-03-25 11.4.stable
完成的需求:
2584 国际版本去掉用户列表的首字母功能
+1 -1
View File
@@ -740,7 +740,7 @@ class baseControl
*/
if(!is_file($file2Included)) $this->app->triggerError("The control file $file2Included not found", __FILE__, __LINE__, $exit = true);
chdir(dirname($file2Included));
helper::import($file2Included);
if(!class_exists($moduleName)) helper::import($file2Included);
/**
* 设置调用的类名。
+2 -2
View File
@@ -1528,7 +1528,7 @@ class baseRouter
{
$code = trim(file_get_contents($fileName));
if(strpos($code, '<?php') === 0) $code = ltrim($code, '<?php');
if(strrpos($code, '?>') !== false) $code = rtrim($code, '?>');
if(strrpos($code, '?' . '>') !== false) $code = rtrim($code, '?' . '>');
return trim($code);
}
@@ -1650,7 +1650,7 @@ class baseRouter
/* include default value for module*/
$defaultValueFiles = glob($this->getTmpRoot() . "defaultvalue/*.php");
if($defaultValueFiles) foreach($defaultValueFiles as $file) helper::import($file);
if($defaultValueFiles) foreach($defaultValueFiles as $file) include $file;
/*
* 使用反射机制获取函数参数的默认值。
+5 -2
View File
@@ -41,7 +41,7 @@ class control extends baseControl
$mainViewFile = $modulePath . 'view' . DS . $this->devicePrefix . $methodName . '.' . $viewType . '.php';
/* If the main view file doesn't exist, set the device prefix to empty and reset the main view file. */
if(!file_exists($mainViewFile))
if(!file_exists($mainViewFile) and $this->app->clientDevice != 'mobile')
{
$originalPrefix = $this->devicePrefix;
$this->devicePrefix = '';
@@ -58,7 +58,10 @@ class control extends baseControl
$viewFile = file_exists($commonExtViewFile) ? $commonExtViewFile : $mainViewFile;
$viewFile = (!empty($siteExtViewFile) and file_exists($siteExtViewFile)) ? $siteExtViewFile : $viewFile;
if(!is_file($viewFile)) $this->app->triggerError("the view file $viewFile not found", __FILE__, __LINE__, $exit = true);
if(!is_file($viewFile))
{
die(js::error($this->lang->notPage) . js::locate('back'));
}
$commonExtHookFiles = glob($viewExtPath['common'] . $this->devicePrefix . $methodName . ".*.{$viewType}.hook.php");
$siteExtHookFiles = empty($viewExtPath['site']) ? '' : glob($viewExtPath['site'] . $this->devicePrefix . $methodName . ".*.{$viewType}.hook.php");
+15
View File
@@ -20,6 +20,21 @@
include dirname(__FILE__) . '/base/router.class.php';
class router extends baseRouter
{
/**
* Add custom langs when set client lang.
*
* @param string $lang zh-cn|zh-tw|zh-hk|en
* @access public
* @return void
*/
public function setClientLang($lang = '')
{
$langs = $this->dbh->query('SELECT value FROM' . TABLE_CONFIG . "WHERE `owner`='system' AND `module`='common' AND `section`='global' AND `key`='langs'")->fetch();
$langs = empty($langs) ? array() : json_decode($langs->value, true);
foreach($langs as $langKey => $langData) $this->config->langs[$langKey] = $langData['name'];
return parent::setClientLang($lang);
}
/**
* 加载语言文件,返回全局$lang对象。
* Load lang and return it as the global lang object.
File diff suppressed because it is too large Load Diff
+176
View File
@@ -0,0 +1,176 @@
<?php
/*
* ntlm_sasl_client.php
*
* @(#) $Id: ntlm_sasl_client.php,v 1.3 2004/11/17 08:00:37 mlemos Exp $
*
**
** Source: http://www.phpclasses.org/browse/file/7495.html
** License: BSD (http://www.phpclasses.org/package/1888-PHP-Single-API-for-standard-authentication-mechanisms.html)
** Bundled with Permission
**
*/
define("SASL_NTLM_STATE_START", 0);
define("SASL_NTLM_STATE_IDENTIFY_DOMAIN", 1);
define("SASL_NTLM_STATE_RESPOND_CHALLENGE", 2);
define("SASL_NTLM_STATE_DONE", 3);
class ntlm_sasl_client_class
{
var $credentials=array();
var $state=SASL_NTLM_STATE_START;
Function Initialize(&$client)
{
if(!function_exists($function="mcrypt_encrypt")
|| !function_exists($function="hash"))
{
$extensions=array(
"mcrypt_encrypt"=>"mcrypt",
"hash"=>"hash"
);
$client->error="the extension ".$extensions[$function]." required by the NTLM SASL client class is not available in this PHP configuration";
return(0);
}
return(1);
}
Function ASCIIToUnicode($ascii)
{
for($unicode="",$a=0;$a<strlen($ascii);$a++)
$unicode.=substr($ascii,$a,1).chr(0);
return($unicode);
}
Function TypeMsg1()
{
return(
"NTLMSSP\0".
"\x01\x00\x00\x00\x07\x82\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00".
"\x00\x00\x00\x00\x00\x00\x00\x00"
);
}
Function NTLMResponse($challenge,$password)
{
$unicode=$this->ASCIIToUnicode($password);
$md4=pack("H*", hash('md4', $unicode));
$padded=$md4.str_repeat(chr(0),21-strlen($md4));
$iv_size=mcrypt_get_iv_size(MCRYPT_DES,MCRYPT_MODE_ECB);
$iv=mcrypt_create_iv($iv_size,MCRYPT_RAND);
for($response="",$third=0;$third<21;$third+=7)
{
for($packed="",$p=$third;$p<$third+7;$p++)
$packed.=str_pad(decbin(ord(substr($padded,$p,1))),8,"0",STR_PAD_LEFT);
for($key="",$p=0;$p<strlen($packed);$p+=7)
{
$s=substr($packed,$p,7);
$b=$s.((substr_count($s,"1") % 2) ? "0" : "1");
$key.=chr(bindec($b));
}
$ciphertext=mcrypt_encrypt(MCRYPT_DES,$key,$challenge,MCRYPT_MODE_ECB,$iv);
$response.=$ciphertext;
}
return $response;
}
Function TypeMsg3($ntlm_response,$user,$domain,$workstation)
{
$domain_unicode=$this->ASCIIToUnicode($domain);
$domain_length=strlen($domain_unicode);
$domain_offset=64;
$user_unicode=$this->ASCIIToUnicode($user);
$user_length=strlen($user_unicode);
$user_offset=$domain_offset+$domain_length;
$workstation_unicode=$this->ASCIIToUnicode($workstation);
$workstation_length=strlen($workstation_unicode);
$workstation_offset=$user_offset+$user_length;
$lm="";
$lm_length=strlen($lm);
$lm_offset=$workstation_offset+$workstation_length;
$ntlm=$ntlm_response;
$ntlm_length=strlen($ntlm);
$ntlm_offset=$lm_offset+$lm_length;
$session="";
$session_length=strlen($session);
$session_offset=$ntlm_offset+$ntlm_length;
return(
"NTLMSSP\0".
"\x03\x00\x00\x00".
pack("v",$lm_length).
pack("v",$lm_length).
pack("V",$lm_offset).
pack("v",$ntlm_length).
pack("v",$ntlm_length).
pack("V",$ntlm_offset).
pack("v",$domain_length).
pack("v",$domain_length).
pack("V",$domain_offset).
pack("v",$user_length).
pack("v",$user_length).
pack("V",$user_offset).
pack("v",$workstation_length).
pack("v",$workstation_length).
pack("V",$workstation_offset).
pack("v",$session_length).
pack("v",$session_length).
pack("V",$session_offset).
"\x01\x02\x00\x00".
$domain_unicode.
$user_unicode.
$workstation_unicode.
$lm.
$ntlm
);
}
Function Start(&$client, &$message, &$interactions)
{
if($this->state!=SASL_NTLM_STATE_START)
{
$client->error="NTLM authentication state is not at the start";
return(SASL_FAIL);
}
$this->credentials=array(
"user"=>"",
"password"=>"",
"realm"=>"",
"workstation"=>""
);
$defaults=array();
$status=$client->GetCredentials($this->credentials,$defaults,$interactions);
if($status==SASL_CONTINUE)
$this->state=SASL_NTLM_STATE_IDENTIFY_DOMAIN;
Unset($message);
return($status);
}
Function Step(&$client, $response, &$message, &$interactions)
{
switch($this->state)
{
case SASL_NTLM_STATE_IDENTIFY_DOMAIN:
$message=$this->TypeMsg1($this->credentials["realm"],$this->credentials["workstation"]);
$this->state=SASL_NTLM_STATE_RESPOND_CHALLENGE;
break;
case SASL_NTLM_STATE_RESPOND_CHALLENGE:
$ntlm_response=$this->NTLMResponse(substr($response,24,8),$this->credentials["password"]);
$message=$this->TypeMsg3($ntlm_response,$this->credentials["user"],$this->credentials["realm"],$this->credentials["workstation"]);
$this->state=SASL_NTLM_STATE_DONE;
break;
case SASL_NTLM_STATE_DONE:
$client->error="NTLM authentication was finished without success";
return(SASL_FAIL);
default:
$client->error="invalid NTLM authentication step state";
return(SASL_FAIL);
}
return(SASL_CONTINUE);
}
};
?>
+204 -41
View File
@@ -15,7 +15,7 @@ $lang->action->project = $lang->projectCommon;
$lang->action->objectType = 'Object Type';
$lang->action->objectID = 'ID';
$lang->action->objectName = 'Object Name';
$lang->action->actor = 'Handler';
$lang->action->actor = 'User';
$lang->action->action = 'Action';
$lang->action->actionID = 'Action ID';
$lang->action->date = 'Date';
@@ -24,7 +24,7 @@ $lang->action->trash = 'Recycle';
$lang->action->undelete = 'Restore';
$lang->action->hideOne = 'Hide';
$lang->action->hideAll = 'Hide All';
$lang->action->editComment = 'Edit';
$lang->action->editComment = 'Edit Comment';
$lang->action->create = 'Add Comment';
$lang->action->comment = 'Comment';
@@ -32,7 +32,7 @@ $lang->action->trashTips = 'Note: Delete in ZenTao is logic.';
$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 that you want to restore exists. Please edit it.';
$lang->action->needEdit = '%s that you want to restore. Please edit it.';
$lang->action->historyEdit = 'The history EditBy cannot be empty.';
$lang->action->noDynamic = 'No dynamics. ';
@@ -41,7 +41,7 @@ $lang->action->history->action = 'Link';
$lang->action->history->field = 'Field';
$lang->action->history->old = 'Old value';
$lang->action->history->new = 'New value';
$lang->action->history->diff = 'Diff';
$lang->action->history->diff = 'Compare';
$lang->action->dynamic = new stdclass();
$lang->action->dynamic->today = 'Today';
@@ -76,8 +76,8 @@ $lang->action->objectTypes['caseresult'] = 'Case Result';
$lang->action->objectTypes['stepresult'] = 'Case Steps';
$lang->action->objectTypes['testtask'] = 'Test Build';
$lang->action->objectTypes['user'] = 'User';
$lang->action->objectTypes['doc'] = 'Doc';
$lang->action->objectTypes['doclib'] = 'Doc Lib';
$lang->action->objectTypes['doc'] = 'Document';
$lang->action->objectTypes['doclib'] = 'Document Library';
$lang->action->objectTypes['todo'] = 'Todo';
$lang->action->objectTypes['branch'] = 'Branch';
$lang->action->objectTypes['module'] = 'Module';
@@ -127,11 +127,19 @@ $lang->action->desc->verified = '$date, verified by <strong>$actor</strong
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> is changed. It was "%s" and it is "%s".<br />' . "\n";
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> is changed. The difference is ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
$lang->action->desc->diff3 = 'File Name %s was changed to %s .' . "\n";
$lang->action->desc->linked2bug = '$date Linked to <strong>$extra</strong> by <strong>$actor</strong>';
$lang->action->desc->linked2bug = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
/* 子任务修改父任务的历史操作记录 */
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, <strong>$actor</strong> linked a child task <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, <strong>$actor</strong> linked a child task <strong>$extra</strong>。' . "\n";
$lang->action->desc->unlinkchildrentask = '$date, <strong>$actor</strong> unlinked a child task <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkparenttask = '$date, <strong>$actor</strong> linked to a parent task <strong>$extra</strong>。' . "\n";
$lang->action->desc->unlinkparenttask = '$date, <strong>$actor</strong> unlinked a parent task <strong>$extra</strong>。' . "\n";
/* 关联用例和移除用例时的历史操作记录。*/
$lang->action->desc->linkrelatedcase = '$date, <strong>$actor</strong> linked to use case <strong>$extra</strong>.' . "\n";
$lang->action->desc->unlinkrelatedcase = '$date, <strong>$actor</strong> unlinked use case <strong>$extra</strong>.' . "\n";
$lang->action->desc->linkrelatedcase = '$date, <strong>$actor</strong> linked a case <strong>$extra</strong>.' . "\n";
$lang->action->desc->unlinkrelatedcase = '$date, <strong>$actor</strong> unlinked a case <strong>$extra</strong>.' . "\n";
/* 用来显示动态信息。*/
$lang->action->label = new stdclass();
@@ -143,7 +151,7 @@ $lang->action->label->assigned = 'assigned ';
$lang->action->label->closed = 'closed ';
$lang->action->label->deleted = 'deleted ';
$lang->action->label->deletedfile = 'deleted ';
$lang->action->label->editfile = 'edit ';
$lang->action->label->editfile = 'edited ';
$lang->action->label->erased = 'erased ';
$lang->action->label->undeleted = 'restored ';
$lang->action->label->hidden = 'hid ';
@@ -153,31 +161,31 @@ $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 Story';
$lang->action->label->bugconfirmed = 'Confirmed';
$lang->action->label->tostory = 'Convert to Story';
$lang->action->label->frombug = 'Converted from Bug';
$lang->action->label->fromlib = 'Import from library';
$lang->action->label->totask = 'Convert to Task';
$lang->action->label->svncommited = 'SVN Commit';
$lang->action->label->gitcommited = 'Git Commit';
$lang->action->label->linked2plan = 'Link to Plan';
$lang->action->label->unlinkedfromplan = 'Unlink';
$lang->action->label->changestatus = 'Change Status';
$lang->action->label->confirmed = 'confirmed story';
$lang->action->label->bugconfirmed = 'confirmed';
$lang->action->label->tostory = 'converted to Story';
$lang->action->label->frombug = 'converted from Bug';
$lang->action->label->fromlib = 'imported from Library';
$lang->action->label->totask = 'converted to Task';
$lang->action->label->svncommited = 'SVN committed';
$lang->action->label->gitcommited = 'Git committed';
$lang->action->label->linked2plan = 'linked to Plan';
$lang->action->label->unlinkedfromplan = 'unlinked from';
$lang->action->label->changestatus = 'changed status';
$lang->action->label->marked = 'marked';
$lang->action->label->linked2project = "Link {$lang->projectCommon}";
$lang->action->label->unlinkedfromproject = "Unlink {$lang->projectCommon}";
$lang->action->label->unlinkedfrombuild = "Unlink Build";
$lang->action->label->linked2release = "Link Release";
$lang->action->label->unlinkedfromrelease = "Unlink Release";
$lang->action->label->linkrelatedbug = "Link to Bug";
$lang->action->label->unlinkrelatedbug = "Unlink";
$lang->action->label->linkrelatedcase = "Link to Case";
$lang->action->label->unlinkrelatedcase = "Unlink";
$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->linked2project = "linked to {$lang->projectCommon}";
$lang->action->label->unlinkedfromproject = "unlinked from {$lang->projectCommon}";
$lang->action->label->unlinkedfrombuild = "unlinked Build";
$lang->action->label->linked2release = "linked Release";
$lang->action->label->unlinkedfromrelease = "unlinked Release";
$lang->action->label->linkrelatedbug = "linked Bug";
$lang->action->label->unlinkrelatedbug = "unlinked Bug";
$lang->action->label->linkrelatedcase = "linked Case";
$lang->action->label->unlinkrelatedcase = "unlinked Case";
$lang->action->label->linkrelatedstory = "linked Story";
$lang->action->label->unlinkrelatedstory = "unlinked Story";
$lang->action->label->subdividestory = "decomposed Story";
$lang->action->label->unlinkchildstory = "unlinked Story";
$lang->action->label->started = 'started ';
$lang->action->label->restarted = 'continued ';
$lang->action->label->recordestimate = 'recorded ';
@@ -188,11 +196,166 @@ $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->login = 'login';
$lang->action->label->logout = "logout";
$lang->action->label->deleteestimate = "deleted ";
$lang->action->label->linked2build = "linked ";
$lang->action->label->linked2bug = "linked ";
$lang->action->label->linkchildtask = "linked a child task";
$lang->action->label->unlinkchildrentask = "unlinked a child task";
$lang->action->label->linkparenttask = "linked a parent task";
$lang->action->label->unlinkparenttask = "unlink from parent task";
$lang->action->label->batchcreate = "batch created tasks";
$lang->action->label->createchildren = "create child tasks";
$lang->action->label->managed = "managed";
/* 动态信息按照对象分组 */
$lang->action->dynamicAction = new stdclass;
$lang->action->dynamicAction->todo['opened'] = 'created a todo';
$lang->action->dynamicAction->todo['edited'] = 'edited a todo';
$lang->action->dynamicAction->todo['erased'] = 'deleted a todo';
$lang->action->dynamicAction->todo['finished'] = 'finished a todo';
$lang->action->dynamicAction->todo['activated'] = 'activated a todo';
$lang->action->dynamicAction->todo['closed'] = 'closed a todo';
$lang->action->dynamicAction->todo['deleted'] = 'deleted a todo';
$lang->action->dynamicAction->todo['assigned'] = 'assigned a todo';
$lang->action->dynamicAction->todo['undeleted'] = 'restored a todo';
$lang->action->dynamicAction->todo['hidden'] = 'hid a todo';
$lang->action->dynamicAction->product['opened'] = 'Create ' . $lang->productCommon;
$lang->action->dynamicAction->product['edited'] = 'Edit ' . $lang->productCommon;
$lang->action->dynamicAction->product['deleted'] = 'Delete ' . $lang->productCommon;
$lang->action->dynamicAction->product['closed'] = 'Close ' . $lang->productCommon;
$lang->action->dynamicAction->product['undeleted'] = 'Restore ' . $lang->productCommon;
$lang->action->dynamicAction->product['hidden'] = 'Hide ' . $lang->productCommon;
$lang->action->dynamicAction->productplan['opened'] = 'Create Plan';
$lang->action->dynamicAction->productplan['edited'] = 'Edit Plan';
$lang->action->dynamicAction->release['opened'] = 'Create Release';
$lang->action->dynamicAction->release['edited'] = 'Edit Release';
$lang->action->dynamicAction->release['changestatus'] = 'Change Release Status';
$lang->action->dynamicAction->release['undeleted'] = 'Restore Release';
$lang->action->dynamicAction->release['hidden'] = 'Hide Release';
$lang->action->dynamicAction->story['opened'] = 'Create Story';
$lang->action->dynamicAction->story['edited'] = 'Edit Story';
$lang->action->dynamicAction->story['activated'] = 'Activate Story';
$lang->action->dynamicAction->story['reviewed'] = 'Review Story';
$lang->action->dynamicAction->story['closed'] = 'Close Story';
$lang->action->dynamicAction->story['assigned'] = 'Assign Story';
$lang->action->dynamicAction->story['changed'] = 'Change Story';
$lang->action->dynamicAction->story['linked2plan'] = 'Link Story to Plan';
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Unlink Story from Plan';
$lang->action->dynamicAction->story['linked2release'] = 'Link Story to Release';
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Unlink Story from Plan';
$lang->action->dynamicAction->story['linked2build'] = 'Link Story to Build';
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Unlink Story from Build';
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Unlink Project';
$lang->action->dynamicAction->story['undeleted'] = 'Restore Story';
$lang->action->dynamicAction->story['hidden'] = 'Hide Story';
$lang->action->dynamicAction->project['opened'] = 'Create ' . $lang->projectCommon;
$lang->action->dynamicAction->project['edited'] = 'Edit ' . $lang->projectCommon;
$lang->action->dynamicAction->project['deleted'] = 'Delete ' . $lang->projectCommon;
$lang->action->dynamicAction->project['started'] = 'Start ' . $lang->projectCommon;
$lang->action->dynamicAction->project['delayed'] = 'Delay ' . $lang->projectCommon;
$lang->action->dynamicAction->project['suspended'] = 'Suspend ' . $lang->projectCommon;
$lang->action->dynamicAction->project['activated'] = 'Activate ' . $lang->projectCommon;
$lang->action->dynamicAction->project['closed'] = 'Close ' . $lang->projectCommon;
$lang->action->dynamicAction->project['managed'] = 'Manage ' . $lang->projectCommon;
$lang->action->dynamicAction->project['undeleted'] = 'Restore ' . $lang->projectCommon;
$lang->action->dynamicAction->project['hidden'] = 'Hide ' . $lang->projectCommon;
$lang->action->dynamicAction->project['moved'] = 'Improt Task';
$lang->action->dynamicAction->task['opened'] = 'Create Task';
$lang->action->dynamicAction->task['edited'] = 'Edit Task';
$lang->action->dynamicAction->task['commented'] = 'Task Comment';
$lang->action->dynamicAction->task['assigned'] = 'Assign Task';
$lang->action->dynamicAction->task['confirmed'] = 'Confirm Task';
$lang->action->dynamicAction->task['started'] = 'Start Task';
$lang->action->dynamicAction->task['finished'] = 'Finish Task';
$lang->action->dynamicAction->task['recordestimate'] = 'Add Estimates';
$lang->action->dynamicAction->task['editestimate'] = 'Edit Estimates';
$lang->action->dynamicAction->task['deleteestimate'] = 'Delete Estimates';
$lang->action->dynamicAction->task['paused'] = 'Pause Task';
$lang->action->dynamicAction->task['closed'] = 'Close Task';
$lang->action->dynamicAction->task['canceled'] = 'Cancel Task';
$lang->action->dynamicAction->task['activated'] = 'Activate Task';
$lang->action->dynamicAction->task['createchildren'] = 'Create Child Task';
$lang->action->dynamicAction->task['unlinkparenttask'] = 'Unlink Parent Task';
$lang->action->dynamicAction->task['linkparenttask'] = 'Link Parent Task';
$lang->action->dynamicAction->task['linkchildtask'] = 'Link Child Task';
$lang->action->dynamicAction->task['undeleted'] = 'Restore Task';
$lang->action->dynamicAction->task['hidden'] = 'Hide Task';
$lang->action->dynamicAction->task['svncommited'] = 'SVN Commit';
$lang->action->dynamicAction->task['gitcommited'] = 'GIT Commit';
$lang->action->dynamicAction->build['opened'] = 'Create Build';
$lang->action->dynamicAction->build['edited'] = 'Edit Build';
$lang->action->dynamicAction->bug['opened'] = 'Report Bug';
$lang->action->dynamicAction->bug['edited'] = 'Edit Bug';
$lang->action->dynamicAction->bug['activated'] = 'Activate Bug';
$lang->action->dynamicAction->bug['assigned'] = 'Assign Bug';
$lang->action->dynamicAction->bug['closed'] = 'Close Bug';
$lang->action->dynamicAction->bug['bugconfirmed'] = 'Confirm Bug';
$lang->action->dynamicAction->bug['resolved'] = 'Resolve Bug';
$lang->action->dynamicAction->bug['undeleted'] = 'Restore Bug';
$lang->action->dynamicAction->bug['hidden'] = 'Hide Bug';
$lang->action->dynamicAction->bug['confirmed'] = 'Confirm Story Change';
$lang->action->dynamicAction->bug['tostory'] = 'Convert to Story';
$lang->action->dynamicAction->bug['totask'] = 'Convert to Task';
$lang->action->dynamicAction->bug['linked2plan'] = 'Link Plan';
$lang->action->dynamicAction->bug['unlinkedfromplan'] = 'Unlink Plan';
$lang->action->dynamicAction->bug['linked2release'] = 'Link Release';
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = 'Unlink Plan';
$lang->action->dynamicAction->bug['linked2bug'] = 'Link Build';
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = 'Unlink Build';
$lang->action->dynamicAction->testtask['opened'] = 'Create Test Request';
$lang->action->dynamicAction->testtask['edited'] = 'Edit Test Request';
$lang->action->dynamicAction->testtask['started'] = 'Start Test Request';
$lang->action->dynamicAction->testtask['activated'] = 'Activate Test Request';
$lang->action->dynamicAction->testtask['closed'] = 'Close Test Request';
$lang->action->dynamicAction->testtask['blocked'] = 'Blocked Test Request';
$lang->action->dynamicAction->case['opened'] = 'Create Case';
$lang->action->dynamicAction->case['edited'] = 'Edit Case';
$lang->action->dynamicAction->case['deleted'] = 'Delete Case';
$lang->action->dynamicAction->case['undeleted'] = 'Restore Case';
$lang->action->dynamicAction->case['hidden'] = 'Hide Case';
$lang->action->dynamicAction->case['reviewed'] = 'Add Review Result';
$lang->action->dynamicAction->case['confirmed'] = 'Confirm Case';
$lang->action->dynamicAction->case['fromlib'] = 'Import from Case Lib';
$lang->action->dynamicAction->testreport['opened'] = 'Create Test Report';
$lang->action->dynamicAction->testreport['edited'] = 'Edit Test Report';
$lang->action->dynamicAction->testreport['deleted'] = 'Delete Test Report';
$lang->action->dynamicAction->testreport['undeleted'] = 'Restore Test Report';
$lang->action->dynamicAction->testreport['hidden'] = 'Hide Test Report';
$lang->action->dynamicAction->testsuite['opened'] = 'Create Test Suite';
$lang->action->dynamicAction->testsuite['edited'] = 'Edit Test Suite';
$lang->action->dynamicAction->testsuite['deleted'] = 'Delete Test Suite';
$lang->action->dynamicAction->testsuite['undeleted'] = 'Restore Test Suite';
$lang->action->dynamicAction->testsuite['hidden'] = 'Hide Test Suite';
$lang->action->dynamicAction->caselib['opened'] = 'Create Case Lib';
$lang->action->dynamicAction->caselib['edited'] = 'Edit Case Lib';
$lang->action->dynamicAction->caselib['deleted'] = 'Delete Case Lib';
$lang->action->dynamicAction->caselib['undeleted'] = 'Restore Case Lib';
$lang->action->dynamicAction->caselib['hidden'] = 'Hide Case Lib';
$lang->action->dynamicAction->doclib['created'] = 'Create Doc Library';
$lang->action->dynamicAction->doclib['edited'] = 'Edit Doc Library';
$lang->action->dynamicAction->doc['created'] = 'Create Document';
$lang->action->dynamicAction->doc['edited'] = 'Edit Document';
$lang->action->dynamicAction->doc['commented'] = 'Comment Document';
$lang->action->dynamicAction->doc['deleted'] = 'Delete Document';
$lang->action->dynamicAction->doc['undeleted'] = 'Restore Document';
$lang->action->dynamicAction->doc['hidden'] = 'Hide Document';
$lang->action->dynamicAction->user['created'] = 'create a user';
$lang->action->dynamicAction->user['edited'] = 'edited au user';
$lang->action->dynamicAction->user['login'] = 'login';
$lang->action->dynamicAction->user['logout'] = 'logout';
$lang->action->dynamicAction->user['undeleted'] = 'restored user';
$lang->action->dynamicAction->user['hidden'] = 'hid a user';
$lang->action->dynamicAction->user['loginxuanxuan'] = 'login desktop';
$lang->action->dynamicAction->entry['created'] = 'Add Application';
$lang->action->dynamicAction->entry['edited'] = 'Edit Application';
/* 用来生成相应对象的链接。*/
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
@@ -204,15 +367,15 @@ $lang->action->label->task = 'Task|task|view|taskID=%s';
$lang->action->label->build = 'Build|build|view|buildID=%s';
$lang->action->label->bug = 'Bug|bug|view|bugID=%s';
$lang->action->label->case = 'Case|testcase|view|caseID=%s';
$lang->action->label->testtask = 'Test Task|testtask|view|caseID=%s';
$lang->action->label->testtask = 'Request|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 = 'Todo|todo|view|todoID=%s';
$lang->action->label->doclib = 'Doc Lib|doc|browse|libID=%s';
$lang->action->label->doclib = 'Doc Library|doc|browse|libID=%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->entry = 'Application|entry|browse|';
$lang->action->label->webhook = 'Webhook|webhook|browse|';
$lang->action->label->space = ' ';
@@ -222,11 +385,11 @@ $lang->action->search->objectTypeList['product'] = $lang->productCommon;
$lang->action->search->objectTypeList['project'] = $lang->projectCommon;
$lang->action->search->objectTypeList['bug'] = 'Bug';
$lang->action->search->objectTypeList['case'] = 'Case';
$lang->action->search->objectTypeList['caseresult'] = 'Case Results';
$lang->action->search->objectTypeList['caseresult'] = 'Case Result';
$lang->action->search->objectTypeList['stepresult'] = 'Case Steps';
$lang->action->search->objectTypeList['story'] = 'Story';
$lang->action->search->objectTypeList['task'] = 'Task';
$lang->action->search->objectTypeList['testtask'] = 'Test Task';
$lang->action->search->objectTypeList['testtask'] = 'Request';
$lang->action->search->objectTypeList['user'] = 'User';
$lang->action->search->objectTypeList['doc'] = 'Doc';
$lang->action->search->objectTypeList['doclib'] = 'Doc Lib';
+163
View File
@@ -129,6 +129,14 @@ $lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,
$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 关联到版本 <strong>$extra</strong>';
/* 子任务修改父任务的历史操作记录 */
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 创建子任务 <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, 由 <strong>$actor</strong> 关联子任务 <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, 由 <strong>$actor</strong> 关联子任务 <strong>$extra</strong>。' . "\n";
$lang->action->desc->unlinkchildrentask = '$date, 由 <strong>$actor</strong> 移除子任务 <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkparenttask = '$date, 由 <strong>$actor</strong> 关联到父任务 <strong>$extra</strong>。' . "\n";
$lang->action->desc->unlinkparenttask = '$date, 由 <strong>$actor</strong> 从父任务<strong>$extra</strong>取消关联。' . "\n";
/* 关联用例和移除用例时的历史操作记录。*/
$lang->action->desc->linkrelatedcase = '$date, 由 <strong>$actor</strong> 关联相关用例 <strong>$extra</strong>。' . "\n";
$lang->action->desc->unlinkrelatedcase = '$date, 由 <strong>$actor</strong> 移除相关用例 <strong>$extra</strong>。' . "\n";
@@ -193,6 +201,161 @@ $lang->action->label->logout = "退出登录";
$lang->action->label->deleteestimate = "删除了工时";
$lang->action->label->linked2build = "关联了";
$lang->action->label->linked2bug = "关联了";
$lang->action->label->linkchildtask = "关联子任务";
$lang->action->label->unlinkchildrentask = "取消关联子任务";
$lang->action->label->linkparenttask = "关联到父任务";
$lang->action->label->unlinkparenttask = "从父任务取消关联";
$lang->action->label->batchcreate = "批量创建任务";
$lang->action->label->createchildren = "创建子任务";
$lang->action->label->managed = "维护";
/* 动态信息按照对象分组 */
$lang->action->dynamicAction = new stdclass();
$lang->action->dynamicAction->todo['opened'] = '创建待办';
$lang->action->dynamicAction->todo['edited'] = '编辑待办';
$lang->action->dynamicAction->todo['erased'] = '删除待办';
$lang->action->dynamicAction->todo['finished'] = '完成待办';
$lang->action->dynamicAction->todo['activated'] = '激活待办';
$lang->action->dynamicAction->todo['closed'] = '关闭待办';
$lang->action->dynamicAction->todo['deleted'] = '删除待办';
$lang->action->dynamicAction->todo['assigned'] = '指派待办';
$lang->action->dynamicAction->todo['undeleted'] = '还原待办';
$lang->action->dynamicAction->todo['hidden'] = '隐藏待办';
$lang->action->dynamicAction->product['opened'] = '创建' . $lang->productCommon;
$lang->action->dynamicAction->product['edited'] = '编辑' . $lang->productCommon;
$lang->action->dynamicAction->product['deleted'] = '删除' . $lang->productCommon;
$lang->action->dynamicAction->product['closed'] = '关闭' . $lang->productCommon;
$lang->action->dynamicAction->product['undeleted'] = '还原' . $lang->productCommon;
$lang->action->dynamicAction->product['hidden'] = '隐藏' . $lang->productCommon;
$lang->action->dynamicAction->productplan['opened'] = '创建计划';
$lang->action->dynamicAction->productplan['edited'] = '编辑计划';
$lang->action->dynamicAction->release['opened'] = '创建发布';
$lang->action->dynamicAction->release['edited'] = '编辑发布';
$lang->action->dynamicAction->release['changestatus'] = '修改发布状态';
$lang->action->dynamicAction->release['undeleted'] = '还原发布';
$lang->action->dynamicAction->release['hidden'] = '隐藏发布';
$lang->action->dynamicAction->story['opened'] = '创建需求';
$lang->action->dynamicAction->story['edited'] = '编辑需求';
$lang->action->dynamicAction->story['activated'] = '激活需求';
$lang->action->dynamicAction->story['reviewed'] = '评审需求';
$lang->action->dynamicAction->story['closed'] = '关闭需求';
$lang->action->dynamicAction->story['assigned'] = '指派需求';
$lang->action->dynamicAction->story['changed'] = '变更需求';
$lang->action->dynamicAction->story['linked2plan'] = '需求关联计划';
$lang->action->dynamicAction->story['unlinkedfromplan'] = '计划移除需求';
$lang->action->dynamicAction->story['linked2release'] = '需求关联发布';
$lang->action->dynamicAction->story['unlinkedfromrelease'] = '发布移除需求';
$lang->action->dynamicAction->story['linked2build'] = '需求关联版本';
$lang->action->dynamicAction->story['unlinkedfrombuild'] = '版本移除需求';
$lang->action->dynamicAction->story['unlinkedfromproject'] = '移除项目';
$lang->action->dynamicAction->story['undeleted'] = '还原需求';
$lang->action->dynamicAction->story['hidden'] = '隐藏需求';
$lang->action->dynamicAction->project['opened'] = '创建' . $lang->projectCommon;
$lang->action->dynamicAction->project['edited'] = '编辑' . $lang->projectCommon;
$lang->action->dynamicAction->project['deleted'] = '删除' . $lang->projectCommon;
$lang->action->dynamicAction->project['started'] = '开始' . $lang->projectCommon;
$lang->action->dynamicAction->project['delayed'] = '延期' . $lang->projectCommon;
$lang->action->dynamicAction->project['suspended'] = '挂起' . $lang->projectCommon;
$lang->action->dynamicAction->project['activated'] = '激活' . $lang->projectCommon;
$lang->action->dynamicAction->project['closed'] = '关闭' . $lang->projectCommon;
$lang->action->dynamicAction->project['managed'] = '维护' . $lang->projectCommon;
$lang->action->dynamicAction->project['undeleted'] = '还原' . $lang->projectCommon;
$lang->action->dynamicAction->project['hidden'] = '隐藏' . $lang->projectCommon;
$lang->action->dynamicAction->project['moved'] = '导入任务';
$lang->action->dynamicAction->task['opened'] = '创建任务';
$lang->action->dynamicAction->task['edited'] = '编辑任务';
$lang->action->dynamicAction->task['commented'] = '备注任务';
$lang->action->dynamicAction->task['assigned'] = '指派任务';
$lang->action->dynamicAction->task['confirmed'] = '确认需求变更';
$lang->action->dynamicAction->task['started'] = '开始任务';
$lang->action->dynamicAction->task['finished'] = '完成任务';
$lang->action->dynamicAction->task['recordestimate'] = '记录工时';
$lang->action->dynamicAction->task['editestimate'] = '编辑工时';
$lang->action->dynamicAction->task['deleteestimate'] = '删除工时';
$lang->action->dynamicAction->task['paused'] = '暂停任务';
$lang->action->dynamicAction->task['closed'] = '关闭任务';
$lang->action->dynamicAction->task['canceled'] = '取消任务';
$lang->action->dynamicAction->task['activated'] = '激活任务';
$lang->action->dynamicAction->task['createchildren'] = '创建子任务';
$lang->action->dynamicAction->task['unlinkparenttask'] = '从父任务取消关联';
$lang->action->dynamicAction->task['linkparenttask'] = '关联到父任务';
$lang->action->dynamicAction->task['linkchildtask'] = '关联子任务';
$lang->action->dynamicAction->task['undeleted'] = '还原任务';
$lang->action->dynamicAction->task['hidden'] = '隐藏任务';
$lang->action->dynamicAction->task['svncommited'] = 'SVN提交';
$lang->action->dynamicAction->task['gitcommited'] = 'GIT提交';
$lang->action->dynamicAction->build['opened'] = '创建版本';
$lang->action->dynamicAction->build['edited'] = '编辑版本';
$lang->action->dynamicAction->bug['opened'] = '创建Bug';
$lang->action->dynamicAction->bug['edited'] = '编辑Bug';
$lang->action->dynamicAction->bug['activated'] = '激活Bug';
$lang->action->dynamicAction->bug['assigned'] = '指派Bug';
$lang->action->dynamicAction->bug['closed'] = '关闭Bug';
$lang->action->dynamicAction->bug['bugconfirmed'] = '确认Bug';
$lang->action->dynamicAction->bug['resolved'] = '解决Bug';
$lang->action->dynamicAction->bug['undeleted'] = '还原Bug';
$lang->action->dynamicAction->bug['hidden'] = '隐藏Bug';
$lang->action->dynamicAction->bug['confirmed'] = '确认需求变更';
$lang->action->dynamicAction->bug['tostory'] = '转需求';
$lang->action->dynamicAction->bug['totask'] = '转任务';
$lang->action->dynamicAction->bug['linked2plan'] = 'Bug关联计划';
$lang->action->dynamicAction->bug['unlinkedfromplan'] = '计划移除Bug';
$lang->action->dynamicAction->bug['linked2release'] = 'Bug关联发布';
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = '发布移除Bug';
$lang->action->dynamicAction->bug['linked2bug'] = 'Bug关联版本';
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = '版本移除Bug';
$lang->action->dynamicAction->testtask['opened'] = '创建测试单';
$lang->action->dynamicAction->testtask['edited'] = '编辑测试单';
$lang->action->dynamicAction->testtask['started'] = '启动测试单';
$lang->action->dynamicAction->testtask['activated'] = '激活测试单';
$lang->action->dynamicAction->testtask['closed'] = '完成测试单';
$lang->action->dynamicAction->testtask['blocked'] = '阻塞测试单';
$lang->action->dynamicAction->case['opened'] = '创建用例';
$lang->action->dynamicAction->case['edited'] = '编辑用例';
$lang->action->dynamicAction->case['deleted'] = '删除用例';
$lang->action->dynamicAction->case['undeleted'] = '还原用例';
$lang->action->dynamicAction->case['hidden'] = '隐藏用例';
$lang->action->dynamicAction->case['reviewed'] = '评审用例';
$lang->action->dynamicAction->case['confirmed'] = '确认需求变更';
$lang->action->dynamicAction->case['fromlib'] = '从用例库导入';
$lang->action->dynamicAction->testreport['opened'] = '创建测试报告';
$lang->action->dynamicAction->testreport['edited'] = '编辑测试报告';
$lang->action->dynamicAction->testreport['deleted'] = '删除测试报告';
$lang->action->dynamicAction->testreport['undeleted'] = '还原测试报告';
$lang->action->dynamicAction->testreport['hidden'] = '隐藏测试报告';
$lang->action->dynamicAction->testsuite['opened'] = '创建测试套件';
$lang->action->dynamicAction->testsuite['edited'] = '编辑测试套件';
$lang->action->dynamicAction->testsuite['deleted'] = '删除测试套件';
$lang->action->dynamicAction->testsuite['undeleted'] = '还原测试套件';
$lang->action->dynamicAction->testsuite['hidden'] = '隐藏测试套件';
$lang->action->dynamicAction->caselib['opened'] = '创建用例库';
$lang->action->dynamicAction->caselib['edited'] = '编辑用例库';
$lang->action->dynamicAction->caselib['deleted'] = '删除用例库';
$lang->action->dynamicAction->caselib['undeleted'] = '还原用例库';
$lang->action->dynamicAction->caselib['hidden'] = '隐藏用例库';
$lang->action->dynamicAction->doclib['created'] = '创建文档库';
$lang->action->dynamicAction->doclib['edited'] = '编辑文档库';
$lang->action->dynamicAction->doc['created'] = '创建文档';
$lang->action->dynamicAction->doc['edited'] = '编辑文档';
$lang->action->dynamicAction->doc['commented'] = '备注文档';
$lang->action->dynamicAction->doc['deleted'] = '删除文档';
$lang->action->dynamicAction->doc['undeleted'] = '还原文档';
$lang->action->dynamicAction->doc['hidden'] = '隐藏文档';
$lang->action->dynamicAction->user['created'] = '创建用户';
$lang->action->dynamicAction->user['edited'] = '编辑用户';
$lang->action->dynamicAction->user['login'] = '用户登录';
$lang->action->dynamicAction->user['logout'] = '用户退出';
$lang->action->dynamicAction->user['undeleted'] = '还原用户';
$lang->action->dynamicAction->user['hidden'] = '隐藏用户';
$lang->action->dynamicAction->user['loginxuanxuan'] = '登录客户端';
$lang->action->dynamicAction->entry['created'] = '添加应用';
$lang->action->dynamicAction->entry['edited'] = '编辑应用';
/* 用来生成相应对象的链接。*/
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
+163
View File
@@ -129,6 +129,14 @@ $lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,
$lang->action->desc->diff3 = '將檔案名 %s 改為 %s 。' . "\n";
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 關聯到版本 <strong>$extra</strong>';
/* 子任務修改父任務的歷史操作記錄 */
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 創建子任務 <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, 由 <strong>$actor</strong> 關聯子任務 <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkchildtask = '$date, 由 <strong>$actor</strong> 關聯子任務 <strong>$extra</strong>。' . "\n";
$lang->action->desc->unlinkchildrentask = '$date, 由 <strong>$actor</strong> 移除子任務 <strong>$extra</strong>。' . "\n";
$lang->action->desc->linkparenttask = '$date, 由 <strong>$actor</strong> 關聯到父任務 <strong>$extra</strong>。' . "\n";
$lang->action->desc->unlinkparenttask = '$date, 由 <strong>$actor</strong> 從父任務<strong>$extra</strong>取消關聯。' . "\n";
/* 關聯用例和移除用例時的歷史操作記錄。*/
$lang->action->desc->linkrelatedcase = '$date, 由 <strong>$actor</strong> 關聯相關用例 <strong>$extra</strong>。' . "\n";
$lang->action->desc->unlinkrelatedcase = '$date, 由 <strong>$actor</strong> 移除相關用例 <strong>$extra</strong>。' . "\n";
@@ -193,6 +201,161 @@ $lang->action->label->logout = "退出登錄";
$lang->action->label->deleteestimate = "刪除了工時";
$lang->action->label->linked2build = "關聯了";
$lang->action->label->linked2bug = "關聯了";
$lang->action->label->linkchildtask = "關聯子任務";
$lang->action->label->unlinkchildrentask = "取消關聯子任務";
$lang->action->label->linkparenttask = "關聯到父任務";
$lang->action->label->unlinkparenttask = "從父任務取消關聯";
$lang->action->label->batchcreate = "批量創建任務";
$lang->action->label->createchildren = "創建子任務";
$lang->action->label->managed = "維護";
/* 動態信息按照對象分組 */
$lang->action->dynamicAction = new stdclass;
$lang->action->dynamicAction->todo['opened'] = '創建待辦';
$lang->action->dynamicAction->todo['edited'] = '編輯待辦';
$lang->action->dynamicAction->todo['erased'] = '刪除待辦';
$lang->action->dynamicAction->todo['finished'] = '完成待辦';
$lang->action->dynamicAction->todo['activated'] = '激活待辦';
$lang->action->dynamicAction->todo['closed'] = '關閉待辦';
$lang->action->dynamicAction->todo['deleted'] = '刪除待辦';
$lang->action->dynamicAction->todo['assigned'] = '指派待辦';
$lang->action->dynamicAction->todo['undeleted'] = '還原待辦';
$lang->action->dynamicAction->todo['hidden'] = '隱藏待辦';
$lang->action->dynamicAction->product['opened'] = '創建' . $lang->productCommon;
$lang->action->dynamicAction->product['edited'] = '編輯' . $lang->productCommon;
$lang->action->dynamicAction->product['deleted'] = '刪除' . $lang->productCommon;
$lang->action->dynamicAction->product['closed'] = '關閉' . $lang->productCommon;
$lang->action->dynamicAction->product['undeleted'] = '還原' . $lang->productCommon;
$lang->action->dynamicAction->product['hidden'] = '隱藏' . $lang->productCommon;
$lang->action->dynamicAction->productplan['opened'] = '創建計劃';
$lang->action->dynamicAction->productplan['edited'] = '編輯計劃';
$lang->action->dynamicAction->release['opened'] = '創建發佈';
$lang->action->dynamicAction->release['edited'] = '編輯發佈';
$lang->action->dynamicAction->release['changestatus'] = '修改發佈狀態';
$lang->action->dynamicAction->release['undeleted'] = '還原發佈';
$lang->action->dynamicAction->release['hidden'] = '隱藏發佈';
$lang->action->dynamicAction->story['opened'] = '創建需求';
$lang->action->dynamicAction->story['edited'] = '編輯需求';
$lang->action->dynamicAction->story['activated'] = '激活需求';
$lang->action->dynamicAction->story['reviewed'] = '評審需求';
$lang->action->dynamicAction->story['closed'] = '關閉需求';
$lang->action->dynamicAction->story['assigned'] = '指派需求';
$lang->action->dynamicAction->story['changed'] = '變更需求';
$lang->action->dynamicAction->story['linked2plan'] = '需求關聯計劃';
$lang->action->dynamicAction->story['unlinkedfromplan'] = '計劃移除需求';
$lang->action->dynamicAction->story['linked2release'] = '需求關聯發佈';
$lang->action->dynamicAction->story['unlinkedfromrelease'] = '發佈移除需求';
$lang->action->dynamicAction->story['linked2build'] = '需求關聯版本';
$lang->action->dynamicAction->story['unlinkedfrombuild'] = '版本移除需求';
$lang->action->dynamicAction->story['unlinkedfromproject'] = '移除項目';
$lang->action->dynamicAction->story['undeleted'] = '還原需求';
$lang->action->dynamicAction->story['hidden'] = '隱藏需求';
$lang->action->dynamicAction->project['opened'] = '創建' . $lang->projectCommon;
$lang->action->dynamicAction->project['edited'] = '編輯' . $lang->projectCommon;
$lang->action->dynamicAction->project['deleted'] = '刪除' . $lang->projectCommon;
$lang->action->dynamicAction->project['started'] = '開始' . $lang->projectCommon;
$lang->action->dynamicAction->project['delayed'] = '延期' . $lang->projectCommon;
$lang->action->dynamicAction->project['suspended'] = '掛起' . $lang->projectCommon;
$lang->action->dynamicAction->project['activated'] = '激活' . $lang->projectCommon;
$lang->action->dynamicAction->project['closed'] = '關閉' . $lang->projectCommon;
$lang->action->dynamicAction->project['managed'] = '維護' . $lang->projectCommon;
$lang->action->dynamicAction->project['undeleted'] = '還原' . $lang->projectCommon;
$lang->action->dynamicAction->project['hidden'] = '隱藏' . $lang->projectCommon;
$lang->action->dynamicAction->project['moved'] = '導入任務';
$lang->action->dynamicAction->task['opened'] = '創建任務';
$lang->action->dynamicAction->task['edited'] = '編輯任務';
$lang->action->dynamicAction->task['commented'] = '備註任務';
$lang->action->dynamicAction->task['assigned'] = '指派任務';
$lang->action->dynamicAction->task['confirmed'] = '確認需求變更';
$lang->action->dynamicAction->task['started'] = '開始任務';
$lang->action->dynamicAction->task['finished'] = '完成任務';
$lang->action->dynamicAction->task['recordestimate'] = '記錄工時';
$lang->action->dynamicAction->task['editestimate'] = '編輯工時';
$lang->action->dynamicAction->task['deleteestimate'] = '刪除工時';
$lang->action->dynamicAction->task['paused'] = '暫停任務';
$lang->action->dynamicAction->task['closed'] = '關閉任務';
$lang->action->dynamicAction->task['canceled'] = '取消任務';
$lang->action->dynamicAction->task['activated'] = '激活任務';
$lang->action->dynamicAction->task['createchildren'] = '創建子任務';
$lang->action->dynamicAction->task['unlinkparenttask'] = '從父任務取消關聯';
$lang->action->dynamicAction->task['linkparenttask'] = '關聯到父任務';
$lang->action->dynamicAction->task['linkchildtask'] = '關聯子任務';
$lang->action->dynamicAction->task['undeleted'] = '還原任務';
$lang->action->dynamicAction->task['hidden'] = '隱藏任務';
$lang->action->dynamicAction->task['svncommited'] = 'SVN提交';
$lang->action->dynamicAction->task['gitcommited'] = 'GIT提交';
$lang->action->dynamicAction->build['opened'] = '創建版本';
$lang->action->dynamicAction->build['edited'] = '編輯版本';
$lang->action->dynamicAction->bug['opened'] = '創建Bug';
$lang->action->dynamicAction->bug['edited'] = '編輯Bug';
$lang->action->dynamicAction->bug['activated'] = '激活Bug';
$lang->action->dynamicAction->bug['assigned'] = '指派Bug';
$lang->action->dynamicAction->bug['closed'] = '關閉Bug';
$lang->action->dynamicAction->bug['bugconfirmed'] = '確認Bug';
$lang->action->dynamicAction->bug['resolved'] = '解決Bug';
$lang->action->dynamicAction->bug['undeleted'] = '還原Bug';
$lang->action->dynamicAction->bug['hidden'] = '隱藏Bug';
$lang->action->dynamicAction->bug['confirmed'] = '確認需求變更';
$lang->action->dynamicAction->bug['tostory'] = '轉需求';
$lang->action->dynamicAction->bug['totask'] = '轉任務';
$lang->action->dynamicAction->bug['linked2plan'] = 'Bug關聯計劃';
$lang->action->dynamicAction->bug['unlinkedfromplan'] = '計劃移除Bug';
$lang->action->dynamicAction->bug['linked2release'] = 'Bug關聯發佈';
$lang->action->dynamicAction->bug['unlinkedfromrelease'] = '發佈移除Bug';
$lang->action->dynamicAction->bug['linked2bug'] = 'Bug關聯版本';
$lang->action->dynamicAction->bug['unlinkedfrombuild'] = '版本移除Bug';
$lang->action->dynamicAction->testtask['opened'] = '創建測試單';
$lang->action->dynamicAction->testtask['edited'] = '編輯測試單';
$lang->action->dynamicAction->testtask['started'] = '啟動測試單';
$lang->action->dynamicAction->testtask['activated'] = '激活測試單';
$lang->action->dynamicAction->testtask['closed'] = '完成測試單';
$lang->action->dynamicAction->testtask['blocked'] = '阻塞測試單';
$lang->action->dynamicAction->case['opened'] = '創建用例';
$lang->action->dynamicAction->case['edited'] = '編輯用例';
$lang->action->dynamicAction->case['deleted'] = '刪除用例';
$lang->action->dynamicAction->case['undeleted'] = '還原用例';
$lang->action->dynamicAction->case['hidden'] = '隱藏用例';
$lang->action->dynamicAction->case['reviewed'] = '評審用例';
$lang->action->dynamicAction->case['confirmed'] = '確認需求變更';
$lang->action->dynamicAction->case['fromlib'] = '從用例庫導入';
$lang->action->dynamicAction->testreport['opened'] = '創建測試報告';
$lang->action->dynamicAction->testreport['edited'] = '編輯測試報告';
$lang->action->dynamicAction->testreport['deleted'] = '刪除測試報告';
$lang->action->dynamicAction->testreport['undeleted'] = '還原測試報告';
$lang->action->dynamicAction->testreport['hidden'] = '隱藏測試報告';
$lang->action->dynamicAction->testsuite['opened'] = '創建測試套件';
$lang->action->dynamicAction->testsuite['edited'] = '編輯測試套件';
$lang->action->dynamicAction->testsuite['deleted'] = '刪除測試套件';
$lang->action->dynamicAction->testsuite['undeleted'] = '還原測試套件';
$lang->action->dynamicAction->testsuite['hidden'] = '隱藏測試套件';
$lang->action->dynamicAction->caselib['opened'] = '創建用例庫';
$lang->action->dynamicAction->caselib['edited'] = '編輯用例庫';
$lang->action->dynamicAction->caselib['deleted'] = '刪除用例庫';
$lang->action->dynamicAction->caselib['undeleted'] = '還原用例庫';
$lang->action->dynamicAction->caselib['hidden'] = '隱藏用例庫';
$lang->action->dynamicAction->doclib['created'] = '創建文檔庫';
$lang->action->dynamicAction->doclib['edited'] = '編輯文檔庫';
$lang->action->dynamicAction->doc['created'] = '創建文檔';
$lang->action->dynamicAction->doc['edited'] = '編輯文檔';
$lang->action->dynamicAction->doc['commented'] = '備註文檔';
$lang->action->dynamicAction->doc['deleted'] = '刪除文檔';
$lang->action->dynamicAction->doc['undeleted'] = '還原文檔';
$lang->action->dynamicAction->doc['hidden'] = '隱藏文檔';
$lang->action->dynamicAction->user['created'] = '創建用戶';
$lang->action->dynamicAction->user['edited'] = '編輯用戶';
$lang->action->dynamicAction->user['login'] = '用戶登錄';
$lang->action->dynamicAction->user['logout'] = '用戶退出';
$lang->action->dynamicAction->user['undeleted'] = '還原用戶';
$lang->action->dynamicAction->user['hidden'] = '隱藏用戶';
$lang->action->dynamicAction->user['loginxuanxuan'] = '登錄客戶端';
$lang->action->dynamicAction->entry['created'] = '添加應用';
$lang->action->dynamicAction->entry['edited'] = '編輯應用';
/* 用來生成相應對象的連結。*/
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
+63 -19
View File
@@ -36,7 +36,7 @@ class actionModel extends model
$actor = $actor ? $actor : $this->app->user->account;
$actionType = strtolower($actionType);
if($actor == 'guest' and $actionType == 'logout') return false;
$action = new stdclass();
$objectType = str_replace('`', '', $objectType);
@@ -161,7 +161,7 @@ class actionModel extends model
$record = $this->dao->select($fields)->from($this->config->objectTables[$objectType])->where('id')->eq($objectID)->fetch();
/* Process story, release and task. */
if($objectType == 'story') $record->project = $this->dao->select('project')->from(TABLE_PROJECTSTORY)->where('story')->eq($objectID)->fetch('project');
if($objectType == 'story') $record->project = $this->dao->select('project')->from(TABLE_PROJECTSTORY)->where('story')->eq($objectID)->orderBy('project_desc')->limit(1)->fetch('project');
if($objectType == 'release') $record->project = $this->dao->select('project')->from(TABLE_BUILD)->where('id')->eq($record->build)->fetch('project');
if($objectType == 'task')
{
@@ -291,7 +291,17 @@ class actionModel extends model
$title = $this->dao->select('title')->from(TABLE_STORY)->where('id')->eq($action->extra)->fetch('title');
if($title) $action->extra = common::hasPriv('story', 'view') ? html::a(helper::createLink('story', 'view', "storyID=$action->extra"), "#$action->extra " . $title) : "#$action->extra " . $title;
}
elseif($actionName == 'totask')
elseif($actionName == 'createchildren')
{
$names = $this->dao->select('id,name')->from(TABLE_TASK)->where('id')->in($action->extra)->fetchPairs('id', 'name');
$action->extra = '';
if($names)
{
foreach($names as $id => $name) $action->extra .= common::hasPriv('task', 'view') ? html::a(helper::createLink('task', 'view', "taskID=$id"), "#$id " . $name) . ', ' : "#$id " . $name . ', ';
}
$action->extra = trim(trim($action->extra), ',');
}
elseif($actionName == 'totask' or $actionName == 'linkchildtask' or $actionName == 'unlinkchildrentask' or $actionName == 'linkparenttask' or $actionName == 'unlinkparenttask')
{
$name = $this->dao->select('name')->from(TABLE_TASK)->where('id')->eq($action->extra)->fetch('name');
if($name) $action->extra = common::hasPriv('task', 'view') ? html::a(helper::createLink('task', 'view', "taskID=$action->extra"), "#$action->extra " . $name) : "#$action->extra " . $name;
@@ -346,7 +356,11 @@ class actionModel extends model
{
$linkedProducts = $this->dao->select('id,name')->from(TABLE_PRODUCT)->where('id')->in($action->extra)->fetchPairs('id', 'name');
$action->extra = '';
if($linkedProducts) $action->extra = sprintf($this->lang->project->action->extra, '<strong>' . join(', ', $linkedProducts) . '</strong>');
if($linkedProducts)
{
foreach($linkedProducts as $productID => $productName) $linkedProducts[$productID] = html::a(helper::createLink('product', 'browse', "productID=$productID"), "#{$productID} {$productName}");
$action->extra = sprintf($this->lang->project->action->extra, '<strong>' . join(', ', $linkedProducts) . '</strong>');
}
}
$action->history = isset($histories[$actionID]) ? $histories[$actionID] : array();
@@ -365,7 +379,7 @@ class actionModel extends model
if($history->field == 'git') $history->diff = str_replace('+', '%2B', $history->diff);
}
}
$action->comment = $this->file->setImgSize($action->comment, $this->config->action->commonImgSize);
$actions[$actionID] = $action;
}
@@ -488,7 +502,7 @@ class actionModel extends model
* @access public
* @return void
*/
public function printAction($action)
public function printAction($action, $desc = '')
{
if(!isset($action->objectType) or !isset($action->action)) return false;
@@ -502,17 +516,20 @@ class actionModel extends model
* 2. If no defined in the module language, search the common action define.
* 3. If not found in the lang->action->desc, use the $lang->action->desc->common or $lang->action->desc->extra as the default.
*/
if(isset($this->lang->$objectType) && isset($this->lang->$objectType->action->$actionType))
if(empty($desc))
{
$desc = $this->lang->$objectType->action->$actionType;
}
elseif(isset($this->lang->action->desc->$actionType))
{
$desc = $this->lang->action->desc->$actionType;
}
else
{
$desc = $action->extra ? $this->lang->action->desc->extra : $this->lang->action->desc->common;
if(isset($this->lang->$objectType) && isset($this->lang->$objectType->action->$actionType))
{
$desc = $this->lang->$objectType->action->$actionType;
}
elseif(isset($this->lang->action->desc->$actionType))
{
$desc = $this->lang->action->desc->$actionType;
}
else
{
$desc = $action->extra ? $this->lang->action->desc->extra : $this->lang->action->desc->common;
}
}
if($this->app->getViewType() == 'mhtml') $action->date = date('m-d H:i', strtotime($action->date));
@@ -598,7 +615,9 @@ class actionModel extends model
$this->loadModel('doc');
$libs = $this->doc->getLibs('all');
$docs = $this->doc->getPrivDocs(array_keys($libs));
$actionCondition = $this->getActionCondition();
if(is_array($actionCondition)) return array();
/* Get actions. */
$actions = $this->dao->select('*')->from(TABLE_ACTION)
->where(1)
@@ -616,6 +635,7 @@ class actionModel extends model
->beginIF($this->config->global->flow == 'onlyStory')->andWhere('objectType')->notin('bug,build,project,task,taskcase,testreport,testsuite,testtask')->fi()
->beginIF($this->config->global->flow == 'onlyTask')->andWhere('objectType')->notin('product,productplan,release,story,testcase,testreport,testsuite')->fi()
->beginIF($this->config->global->flow == 'onlyTest')->andWhere('objectType')->notin('project,productplan,release,story,task')->fi()
->beginIF(!empty($actionCondition))->andWhere("($actionCondition)")->fi()
->orderBy($orderBy)
->page($pager)
->fetchAll();
@@ -623,7 +643,28 @@ class actionModel extends model
if(!$actions) return array();
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'action');
return $this->transformActions($actions);
return $this->transformActions($actions);;
}
/**
* Get dynamic show action
*
* @return String
*/
public function getActionCondition()
{
$actionCondition = '';
if(isset($this->app->user->rights['acls']['actions']))
{
if(empty($this->app->user->rights['acls']['actions'])) return array();
foreach($this->app->user->rights['acls']['actions'] as $moduleName => $actions)
{
$actionCondition .= "(`objectType` = '$moduleName' and `action` " . helper::dbIN($actions) . ") or ";
}
$actionCondition = trim($actionCondition, 'or ');
}
return $actionCondition;
}
/**
@@ -700,8 +741,11 @@ class actionModel extends model
*/
public function getBySQL($sql, $orderBy, $pager = null)
{
$actionCondition = $this->getActionCondition();
if(is_array($actionCondition)) return array();
return $actions = $this->dao->select('*')->from(TABLE_ACTION)
->where($sql)
->beginIF(!empty($actionCondition))->andWhere("($actionCondition)")->fi()
->beginIF($this->config->global->flow == 'onlyStory')->andWhere('objectType')->notin('bug,build,project,task,taskcase,testreport,testsuite,testtask')->fi()
->beginIF($this->config->global->flow == 'onlyTask')->andWhere('objectType')->notin('product,productplan,release,story,testcase,testreport,testsuite')->fi()
->beginIF($this->config->global->flow == 'onlyTest')->andWhere('objectType')->notin('project,productplan,release,story,task')->fi()
@@ -1008,7 +1052,7 @@ class actionModel extends model
foreach($actions as $action)
{
$timeStamp = strtotime(isset($action->originalDate) ? $action->originalDate : $action->date);
$date = date(DT_DATE4, $timeStamp);
$date = $this->app->getClientLang() == 'en' ? date('M d', $timeStamp) : date(DT_DATE4, $timeStamp);
$action->time = date(DT_TIME2, $timeStamp);
$dateGroup[$date][] = $action;
}
+9 -9
View File
@@ -33,19 +33,19 @@ $lang->admin->info->account = 'Your ZenTao account is %s.';
$lang->admin->info->log = 'Log that exceeds valid days will be deleted and you have to run cron.';
$lang->admin->notice = new stdclass();
$lang->admin->notice->register = "Note: You haven't registered in ZenTao(www.zentao.pm). %s then get the Latest ZenTao Upgrades and News.";
$lang->admin->notice->register = "Note: You haven't registered in ZenTao official website(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 = 'Bind Account';
$lang->admin->register->caption = 'Register in Zentao Community';
$lang->admin->register->caption = 'Register in ZenTao Community';
$lang->admin->register->click = 'Register here';
$lang->admin->register->lblAccount = '>= 3 characters; contains letters and numbers.';
$lang->admin->register->lblPasswd = '>= 6 characters; contains letters and numbers.';
$lang->admin->register->lblAccount = '>= 3 letters and numbers';
$lang->admin->register->lblPasswd = '>= 6 letters and numbers';
$lang->admin->register->submit = 'Register';
$lang->admin->register->bind = "Binding Exsit Account";
$lang->admin->register->success = "You have registered with us!";
$lang->admin->register->bind = "Bind Exsiting Account";
$lang->admin->register->success = "You have registered!";
$lang->admin->bind = new stdclass();
$lang->admin->bind->caption = 'Link Account';
@@ -65,8 +65,8 @@ $lang->admin->safe->modeList[0] = 'N/A';
$lang->admin->safe->modeList[1] = 'Medium';
$lang->admin->safe->modeList[2] = 'Strong';
$lang->admin->safe->modeRuleList[1] = ' upper and lower case, numbers. Length >= 6';
$lang->admin->safe->modeRuleList[2] = ' upper and lower case, numbers and special characters. Length >= 10.';
$lang->admin->safe->modeRuleList[1] = ' >= 6 upper and lower case, and numbers';
$lang->admin->safe->modeRuleList[2] = ' >= 10 upper and lower case, numbers and special characters.';
$lang->admin->safe->reasonList['weak'] = 'Common Weak Password';
$lang->admin->safe->reasonList['account'] = 'Same as your account';
@@ -77,5 +77,5 @@ $lang->admin->safe->reasonList['birthday'] = 'Same as your DOB';
$lang->admin->safe->modifyPasswordList[1] = 'Yes';
$lang->admin->safe->modifyPasswordList[0] = 'No';
$lang->admin->safe->noticeMode = 'Password will be checked when Login, Add and Edit user.';
$lang->admin->safe->noticeMode = 'Password will be checked when a user logs in, or a user is added and edited.';
$lang->admin->safe->noticeStrong = '';
+3 -3
View File
@@ -26,8 +26,8 @@
<th><?php echo $lang->user->account;?></th>
<th class='w-150px'><?php echo $lang->user->phone;?></th>
<th class='w-150px'><?php echo $lang->user->mobile;?></th>
<th class='w-150px'><?php echo $lang->admin->safe->reason;?></th>
<th class='c-actions-1'><?php echo $lang->actions;?></th>
<th class='w-200px'><?php echo $lang->admin->safe->reason;?></th>
<th class='c-actions-2'><?php echo $lang->actions;?></th>
</thead>
<tbody>
<?php foreach($weakUsers as $user):?>
@@ -38,7 +38,7 @@
<td><?php echo $user->phone?></td>
<td><?php echo $user->mobile?></td>
<td><?php echo $lang->admin->safe->reasonList[$user->weakReason];?></td>
<td class='c-actions'><?php common::printIcon('user', 'edit', "userID=$user->id", '', 'list');?></td>
<td class='c-actions text-center'><?php common::printIcon('user', 'edit', "userID=$user->id", '', 'list');?></td>
</tr>
<?php endforeach;?>
</tbody>
+5 -5
View File
@@ -10,10 +10,13 @@
* @link http://www.zentao.net
*/
?>
<?php include $this->app->getModuleRoot() . 'message/view/header.html.php';?>
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/form.html.php';?>
<div id='mainContent' class='main-content'>
<div class='center-block mw-600px'>
<div class='main-header'>
<h2><?php echo $lang->webhook->setting;?></h2>
</div>
<div class='center-block mw-700px'>
<form id='logForm' method='post' class='ajaxForm'>
<table class='table table-form'>
<tr>
@@ -31,7 +34,4 @@
</form>
</div>
</div>
<script>
$(function(){$('#mainMenu #webhookTab').addClass('btn-active-text');})
</script>
<?php include '../../common/view/footer.html.php';?>
+3 -2
View File
@@ -22,8 +22,9 @@
<form class="load-indicator main-form form-ajax" method='post'>
<table class='table table-form'>
<tr>
<th class='w-130px'><?php echo $lang->admin->safe->password?></th>
<td class='w-200px'><?php echo html::radio('mode', $lang->admin->safe->modeList, isset($config->safe->mode) ? $config->safe->mode : 0, "onclick=showModeRule(this.value)")?></td>
<?php $colWidth = $app->getClientLang() == 'en' ? 'w-300px' : 'w-130px';?>
<th class='<?php echo $colWidth;?>'><?php echo $lang->admin->safe->password?></th>
<td class='w-230px'><?php echo html::radio('mode', $lang->admin->safe->modeList, isset($config->safe->mode) ? $config->safe->mode : 0, "onclick=showModeRule(this.value)")?></td>
<td><?php echo $lang->admin->safe->noticeMode?></td>
</tr>
<tr id='mode1Rule' class='hidden'>
+4
View File
@@ -332,6 +332,10 @@ class backup extends control
if(strtolower($this->server->request_method) == "post")
{
$data = fixer::input('post')->join('setting', ',')->get();
/*save change*/
if(isset($data->holdDays)) $this->loadModel('setting')->setItem('system.backup.holdDays', $data->holdDays);
$setting = '';
if(isset($data->setting)) $setting = $data->setting;
$this->loadModel('setting')->setItem('system.backup.setting', $setting);
+19 -19
View File
@@ -3,40 +3,40 @@ $lang->backup->common = 'Backup';
$lang->backup->index = 'Home';
$lang->backup->history = 'History';
$lang->backup->delete = 'Delete';
$lang->backup->backup = 'Backup';
$lang->backup->backup = 'Back Up';
$lang->backup->restore = 'Restore';
$lang->backup->change = 'Modify expiration';
$lang->backup->changeAB = 'Modify';
$lang->backup->change = 'Edit Expiration';
$lang->backup->changeAB = 'Edit';
$lang->backup->rmPHPHeader = 'Remove PHP header';
$lang->backup->time = 'Date';
$lang->backup->files = 'Files';
$lang->backup->size = 'Size';
$lang->backup->setting = 'Setting';
$lang->backup->setting = 'Settings';
$lang->backup->settingDir = 'Backup Directory';
$lang->backup->settingList['nofile'] = 'Not backup file and code.';
$lang->backup->settingList['nozip'] = 'Only copy file, Uncompressed';
$lang->backup->settingList['nosafe'] = 'No need to prevent downloading PHP file header.';
$lang->backup->settingList['nofile'] = 'Do not back up files or codes.';
$lang->backup->settingList['nozip'] = 'Only copy files and do not no zip it.';
$lang->backup->settingList['nosafe'] = 'Do not prevent downloading PHP file header.';
$lang->backup->waitting = '<span id="backupType"></span> In Progress. Please wait...';
$lang->backup->progressSQL = '<p>SQL backup, %s has been backed up.</p>';
$lang->backup->progressAttach = '<p>SQL backup completed.</p><p>Attachment backup, %s has been backed up.</p>';
$lang->backup->progressCode = '<p>SQL backup completed.</p><p>Attachment backup completed.</p><p>Code backup, %s has been backed up.</p>';
$lang->backup->waitting = '<span id="backupType"></span> is ongoing. Please wait...';
$lang->backup->progressSQL = '<p>SQL backup: %s is backed up.</p>';
$lang->backup->progressAttach = '<p>SQL backup is completed.</p><p>Attachment backup: %s is backed up.</p>';
$lang->backup->progressCode = '<p>SQL backup is completed.</p><p>Attachment backup is completed.</p><p>Code backup: %s is backed up.</p>';
$lang->backup->confirmDelete = 'Do you want to delete the backup?';
$lang->backup->confirmRestore = 'Do you want to restore the backup?';
$lang->backup->holdDays = 'Reserve last %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->holdDays = 'Hold last %s days of backup';
$lang->backup->restoreTip = 'Only files and databases can be restored by clicking Restore. Code can be restored manually.';
$lang->backup->success = new stdclass();
$lang->backup->success->backup = 'Done!';
$lang->backup->success->restore = 'Restored!';
$lang->backup->error = new stdclass();
$lang->backup->error->noCreateDir = 'Directory is not exists, and can not create it';
$lang->backup->error->noWritable = "<code>%s</code> is not writable! Please check the privilege, or backup cannot be done.";
$lang->backup->error->noCreateDir = 'Directory does not exist and cannot be created';
$lang->backup->error->noWritable = "<code>%s</code> is not writable! Please check the privilege, or backup will not 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.";
$lang->backup->error->restoreSQL = "Failed to restore the database library. Error %s.";
$lang->backup->error->restoreFile = "Failed to restore the file. Error %s.";
$lang->backup->error->backupFile = "Failed to back up the file. Error %s.";
$lang->backup->error->backupCode = "Failed to back up the code. Error %s.";
+2 -2
View File
@@ -3,9 +3,9 @@ $lang->backup->common = '备份';
$lang->backup->index = '备份首页';
$lang->backup->history = '备份历史';
$lang->backup->delete = '删除备份';
$lang->backup->backup = '备份';
$lang->backup->backup = '开始备份';
$lang->backup->restore = '还原';
$lang->backup->change = '修改保留时间';
$lang->backup->change = '保留时间';
$lang->backup->changeAB = '修改';
$lang->backup->rmPHPHeader = '去除安全设置';
+2 -2
View File
@@ -3,9 +3,9 @@ $lang->backup->common = '備份';
$lang->backup->index = '備份首頁';
$lang->backup->history = '備份歷史';
$lang->backup->delete = '刪除備份';
$lang->backup->backup = '備份';
$lang->backup->backup = '開始備份';
$lang->backup->restore = '還原';
$lang->backup->change = '修改保留時間';
$lang->backup->change = '保留時間';
$lang->backup->changeAB = '修改';
$lang->backup->rmPHPHeader = '去除安全設置';
-33
View File
@@ -1,33 +0,0 @@
<?php
/**
* The change view file of backup 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 backup
* @version $Id$
* @link http://www.zentao.net
*/
?>
<?php include '../../common/view/header.lite.html.php';?>
<div id='mainContent' class='main-content'>
<div class='main-header'>
<h2><?php echo $lang->backup->change;?></h2>
</div>
<form method='post' target='hiddenwin' style='padding:10px 5%'>
<table class='w-p100'>
<tr>
<td>
<div class='input-group'>
<?php echo html::input('holdDays', $config->backup->holdDays, "class='form-control'");?>
<strong class='input-group-addon'><?php echo $lang->day;?></strong>
</div>
</td>
<td><?php echo html::submitButton('', '', 'btn btn-primary');?></td>
</tr>
</table>
</form>
</div>
<?php include '../../common/view/footer.lite.html.php';?>
+11 -10
View File
@@ -16,24 +16,18 @@
<div class="content"><i class='icon-exclamation-sign'></i> <?php echo $error;?></div>
</div>
<?php endif;?>
<div id='mainMenu' class='clearfix'>
<div class='btn-toolbar pull-left'><?php common::printAdminSubMenu('data');?></div>
<div class='btn-toolbar pull-right'>
<?php common::printIcon('backup', 'setting', '', '', 'button', '', '', 'iframe', '', "data-width=400px");?>
<?php common::printIcon('backup', 'backup', 'reload=yes', '', 'button', 'cloud', 'hiddenwin', 'backup');?>
</div>
</div>
<div id='mainContent' class='main-content'>
<div class='main-header'>
<h2>
<?php echo $lang->backup->history?>
<span class='label label-info'><?php echo $lang->backup->restoreTip;?></span>
</h2>
<div class='pull-right'>
<?php printf($lang->backup->holdDays, $config->backup->holdDays)?>
<?php if(common::hasPriv('backup', 'change')) echo html::a(inlink('change'), $lang->backup->changeAB, '', "class='iframe btn btn-sm btn-info' data-width='300'");?>
<?php common::printLink('backup', 'setting', '', "<i class='icon icon-cog'></i>" . $lang->backup->setting, '', "data-width='400' class='iframe btn btn-primary'");?>
<?php common::printLink('backup', 'backup', 'reload=yes', "<i class='icon icon-copy'></i> " . $lang->backup->backup, 'hiddenwin', "class='btn btn-primary backup'");?>
</div>
</div>
<table class='table table-condensed table-bordered active-disabled table-fixed'>
@@ -42,7 +36,8 @@
<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-110px'><?php echo $lang->actions?></th>
<?php $colWidth = $app->getClientLang() == 'en' ? 'w-140px' : 'w-110px';?>
<th class='<?php echo $colWidth;?>'><?php echo $lang->actions?></th>
</tr>
</thead>
<tbody class='text-center'>
@@ -77,6 +72,12 @@
<?php endforeach;?>
</tbody>
</table>
<h2>
<span class='label label-info'>
<?php echo $lang->backup->restoreTip;?>
<?php printf($lang->backup->holdDays, $config->backup->holdDays)?>
</span>
</h2>
</div>
<div class="modal fade" id="waitting" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog w-300px">
@@ -88,7 +89,7 @@
</div>
</div>
</div>
<?php js::set('backup', $lang->backup->backup);?>
<?php js::set('backup', $lang->backup->common);?>
<?php js::set('rmPHPHeader', $lang->backup->rmPHPHeader);?>
<?php js::set('confirmRestore', $lang->backup->confirmRestore);?>
<?php js::set('restore', $lang->backup->restore);?>
+11
View File
@@ -32,6 +32,17 @@
</div>
</td>
</tr>
<?php if(common::hasPriv('backup', 'change')):?>
<tr>
<td>
<div class='input-group'>
<span class='input-group-addon'><?php echo $lang->backup->change;?></span>
<?php echo html::input('holdDays', $config->backup->holdDays, "class='form-control'");?>
<span class='input-group-addon'><?php echo $lang->day;?></span>
</div>
</td>
</tr>
<?php endif;?>
<tr><td><?php echo html::submitButton('', '', 'btn btn-primary');?></td></tr>
</table>
</form>
+10 -4
View File
@@ -1,5 +1,11 @@
$(function()
{
var blockTitle = '';
$(document).on('change', '#blockParams #paramstype', function()
{
$('#blockParams').find('#title').val(blockTitle + ' - ' + $(this).find('option:selected').html());
});
var $form = $('#blockAdminForm');
$form.find('.chosen').chosen();
@@ -16,6 +22,9 @@ $(function()
$form.addClass('form-inited');
$blockParams.find('input:first').focus();
if($blockParams.find('#actionLink').size() > 0) $form.attr('action', $blockParams.find('#actionLink').val());
blockTitle = $blockParams.find('#title').val();
if($('#blockParams #paramstype').length > 0) $blockParams.find('#title').val(blockTitle + ' - ' + $('#blockParams #paramstype').find('option:selected').html());
};
// 获取 html 和 rss 区块参数
@@ -29,10 +38,7 @@ $(function()
$.get(createLink('block', 'set', 'id=' + blockID + '&type=' + type), function(data)
{
updateParams(data);
if (type === 'welcome')
{
$blockParams.find('#title').closest('.form-group').hide();
}
if(type === 'welcome') $blockParams.find('#title').closest('.form-group').hide();
});
};
+1 -3
View File
@@ -18,7 +18,7 @@ function deleteBlock(index)
}
else
{
$('#block' + index).remove();
window.location.reload(true);
}
});
}
@@ -247,5 +247,3 @@ $(function()
refreshBlock($(this).closest('.panel'));
});
});
+103 -103
View File
@@ -15,13 +15,13 @@ $lang->block->name = 'Name';
$lang->block->style = 'Style';
$lang->block->grid = 'Grid';
$lang->block->color = 'Color';
$lang->block->reset = 'Restore the default';
$lang->block->reset = 'Reset';
$lang->block->account = 'Account';
$lang->block->module = 'Module';
$lang->block->title = 'Title';
$lang->block->source = 'Source module';
$lang->block->block = 'Source block';
$lang->block->source = 'Source Module';
$lang->block->block = 'Source Block';
$lang->block->order = 'Order';
$lang->block->height = 'Height';
$lang->block->role = 'Role';
@@ -30,32 +30,32 @@ $lang->block->lblModule = 'Module';
$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->dynamic = 'Dynamics';
$lang->block->assignToMe = 'AssignedToMe';
$lang->block->lblFlowchart = 'Flowchart';
$lang->block->welcome = 'Welcome';
$lang->block->lblTesttask = 'Show Test Details';
$lang->block->lblTesttask = 'Test Request Detail';
$lang->block->leftToday = 'Works for 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->leftToday = 'Remained Work';
$lang->block->myTask = 'My Tasks';
$lang->block->myStory = 'Stories';
$lang->block->myBug = 'Bugs';
$lang->block->myProject = '' . $lang->projectCommon . 's';
$lang->block->myProduct = '' . $lang->productCommon . 's';
$lang->block->delayed = 'Delayed';
$lang->block->noData = 'There is no data in this type of reports.';
$lang->block->emptyTip = 'No Information';
$lang->block->noData = 'No data on this type of reports.';
$lang->block->emptyTip = 'No data.';
$lang->block->params = new stdclass();
$lang->block->params->name = 'Name';
$lang->block->params->value = 'Value';
$lang->block->createBlock = 'Add Block';
$lang->block->editBlock = 'Edit';
$lang->block->ordersSaved = 'Order is saved.';
$lang->block->editBlock = 'Edit Block';
$lang->block->ordersSaved = 'The order is saved.';
$lang->block->confirmRemoveBlock = 'Do you want to remove the Block?';
$lang->block->noticeNewBlock = 'ZenTao 10.+ has a new layout. Do you want to start the new layout?';
$lang->block->confirmReset = 'Restore';
$lang->block->noticeNewBlock = 'A new layout is available. Do you want to switch to the new one?';
$lang->block->confirmReset = 'Do you want to reset the layout?';
$lang->block->closeForever = 'Permanent Close';
$lang->block->confirmClose = 'Do you want to permanently close this block? Once done, it is not available to anyone. It can be activiated at Admin->Custom.';
$lang->block->remove = 'Remove';
@@ -74,14 +74,14 @@ $lang->block->default['product']['2']['title'] = $lang->productCommon . ' Overvi
$lang->block->default['product']['2']['block'] = 'overview';
$lang->block->default['product']['2']['grid'] = 4;
$lang->block->default['product']['3']['title'] = 'Open ' . $lang->productCommon . 's';
$lang->block->default['product']['3']['title'] = 'Active ' . $lang->productCommon . 's';
$lang->block->default['product']['3']['block'] = 'list';
$lang->block->default['product']['3']['grid'] = 8;
$lang->block->default['product']['3']['params']['num'] = 15;
$lang->block->default['product']['3']['params']['type'] = 'noclosed';
$lang->block->default['product']['4']['title'] = 'My Story';
$lang->block->default['product']['4']['title'] = 'My Stories';
$lang->block->default['product']['4']['block'] = 'story';
$lang->block->default['product']['4']['grid'] = 4;
@@ -108,7 +108,7 @@ $lang->block->default['project']['3']['params']['num'] = 15;
$lang->block->default['project']['3']['params']['orderBy'] = 'id_desc';
$lang->block->default['project']['3']['params']['type'] = 'undone';
$lang->block->default['project']['4']['title'] = 'My Task';
$lang->block->default['project']['4']['title'] = 'My Tasks';
$lang->block->default['project']['4']['block'] = 'task';
$lang->block->default['project']['4']['grid'] = 4;
@@ -116,7 +116,7 @@ $lang->block->default['project']['4']['params']['num'] = 15;
$lang->block->default['project']['4']['params']['orderBy'] = 'id_desc';
$lang->block->default['project']['4']['params']['type'] = 'assignedTo';
$lang->block->default['qa']['1']['title'] = 'Test Report';
$lang->block->default['qa']['1']['title'] = 'Testing Report';
$lang->block->default['qa']['1']['block'] = 'statistic';
$lang->block->default['qa']['1']['grid'] = 8;
@@ -127,7 +127,7 @@ $lang->block->default['qa']['1']['params']['num'] = '20';
//$lang->block->default['qa']['2']['block'] = 'overview';
//$lang->block->default['qa']['2']['grid'] = 4;
$lang->block->default['qa']['2']['title'] = 'My Bug';
$lang->block->default['qa']['2']['title'] = 'My Bugs';
$lang->block->default['qa']['2']['block'] = 'bug';
$lang->block->default['qa']['2']['grid'] = 4;
@@ -135,7 +135,7 @@ $lang->block->default['qa']['2']['params']['num'] = 15;
$lang->block->default['qa']['2']['params']['orderBy'] = 'id_desc';
$lang->block->default['qa']['2']['params']['type'] = 'assignedTo';
$lang->block->default['qa']['3']['title'] = 'My Case';
$lang->block->default['qa']['3']['title'] = 'My Cases';
$lang->block->default['qa']['3']['block'] = 'case';
$lang->block->default['qa']['3']['grid'] = 4;
@@ -143,7 +143,7 @@ $lang->block->default['qa']['3']['params']['num'] = 15;
$lang->block->default['qa']['3']['params']['orderBy'] = 'id_desc';
$lang->block->default['qa']['3']['params']['type'] = 'assigntome';
$lang->block->default['qa']['4']['title'] = 'Wait Build';
$lang->block->default['qa']['4']['title'] = 'Waiting Builds';
$lang->block->default['qa']['4']['block'] = 'testtask';
$lang->block->default['qa']['4']['grid'] = 4;
@@ -155,7 +155,7 @@ $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']['title'] = 'Dynamics';
$lang->block->default['full']['my']['2']['block'] = 'dynamic';
$lang->block->default['full']['my']['2']['grid'] = 4;
$lang->block->default['full']['my']['2']['source'] = '';
@@ -163,7 +163,7 @@ $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']['4']['title'] = 'My Todo';
$lang->block->default['full']['my']['4']['title'] = 'My Todos';
$lang->block->default['full']['my']['4']['block'] = 'list';
$lang->block->default['full']['my']['4']['grid'] = 4;
$lang->block->default['full']['my']['4']['source'] = 'todo';
@@ -182,11 +182,11 @@ $lang->block->default['full']['my']['9']['source'] = 'qa';
$lang->block->default['onlyTest']['my']['1'] = $lang->block->default['qa']['1'];
$lang->block->default['onlyTest']['my']['1']['source'] = 'qa';
$lang->block->default['onlyTest']['my']['1']['grid'] = '8';
$lang->block->default['onlyTest']['my']['2']['title'] = 'Dynamic';
$lang->block->default['onlyTest']['my']['2']['title'] = 'Dynamics';
$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 Todo';
$lang->block->default['onlyTest']['my']['3']['title'] = 'My Todos';
$lang->block->default['onlyTest']['my']['3']['block'] = 'list';
$lang->block->default['onlyTest']['my']['3']['grid'] = 6;
$lang->block->default['onlyTest']['my']['3']['source'] = 'todo';
@@ -198,11 +198,11 @@ $lang->block->default['onlyTest']['my']['4']['grid'] = 6;
$lang->block->default['onlyStory']['my']['1'] = $lang->block->default['project']['1'];
$lang->block->default['onlyStory']['my']['1']['source'] = 'project';
$lang->block->default['onlyStory']['my']['1']['grid'] = 8;
$lang->block->default['onlyStory']['my']['2']['title'] = 'Dynamic';
$lang->block->default['onlyStory']['my']['2']['title'] = 'Dynamics';
$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 Todo';
$lang->block->default['onlyStory']['my']['3']['title'] = 'My Todos';
$lang->block->default['onlyStory']['my']['3']['block'] = 'list';
$lang->block->default['onlyStory']['my']['3']['grid'] = 6;
$lang->block->default['onlyStory']['my']['3']['source'] = 'todo';
@@ -214,11 +214,11 @@ $lang->block->default['onlyStory']['my']['4']['grid'] = 6;
$lang->block->default['onlyTask']['my']['1'] = $lang->block->default['project']['1'];
$lang->block->default['onlyTask']['my']['1']['source'] = 'project';
$lang->block->default['onlyTask']['my']['1']['grid'] = 8;
$lang->block->default['onlyTask']['my']['2']['title'] = 'Dynamic';
$lang->block->default['onlyTask']['my']['2']['title'] = 'Dynamics';
$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 Todo';
$lang->block->default['onlyTask']['my']['3']['title'] = 'My Todos';
$lang->block->default['onlyTask']['my']['3']['block'] = 'list';
$lang->block->default['onlyTask']['my']['3']['grid'] = 6;
$lang->block->default['onlyTask']['my']['3']['source'] = 'todo';
@@ -233,17 +233,17 @@ $lang->block->orderBy = 'Order by';
$lang->block->availableBlocks = new stdclass();
$lang->block->availableBlocks->todo = 'My Todo';
$lang->block->availableBlocks->task = 'My Task';
$lang->block->availableBlocks->bug = 'My Bug';
$lang->block->availableBlocks->case = 'My Case';
$lang->block->availableBlocks->story = 'My Story';
$lang->block->availableBlocks->product = $lang->productCommon . 'List';
$lang->block->availableBlocks->project = $lang->projectCommon . 'List';
$lang->block->availableBlocks->plan = 'Plan';
$lang->block->availableBlocks->release = 'Release';
$lang->block->availableBlocks->build = 'Build';
$lang->block->availableBlocks->testtask = 'Test';
$lang->block->availableBlocks->todo = 'My Todos';
$lang->block->availableBlocks->task = 'My Tasks';
$lang->block->availableBlocks->bug = 'My Bugs';
$lang->block->availableBlocks->case = 'My Cases';
$lang->block->availableBlocks->story = 'My Stories';
$lang->block->availableBlocks->product = $lang->productCommon . 's';
$lang->block->availableBlocks->project = $lang->projectCommon . 's';
$lang->block->availableBlocks->plan = 'Plans';
$lang->block->availableBlocks->release = 'Releases';
$lang->block->availableBlocks->build = 'Builds';
$lang->block->availableBlocks->testtask = 'Requests';
$lang->block->moduleList['product'] = $lang->productCommon;
$lang->block->moduleList['project'] = $lang->projectCommon;
@@ -267,7 +267,7 @@ $lang->block->modules['project']->availableBlocks->task = 'Task';
$lang->block->modules['project']->availableBlocks->build = 'Build';
$lang->block->modules['qa'] = new stdclass();
$lang->block->modules['qa']->availableBlocks = new stdclass();
$lang->block->modules['qa']->availableBlocks->statistic = 'Test Report';
$lang->block->modules['qa']->availableBlocks->statistic = 'Testing Report';
//$lang->block->modules['qa']->availableBlocks->overview = 'Testcase Overview';
$lang->block->modules['qa']->availableBlocks->bug = 'Bug';
$lang->block->modules['qa']->availableBlocks->case = 'Case';
@@ -279,52 +279,52 @@ $lang->block->modules['todo']->availableBlocks->list = 'Todo';
$lang->block->orderByList = new stdclass();
$lang->block->orderByList->product = array();
$lang->block->orderByList->product['id_asc'] = 'ID Ascending';
$lang->block->orderByList->product['id_desc'] = 'ID Descending';
$lang->block->orderByList->product['status_asc'] = 'Status Ascending';
$lang->block->orderByList->product['status_desc'] = 'Status Descending';
$lang->block->orderByList->product['id_asc'] = 'Product ID ASC';
$lang->block->orderByList->product['id_desc'] = 'Product ID DESC';
$lang->block->orderByList->product['status_asc'] = 'Product Status ASC';
$lang->block->orderByList->product['status_desc'] = 'Product Status DESC';
$lang->block->orderByList->project = array();
$lang->block->orderByList->project['id_asc'] = 'ID Ascending';
$lang->block->orderByList->project['id_desc'] = 'ID Descending';
$lang->block->orderByList->project['status_asc'] = 'Status Ascending';
$lang->block->orderByList->project['status_desc'] = 'Status Descending';
$lang->block->orderByList->project['id_asc'] = 'Project ID ASC';
$lang->block->orderByList->project['id_desc'] = 'Project ID DESC';
$lang->block->orderByList->project['status_asc'] = 'Project Status ASC';
$lang->block->orderByList->project['status_desc'] = 'Project Status DESC';
$lang->block->orderByList->task = array();
$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'] = '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';
$lang->block->orderByList->task['deadline_desc'] = 'Deadline Descending';
$lang->block->orderByList->task['id_asc'] = 'Task ID ASC';
$lang->block->orderByList->task['id_desc'] = 'Task ID DESC';
$lang->block->orderByList->task['pri_asc'] = 'Task Priority ASC';
$lang->block->orderByList->task['pri_desc'] = 'Task Priority DESC';
$lang->block->orderByList->task['estimate_asc'] = 'Task Estimates ASC';
$lang->block->orderByList->task['estimate_desc'] = 'Task Estimates DESC';
$lang->block->orderByList->task['status_asc'] = 'Task Status ASC';
$lang->block->orderByList->task['status_desc'] = 'Task Status DESC';
$lang->block->orderByList->task['deadline_asc'] = 'Task Deadline ASC';
$lang->block->orderByList->task['deadline_desc'] = 'Task Deadline DESC';
$lang->block->orderByList->bug = array();
$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'] = 'Severity Ascending';
$lang->block->orderByList->bug['severity_desc'] = 'Severity Descending';
$lang->block->orderByList->bug['id_asc'] = 'Bug ID ASC';
$lang->block->orderByList->bug['id_desc'] = 'Bug ID DESC';
$lang->block->orderByList->bug['pri_asc'] = 'Bug Priority ASC';
$lang->block->orderByList->bug['pri_desc'] = 'Bug Priority DESC';
$lang->block->orderByList->bug['severity_asc'] = 'Bug Severity ASC';
$lang->block->orderByList->bug['severity_desc'] = 'Bug Severity DESC';
$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'] = 'Priority Ascending';
$lang->block->orderByList->case['pri_desc'] = 'Priority Descending';
$lang->block->orderByList->case['id_asc'] = 'Case ID ASC';
$lang->block->orderByList->case['id_desc'] = 'Case ID DESC';
$lang->block->orderByList->case['pri_asc'] = 'Case Priority ASC';
$lang->block->orderByList->case['pri_desc'] = 'Case Priority DESC';
$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'] = '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'] = 'Phase Ascending';
$lang->block->orderByList->story['stage_desc'] = 'Phase Descending';
$lang->block->orderByList->story['id_asc'] = 'Story ID AES';
$lang->block->orderByList->story['id_desc'] = 'Story ID DESC';
$lang->block->orderByList->story['pri_asc'] = 'Story Priority ASC';
$lang->block->orderByList->story['pri_desc'] = 'Story Priority DESC';
$lang->block->orderByList->story['status_asc'] = 'Story Status ASC';
$lang->block->orderByList->story['status_desc'] = 'Story Status DESC';
$lang->block->orderByList->story['stage_asc'] = 'Story Phase ASC';
$lang->block->orderByList->story['stage_desc'] = 'Story Phase DESC';
$lang->block->todoNum = 'Todo';
$lang->block->taskNum = 'Task';
@@ -332,24 +332,24 @@ $lang->block->bugNum = 'Bug';
$lang->block->typeList = new stdclass();
$lang->block->typeList->task['assignedTo'] = 'Assigned to Me';
$lang->block->typeList->task['openedBy'] = 'Created by Me';
$lang->block->typeList->task['finishedBy'] = 'Finished by Me';
$lang->block->typeList->task['closedBy'] = 'Closed by Me';
$lang->block->typeList->task['canceledBy'] = 'Cancelled by Me';
$lang->block->typeList->task['assignedTo'] = 'AssignedToMe';
$lang->block->typeList->task['openedBy'] = 'CreatedByMe';
$lang->block->typeList->task['finishedBy'] = 'FinishedByMe';
$lang->block->typeList->task['closedBy'] = 'ClosedByMe';
$lang->block->typeList->task['canceledBy'] = 'CancelledByMe';
$lang->block->typeList->bug['assignedTo'] = 'Assigned to Me';
$lang->block->typeList->bug['openedBy'] = 'Created by Me';
$lang->block->typeList->bug['resolvedBy'] = 'Resolved by Me';
$lang->block->typeList->bug['closedBy'] = 'Closed by Me';
$lang->block->typeList->bug['assignedTo'] = 'AssignedToMe';
$lang->block->typeList->bug['openedBy'] = 'CreatedByMe';
$lang->block->typeList->bug['resolvedBy'] = 'ResolvedByMe';
$lang->block->typeList->bug['closedBy'] = 'ClosedByMe';
$lang->block->typeList->case['assigntome'] = 'Assigned to Me';
$lang->block->typeList->case['openedbyme'] = 'Created by Me';
$lang->block->typeList->case['assigntome'] = 'AssignedToMe';
$lang->block->typeList->case['openedbyme'] = 'CreatedByMe';
$lang->block->typeList->story['assignedTo'] = 'Assigned to Me';
$lang->block->typeList->story['openedBy'] = 'Created by Me';
$lang->block->typeList->story['reviewedBy'] = 'Reviewed by Me';
$lang->block->typeList->story['closedBy'] = 'Closed by Me' ;
$lang->block->typeList->story['assignedTo'] = 'AssignedToMe';
$lang->block->typeList->story['openedBy'] = 'CreatedByMe';
$lang->block->typeList->story['reviewedBy'] = 'ReviewedByMe';
$lang->block->typeList->story['closedBy'] = 'ClosedByMe' ;
$lang->block->typeList->product['noclosed'] = 'Open';
$lang->block->typeList->product['closed'] = 'Closed';
@@ -357,12 +357,12 @@ $lang->block->typeList->product['all'] = 'All';
$lang->block->typeList->product['involved'] = 'Involved';
$lang->block->typeList->project['undone'] = 'Unfinished';
$lang->block->typeList->project['doing'] = 'Doing';
$lang->block->typeList->project['doing'] = 'Ongoing';
$lang->block->typeList->project['all'] = 'All';
$lang->block->typeList->project['involved'] = 'Involved';
$lang->block->typeList->testtask['wait'] = 'Wait';
$lang->block->typeList->testtask['doing'] = 'Doing';
$lang->block->typeList->testtask['wait'] = 'Waiting';
$lang->block->typeList->testtask['doing'] = 'Ongoing';
$lang->block->typeList->testtask['blocked'] = 'Blocked';
$lang->block->typeList->testtask['done'] = 'Done';
$lang->block->typeList->testtask['all'] = 'All';
@@ -388,7 +388,7 @@ $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['11:30'] = 'Good day, %s';
$lang->block->welcomeList['13:30'] = 'Good afternoon, %s';
$lang->block->welcomeList['19:00'] = 'Good evening, %s';
@@ -396,8 +396,8 @@ $lang->block->gridOptions[8] = 'Left';
$lang->block->gridOptions[4] = 'Right';
$lang->block->flowchart = array();
$lang->block->flowchart[] = array('Administlrator', 'Add Department', 'Add User', 'Maintain Privileges');
$lang->block->flowchart[] = array('Administrator', 'Add Department', 'Add User', 'Maintain Privileges');
$lang->block->flowchart[] = array($lang->productCommon . ' Owner', 'Add ' . $lang->productCommon, 'Maintain Modules', 'Maintain Plans', 'Maintain Stories', 'Create Releases');
$lang->block->flowchart[] = array('Scrum Master', 'Add ' . $lang->projectCommon, 'Maintain Teams', 'Link ' . $lang->productCommon . 's', 'Link Stories', 'Decompose Tasks');
$lang->block->flowchart[] = array('Scrum Master', 'Add ' . $lang->projectCommon, 'Maintain Teams', 'Link ' . $lang->productCommon . 's', 'Link Stories', 'Create Tasks');
$lang->block->flowchart[] = array('Dev Team', 'Claim Tasks/Bugs', 'Update Status', 'Finish Tasks/Bugs');
$lang->block->flowchart[] = array('QA Team', 'Write Cases', 'Run Cases', 'Report Bugs', 'Verify Bugs', 'Close Bugs');
+1 -1
View File
@@ -55,7 +55,7 @@ $lang->block->editBlock = '编辑区块';
$lang->block->ordersSaved = '排序已保存';
$lang->block->confirmRemoveBlock = '确定移除区块吗?';
$lang->block->noticeNewBlock = '10.0版本以后各个视图主页提供了全新的视图,您要启用新的视图布局吗?';
$lang->block->confirmReset = '是否恢复默认布局';
$lang->block->confirmReset = '是否恢复默认布局?';
$lang->block->closeForever = '永久关闭';
$lang->block->confirmClose = '确定永久关闭该区块吗?关闭后所有人都将无法使用该区块,可以在后台自定义中打开。';
$lang->block->remove = '移除';
+11
View File
@@ -38,6 +38,17 @@ class blockModel extends model
->remove('uid,actionLink,modules,moduleBlock')
->get();
if($this->post->moduleBlock)
{
$data->source = $this->post->modules;
$data->block = $this->post->moduleBlock;
}
else
{
$data->source = '';
$data->block = $this->post->modules;
}
if($block) $data->height = $block->height;
if($type == 'html')
{
+4 -4
View File
@@ -26,10 +26,10 @@
<thead>
<tr>
<th class='c-id'><?php echo $lang->idAB?></th>
<th class='c-level'><?php echo $lang->bug->severityAB?></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>
@@ -53,9 +53,6 @@
?>
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
<td class='c-id-xs'><?php echo sprintf('%03d', $bug->id);?></td>
<?php if($longBlock):?>
<td class='c-pri'><span class='label-pri label-pri-<?php echo $bug->pri?>' title='<?php echo zget($lang->bug->priList, $bug->pri);?>'><?php echo zget($lang->bug->priList, $bug->pri)?></span></td>
<?php endif;?>
<td class='c-severity'>
<?php if($hasCustomSeverity):?>
<span class='<?php echo 'label-severity-custom';?>' title='<?php echo zget($lang->bug->severityList, $bug->severity);?>' data-severity='<?php echo $bug->severity;?>'><?php echo zget($lang->bug->severityList, $bug->severity, $bug->severity);?></span>
@@ -63,6 +60,9 @@
<span class='label-severity' title='<?php echo zget($lang->bug->severityList, $bug->severity);?>' data-severity='<?php echo $bug->severity;?>'></span>
<?php endif;?>
</td>
<?php if($longBlock):?>
<td class='c-pri'><span class='label-pri label-pri-<?php echo $bug->pri?>' title='<?php echo zget($lang->bug->priList, $bug->pri);?>'><?php echo zget($lang->bug->priList, $bug->pri)?></span></td>
<?php endif;?>
<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="status-bug status-<?php echo $bug->status?>"><?php echo zget($lang->bug->statusList, $bug->status);?></span>
-1
View File
@@ -22,7 +22,6 @@ $useGuest = $this->app->user->account == 'guest';
<div class="table-empty-tip">
<p>
<span class="text-muted"><?php echo $lang->block->noData. ',';?></span>
<span class="text-muted"><?php echo $lang->youCould;?></span>
<?php echo html::a($this->createLink("block", "admin", "id=0&module=$module"), "<i class='icon icon-plus'></i> {$lang->block->createBlock}", '', "data-toggle='modal' data-type='ajax' data-width='700' data-title='{$lang->block->createBlock}' class='btn btn-info'")?>
<?php echo html::a($this->createLink("block", "ajaxReset", "module=$module"), "<i class='icon icon-refresh'></i> {$lang->block->reset}", 'hiddenwin', 'class="btn btn-info"')?>
</p>
+2 -1
View File
@@ -39,7 +39,8 @@
<tr class='text-center' data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
<td class='c-name text-left' title='<?php echo $product->name?>'><?php echo $product->name?></td>
<?php if($longBlock):?>
<td class='c-name c-project text-left'><?php echo zget($projects, $product->id, '');?></td>
<?php $projectName = zget($projects, $product->id, '');?>
<td class='c-name c-project text-left' title='<?php echo $projectName;?>'><?php echo zget($projects, $product->id, '');?></td>
<?php endif;?>
<td class="c-num"><?php echo $product->plans?></td>
<td class="c-num"><?php echo $product->releases?></td>
@@ -24,7 +24,7 @@
.product-info .progress {position: absolute; left: 10px; top: 35px; right: 90px;}
.product-info .progress-info {position: absolute; left: 8px; top: 10px; width: 180px; font-size: 12px;}
.product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 100px;}
html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 130px;}
html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 90px;}
.product-info .type-value,
.product-info .type-label {font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.product-info .type-value {font-size: 14px;}
@@ -135,7 +135,7 @@ $(function()
</ul>
</div>
<?php if($product->stories):?>
<div class="col-6">
<div class="col-5">
<div class="product-info">
<?php $totalPlan = $product->plans ? array_sum($product->plans) : 0;?>
<?php $unexpiredPlan = $product->plans ? zget($product->plans, 'unexpired', 0) : 0;?>
+3 -2
View File
@@ -45,9 +45,10 @@
<?php if($longBlock):?>
<td class="c-status">
<?php if(isset($project->delay)):?>
<span class="status-project status-delayed"><?php echo $lang->project->delayed;?></span>
<span class="status-project status-delayed" title='<?php echo $lang->project->delayed;?>'><?php echo $lang->project->delayed;?></span>
<?php else:?>
<span class="status-project status-<?php echo $project->status?>"><?php echo zget($lang->project->statusList, $project->status, '');?></span>
<?php $statusName = zget($lang->project->statusList, $project->status, '');?>
<span class="status-project status-<?php echo $project->status?>" title='<?php echo $statusName;?>'><?php echo $statusName;?></span>
<?php endif;?>
</td>
<td class="c-hours"><?php echo $project->hours->totalEstimate;?></td>
@@ -12,7 +12,7 @@
.product-info .progress {position: absolute; left: 10px; top: 35px; right: 100px;}
.product-info .progress-info {position: absolute; left: 8px; top: 10px; width: 180px; font-size: 12px;}
.product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 100px;}
html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 130px;}
html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; position: absolute; right: 0; top: 6px; width: 110px;}
.product-info .type-value,
.product-info .type-label {font-size: 12px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
.product-info .type-value {font-size: 14px;}
@@ -175,7 +175,7 @@ $(function()
<div class="type-label">
<table class='status-count'>
<tr>
<td class='text-right'><?php echo $lang->bug->allBugs . ' Bug';?> :</td>
<td class='text-right'><?php echo $lang->bug->allBugs;?> :</td>
<td class='text-left'><?php echo $project->totalBugs;?></td>
</tr>
<tr>
+1 -1
View File
@@ -115,7 +115,7 @@ $(function()
<div class="progress-pie inline-block space progress-pie-100" data-value="<?php echo $product->assignedRate;?>" data-doughnut-size="80">
<canvas width="100" height="100" style="width: 100px; height: 100px;"></canvas>
<div class="progress-info">
<small><?php echo $lang->bug->allBugs . ' Bug';?></small>
<small><?php echo $lang->bug->allBugs;?></small>
<strong><span class="progress-value"><?php echo $product->total;?></span></strong>
</div>
</div>
+10 -10
View File
@@ -23,7 +23,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
.block-todoes .todoes > li:hover {background-color: #e9f2fb;}
.block-todoes .todo-title {padding: 5px;}
.block-todoes .todo-pri {margin: 0 5px;}
.block-todoes .todo-time {display: inline-block; padding: 0 5px; font-size: 12px; color: #8e939a; width: 100px;}
.block-todoes .todo-time {display: inline-block; padding: 0 5px; font-size: 12px; color: #8e939a; width: 75px;}
.block-todoes .todo-check {position: absolute; top: 5px; left: 10px; display: block; width: 20px; height: 20px; font-size: 20px; color: transparent; cursor: pointer; background: #fff; border: 2px solid #eee; border-radius: 50%;}
.block-todoes .todo-check:hover {border-color: #8e939a;}
.block-todoes .active > .todo-check {color: #00da88; background: transparent;border: none;}
@@ -41,16 +41,17 @@ if(!$selfCall) die(include('./todolist.html.php'));
<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;?></h3>
<div class="form-group">
<label for="todoName" class="col-sm-2"><?php echo $lang->todo->name?></label>
<?php $leftWidth = $app->getClientLang() == 'en' ? 'col-sm-3' : 'col-sm-2';?>
<label for="todoName" class="<?php echo $leftWidth;?>"><?php echo $lang->todo->name?></label>
<div class="col-sm-9 required"><input type="text" class="form-control" autocomplete="off" name="name"></div>
</div>
<div class="form-group">
<label for="todoPri" class="col-sm-2"><?php echo $lang->todo->pri?></label>
<label for="todoPri" class="<?php echo $leftWidth;?>"><?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 ">
<label for="todoDate" class="<?php echo $leftWidth;?>"><?php echo $lang->todo->date?></label>
<div class="col-sm-9">
<div class="input-control has-icon-right">
<input type="text" class="form-control date" id="todoDate" name="date" placeholder="" autocomplete='off'>
<label for='todoDate' class="input-control-icon-right"><i class="icon icon-delay"></i></label>
@@ -58,7 +59,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
</div>
</div>
<div class="form-group">
<label for="todoBegin" class="col-sm-2"><?php echo $lang->todo->beginAndEnd?></label>
<label for="todoBegin" class="<?php echo $leftWidth;?>"><?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>
@@ -70,8 +71,8 @@ if(!$selfCall) die(include('./todolist.html.php'));
</div>
</div>
<div class="form-group">
<div class="col-sm-2"></div>
<div class="col-sm-10">
<div class="<?php echo $leftWidth;?>"></div>
<div class="col-sm-9">
<div class="checkbox-primary">
<input type="checkbox" name="private" id="private" value="1">
<label for="private"><?php echo $lang->todo->private?></label>
@@ -79,8 +80,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
</div>
</div>
<div class="form-group">
<div class="col-sm-2"></div>
<div class="col-sm-10 form-actions no-margin">
<div class="col-sm-12 form-actions no-margin text-center">
<?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-wide todo-form-trigger" data-trigger="false"><?php echo $lang->goback;?></button>
+1 -1
View File
@@ -1,7 +1,7 @@
<?php
$lang->branch->common = 'Branch';
$lang->branch->manage = 'Manage Branch';
$lang->branch->sort = 'Sort';
$lang->branch->sort = 'Order';
$lang->branch->delete = 'Delete Branch';
$lang->branch->add = 'Add';
+4 -2
View File
@@ -46,7 +46,8 @@ class branchModel extends model
$product = $this->loadModel('product')->getById($productID);
if(!$product or $product->type == 'normal') return array();
$branches = array('0' => $this->lang->branch->all . $this->lang->product->branchName[$product->type]) + $branches;
$space = $this->app->getClientLang() == 'en' ? ' ' : '';
$branches = array('0' => $this->lang->branch->all . $space . $this->lang->product->branchName[$product->type]) + $branches;
}
return $branches;
}
@@ -106,12 +107,13 @@ class branchModel extends model
}
}
$space = $this->app->getClientLang() == 'en' ? ' ' : '';
foreach($products as $product)
{
if($product->type == 'normal') continue;
if(!isset($branchGroups[$product->id])) $branchGroups[$product->id] = array();
if(strpos($params, 'noempty') === false) $branchGroups[$product->id] = array('0' => $this->lang->branch->all . $this->lang->product->branchName[$product->type]) + $branchGroups[$product->id];
if(strpos($params, 'noempty') === false) $branchGroups[$product->id] = array('0' => $this->lang->branch->all . $space . $this->lang->product->branchName[$product->type]) + $branchGroups[$product->id];
}
return $branchGroups;
+10 -5
View File
@@ -165,7 +165,7 @@ $config->bug->search['params']['lastEditedDate']= array('operator' => '=',
$config->bug->search['params']['deadline'] = array('operator' => '=', 'control' => 'input', 'values' => '', 'class' => 'date');
$config->bug->datatable = new stdclass();
$config->bug->datatable->defaultField = array('id', 'severity', 'pri', 'title', 'status', 'openedBy', 'openedDate', 'assignedTo', 'resolution', 'actions');
$config->bug->datatable->defaultField = array('id', 'severity', 'pri', 'confirmed', 'title', 'status', 'openedBy', 'openedDate', 'assignedTo', 'resolution', 'actions');
$config->bug->datatable->fieldList['id']['title'] = 'idAB';
$config->bug->datatable->fieldList['id']['fixed'] = 'left';
@@ -174,7 +174,7 @@ $config->bug->datatable->fieldList['id']['required'] = 'yes';
$config->bug->datatable->fieldList['severity']['title'] = 'severityAB';
$config->bug->datatable->fieldList['severity']['fixed'] = 'left';
$config->bug->datatable->fieldList['severity']['width'] = '60';
$config->bug->datatable->fieldList['severity']['width'] = '50';
$config->bug->datatable->fieldList['severity']['required'] = 'no';
$config->bug->datatable->fieldList['pri']['title'] = 'P';
@@ -182,6 +182,11 @@ $config->bug->datatable->fieldList['pri']['fixed'] = 'left';
$config->bug->datatable->fieldList['pri']['width'] = '50';
$config->bug->datatable->fieldList['pri']['required'] = 'no';
$config->bug->datatable->fieldList['confirmed']['title'] = 'confirmedAB';
$config->bug->datatable->fieldList['confirmed']['fixed'] = 'left';
$config->bug->datatable->fieldList['confirmed']['width'] = '60';
$config->bug->datatable->fieldList['confirmed']['required'] = 'no';
$config->bug->datatable->fieldList['title']['title'] = 'title';
$config->bug->datatable->fieldList['title']['fixed'] = 'left';
$config->bug->datatable->fieldList['title']['width'] = 'auto';
@@ -284,17 +289,17 @@ $config->bug->datatable->fieldList['deadline']['required'] = 'no';
$config->bug->datatable->fieldList['resolvedBy']['title'] = 'resolvedByAB';
$config->bug->datatable->fieldList['resolvedBy']['fixed'] = 'no';
$config->bug->datatable->fieldList['resolvedBy']['width'] = '70';
$config->bug->datatable->fieldList['resolvedBy']['width'] = '100';
$config->bug->datatable->fieldList['resolvedBy']['required'] = 'no';
$config->bug->datatable->fieldList['resolution']['title'] = 'resolutionAB';
$config->bug->datatable->fieldList['resolution']['fixed'] = 'no';
$config->bug->datatable->fieldList['resolution']['width'] = '70';
$config->bug->datatable->fieldList['resolution']['width'] = '100';
$config->bug->datatable->fieldList['resolution']['required'] = 'no';
$config->bug->datatable->fieldList['resolvedDate']['title'] = 'resolvedDateAB';
$config->bug->datatable->fieldList['resolvedDate']['fixed'] = 'no';
$config->bug->datatable->fieldList['resolvedDate']['width'] = '90';
$config->bug->datatable->fieldList['resolvedDate']['width'] = '120';
$config->bug->datatable->fieldList['resolvedDate']['required'] = 'no';
$config->bug->datatable->fieldList['resolvedBuild']['title'] = 'resolvedBuild';
+7 -52
View File
@@ -181,7 +181,7 @@ class bug extends control
* @access public
* @return void
*/
public function report($productID, $browseType, $branchID, $moduleID, $chartType = '')
public function report($productID, $browseType, $branchID, $moduleID, $chartType = 'default')
{
$this->loadModel('report');
$this->view->charts = array();
@@ -193,7 +193,7 @@ class bug extends control
$chartFunc = 'getDataOf' . $chart;
$chartData = $this->bug->$chartFunc();
$chartOption = $this->lang->bug->report->$chart;
if(!empty($chartType)) $chartOption->type = $chartType;
if(!empty($chartType) and $chartType != 'default') $chartOption->type = $chartType;
$this->bug->mergeChartOption($chart);
$this->view->charts[$chart] = $chartOption;
@@ -679,7 +679,6 @@ class bug extends control
$this->view->openedBuilds = $openedBuilds;
$this->view->resolvedBuilds = array('' => '') + $openedBuilds + $oldResolvedBuild;
$this->view->actions = $this->action->getList('bug', $bugID);
$this->view->templates = $this->bug->getUserBugTemplates($this->app->user->account);
$this->display();
}
@@ -1291,44 +1290,6 @@ class bug extends control
}
}
/**
* Save current template.
*
* @access public
* @return string
*/
public function saveTemplate()
{
$this->bug->saveUserBugTemplate();
if(dao::isError()) echo js::error(dao::getError(), $full = false);
die($this->fetch('bug', 'buildTemplates'));
}
/**
* Build the user templates selection code.
*
* @access public
* @return void
*/
public function buildTemplates()
{
$this->view->templates = $this->bug->getUserBugTemplates($this->app->user->account);
$this->display('bug', 'buildTemplates');
}
/**
* Delete a user template.
*
* @param int $templateID
* @access public
* @return void
*/
public function deleteTemplate($templateID)
{
$this->dao->delete()->from(TABLE_USERTPL)->where('id')->eq($templateID)->andWhere('account')->eq($this->app->user->account)->exec();
die();
}
/**
* AJAX: get bugs of a user in html select.
*
@@ -1500,8 +1461,8 @@ class bug extends control
}
/* Get related objects title or names. */
$relatedModules = array();
$productsType = $this->dao->select('id, type')->from(TABLE_PRODUCT)->where('id')->in($relatedProductIdList)->fetchPairs();
$relatedModules = $this->loadModel('tree')->getOptionMenu($productID, 'bug');
$relatedStories = $this->dao->select('id,title')->from(TABLE_STORY) ->where('id')->in($relatedStoryIdList)->fetchPairs();
$relatedTasks = $this->dao->select('id, name')->from(TABLE_TASK)->where('id')->in($relatedTaskIdList)->fetchPairs();
$relatedBugs = $this->dao->select('id, title')->from(TABLE_BUG)->where('id')->in($relatedBugIdList)->fetchPairs();
@@ -1509,7 +1470,8 @@ class bug extends control
$relatedBranch = array('0' => $this->lang->branch->all) + $this->dao->select('id, name')->from(TABLE_BRANCH)->where('id')->in($relatedBranchIdList)->fetchPairs();
$relatedBuilds = array('trunk' => $this->lang->trunk) + $this->dao->select('id, name')->from(TABLE_BUILD)->where('id')->in($relatedBuildIdList)->fetchPairs();
$relatedFiles = $this->dao->select('id, objectID, pathname, title')->from(TABLE_FILE)->where('objectType')->eq('bug')->andWhere('objectID')->in(@array_keys($bugs))->andWhere('extra')->ne('editor')->fetchGroup('objectID');
foreach($relatedProductIdList as $relatedProductId) $relatedModules += $this->loadModel('tree')->getOptionMenu($relatedProductId, 'bug');
foreach($bugs as $bug)
{
if($this->post->fileType == 'csv')
@@ -1614,16 +1576,9 @@ class bug extends control
$this->fetch('file', 'export2' . $this->post->fileType, $_POST);
}
$fileName = $this->lang->bug->common;
$fileName = $this->lang->bug->common;
$productName = $this->dao->findById($productID)->from(TABLE_PRODUCT)->fetch('name');
if(isset($this->lang->bug->featureBar['browse'][$browseType]))
{
$browseType = $this->lang->bug->featureBar['browse'][$browseType];
}
else
{
$browseType = $this->lang->bug->moreSelects[$browseType];
}
$browseType = isset($this->lang->bug->featureBar['browse'][$browseType]) ? $this->lang->bug->featureBar['browse'][$browseType] : zget($this->lang->bug->moreSelects, $browseType, '');
$this->view->fileName = $productName . $this->lang->dash . $browseType . $fileName;
$this->view->allExportFields = $this->config->bug->list->exportFields;
-1
View File
@@ -1 +0,0 @@
#batchCreateForm .chosen-container .chosen-drop{min-width:200px;}
-1
View File
@@ -1,3 +1,2 @@
.chosen-container[id^="plan"] .chosen-drop {min-width: 300px; border-top: 1px solid #ddd!important}
.duplicate-input {border-left-width: 0; border-radius: 0 2px 2px 0; padding-left: 9px}
.duplicate-input:focus {border-left-width: 1px; padding-left: 8px}
+2
View File
@@ -18,3 +18,5 @@ td.delayed{color:#fff; background: #e84e0f!important;}
.dropdown-list > li > a {display: block; padding: 3px 20px; clear: both; font-weight: normal; line-height: 1.53846154; color: #141414; white-space: nowrap;}
.dropdown-list > li > a:hover,
.dropdown-list > li > a:focus {color: #1a4f85;text-decoration: none;background-color: #ddd;}
th.c-confirmed {text-align: center;}
+3 -10
View File
@@ -1,3 +1,6 @@
html[lang='en'] #moduleIdBox .input-group-addon{padding: 5px 23px}
html[lang='en'] #deadlineTd .input-group-addon{padding: 5px 18px}
.ke-toolbar .ke-outline[data-name='savetemplate'] {display: block;}
.ke-outline .ke-icon-savetemplate {background-image: url(theme/default/images/kindeditor/save.gif); background-position: center; width: 56px; height: 20px;}
@@ -7,16 +10,6 @@
#buildBoxActions {padding-left: 15px;}
#tplBoxWrapper {position: relative; z-index: 10;}
#tplBoxWrapper > .btn-toolbar {position: absolute; right: 0px; top: 0px;}
#tplBoxWrapper .btn {padding: 4px 8px}
#tplBox li {position: relative;}
#tplBox li .btn-delete {position: absolute; right: 0; top: -5px; display: block; width: 40px; text-align:center;}
#tplBox li:hover .btn-delete {color:#fff;}
#tplBox li .tpl-name {padding-right: 40px;}
#module_chosen.chosen-container .chosen-drop {min-width: 400px; border-top: 1px solid #ddd!important}
#openedBuild_chosen.chosen-container .chosen-drop {min-width: 450px; border-top: 1px solid #ddd!important}
#module + .chosen-container-single .chosen-single,
#task + .chosen-container-single .chosen-single,
#openedBuild + .chosen-container-multi .chosen-choices {border-top-left-radius: 0; border-bottom-left-radius: 0;}
-1
View File
@@ -1,2 +1 @@
.chosen-container[id^="buildProject"] {max-width: 160px; border-radius: 0}
.chosen-container[id^="buildProject"] .chosen-drop {min-width: 300px;!important}
+1
View File
@@ -1,6 +1,7 @@
$(function()
{
if($('#bugList thead th.c-title').width() < 150) $('#bugList thead th.c-title').width(150);
setTimeout(function(){fixFeatureBar();}, 10);
if(flow == 'onlyTest')
{
+8 -5
View File
@@ -468,17 +468,20 @@ function notice()
if($('#openedBuild').find('option').length <= 1)
{
var html = '';
if($('#project').val() == '')
if($('#project').length == 0 || $('#project').val() == '')
{
branch = $('#branch').val();
var branch = $('#branch').val();
if(typeof(branch) == 'undefined') branch = 0;
html += '<a href="' + createLink('release', 'create', 'productID=' + $('#product').val() + '&branch=' + branch) + '" target="_blank" style="padding-right:5px">' + createRelease + '</a> ';
var link = createLink('release', 'create', 'productID=' + $('#product').val() + '&branch=' + branch);
if(typeof(flow) != 'undefined' && flow == 'onlyTest') link = createLink('build', 'create','projectID=' + $('#product').val());
html += '<a href="' + link + '" target="_blank" style="padding-right:5px">' + createBuild + '</a> ';
html += '<a href="javascript:loadProductBuilds(' + $('#product').val() + ')">' + refresh + '</a>';
}
else
{
html += '<a href="' + createLink('build', 'create','projectID=' + $('#project').val()) + '" target="_blank" style="padding-right:5px">' + createBuild + '</a> ';
html += '<a href="javascript:loadProjectBuilds(' + $('#project').val() + ')">' + refresh + '</a>';
projectID = $('#project').val();
html += '<a href="' + createLink('build', 'create','projectID=' + projectID) + '" target="_blank" style="padding-right:5px">' + createBuild + '</a> ';
html += '<a href="javascript:loadProjectBuilds(' + projectID + ')">' + refresh + '</a>';
}
var $bba = $('#buildBoxActions');
if($bba.length)
-50
View File
@@ -64,59 +64,9 @@ function setAssignedTo(moduleID, productID)
});
}
/* Set template. */
function setTemplate(templateID)
{
$('#tplBox .list-group-item.active').removeClass('active');
$('#tplTitleBox' + templateID).closest('.list-group-item').addClass('active');
var steps = $('#template' + templateID).html();
editor['#'].html(steps);
}
/* Delete template. */
function deleteTemplate(templateID)
{
if(!templateID) return;
if(confirm(confirmDeleteTemplate))
{
hiddenwin.location.href = createLink('bug', 'deleteTemplate', 'templateID=' + templateID);
$('#tplBox' + templateID).addClass('hidden');
}
}
/* Display template x icon. */
function displayXIcon(templateID)
{
$('#templateID' + templateID).removeClass('hidden');
}
/* Hide template x icon. */
function hideXIcon(templateID)
{
$('#templateID' + templateID).addClass('hidden');
}
$(function()
{
if($('#project').val()) loadProjectRelated($('#project').val());
$('#saveTplModal').on('hide.zui.modal', function(){$(this).find('#title').val('');});
$('#saveTplBtn').click(function(){$('#saveTplModal').modal('show');});
$('#saveTplModal #submit').click(function()
{
var $inputGroup = $('#saveTplModal div.input-group');
var $publicBox = $inputGroup.find('input[id^="public"]');
var title = $inputGroup.find('#title').val();
var content = $('#steps').val();
var isPublic = ($publicBox.size() > 0 && $publicBox.prop('checked')) ? $publicBox.val() : 0;
if(!title || !content) return;
saveTemplateLink = createLink('bug', 'saveTemplate');
$.post(saveTemplateLink, {title:title, content:content, public:isPublic}, function(data)
{
$('#tplBox').html(data);
// If has error then not hide.
if(data.indexOf('alert') == -1) $('#saveTplModal').modal('hide');
});
});
$('[data-toggle=tooltip]').tooltip();
+91 -95
View File
@@ -21,153 +21,149 @@ $lang->bug->project = $lang->projectCommon;
$lang->bug->story = 'Story';
$lang->bug->task = 'Task';
$lang->bug->title = 'Title';
$lang->bug->severity = 'Severity(S)';
$lang->bug->severity = 'Severity';
$lang->bug->severityAB = 'S';
$lang->bug->pri = 'Priority(P)';
$lang->bug->pri = 'Priority';
$lang->bug->type = 'Type';
$lang->bug->os = 'OS';
$lang->bug->browser = 'Browser';
$lang->bug->steps = 'Repro Steps';
$lang->bug->status = 'Status';
$lang->bug->statusAB = 'Status';
$lang->bug->activatedCount = 'Active';
$lang->bug->activatedCount = 'Activated Times';
$lang->bug->activatedCountAB = 'Active';
$lang->bug->activatedDate = 'Activated';
$lang->bug->activatedDate = 'ActivatedDate';
$lang->bug->confirmed = 'Confirmed';
$lang->bug->confirmedAB = 'C';
$lang->bug->toTask = 'Convert to Task';
$lang->bug->toStory = 'Convert to Story';
$lang->bug->mailto = 'Mail To';
$lang->bug->openedBy = 'Created by';
$lang->bug->openedDate = 'Created';
$lang->bug->openedDateAB = 'Created';
$lang->bug->mailto = 'Mailto';
$lang->bug->openedBy = 'ReportedBy';
$lang->bug->openedByAB = 'Reporter';
$lang->bug->openedDate = 'ReportedDate';
$lang->bug->openedDateAB = 'Reported';
$lang->bug->openedBuild = 'Open Build';
$lang->bug->assignedTo = 'Assign To';
$lang->bug->assignBug = 'Assign To';
$lang->bug->assignedToAB = 'To';
$lang->bug->assignedDate = 'Assigned';
$lang->bug->resolvedBy = 'Resolved';
$lang->bug->resolvedByAB = 'Resolved';
$lang->bug->assignedTo = 'AssignTo';
$lang->bug->assignBug = 'AssignedTo';
$lang->bug->assignedToAB = 'AssignedTo';
$lang->bug->assignedDate = 'AssignedDate';
$lang->bug->resolvedBy = 'ResolvedBy';
$lang->bug->resolvedByAB = 'ResolvedBy';
$lang->bug->resolution = 'Resolution';
$lang->bug->resolutionAB = 'Resolution';
$lang->bug->resolvedBuild = 'Resolved Build';
$lang->bug->resolvedDate = 'Resolved';
$lang->bug->resolvedDateAB = 'Resolved';
$lang->bug->resolvedBuild = 'Build';
$lang->bug->resolvedDate = 'Resolved Date';
$lang->bug->resolvedDateAB = 'ResolvedDate';
$lang->bug->deadline = 'Deadline';
$lang->bug->plan = 'Plan';
$lang->bug->closedBy = 'Closed By';
$lang->bug->closedDate = 'Closed';
$lang->bug->duplicateBug = 'Duplicate Bug ID';
$lang->bug->lastEditedBy = 'Edited By';
$lang->bug->linkBug = 'Linked Bug';
$lang->bug->closedBy = 'ClosedBy';
$lang->bug->closedDate = 'ClosedDate';
$lang->bug->duplicateBug = 'Duplicated Bug ID';
$lang->bug->lastEditedBy = 'ModifiedBy';
$lang->bug->linkBug = 'Linked Bugs';
$lang->bug->linkBugs = 'Link Bug';
$lang->bug->unlinkBug = 'Unlink';
$lang->bug->case = 'Case';
$lang->bug->files = 'File';
$lang->bug->case = 'Cases';
$lang->bug->files = 'Files';
$lang->bug->keywords = 'Tags';
$lang->bug->lastEditedByAB = 'Edited By';
$lang->bug->lastEditedDateAB = 'Edited';
$lang->bug->lastEditedDate = 'Edited';
$lang->bug->lastEditedByAB = 'EditedBy';
$lang->bug->lastEditedDateAB = 'EditedDate';
$lang->bug->lastEditedDate = 'EditedDate';
$lang->bug->fromCase = 'From Case';
$lang->bug->toCase = 'To Case';
$lang->bug->colorTag = 'Color Tag';
$lang->bug->colorTag = 'Color';
/* 方法列表。*/
$lang->bug->index = 'Home';
$lang->bug->create = 'Report Bug';
$lang->bug->batchCreate = 'Batch Report Bug';
$lang->bug->batchCreate = 'Batch Report';
$lang->bug->confirmBug = 'Confirm';
$lang->bug->batchConfirm = 'Batch Confirm';
$lang->bug->edit = 'Edit';
$lang->bug->edit = 'Edit Bug';
$lang->bug->batchEdit = 'Batch Edit';
$lang->bug->batchChangeModule = 'Batch Modify Module';
$lang->bug->batchChangeBranch = 'Batch Modify Branch';
$lang->bug->batchChangeModule = 'Batch Edit Module';
$lang->bug->batchChangeBranch = 'Batch Edit Branch';
$lang->bug->batchClose = 'Batch Close';
$lang->bug->assignTo = 'Assign';
$lang->bug->batchAssignTo = 'Batch Assign';
$lang->bug->browse = 'Bugs';
$lang->bug->view = 'Bug Details';
$lang->bug->resolve = 'Resolve';
$lang->bug->browse = 'Bug List';
$lang->bug->view = 'Bug Detail';
$lang->bug->resolve = 'Resolve Bug';
$lang->bug->batchResolve = 'Batch Resolve';
$lang->bug->close = 'Close';
$lang->bug->activate = 'Activate';
$lang->bug->batchActivate = 'Batch Activate';
$lang->bug->reportChart = 'Report';
$lang->bug->export = 'Export';
$lang->bug->export = 'Export Data';
$lang->bug->delete = 'Delete';
$lang->bug->deleted = 'Deleted';
$lang->bug->saveTemplate = 'Save as Template';
$lang->bug->setPublic = 'Set as Public Template';
$lang->bug->deleteTemplate = 'Delete Template';
$lang->bug->confirmStoryChange = 'Confirm Story Change';
$lang->bug->copy = 'Copy';
$lang->bug->search = 'Search';
/* 查询条件列表。*/
$lang->bug->assignToMe = 'Assigned To Me';
$lang->bug->openedByMe = 'Created By Me';
$lang->bug->resolvedByMe = 'Resolved By Me';
$lang->bug->closedByMe = 'Closed By Me';
$lang->bug->assignToMe = 'AssignedToMe';
$lang->bug->openedByMe = 'ReportedByMe';
$lang->bug->resolvedByMe = 'ResolvedByMe';
$lang->bug->closedByMe = 'ClosedByMe';
$lang->bug->assignToNull = 'Unassigned';
$lang->bug->unResolved = 'Unresolved';
$lang->bug->toClosed = 'Unclosed';
$lang->bug->unclosed = 'Active';
$lang->bug->unconfirmed = 'UnConfirmed';
$lang->bug->longLifeBugs = 'Pending';
$lang->bug->unResolved = 'Active';
$lang->bug->toClosed = 'ToClose';
$lang->bug->unclosed = 'Unclosed';
$lang->bug->unconfirmed = 'Unconfirmed';
$lang->bug->longLifeBugs = 'Stalled';
$lang->bug->postponedBugs = 'Postponed';
$lang->bug->overdueBugs = 'Overdue';
$lang->bug->allBugs = 'All';
$lang->bug->allBugs = 'All Bugs';
$lang->bug->byQuery = 'Search';
$lang->bug->needConfirm = 'Story Changed';
$lang->bug->allProduct = 'All' . $lang->productCommon;
$lang->bug->allProduct = 'All' . $lang->productCommon . 's';
$lang->bug->my = 'My';
$lang->bug->yesterdayResolved = 'Bug Resolved Yesterday ';
$lang->bug->yesterdayConfirmed = 'Bug Confirmed Yesterday ';
$lang->bug->yesterdayClosed = 'Bug Closed Yesterday ';
$lang->bug->assignToMeAB = 'Assigned To Me';
$lang->bug->openedByMeAB = 'Created By Me';
$lang->bug->resolvedByMeAB = 'Resolved By Me';
$lang->bug->assignToMeAB = 'AssignedToMe';
$lang->bug->openedByMeAB = 'ReportedByMe';
$lang->bug->resolvedByMeAB = 'ResolvedByMe';
$lang->bug->ditto = 'Ditto';
$lang->bug->dittoNotice = 'This bug is not linked to the same product as the last one!';
$lang->bug->noAssigned = 'Assign';
$lang->bug->noBug = 'No bugs. ';
$lang->bug->dittoNotice = 'This bug is not linked to the same product as the last one is!';
$lang->bug->noAssigned = 'Unassigned';
$lang->bug->noBug = 'No bugs yet.';
$lang->bug->noModule = '<div>You have no modules.</div><div>Manage now</div>';
$lang->bug->delayWarning = " <strong class='text-danger'> Delay %s days </strong>";
/* 页面标签。*/
$lang->bug->lblAssignedTo = 'Assignee';
$lang->bug->lblMailto = 'Mail To';
$lang->bug->lblLastEdited = 'Last Edited';
$lang->bug->lblResolved = 'Resolved By';
$lang->bug->allUsers = 'All Users';
$lang->bug->allBuilds = 'All';
$lang->bug->lblAssignedTo = 'AssignTo';
$lang->bug->lblMailto = 'Mailto';
$lang->bug->lblLastEdited = 'ModifiedBy';
$lang->bug->lblResolved = 'ResolvedBy';
$lang->bug->allUsers = 'Load All Users';
$lang->bug->allBuilds = 'All Builds';
$lang->bug->createBuild = 'New';
/* legend列表。*/
$lang->bug->legendBasicInfo = 'Basic Info';
$lang->bug->legendAttatch = 'Attachment';
$lang->bug->legendAttatch = 'Files';
$lang->bug->legendPrjStoryTask = $lang->projectCommon . '/Story/Task';
$lang->bug->lblTypeAndSeverity = 'Type/Severity';
$lang->bug->lblSystemBrowserAndHardware = 'System/Browser';
$lang->bug->legendSteps = 'Repro Steps';
$lang->bug->legendComment = 'Note';
$lang->bug->legendLife = 'About';
$lang->bug->legendMisc = 'Misc';
$lang->bug->legendLife = 'Bug Life';
$lang->bug->legendMisc = 'Misc.';
$lang->bug->legendRelated = 'Related Info';
/* 功能按钮。*/
$lang->bug->buttonConfirm = 'Confirm';
/* 交互提示。*/
$lang->bug->summary = "Bugs on this page : <strong>%s</strong> Total, <strong>%s</strong> Unresolved.";
$lang->bug->confirmChangeProduct = "Change {$lang->productCommon} will cause linked {$lang->projectCommon},Story and Task change. Do you want to do this?";
$lang->bug->summary = "Total <strong>%s</strong> bugs on this page, and <strong>%s</strong> Active.";
$lang->bug->confirmChangeProduct = "Any change to {$lang->productCommon} will cause linked {$lang->projectCommon}s, stories and tasks change. Do you want to do this?";
$lang->bug->confirmDelete = 'Do you want to delete this bug?';
$lang->bug->setTemplateTitle = 'Please enter the title of template.';
$lang->bug->remindTask = 'This Bug has been converted to Task. Do you want to update Status of Task(ID %s)?';
$lang->bug->skipClose = 'Bug %s is not resolved. You cannot close it.';
$lang->bug->applyTemplate = 'Template';
$lang->bug->confirmDeleteTemplate = 'Do you want to delete this template?';
$lang->bug->remindTask = 'This bug has been converted to a task. Do you want to update the status of Task(ID %s)?';
$lang->bug->skipClose = 'Bug %s is active. You cannot close it.';
/* 模板。*/
$lang->bug->tplStep = "<p>[Steps]</p><br/>";
@@ -206,7 +202,7 @@ $lang->bug->osList['linux'] = 'Linux';
$lang->bug->osList['freebsd'] = 'FreeBSD';
$lang->bug->osList['osx'] = 'OS X';
$lang->bug->osList['unix'] = 'Unix';
$lang->bug->osList['others'] = 'Other';
$lang->bug->osList['others'] = 'Others';
$lang->bug->browserList[''] = '';
$lang->bug->browserList['all'] = 'All';
@@ -229,39 +225,39 @@ $lang->bug->browserList['opera9'] = 'Opera9';
$lang->bug->browserList['safari'] = 'Safari';
$lang->bug->browserList['maxthon'] = 'Maxthon';
$lang->bug->browserList['uc'] = 'UC';
$lang->bug->browserList['other'] = 'Other';
$lang->bug->browserList['other'] = 'Others';
$lang->bug->typeList[''] = '';
$lang->bug->typeList['codeerror'] = 'Code Error';
$lang->bug->typeList['codeerror'] = 'CodeError';
$lang->bug->typeList['interface'] = 'Interface';
$lang->bug->typeList['config'] = 'Configuration';
$lang->bug->typeList['install'] = 'Install/Deploy';
$lang->bug->typeList['install'] = 'Installation';
$lang->bug->typeList['security'] = 'Security';
$lang->bug->typeList['performance'] = 'Performance';
$lang->bug->typeList['standard'] = 'Standard';
$lang->bug->typeList['automation'] = 'Automation';
$lang->bug->typeList['others'] = 'Other';
$lang->bug->typeList['designchange'] = 'Design Change';
$lang->bug->typeList['newfeature'] = 'New Feature';
$lang->bug->typeList['designdefect'] = 'Design Defect';
$lang->bug->typeList['standard'] = 'CodingConventions';
$lang->bug->typeList['automation'] = 'TestScript';
$lang->bug->typeList['designchange'] = 'DesignChange';
$lang->bug->typeList['newfeature'] = 'NewFeature';
$lang->bug->typeList['designdefect'] = 'DesignDefect';
$lang->bug->typeList['trackthings'] = 'Tracking';
$lang->bug->typeList['others'] = 'Others';
$lang->bug->statusList[''] = '';
$lang->bug->statusList['active'] = 'Active';
$lang->bug->statusList['resolved'] = 'Resolved';
$lang->bug->statusList['closed'] = 'Closed';
$lang->bug->confirmedList[1] = 'Confirmed';
$lang->bug->confirmedList[0] = 'Unconfirmed';
$lang->bug->confirmedList[1] = 'Yes';
$lang->bug->confirmedList[0] = 'No';
$lang->bug->resolutionList[''] = '';
$lang->bug->resolutionList['bydesign'] = 'As Design';
$lang->bug->resolutionList['duplicate'] = 'Duplicated Bug';
$lang->bug->resolutionList['external'] = 'External Cause';
$lang->bug->resolutionList['duplicate'] = 'Duplicated';
$lang->bug->resolutionList['external'] = 'External';
$lang->bug->resolutionList['fixed'] = 'Resolved';
$lang->bug->resolutionList['notrepro'] = 'Irreproducible';
$lang->bug->resolutionList['postponed'] = 'Postpone';
$lang->bug->resolutionList['willnotfix'] = "Ignore";
$lang->bug->resolutionList['postponed'] = 'Postponed';
$lang->bug->resolutionList['willnotfix'] = "Won't Fix";
$lang->bug->resolutionList['tostory'] = 'Convert to Story';
/* 统计报表。*/
@@ -280,9 +276,9 @@ $lang->bug->report->charts['openedBugsPerUser'] = 'Reported Bugs Per User';
$lang->bug->report->charts['resolvedBugsPerUser'] = 'Resolved Bugs Per User';
$lang->bug->report->charts['closedBugsPerUser'] = 'Closed Bugs Per User';
$lang->bug->report->charts['bugsPerSeverity'] = 'Bug Severity Report';
$lang->bug->report->charts['bugsPerResolution'] = 'Bug Resolution Report';
$lang->bug->report->charts['bugsPerResolution'] = 'Bug Solution Report';
$lang->bug->report->charts['bugsPerStatus'] = 'Bug Status Report';
$lang->bug->report->charts['bugsPerActivatedCount'] = 'Bug Activation Report';
$lang->bug->report->charts['bugsPerActivatedCount'] = 'Bug Activation Times Report';
$lang->bug->report->charts['bugsPerPri'] = 'Bug Priority Report';
$lang->bug->report->charts['bugsPerType'] = 'Bug Type Report';
$lang->bug->report->charts['bugsPerAssignedTo'] = 'Bug Assignment Report';
@@ -353,16 +349,16 @@ $lang->bug->report->closedBugsPerUser->graph->xAxisName = 'User';
$lang->bug->report->bugsPerSeverity->graph->xAxisName = 'Priority';
$lang->bug->report->bugsPerResolution->graph->xAxisName = 'Resolution';
$lang->bug->report->bugsPerStatus->graph->xAxisName = 'Status';
$lang->bug->report->bugsPerActivatedCount->graph->xAxisName = 'Activated Count';
$lang->bug->report->bugsPerActivatedCount->graph->xAxisName = 'Activation Times';
$lang->bug->report->bugsPerPri->graph->xAxisName = 'Priority';
$lang->bug->report->bugsPerType->graph->xAxisName = 'Type';
$lang->bug->report->bugsPerAssignedTo->graph->xAxisName = 'Assigned To';
$lang->bug->report->bugsPerAssignedTo->graph->xAxisName = 'AssignTo';
$lang->bug->report->bugLiveDays->graph->xAxisName = 'Handling Time';
$lang->bug->report->bugHistories->graph->xAxisName = 'Handling Steps';
/* 操作记录。*/
$lang->bug->action = new stdclass();
$lang->bug->action->resolved = array('main' => '$date, resolved by <strong>$actor</strong> and the solution is <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
$lang->bug->action->resolved = array('main' => '$date, resolved by <strong>$actor</strong> and the resolution is <strong>$extra</strong> $appendLink.', 'extra' => 'resolutionList');
$lang->bug->action->tostory = array('main' => '$date, converted by <strong>$actor</strong> to <strong>Story</strong> with ID <strong>$extra</strong>.');
$lang->bug->action->totask = array('main' => '$date, imported by <strong>$actor</strong> as <strong>Task</strong> with ID <strong>$extra</strong>.');
$lang->bug->action->linked2plan = array('main' => '$date, linked by <strong>$actor</strong> to Plan <strong>$extra</strong>.');
@@ -375,8 +371,8 @@ $lang->bug->action->linkrelatedbug = array('main' => '$date, linked by <str
$lang->bug->action->unlinkrelatedbug = array('main' => '$date, unlinked by <strong>$actor</strong> from Bug <strong>$extra</strong>.');
$lang->bug->placeholder = new stdclass();
$lang->bug->placeholder->chooseBuilds = 'Select Build...';
$lang->bug->placeholder->newBuildName = 'New build Name';
$lang->bug->placeholder->chooseBuilds = 'Select Build';
$lang->bug->placeholder->newBuildName = 'New Build Name';
$lang->bug->featureBar['browse']['all'] = $lang->bug->allBugs;
$lang->bug->featureBar['browse']['unclosed'] = $lang->bug->unclosed;
+11 -16
View File
@@ -34,6 +34,7 @@ $lang->bug->activatedCount = '激活次数';
$lang->bug->activatedCountAB = '激活次数';
$lang->bug->activatedDate = '激活日期';
$lang->bug->confirmed = '是否确认';
$lang->bug->confirmedAB = '已确认';
$lang->bug->toTask = '转任务';
$lang->bug->toStory = '转需求';
$lang->bug->mailto = '抄送给';
@@ -95,9 +96,6 @@ $lang->bug->reportChart = '报表统计';
$lang->bug->export = '导出数据';
$lang->bug->delete = '删除';
$lang->bug->deleted = '已删除';
$lang->bug->saveTemplate = '保存模板';
$lang->bug->setPublic = '设为公共模板';
$lang->bug->deleteTemplate = '删除模板';
$lang->bug->confirmStoryChange = '确认需求变动';
$lang->bug->copy = '复制Bug';
$lang->bug->search = '搜索';
@@ -163,11 +161,8 @@ $lang->bug->buttonConfirm = '确认';
$lang->bug->summary = "本页共 <strong>%s</strong> 个Bug,未解决 <strong>%s</strong>。";
$lang->bug->confirmChangeProduct = "修改{$lang->productCommon}会导致相应的{$lang->projectCommon}、需求和任务发生变化,确定吗?";
$lang->bug->confirmDelete = '您确认要删除该Bug吗?';
$lang->bug->setTemplateTitle = '请输入bug模板标题';
$lang->bug->remindTask = '该Bug已经转化为任务,是否更新任务(编号:%s)状态 ?';
$lang->bug->skipClose = 'Bug %s 不是已解决状态,不能关闭。';
$lang->bug->applyTemplate = '应用模板';
$lang->bug->confirmDeleteTemplate = '您确认要删除该模板吗?';
/* 模板。*/
$lang->bug->tplStep = "<p>[步骤]</p><br/>";
@@ -240,19 +235,19 @@ $lang->bug->typeList['security'] = '安全相关';
$lang->bug->typeList['performance'] = '性能问题';
$lang->bug->typeList['standard'] = '标准规范';
$lang->bug->typeList['automation'] = '测试脚本';
$lang->bug->typeList['others'] = '其他';
$lang->bug->typeList['designchange'] = '设计变更';
$lang->bug->typeList['newfeature'] = '新增需求';
$lang->bug->typeList['designdefect'] = '设计缺陷';
$lang->bug->typeList['trackthings'] = '事务跟踪';
$lang->bug->typeList['others'] = '其他';
$lang->bug->statusList[''] = '';
$lang->bug->statusList['active'] = '激活';
$lang->bug->statusList['resolved'] = '已解决';
$lang->bug->statusList['closed'] = '已关闭';
$lang->bug->confirmedList[1] = '已确认';
$lang->bug->confirmedList[0] = '未确认';
$lang->bug->confirmedList[1] = '是';
$lang->bug->confirmedList[0] = '否';
$lang->bug->resolutionList[''] = '';
$lang->bug->resolutionList['bydesign'] = '设计如此';
@@ -279,13 +274,13 @@ $lang->bug->report->charts['closedBugsPerDay'] = '每天关闭的Bug数';
$lang->bug->report->charts['openedBugsPerUser'] = '每人提交的Bug数';
$lang->bug->report->charts['resolvedBugsPerUser'] = '每人解决的Bug数';
$lang->bug->report->charts['closedBugsPerUser'] = '每人关闭的Bug数';
$lang->bug->report->charts['bugsPerSeverity'] = 'Bug严重程度统计';
$lang->bug->report->charts['bugsPerResolution'] = 'Bug解决方案统计';
$lang->bug->report->charts['bugsPerStatus'] = 'Bug状态统计';
$lang->bug->report->charts['bugsPerActivatedCount'] = 'Bug激活次数统计';
$lang->bug->report->charts['bugsPerPri'] = 'Bug优先级统计';
$lang->bug->report->charts['bugsPerType'] = 'Bug类型统计';
$lang->bug->report->charts['bugsPerAssignedTo'] = '指派给统计';
$lang->bug->report->charts['bugsPerSeverity'] = '按Bug严重程度统计';
$lang->bug->report->charts['bugsPerResolution'] = '按Bug解决方案统计';
$lang->bug->report->charts['bugsPerStatus'] = '按Bug状态统计';
$lang->bug->report->charts['bugsPerActivatedCount'] = '按Bug激活次数统计';
$lang->bug->report->charts['bugsPerPri'] = '按Bug优先级统计';
$lang->bug->report->charts['bugsPerType'] = '按Bug类型统计';
$lang->bug->report->charts['bugsPerAssignedTo'] = '按指派给统计';
//$lang->bug->report->charts['bugLiveDays'] = 'Bug处理时间统计';
//$lang->bug->report->charts['bugHistories'] = 'Bug处理步骤统计';
-6
View File
@@ -95,9 +95,6 @@ $lang->bug->reportChart = '報表統計';
$lang->bug->export = '導出數據';
$lang->bug->delete = '刪除';
$lang->bug->deleted = '已刪除';
$lang->bug->saveTemplate = '保存模板';
$lang->bug->setPublic = '設為公共模板';
$lang->bug->deleteTemplate = '刪除模板';
$lang->bug->confirmStoryChange = '確認需求變動';
$lang->bug->copy = '複製Bug';
$lang->bug->search = '搜索';
@@ -163,11 +160,8 @@ $lang->bug->buttonConfirm = '確認';
$lang->bug->summary = "本頁共 <strong>%s</strong> 個Bug,未解決 <strong>%s</strong>。";
$lang->bug->confirmChangeProduct = "修改{$lang->productCommon}會導致相應的{$lang->projectCommon}、需求和任務發生變化,確定嗎?";
$lang->bug->confirmDelete = '您確認要刪除該Bug嗎?';
$lang->bug->setTemplateTitle = '請輸入bug模板標題';
$lang->bug->remindTask = '該Bug已經轉化為任務,是否更新任務(編號:%s)狀態 ?';
$lang->bug->skipClose = 'Bug %s 不是已解決狀態,不能關閉。';
$lang->bug->applyTemplate = '應用模板';
$lang->bug->confirmDeleteTemplate = '您確認要刪除該模板嗎?';
/* 模板。*/
$lang->bug->tplStep = "<p>[步驟]</p><br/>";
+14 -42
View File
@@ -1670,7 +1670,12 @@ class bugModel extends model
{
$datas = $this->dao->select('openedBuild as name, count(openedBuild) as value')->from(TABLE_BUG)->where($this->reportCondition())->groupBy('openedBuild')->orderBy('value DESC')->fetchAll('name');
if(!$datas) return array();
$builds = $this->loadModel('build')->getProductBuildPairs($this->session->product, $branch = 0, $params = '');
/* Judge if all product or not. */
$products = $this->session->product;
preg_match('/`product` IN \((?P<productIdList>.+)\)/', $this->reportCondition(), $matchs);
if(!empty($matchs) and isset($matchs['productIdList'])) $products = str_replace('\'', '', $matchs['productIdList']);
$builds = $this->loadModel('build')->getProductBuildPairs($products, $branch = 0, $params = '');
/* Deal with the situation that a bug maybe associate more than one openedBuild. */
foreach($datas as $buildIDList => $data)
{
@@ -1939,45 +1944,6 @@ class bugModel extends model
foreach($commonOption->graph as $key => $value) if(!isset($chartOption->graph->$key)) $chartOption->graph->$key = $value;
}
/**
* Get bug templates of a user.
*
* @param string $account
* @access public
* @return array
*/
public function getUserBugTemplates($account)
{
$templates = $this->dao->select('id,account,title,content,public')
->from(TABLE_USERTPL)
->where('type')->eq('bug')
->andwhere('account', true)->eq($account)
->orWhere('public')->eq('1')
->markRight(1)
->orderBy('id')
->fetchAll();
return $templates;
}
/**
* Save user template.
*
* @access public
* @return void
*/
public function saveUserBugTemplate()
{
$template = fixer::input('post')
->setDefault('account', $this->app->user->account)
->setDefault('type', 'bug')
->stripTags('content', $this->config->allowedTags)
->get();
$condition = "`type`='bug' and account='{$this->app->user->account}'";
$this->dao->insert(TABLE_USERTPL)->data($template)->batchCheck('title, content', 'notempty')->check('title', 'unique', $condition)->exec();
if(!dao::isError()) $this->loadModel('score')->create('bug', 'saveTplModal', $this->dao->lastInsertID());
}
/**
* Return the file => label pairs of some fields.
*
@@ -2477,6 +2443,10 @@ class bugModel extends model
$class .= ' bug-' . $bug->status;
$title = "title='" . zget($this->lang->bug->statusList, $bug->status) . "'";
}
if($id == 'confirmed')
{
$class .= ' text-center';
}
if($id == 'title')
{
$class .= ' text-left';
@@ -2522,9 +2492,11 @@ class bugModel extends model
echo zget($this->lang->bug->priList, $bug->pri, $bug->pri);
echo "</span>";
break;
case 'title':
case 'confirmed':
$class = 'confirm' . $bug->confirmed;
echo "<span class='$class'>[{$this->lang->bug->confirmedList[$bug->confirmed]}]</span> ";
echo "<span class='$class'>" . zget($this->lang->bug->confirmedList, $bug->confirmed, $bug->confirmed) . "</span> ";
break;
case 'title':
if($bug->branch and isset($branches[$bug->branch])) echo "<span class='label label-outline label-badge'>{$branches[$bug->branch]}</span> ";
if($bug->module and isset($modulePairs[$bug->module])) echo "<span class='label label-gray label-badge'>{$modulePairs[$bug->module]}</span> ";
echo $canView ? html::a($bugLink, $bug->title, null, "style='color: $bug->color'") : "<span style='color: $bug->color'>{$bug->title}</span>";
+4 -3
View File
@@ -65,6 +65,7 @@
<tbody>
<?php
/* Remove the unused types. */
unset($lang->bug->typeList['interface']);
unset($lang->bug->typeList['designchange']);
unset($lang->bug->typeList['newfeature']);
unset($lang->bug->typeList['trackthings']);
@@ -111,7 +112,7 @@
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?>'><?php echo html::textarea("stepses[$i]", '', "rows='1' class='form-control autosize'");?></td>
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?>' style='overflow:visible'> <?php echo html::select("types[$i]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?>' style='overflow:visible'> <?php echo html::select("pris[$i]", $lang->bug->priList, $pri, "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?>' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '', "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?>' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '3', "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?>' style='overflow:visible'> <?php echo html::select("oses[$i]", $lang->bug->osList, $os, "class='form-control chosen'");?></td>
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?>' style='overflow:visible'> <?php echo html::select("browsers[$i]", $lang->bug->browserList, $browser, "class='form-control chosen'");?></td>
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?>'><?php echo html::input("keywords[$i]", '', "class='form-control'");?></td>
@@ -153,7 +154,7 @@
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?>'><?php echo html::textarea("stepses[$i]", '', "rows='1' class='form-control autosize'");?></td>
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?>' style='overflow:visible'> <?php echo html::select("types[$i]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?>' style='overflow:visible'> <?php echo html::select("pris[$i]", $lang->bug->priList, $pri, "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?>' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '', "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?>' style='overflow:visible'><?php echo html::select("severities[$i]", $lang->bug->severityList, '3', "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?>' style='overflow:visible'> <?php echo html::select("oses[$i]", $lang->bug->osList, $os, "class='form-control chosen'");?></td>
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?>' style='overflow:visible'> <?php echo html::select("browsers[$i]", $lang->bug->browserList, $browser, "class='form-control chosen'");?></td>
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?>'><?php echo html::input("keywords[$i]", '', "class='form-control'");?></td>
@@ -198,7 +199,7 @@
<td class='<?php echo zget($visibleFields, 'steps', 'hidden')?>'><?php echo html::textarea("stepses[%s]", '', "rows='1' class='form-control autosize'");?></td>
<td class='<?php echo zget($visibleFields, 'type', 'hidden')?>' style='overflow:visible'> <?php echo html::select("types[%s]", $lang->bug->typeList, $type, "class='form-control chosen'");?></td>
<td class='<?php echo zget($visibleFields, 'pri', 'hidden')?>' style='overflow:visible'> <?php echo html::select("pris[%s]", $lang->bug->priList, '', "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?>' style='overflow:visible'><?php echo html::select("severities[%s]", $lang->bug->severityList, '', "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'severity', 'hidden')?>' style='overflow:visible'><?php echo html::select("severities[%s]", $lang->bug->severityList, '3', "class='form-control'");?></td>
<td class='<?php echo zget($visibleFields, 'os', 'hidden')?>' style='overflow:visible'> <?php echo html::select("oses[%s]", $lang->bug->osList, $os, "class='form-control chosen'");?></td>
<td class='<?php echo zget($visibleFields, 'browser', 'hidden')?>' style='overflow:visible'> <?php echo html::select("browsers[%s]", $lang->bug->browserList, $browser, "class='form-control chosen'");?></td>
<td class='<?php echo zget($visibleFields, 'keywords', 'hidden')?>'><?php echo html::input("keywords[%s]", '', "class='form-control'");?></td>
+1
View File
@@ -87,6 +87,7 @@
* Remove designchange, newfeature, trackings from the typeList, because should be tracked in story or task.
* These thress types if upgrade from bugfree2.x.
*/
if($bug->type != 'interface') unset($typeList['interface']);
if($bug->type != 'designchange') unset($typeList['designchange']);
if($bug->type != 'newfeature') unset($typeList['newfeature']);
if($bug->type != 'trackthings') unset($typeList['trackthings']);
+6 -23
View File
@@ -68,28 +68,9 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
}
elseif($menuItem->name == 'QUERY')
{
if(isset($lang->custom->queryList))
{
echo '<div class="btn-group" id="query">';
$active = '';
$current = $menuItem->text;
$dropdownHtml = "<ul class='dropdown-menu'>";
foreach($lang->custom->queryList as $queryID => $queryTitle)
{
if($browseType == 'bysearch' and $queryID == $param)
{
$active = 'btn-active-text';
$current = "<span class='text'>{$queryTitle}</span> <span class='label label-light label-badge'>{$pager->recTotal}</span>";
}
$dropdownHtml .= '<li' . ($param == $queryID ? " class='active'" : '') . '>';
$dropdownHtml .= html::a($this->inlink('browse', "productID=$productID&branch=$branch&browseType=bySearch&param=$queryID"), $queryTitle);
}
$dropdownHtml .= '</ul>';
echo html::a('javascript:;', $current . " <span class='caret'></span>", '', "data-toggle='dropdown' class='btn btn-link $active'");
echo $dropdownHtml;
echo '</div>';
}
$searchBrowseLink = inlink('browse', "productID=$productID&branch=$branch&browseType=bySearch&param=%s");
$isBySearch = $browseType == 'bysearch';
include '../../common/view/querymenu.html.php';
}
elseif($menuItem->name == 'more')
{
@@ -173,7 +154,6 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
<p>
<span class="text-muted"><?php echo $lang->bug->noBug;?></span>
<?php if(common::hasPriv('bug', 'create')):?>
<span class="text-muted"><?php echo $lang->youCould;?></span>
<?php echo html::a($this->createLink('bug', 'create', "productID=$productID&branch=$branch&extra=moduleID=$moduleID"), "<i class='icon icon-plus'></i> " . $lang->bug->create, '', "class='btn btn-info'");?>
<?php endif;?>
</p>
@@ -204,6 +184,9 @@ $currentBrowseType = isset($lang->bug->mySelects[$browseType]) && in_array($brow
{
if($value->show)
{
if($this->app->getClientLang() == 'en' and $value->id == 'severity') $value->name = $lang->bug->severity;
if($this->app->getClientLang() == 'en' and $value->id == 'pri') $value->name = $lang->bug->pri;
if($this->app->getClientLang() == 'en' and $value->id == 'confirmed') $value->name = $lang->bug->confirmed;
$this->datatable->printHead($value, $orderBy, $vars);
$columns ++;
}
-11
View File
@@ -1,11 +0,0 @@
<?php
foreach($templates as $key => $template)
{
echo "<li id='tplBox$template->id' onmouseover='displayXIcon($template->id)' onmouseout='hideXIcon($template->id)'>";
echo "<a title='{$lang->bug->applyTemplate}' class='tpl-name' id='tplTitleBox$template->id' href='javascript:setTemplate($template->id)'>";
if($template->public) echo "<span class='label label-info label-badge'>{$lang->public}</span> ";
echo $template->title . "</a>";
if(empty($template->public) or $template->account == $app->user->account)echo "<a href='###' onclick='deleteTemplate($template->id)' id='templateID$template->id' class='btn-delete hidden'><i class='icon-close'></i></a>";
echo "<span id='template$template->id' class='hidden'>$template->content</span>";
echo '</li>';
}
+5 -32
View File
@@ -19,7 +19,7 @@ js::set('page', 'create');
js::set('createRelease', $lang->release->create);
js::set('createBuild', $lang->build->create);
js::set('refresh', $lang->refresh);
js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate);
js::set('flow', $config->global->flow);
?>
<div id="mainContent" class="main-content fade">
<div class="center-block">
@@ -71,6 +71,7 @@ js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate);
<div class='input-group' id='bugTypeInputGroup'>
<?php
/* Remove the unused types. */
unset($lang->bug->typeList['interface']);
unset($lang->bug->typeList['designchange']);
unset($lang->bug->typeList['newfeature']);
unset($lang->bug->typeList['trackthings']);
@@ -109,7 +110,7 @@ js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate);
</td>
<?php $showDeadline = strpos(",$showFields,", ',deadline,') !== false;?>
<?php if($showDeadline):?>
<td>
<td id='deadlineTd'>
<div class='input-group'>
<span class='input-group-addon'><?php echo $lang->bug->deadline?></span>
<span><?php echo html::input('deadline', $deadline, "class='form-control form-date'");?></span>
@@ -126,6 +127,7 @@ js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate);
<div class='input-group' id='bugTypeInputGroup'>
<?php
/* Remove the unused types. */
unset($lang->bug->typeList['interface']);
unset($lang->bug->typeList['designchange']);
unset($lang->bug->typeList['newfeature']);
unset($lang->bug->typeList['trackthings']);
@@ -217,17 +219,7 @@ js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate);
<tr>
<th><?php echo $lang->bug->steps;?></th>
<td colspan='2'>
<div id='tplBoxWrapper'>
<div class='btn-toolbar'>
<div class='btn-group'>
<button id='saveTplBtn' type='button' class='btn btn-mini' data-toggle='saveTplModal'><?php echo $lang->bug->saveTemplate?></button>
<button type='button' class='btn btn-mini dropdown-toggle' data-toggle='dropdown'><?php echo $lang->bug->applyTemplate?> <span class='caret'></span></button>
<ul id='tplBox' class='dropdown-menu pull-right'>
<?php echo $this->fetch('bug', 'buildTemplates');?>
</ul>
</div>
</div>
</div>
<?php echo $this->fetch('user', 'ajaxPrintTemplates', 'type=bug&link=steps');?>
<?php echo html::textarea('steps', $steps, "rows='10' class='form-control'");?>
</td>
</tr>
@@ -305,24 +297,5 @@ js::set('confirmDeleteTemplate', $lang->bug->confirmDeleteTemplate);
</form>
</div>
</div>
<div class="modal fade" id="saveTplModal" tabindex="-1" role="dialog">
<div class="modal-dialog w-600px">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><i class="icon icon-close"></i></button>
<h4 class="modal-title"><?php echo $lang->bug->setTemplateTitle;?></h4>
</div>
<div class="modal-body">
<div class='input-group'>
<?php echo html::input('title', '' , "class='form-control'")?>
<?php if(common::hasPriv('bug', 'setPublic')):?>
<span class='input-group-addon'><?php echo html::checkbox('public', array('1' => $lang->public))?></span>
<?php endif;?>
<span class='input-group-btn'><?php echo html::submitButton('', '', 'btn btn-primary')?></span>
</div>
</div>
</div>
</div>
</div>
<?php js::set('bugModule', $lang->bug->module);?>
<?php include '../../common/view/footer.html.php';?>
+5 -2
View File
@@ -128,6 +128,7 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild);
* Remove designchange, newfeature, trackings from the typeList, because should be tracked in story or task.
* These thress types if upgrade from bugfree2.x.
*/
if($bug->type != 'interface') unset($lang->bug->typeList['interface']);
if($bug->type != 'designchange') unset($lang->bug->typeList['designchange']);
if($bug->type != 'newfeature') unset($lang->bug->typeList['newfeature']);
if($bug->type != 'trackthings') unset($lang->bug->typeList['trackthings']);
@@ -210,7 +211,8 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild);
<table class='table table-form'>
<tbody>
<tr>
<th class='w-80px'><?php echo $lang->bug->openedBy;?></th>
<?php $colWidth = $app->getClientLang() == 'en' ? 'w-100px' : 'w-80px';?>
<th class='<?php echo $colWidth;?>'><?php echo $lang->bug->openedBy;?></th>
<td><?php echo $users[$bug->openedBy];?></td>
</tr>
<tr>
@@ -263,7 +265,8 @@ js::set('oldResolvedBuild' , $bug->resolvedBuild);
<table class='table table-form'>
<tbody>
<tr class='text-top'>
<th class='w-80px'><?php echo $lang->bug->linkBug;?></th>
<?php $colWidth = $app->getClientLang() == 'en' ? 'w-100px' : 'w-80px';?>
<th class='<?php echo $colWidth;?>'><?php echo $lang->bug->linkBug;?></th>
<td><?php echo html::a($this->createLink('bug', 'linkBugs', "bugID=$bug->id", '', true), $lang->bug->linkBugs, '', "class='text-primary' data-toggle='modal' data-type='iframe' data-width='95%'");?></td>
</tr>
<tr>
+6 -6
View File
@@ -43,7 +43,7 @@
<div class='cell'>
<div class='btn-toolbar'>
<?php foreach($lang->report->typeList as $type => $typeName):?>
<?php echo html::a("javascript:changeChartType(\"$type\")", ($type == 'default' ? "<i class='icon icon-list-alt muted'></i> " : "<i class='icon icon-chart-{$type}'></i>") . $typeName, '', "class='btn btn-link " . ($type == $chartType ? 'btn-active-line' : '') . "'")?>
<?php echo html::a("javascript:changeChartType(\"$type\")", ($type == 'default' ? "<i class='icon icon-list-alt muted'></i> " : "<i class='icon icon-chart-{$type} muted'></i>") . $typeName, '', "class='btn btn-link " . ($type == $chartType ? 'btn-active-line' : '') . "'")?>
<?php endforeach;?>
<div class='pull-right with-padding text-muted'><?php echo $lang->report->notice->help;?></div>
</div>
@@ -61,16 +61,16 @@
<thead>
<tr>
<th class='chart-label' colspan='2'><?php echo $lang->report->item;?></th>
<th class='w-50px'><?php echo $lang->report->value;?></th>
<th class='w-50px text-right'><?php echo $lang->report->value;?></th>
<th class='w-50px'><?php echo $lang->report->percent;?></th>
</tr>
</thead>
<?php foreach($datas[$chartType] as $key => $data):?>
<tr class='text-center'>
<tr>
<td class='chart-color'><i class='chart-color-dot'></i></td>
<td class='chart-label'><?php echo $data->name;?></td>
<td class='chart-value'><?php echo $data->value;?></td>
<td><?php echo ($data->percent * 100) . '%';?></td>
<td class='chart-label text-left'><?php echo $data->name;?></td>
<td class='chart-value text-right'><?php echo $data->value;?></td>
<td class='text-right'><?php echo ($data->percent * 100) . '%';?></td>
</tr>
<?php endforeach;?>
</table>
+2 -1
View File
@@ -32,7 +32,8 @@ js::set('productID' , $bug->product);
<form method='post' enctype='multipart/form-data' target='hiddenwin'>
<table class='table table-form'>
<tr>
<th class='w-100px'><?php echo $lang->bug->resolution;?></th>
<?php $colWidth = $app->getClientLang() == 'en' ? 'w-130px' : 'w-100px';?>
<th class='<?php echo $colWidth;?>'><?php echo $lang->bug->resolution;?></th>
<td class='w-p35-f'><?php echo html::select('resolution', $lang->bug->resolutionList, '', "class='form-control chosen' onchange=setDuplicate(this.value)");?></td>
<td></td>
</tr>
+1 -1
View File
@@ -99,7 +99,7 @@
</ul>
<div class='tab-content'>
<div class='tab-pane active' id='legendBasicInfo'>
<?php $widthClass = $app->getClientLang() == 'en' ? 'w-80px' : 'w-70px';?>
<?php $widthClass = $app->getClientLang() == 'en' ? 'w-110px' : 'w-70px';?>
<table class="table table-data">
<tbody>
<tr valign='middle'>
+1
View File
@@ -227,6 +227,7 @@ class build extends control
/* Assign. */
$this->view->users = $this->loadModel('user')->getPairs('noletter');
$this->view->build = $build;
$this->view->buildPairs = $this->build->getProjectBuildPairs($build->project, 0, 0, 'noempty,notrunk');
$this->view->actions = $this->loadModel('action')->getList('build', $buildID);
$this->view->link = $link;
$this->view->param = $param;
+1
View File
@@ -0,0 +1 @@
#branch_chosen .chosen-single{border-left:0px;}
+3 -1
View File
@@ -1,3 +1,5 @@
.linkBox #queryBox .search-form .form-actions {padding-bottom: 5px;}
.linkBox .table-header {padding: 8px 15px; border-bottom: 1px solid #cbd0db;}
#unlinkStoryList, #unlinkBugList {border-top: 1px solid #cbd0db;}
#unlinkStoryList, #unlinkBugList {border-top: 1px solid #cbd0db;}
.page-title .dropdown-menu{top: 15%; left: 170px;}
.page-title .text>a{font-weight: 700}
+14 -14
View File
@@ -11,17 +11,17 @@
*/
$lang->build->common = "Build";
$lang->build->create = "Create Build";
$lang->build->edit = "Edit";
$lang->build->edit = "Edit Build";
$lang->build->linkStory = "Link Story";
$lang->build->linkBug = "Link Bug";
$lang->build->delete = "Delete Build";
$lang->build->deleted = "Deleted";
$lang->build->view = "Build Details";
$lang->build->view = "Detail";
$lang->build->batchUnlink = 'Batch Unlink';
$lang->build->batchUnlinkStory = 'Batch Unlink Story';
$lang->build->batchUnlinkBug = 'Batch Unlink Bug';
$lang->build->batchUnlinkStory = 'Batch Unlink Stories';
$lang->build->batchUnlinkBug = 'Batch Unlink Bugs';
$lang->build->confirmDelete = "Do you want to delete this Build?";
$lang->build->confirmDelete = "Do you want to delete this build?";
$lang->build->confirmUnlinkStory = "Do you want to unlink this Story?";
$lang->build->confirmUnlinkBug = "Do you want to unlink this Bug?";
@@ -37,24 +37,24 @@ $lang->build->builder = 'Builder';
$lang->build->scmPath = 'SCM Path';
$lang->build->filePath = 'File Path';
$lang->build->desc = 'Description';
$lang->build->files = 'File';
$lang->build->files = 'Files';
$lang->build->last = 'Last Build';
$lang->build->packageType = 'Package Type';
$lang->build->unlinkStory = 'Unlink Story';
$lang->build->unlinkBug = 'Unlink Bug';
$lang->build->stories = 'Finished Story';
$lang->build->bugs = 'Resolved Bug';
$lang->build->generatedBugs = 'Reported Bug';
$lang->build->stories = 'Finished Stories';
$lang->build->bugs = 'Resolved Bugs';
$lang->build->generatedBugs = 'Reported Bugs';
$lang->build->noProduct = " <span style='color:red'>This {$lang->projectCommon} is not linked to {$lang->productCommon}, so the Build cannot be created. Please first <a href='%s'> link {$lang->productCommon}</a></span>";
$lang->build->noBuild = 'No builds. ';
$lang->build->noBuild = 'No builds yet.';
$lang->build->finishStories = ' %s Story is finished.';
$lang->build->resolvedBugs = ' %s Bug is resolved.';
$lang->build->createdBugs = ' %s Bug is created.';
$lang->build->finishStories = ' Finished Story %s';
$lang->build->resolvedBugs = ' Resolved Bug %s';
$lang->build->createdBugs = ' Reported Bug %s';
$lang->build->placeholder = new stdclass();
$lang->build->placeholder->scmPath = ' Source code repository, e.g. Subversion/Git Library path';
$lang->build->placeholder->filePath = ' Path of this Build package for downloading.';
$lang->build->placeholder->filePath = ' Download path for this Build.';
$lang->build->action = new stdclass();
$lang->build->action->buildopened = '$date, created by <strong>$actor</strong>, Build <strong>$extra</strong>.' . "\n";
+1 -1
View File
@@ -26,7 +26,7 @@
<div class='input-group'>
<?php echo html::select('product', $products, $product->id, "onchange='loadBranches(this.value);' class='form-control chosen' required");?>
<?php
if($product->type != 'normal')
if($product->type != 'normal' and isset($branches[$product->branch]))
{
if($product->branch) $branches = array($product->branch => $branches[$product->branch]);
echo "<span class='input-group-addon fix-padding fix-border'></span>" . html::select('branch', $branches, $product->branch, "class='form-control chosen'");
+14 -3
View File
@@ -25,11 +25,22 @@ tbody tr td:first-child input{display:none;}
<div id='mainMenu' class='clearfix'>
<div class='btn-toolbar pull-left'>
<?php $browseLink = $this->session->buildList ? $this->session->buildList : $this->createLink('project', 'build', "projectID=$build->project");?>
<?php common::printBack($browseLink, 'btn btn-link');?>
<?php common::printBack($browseLink, 'btn btn-secondary');?>
<div class='divider'></div>
<div class='page-title'>
<span class='label label-id'><?php echo $build->id;?></span>
<span class='text' title='<?php echo $build->name;?>'><?php echo $build->name;?></span>
<span class='text' title='<?php echo $build->name;?>'>
<?php echo html::a('javascript:void(0)', "<span class='label label-id'>{$build->id}</span> " . $build->name . " <span class='caret'></span>", '', "data-toggle='dropdown' class='btn btn-link btn-active-text'");?>
<?php
echo "<ul class='dropdown-menu'>";
foreach($buildPairs as $id => $name)
{
echo '<li' . ($id == $build->id ? " class='active'" : '') . '>';
echo html::a($this->createLink('build', 'view', "buildID=$id"), $name);
echo '</li>';
}
echo '</ul>';
?>
</span>
<?php if($build->deleted):?>
<span class='label label-danger'><?php echo $lang->build->deleted;?></span>
<?php endif; ?>
+93 -87
View File
@@ -10,24 +10,24 @@
* @link http://www.zentao.net
*/
$lang->arrow = '&nbsp;<i class="icon-angle-right"></i>&nbsp;';
$lang->colon = '::';
$lang->colon = '-';
$lang->comma = ',';
$lang->dot = '.';
$lang->at = ' on ';
$lang->downArrow = '↓';
$lang->null = 'null';
$lang->null = 'Null';
$lang->ellipsis = '…';
$lang->percent = '%';
$lang->dash = '-';
$lang->zentaoPMS = 'ZenTao';
$lang->welcome = "%s PMS";
$lang->welcome = "%s ALM";
$lang->logout = 'Logout';
$lang->login = 'Login';
$lang->help = 'Help';
$lang->aboutZenTao = 'ZenTao';
$lang->aboutZenTao = 'About';
$lang->profile = 'Profile';
$lang->changePassword = 'Password';
$lang->changePassword = 'Change Password';
$lang->runInfo = "<div class='row'><div class='u-1 a-center' id='debugbar'>Time %s MS, Memory %s KB, Query %s. </div></div>";
$lang->agreement = "I have read and agreed to the terms and conditions of <a href='http://zpl.pub/page/zplv12.html' target='_blank'> Z PUBLIC LICENSE 1.2 </a>. <span class='text-danger'>Without authorization, I should not remove, hide or cover any logos/links of ZenTao.</span>";
$lang->designedByAIUX = "<a href='http://aiuxstudio.com/' class='link-aiux' target='_blank'>Designed by <strong>AIUX</strong></a>";
@@ -54,62 +54,62 @@ $lang->day = 'Day';
$lang->customConfig = 'Custom Config';
$lang->public = 'Public';
$lang->trunk = 'Trunk';
$lang->sort = 'Sort';
$lang->sort = 'Order';
$lang->required = 'Required';
$lang->noData = 'No data.';
$lang->actions = 'Action';
$lang->restore = 'Restore';
$lang->restore = 'Reset';
$lang->comment = 'Note';
$lang->history = 'History';
$lang->attatch = 'File';
$lang->reverse = 'Reverse';
$lang->attatch = 'Files';
$lang->reverse = 'Inverse';
$lang->switchDisplay = 'Toggle';
$lang->expand = 'Expand';
$lang->collapse = 'Collapse';
$lang->saveSuccess = 'Saved';
$lang->fail = 'Fail';
$lang->addFiles = 'Add';
$lang->addFiles = 'Added Files';
$lang->files = 'Files ';
$lang->pasteText = 'Paste';
$lang->uploadImages = 'Upload';
$lang->timeout = 'Timeout. Pease check your connection, or try it again!';
$lang->repairTable = 'Database table might be damaged. Execute phpmyadmin or myisamchk to fix it.';
$lang->duplicate = '%s has the same title as a file title existed.';
$lang->pasteText = 'Paste Multi-Items';
$lang->uploadImages = 'Upload Multi-Images';
$lang->timeout = 'Timeout. Check your newtwork connections, or try it again!';
$lang->repairTable = 'Database table might be damaged. Run phpmyadmin or myisamchk to fix it.';
$lang->duplicate = '%s has the same title as a file existed.';
$lang->ipLimited = "<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /></head><body>Sorry, your current IP is restricted. PLease contact your Administer to grant your permissions.</body></html>";
$lang->unfold = '+';
$lang->fold = '-';
$lang->homepage = 'Set Home';
$lang->noviceTutorial = 'Rookie Tutorial';
$lang->noviceTutorial = 'ZenTao Tutorial';
$lang->changeLog = 'Change Log';
$lang->manual = 'Manual';
$lang->manual = 'User Manual';
$lang->manualUrl = 'https://www.zentao.pm/book/zentaomanual/zentao-installation-11.html';
$lang->customMenu = 'Custom Menu';
$lang->customField = 'Custom Field';
$lang->lineNumber = 'Line No.';
$lang->tutorialConfirm = 'You are using ZenTao tutorial. Do you want to quit right now?';
$lang->youCould = 'You could ';
$lang->preShortcutKey = '[Shortcut:←]';
$lang->nextShortcutKey = '[Shortcut:→]';
$lang->backShortcutKey = '[Shortcut:Alt+↑]';
$lang->select = 'Select';
$lang->selectAll = 'All';
$lang->selectReverse = 'Reverse';
$lang->selectAll = 'Select All';
$lang->selectReverse = 'Select Inverse';
$lang->loading = 'Loading...';
$lang->notFound = 'Not found!';
$lang->notPage = 'Sorry, the features you are visiting are in development!';
$lang->showAll = '[[Show All]]';
$lang->future = 'Pending';
$lang->future = 'Waiting';
$lang->year = 'Year';
$lang->workingHour = 'Hour';
$lang->workingHour = 'Hours';
$lang->idAB = 'ID';
$lang->priAB = 'P';
$lang->statusAB = 'Status';
$lang->openedByAB = 'Creator';
$lang->assignedToAB = 'Assignee';
$lang->openedByAB = 'CreatedBy';
$lang->assignedToAB = 'AssignedTo';
$lang->typeAB = 'Type';
$lang->common = new stdclass();
@@ -139,8 +139,8 @@ $lang->searchObjects['user'] = 'User';
$lang->searchObjects['build'] = 'Build';
$lang->searchObjects['release'] = 'Release';
$lang->searchObjects['productplan'] = $lang->productCommon . 'Plan';
$lang->searchObjects['testtask'] = 'Test';
$lang->searchObjects['doc'] = 'Doc';
$lang->searchObjects['testtask'] = 'Request';
$lang->searchObjects['doc'] = 'Document';
$lang->searchObjects['testsuite'] = 'Case Library';
$lang->searchObjects['testreport'] = 'Test Report';
$lang->searchTips = 'ID (ctrl+g)';
@@ -155,15 +155,15 @@ $lang->exportFileTypeList['csv'] = 'csv';
$lang->exportFileTypeList['xml'] = 'xml';
$lang->exportFileTypeList['html'] = 'html';
$lang->exportTypeList['all'] = 'All';
$lang->exportTypeList['selected'] = 'Selected';
$lang->exportTypeList['all'] = 'All Data';
$lang->exportTypeList['selected'] = 'Selected Data';
/* Language. */
$lang->lang = 'Language';
/* Theme style. */
$lang->theme = 'Theme';
$lang->themes['default'] = 'ZenTao Blue (default)';
$lang->themes['default'] = 'Default';
$lang->themes['green'] = 'Green';
$lang->themes['red'] = 'Red';
$lang->themes['purple'] = 'Purple';
@@ -183,17 +183,17 @@ $lang->my = new stdclass();
$lang->my->menu = new stdclass();
$lang->my->menu->index = 'Home|my|index';
$lang->my->menu->calendar = array('link' => 'Calendar|my|calendar|', 'subModule' => 'todo', 'alias' => 'todo');
$lang->my->menu->calendar = array('link' => 'Schedule|my|calendar|', 'subModule' => 'todo', 'alias' => 'todo');
$lang->my->menu->task = array('link' => 'Task|my|task|', 'subModule' => 'task');
$lang->my->menu->bug = array('link' => 'Bug|my|bug|', 'subModule' => 'bug');
$lang->my->menu->testtask = array('link' => 'Test Task|my|testtask|', 'subModule' => 'testcase,testtask', 'alias' => 'testcase');
$lang->my->menu->testtask = array('link' => 'Request|my|testtask|', 'subModule' => 'testcase,testtask', 'alias' => 'testcase');
$lang->my->menu->story = array('link' => 'Story|my|story|', 'subModule' => 'story');
$lang->my->menu->myProject = "{$lang->projectCommon}|my|project|";
$lang->my->menu->dynamic = 'Dynamic|my|dynamic|';
$lang->my->menu->dynamic = 'Dynamics|my|dynamic|';
$lang->my->menu->profile = array('link' => 'Profile|my|profile', 'alias' => 'editprofile');
$lang->my->menu->changePassword = 'Password|my|changepassword';
$lang->my->menu->manageContacts = 'Contact|my|managecontacts';
$lang->my->menu->score = 'Point|my|score';
$lang->my->menu->score = array('link' => 'Points|my|score', 'subModule' => 'score');
$lang->my->dividerMenu = ',task,myProject,profile,';
@@ -212,7 +212,7 @@ $lang->product->menu->plan = array('link' => 'Plan|productplan|browse|produc
$lang->product->menu->release = array('link' => 'Release|release|browse|productID=%s', 'subModule' => 'release');
$lang->product->menu->roadmap = 'Roadmap|product|roadmap|productID=%s';
$lang->product->menu->project = "{$lang->projectCommon}|product|project|status=all&productID=%s";
$lang->product->menu->dynamic = 'Dynamic|product|dynamic|productID=%s';
$lang->product->menu->dynamic = 'Dynamics|product|dynamic|productID=%s';
$lang->product->menu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc');
$lang->product->menu->branch = '@branch@|branch|manage|productID=%s';
$lang->product->menu->module = 'Module|tree|browse|productID=%s&view=story';
@@ -239,9 +239,9 @@ $lang->project->menu->kanban = array('link' => 'Kanban|project|kanban|projectI
$lang->project->menu->burn = array('link' => 'Burndown|project|burn|projectID=%s');
$lang->project->menu->list = array('link' => 'More|project|grouptask|projectID=%s', 'alias' => 'grouptask,tree', 'class' => 'dropdown dropdown-hover');
$lang->project->menu->story = array('link' => 'Story|project|story|projectID=%s', 'subModule' => 'story', 'alias' => 'linkstory,storykanban');
$lang->project->menu->qa = array('link' => 'Test|project|bug|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover');
$lang->project->menu->qa = array('link' => 'Request|project|bug|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover');
$lang->project->menu->doc = array('link' => 'Doc|doc|objectLibs|type=project&objectID=%s&from=project', 'subModule' => 'doc');
$lang->project->menu->action = array('link' => 'Dynamic|project|dynamic|projectID=%s', 'subModule' => 'dynamic', 'class' => 'dropdown dropdown-hover');
$lang->project->menu->action = array('link' => 'Dynamics|project|dynamic|projectID=%s', 'subModule' => 'dynamic', 'class' => 'dropdown dropdown-hover');
$lang->project->menu->product = $lang->productCommon . '|project|manageproducts|projectID=%s';
$lang->project->menu->team = array('link' => 'Team|project|team|projectID=%s', 'alias' => 'managemembers');
$lang->project->menu->view = array('link' => 'Overview|project|view|projectID=%s', 'alias' => 'edit,start,suspend,putoff,close');
@@ -254,7 +254,7 @@ $lang->project->subMenu->list->tree = 'Tree View|project|tree|projectID=%s'
$lang->project->subMenu->qa = new stdclass();
$lang->project->subMenu->qa->bug = 'Bug|project|bug|projectID=%s';
$lang->project->subMenu->qa->build = array('link' => 'Build|project|build|projectID=%s', 'subModule' => 'build');
$lang->project->subMenu->qa->testtask = array('link' => 'Test Task|project|testtask|projectID=%s', 'subModule' => 'testreport,testtask');
$lang->project->subMenu->qa->testtask = array('link' => 'Request|project|testtask|projectID=%s', 'subModule' => 'testreport,testtask');
$lang->project->dividerMenu = ',story,team,product,';
@@ -262,7 +262,6 @@ $lang->task = new stdclass();
$lang->build = new stdclass();
$lang->task->menu = $lang->project->menu;
$lang->build->menu = $lang->project->menu;
$lang->build->menu->qa = array('link' => 'Build|project|build|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover');
/* QA menu settings. */
$lang->qa = new stdclass();
@@ -270,7 +269,7 @@ $lang->qa->menu = new stdclass();
$lang->qa->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->qa->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
$lang->qa->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s');
$lang->qa->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s');
$lang->qa->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s');
$lang->qa->menu->report = array('link' => 'Report|testreport|browse|productID=%s');
$lang->qa->menu->caselib = array('link' => 'Case Library|testsuite|library');
@@ -280,7 +279,7 @@ $lang->bug->menu = new stdclass();
$lang->bug->menu->bug = array('link' => 'Bug|bug|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,resolve,close,activate,report,batchedit,batchactivate,confirmbug,assignto', 'subModule' => 'tree');
$lang->bug->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
$lang->bug->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s');
$lang->bug->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s');
$lang->bug->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s');
$lang->bug->menu->report = array('link' => 'Report|testreport|browse|productID=%s');
$lang->bug->menu->caselib = array('link' => 'Case Library|testsuite|library');
@@ -289,7 +288,7 @@ $lang->testcase = new stdclass();
$lang->testcase->menu = new stdclass();
$lang->testcase->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testcase->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s', 'alias' => 'view,create,batchcreate,edit,batchedit,showimport,groupcase,importfromlib', 'subModule' => 'tree');
$lang->testcase->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s');
$lang->testcase->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s');
$lang->testcase->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s');
$lang->testcase->menu->report = array('link' => 'Report|testreport|browse|productID=%s');
$lang->testcase->menu->caselib = array('link' => 'Case Library|testsuite|library');
@@ -298,7 +297,7 @@ $lang->testtask = new stdclass();
$lang->testtask->menu = new stdclass();
$lang->testtask->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testtask->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
$lang->testtask->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases,start,close,batchrun,groupcase,report');
$lang->testtask->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s', 'alias' => 'view,create,edit,linkcase,cases,start,close,batchrun,groupcase,report');
$lang->testtask->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s');
$lang->testtask->menu->report = array('link' => 'Report|testreport|browse|productID=%s');
$lang->testtask->menu->caselib = array('link' => 'Case Library|testsuite|library');
@@ -307,7 +306,7 @@ $lang->testsuite = new stdclass();
$lang->testsuite->menu = new stdclass();
$lang->testsuite->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testsuite->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
$lang->testsuite->menu->testtask = array('link' => 'Test Task|testtask|browse|productID=%s');
$lang->testsuite->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s');
$lang->testsuite->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s', 'alias' => 'view,create,edit,linkcase');
$lang->testsuite->menu->report = array('link' => 'Report|testreport|browse|productID=%s');
$lang->testsuite->menu->caselib = array('link' => 'Case Library|testsuite|library');
@@ -316,16 +315,16 @@ $lang->testreport = new stdclass();
$lang->testreport->menu = new stdclass();
$lang->testreport->menu->bug = array('link' => 'Bug|bug|browse|productID=%s');
$lang->testreport->menu->testcase = array('link' => 'Case|testcase|browse|productID=%s');
$lang->testreport->menu->testtask = array('link' => 'Test|testtask|browse|productID=%s');
$lang->testreport->menu->testtask = array('link' => 'Request|testtask|browse|productID=%s');
$lang->testreport->menu->testsuite = array('link' => 'Suite|testsuite|browse|productID=%s');
$lang->testreport->menu->report = array('link' => 'Report|testreport|browse|productID=%s', 'alias' => 'view,create,edit');
$lang->testreport->menu->caselib = array('link' => 'Library|testsuite|library');
$lang->testreport->menu->caselib = array('link' => 'Case Library|testsuite|library');
$lang->caselib = new stdclass();
$lang->caselib->menu = new stdclass();
$lang->caselib->menu->bug = array('link' => 'Bug|bug|browse|');
$lang->caselib->menu->testcase = array('link' => 'Case|testcase|browse|');
$lang->caselib->menu->testtask = array('link' => 'Test|testtask|browse|');
$lang->caselib->menu->testtask = array('link' => 'Request|testtask|browse|');
$lang->caselib->menu->testsuite = array('link' => 'Suite|testsuite|browse|');
$lang->caselib->menu->report = array('link' => 'Report|testreport|browse|');
$lang->caselib->menu->caselib = array('link' => 'Case Library|testsuite|library', 'alias' => 'createlib,createcase,libview,edit,batchcreatecase,showimport', 'subModule' => 'tree,testcase');
@@ -344,11 +343,11 @@ $lang->report->menu = new stdclass();
$lang->report->menu->product = array('link' => $lang->productCommon . '|report|productsummary');
$lang->report->menu->prj = array('link' => $lang->projectCommon . '|report|projectdeviation');
$lang->report->menu->test = array('link' => 'Test|report|bugcreate', 'alias' => 'bugassign');
$lang->report->menu->test = array('link' => 'Request|report|bugcreate', 'alias' => 'bugassign');
$lang->report->menu->staff = array('link' => 'Company|report|workload');
$lang->report->notice = new stdclass();
$lang->report->notice->help = 'Note: Report is generated on search results. Please search the list before you generate a report.';
$lang->report->notice->help = 'Note: The data of a report is based on the data in the List. Click the tab, e.g. All, then click Report to generate a report.';
/* Company menu settings. */
$lang->company = new stdclass();
@@ -356,7 +355,7 @@ $lang->company->menu = new stdclass();
$lang->company->menu->browseUser = array('link' => 'User|company|browse', 'subModule' => 'user');
$lang->company->menu->dept = array('link' => 'Department|dept|browse', 'subModule' => 'dept');
$lang->company->menu->browseGroup = array('link' => 'Privilege|group|browse', 'subModule' => 'group');
$lang->company->menu->dynamic = 'Dynamic|company|dynamic|';
$lang->company->menu->dynamic = 'Dynamics|company|dynamic|';
$lang->company->menu->view = array('link' => 'Company|company|view');
$lang->dept = new stdclass();
@@ -371,11 +370,12 @@ $lang->user->menu = $lang->company->menu;
$lang->admin = new stdclass();
$lang->admin->menu = new stdclass();
$lang->admin->menu->index = array('link' => 'Home|admin|index', 'alias' => 'register,certifytemail,certifyztmobile,ztcompany');
$lang->admin->menu->message = array('link' => 'Message|message|index', 'subModule' => 'message,mail,webhook');
$lang->admin->menu->message = array('link' => 'Notification|message|index', 'subModule' => 'message,mail,webhook');
$lang->admin->menu->custom = array('link' => 'Custom|custom|set', 'subModule' => 'custom');
$lang->admin->menu->sso = array('link' => 'Integrate|admin|sso');
$lang->admin->menu->sso = array('link' => 'Integration|admin|sso');
$lang->admin->menu->dev = array('link' => 'Develop|dev|api', 'alias' => 'db', 'subModule' => 'dev,editor,entry');
$lang->admin->menu->translate = array('link' => 'Translate|translate|index', 'subModule' => 'translate');
$lang->admin->menu->data = array('link' => 'Data|backup|index', 'subModule' => 'backup,action');
$lang->admin->menu->safe = array('link' => 'Security|admin|safe', 'alias' => 'checkweak');
$lang->admin->menu->system = array('link' => 'System|cron|index', 'subModule' => 'cron');
@@ -384,7 +384,7 @@ $lang->admin->subMenu = new stdclass();
$lang->admin->subMenu->message = new stdclass();
$lang->admin->subMenu->message->mail = array('link' => 'Mail|mail|index', 'subModule' => 'mail');
$lang->admin->subMenu->message->webhook = array('link' => 'Webhook|webhook|browse', 'subModule' => 'webhook');
$lang->admin->subMenu->message->setting = array('link' => 'Setting|message|setting', 'subModule' => 'message');
$lang->admin->subMenu->message->setting = array('link' => 'Settings|message|setting', 'subModule' => 'message');
$lang->admin->subMenu->sso = new stdclass();
$lang->admin->subMenu->sso->ranzhi = 'Zdoo|admin|sso';
@@ -393,7 +393,7 @@ $lang->admin->subMenu->dev = new stdclass();
$lang->admin->subMenu->dev->api = array('link' => 'API|dev|api');
$lang->admin->subMenu->dev->db = array('link' => 'Database|dev|db');
$lang->admin->subMenu->dev->editor = array('link' => 'Editor|editor|index', 'subModule' => 'editor');
$lang->admin->subMenu->dev->entry = array('link' => 'Entry|entry|browse', 'subModule' => 'entry');
$lang->admin->subMenu->dev->entry = array('link' => 'Application|entry|browse', 'subModule' => 'entry');
$lang->admin->subMenu->data = new stdclass();
$lang->admin->subMenu->data->backup = array('link' => 'Backup|backup|index', 'subModule' => 'backup');
@@ -409,7 +409,6 @@ $lang->action = new stdclass();
$lang->backup = new stdclass();
$lang->extension = new stdclass();
$lang->custom = new stdclass();
$lang->editor = new stdclass();
$lang->mail = new stdclass();
$lang->cron = new stdclass();
$lang->dev = new stdclass();
@@ -417,6 +416,8 @@ $lang->entry = new stdclass();
$lang->webhook = new stdclass();
$lang->message = new stdclass();
$lang->search = new stdclass();
$lang->translate = new stdclass();
$lang->editor = new stdclass();
$lang->convert->menu = $lang->admin->menu;
$lang->upgrade->menu = $lang->admin->menu;
@@ -425,12 +426,13 @@ $lang->backup->menu = $lang->admin->menu;
$lang->cron->menu = $lang->admin->menu;
$lang->extension->menu = $lang->admin->menu;
$lang->custom->menu = $lang->admin->menu;
$lang->editor->menu = $lang->admin->menu;
$lang->mail->menu = $lang->admin->menu;
$lang->dev->menu = $lang->admin->menu;
$lang->entry->menu = $lang->admin->menu;
$lang->webhook->menu = $lang->admin->menu;
$lang->message->menu = $lang->admin->menu;
$lang->translate->menu = $lang->admin->menu;
$lang->editor->menu = $lang->admin->menu;
/* Menu group. */
$lang->menugroup = new stdclass();
@@ -446,10 +448,13 @@ $lang->menugroup->user = 'company';
$lang->menugroup->group = 'company';
$lang->menugroup->bug = 'qa';
$lang->menugroup->testcase = 'qa';
$lang->menugroup->case = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testtask = 'qa';
$lang->menugroup->testsuite = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testreport = 'qa';
$lang->menugroup->doclib = 'doc';
$lang->menugroup->people = 'company';
$lang->menugroup->dept = 'company';
$lang->menugroup->todo = 'my';
@@ -459,36 +464,37 @@ $lang->menugroup->backup = 'admin';
$lang->menugroup->cron = 'admin';
$lang->menugroup->extension = 'admin';
$lang->menugroup->custom = 'admin';
$lang->menugroup->editor = 'admin';
$lang->menugroup->mail = 'admin';
$lang->menugroup->dev = 'admin';
$lang->menugroup->entry = 'admin';
$lang->menugroup->webhook = 'admin';
$lang->menugroup->message = 'admin';
$lang->menugroup->translate = 'admin';
$lang->menugroup->editor = 'admin';
/* Error info. */
$lang->error = new stdclass();
$lang->error->companyNotFound = "The domain %s cannot be found!";
$lang->error->length = array("『%s』length error. It should be『%s』", "『%s』length should be <=『%s』and >『%s』.");
$lang->error->reg = "『%s』format error. It should be『%s』.";
$lang->error->unique = "『%s』『%s』exists. Go to Admin->Recycle to restore it, if you are sure it is deleted.";
$lang->error->unique = "『%s』『%s』exists. Go to Admin->Recycle Bin to restore it, if you are sure it is deleted.";
$lang->error->gt = "『%s』should be >『%s』.";
$lang->error->ge = "『%s』should be >=『%s』.";
$lang->error->notempty = "『%s』should not be blank.";
$lang->error->empty = "『%s』should be null.";
$lang->error->equal = "『%s』has to be『%s』.";
$lang->error->int = array("『%s』should be numbers", "『%s』should be 『%s-%s』.");
$lang->error->float = "『%s』should have numbers, decimals.";
$lang->error->float = "『%s』should have numbers, or decimals.";
$lang->error->email = "『%s』should be valid Email.";
$lang->error->URL = "『%s』should be url.";
$lang->error->date = "『%s』should be valid date.";
$lang->error->datetime = "『%s』should be valid date.";
$lang->error->code = "『%s』should be letters or numbers.";
$lang->error->account = "『%s』should be letters or numbers of three or more.";
$lang->error->account = "『%s』should be >= 3 letters or numbers.";
$lang->error->passwordsame = "Passwords should be consistent.";
$lang->error->passwordrule = "Password should abide by rules. It should be at least 6 characters.";
$lang->error->passwordrule = "Password should conform to rules. It should be >= 6 characters.";
$lang->error->accessDenied = 'Access is denied.';
$lang->error->pasteImg = 'Image is not allowed to paste in your browser!';
$lang->error->pasteImg = 'Images are not allowed to be pasted in your browser!';
$lang->error->noData = 'No data.';
$lang->error->editedByOther = 'This record might have been changed. Please refresh and try to edit again!';
$lang->error->tutorialData = 'No data can be imported in tutorial mode. Please quit tutorial first!';
@@ -496,7 +502,7 @@ $lang->error->tutorialData = 'No data can be imported in tutorial mode. Pleas
/* Page info. */
$lang->pager = new stdclass();
$lang->pager->noRecord = "No records.";
$lang->pager->digest = " <strong>%s</strong> in total. %s <strong>%s/%s</strong> &nbsp; ";
$lang->pager->digest = "Total: <strong>%s</strong>. %s <strong>%s/%s</strong> &nbsp; ";
$lang->pager->recPerPage = " <strong>%s</strong> per page";
$lang->pager->first = "<i class='icon-step-backward' title='Home'></i>";
$lang->pager->pre = "<i class='icon-play icon-flip-horizontal' title='Previous Page'></i>";
@@ -509,26 +515,26 @@ $lang->pager->summery = "<strong>%s-%s</strong> of <strong>%s</strong>.";
$lang->proVersion = "<a href='https://www.zentao.pm/book/zentaopromanual/free-open-source-project-management-software-zentaopro-127.html' target='_blank' id='proLink' class='text-important'>ZenTao Pro <i class='text-danger icon-pro-version'></i></a> &nbsp; ";
$lang->downNotify = "Download Desktop Notification";
$lang->downloadClient = "Download Desktop Client";
$lang->downloadClient = "Download ZenTao Desktop";
$lang->clientHelp = "Client Help";
$lang->clientHelpLink = "https://www.zentao.pm/book/zentaomanual/scrum-tool-open-source-client-214.html";
$lang->clientHelpLink = "https://www.zentao.pm/book/zentaomanual/";
$lang->website = "https://www.zentao.pm";
$lang->suhosinInfo = "Warning! Data is reaching the limit. Please change <font color=red>sohusin.post.max_vars</font> and <font color=red>sohusin.request.max_vars</font> (set larger %s value) in php.ini, then save and restart Apache or php-fpm, or some data will not be saved.";
$lang->maxVarsInfo = "Warning! Data is reaching the limit. Please change <font color=red>max_input_vars</font> (set larger %s value) in php.ini, then save and restart Apache or php-fpm, or some data will not be saved.";
$lang->pasteTextInfo = "Paste text here. Each line will be the title of each record. ";
$lang->noticeImport = "Imported data contains something that has already existed in system. Please confirm your actions.";
$lang->importConfirm = "Confirm";
$lang->pasteTextInfo = "Paste the text of items here. Each item will be the title of a story. ";
$lang->noticeImport = "Imported data contains data that has already existed in system. Please confirm you actions on the date.";
$lang->importConfirm = "Import";
$lang->importAndCover = "Override";
$lang->importAndInsert = "Insert";
$lang->noResultsMatch = "No results match found!";
$lang->searchMore = "More results:";
$lang->chooseUsersToMail = "Choose users to be notified";
$lang->browserNotice = 'Your browser might not display the best effect. Use Chrome, Firefox, IE9+, Opera or Safari.';
$lang->noticePasteImg = "Paste images here";
$lang->pasteImgFail = "Pasting image failed. Try again later.";
$lang->chooseUsersToMail = "Choose users that will be notified.";
$lang->browserNotice = 'The browser you currently use might not get the best browsing results. It is recommended that you use Chrome, Firefox, IE9+, Opera or Safari.';
$lang->noticePasteImg = "You can paste images into the editor.";
$lang->pasteImgFail = "Failed to paste images. Try again later.";
$lang->pasteImgUploading = "Uploading...";
/* Time formats settings. */
@@ -558,7 +564,7 @@ $lang->datepicker->dpText->TEXT_TODAY = 'Today';
$lang->datepicker->dpText->TEXT_NEXT_YEAR = 'Next Year';
$lang->datepicker->dpText->TEXT_NEXT_MONTH = 'Next Month';
$lang->datepicker->dpText->TEXT_CLOSE = 'Close';
$lang->datepicker->dpText->TEXT_DATE = 'Choose Time';
$lang->datepicker->dpText->TEXT_DATE = 'Choose Tab';
$lang->datepicker->dpText->TEXT_CHOOSE_DATE = 'Choose Date';
$lang->datepicker->dayNames = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
@@ -737,10 +743,10 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Add bug, testcase and testtask module. */
$lang->menu->bug = 'Bug|bug|index';
$lang->menu->testcase = 'Test Case|testcase|index';
$lang->menu->testsuite = 'Test Suite|testsuite|index';
$lang->menu->testtask = 'Test|testtask|index';
$lang->menu->caselib = 'Case Lib|testsuite|library';
$lang->menu->testcase = 'Case|testcase|index';
$lang->menu->testsuite = 'Suite|testsuite|index';
$lang->menu->testtask = 'Request|testtask|index';
$lang->menu->caselib = 'Case Library|testsuite|library';
$lang->menuOrder[6] = 'bug';
$lang->menuOrder[7] = 'testcase';
@@ -752,22 +758,22 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust sub menu of bug module. */
$lang->bug->menu = new stdclass();
$lang->bug->menu->all = 'All|bug|browse|productID=%s&branch=%s&browseType=all&param=%s';
$lang->bug->menu->unclosed = 'Open|bug|browse|productID=%s&branch=%s&browseType=unclosed&param=%s';
$lang->bug->menu->openedbyme = 'CreateByMe|bug|browse|productID=%s&branch=%s&browseType=openedbyme&param=%s';
$lang->bug->menu->assigntome = 'AssignToMe|bug|browse|productID=%s&branch=%s&browseType=assigntome&param=%s';
$lang->bug->menu->resolvedbyme = 'ResolveByMe|bug|browse|productID=%s&branch=%s&browseType=resolvedbyme&param=%s';
$lang->bug->menu->unclosed = 'Unclosed|bug|browse|productID=%s&branch=%s&browseType=unclosed&param=%s';
$lang->bug->menu->openedbyme = 'ReportedByMe|bug|browse|productID=%s&branch=%s&browseType=openedbyme&param=%s';
$lang->bug->menu->assigntome = 'AssignedToMe|bug|browse|productID=%s&branch=%s&browseType=assigntome&param=%s';
$lang->bug->menu->resolvedbyme = 'ResolvedByMe|bug|browse|productID=%s&branch=%s&browseType=resolvedbyme&param=%s';
$lang->bug->menu->toclosed = 'ToBeClosed|bug|browse|productID=%s&branch=%s&browseType=toclosed&param=%s';
$lang->bug->menu->unresolved = 'Unresolved|bug|browse|productID=%s&branch=%s&browseType=unresolved&param=%s';
$lang->bug->menu->unresolved = 'Active|bug|browse|productID=%s&branch=%s&browseType=unresolved&param=%s';
$lang->bug->menu->more = array('link' => 'More|bug|browse|productID=%s&branch=%s&browseType=unconfirmed&param=%s', 'class' => 'dropdown dropdown-hover');
$lang->bug->subMenu = new stdclass();
$lang->bug->subMenu->more = new stdclass();
$lang->bug->subMenu->more->unconfirmed = 'Unconfirmed|bug|browse|productID=%s&branch=%s&browseType=unconfirmed&param=%s';
$lang->bug->subMenu->more->assigntonull = 'Unassigned|bug|browse|productID=%s&branch=%s&browseType=assigntonull&param=%s';
$lang->bug->subMenu->more->longlifebugs = 'Pending|bug|browse|productID=%s&branch=%s&browseType=longlifebugs&param=%s';
$lang->bug->subMenu->more->longlifebugs = 'Stalled|bug|browse|productID=%s&branch=%s&browseType=longlifebugs&param=%s';
$lang->bug->subMenu->more->postponedbugs = 'Postponed|bug|browse|productID=%s&branch=%s&browseType=postponedbugs&param=%s';
$lang->bug->subMenu->more->overduebugs = 'Overdue|bug|browse|productID=%s&branch=%s&browseType=overduebugs&param=%s';
$lang->bug->subMenu->more->needconfirm = 'ToConfirm|bug|browse|productID=%s&branch=%s&browseType=needconfirm&param=%s';
$lang->bug->subMenu->more->needconfirm = 'ToBeConfirmed|bug|browse|productID=%s&branch=%s&browseType=needconfirm&param=%s';
$lang->bug->menuOrder[5] = 'product';
$lang->bug->menuOrder[10] = 'all';
@@ -787,8 +793,8 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust sub menu of testcase. */
$lang->testcase->menu = new stdclass();
$lang->testcase->menu->all = 'All|testcase|browse|productID=%s&branch=%s&browseType=all';
$lang->testcase->menu->wait = 'Wait|testcase|browse|productID=%s&branch=%s&browseType=wait';
$lang->testcase->menu->bysuite = array('link' => 'Test Suite|testsuite|create|productID=%s', 'class' => 'dropdown dropdown-hover');
$lang->testcase->menu->wait = 'Waiting|testcase|browse|productID=%s&branch=%s&browseType=wait';
$lang->testcase->menu->bysuite = array('link' => 'Suite|testsuite|create|productID=%s', 'class' => 'dropdown dropdown-hover');
$lang->testcase->subMenu = new stdclass();
$lang->testcase->subMenu->bysuite = new stdclass();
@@ -807,7 +813,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust sub menu of testtask. */
$lang->testtask->menu = new stdclass();
$lang->testtask->menu->totalStatus = 'All|testtask|browse|productID=%s&branch=%s&type=%s,totalStatus';
$lang->testtask->menu->wait = 'Wait|testtask|browse|productID=%s&branch=%s&type=%s,wait';
$lang->testtask->menu->wait = 'Waiting|testtask|browse|productID=%s&branch=%s&type=%s,wait';
$lang->testtask->menu->doing = 'Doing|testtask|browse|productID=%s&branch=%s&type=%s,doing';
$lang->testtask->menu->blocked = 'Blocked|testtask|browse|productID=%s&branch=%s&type=%s,blocked';
$lang->testtask->menu->done = 'Done|testtask|browse|productID=%s&branch=%s&type=%s,done';
@@ -828,7 +834,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust sub menu of caselib module. */
$lang->caselib->menu = new stdclass();
$lang->caselib->menu->all = 'All|testsuite|library|libID=%s&browseType=all';
$lang->caselib->menu->wait = 'Wait|testsuite|library|libID=%s&browseType=wait';
$lang->caselib->menu->wait = 'Waiting|testsuite|library|libID=%s&browseType=wait';
$lang->caselib->menu->view = 'View|testsuite|libview|libID=%s';
$lang->caselib->menuOrder[5] = 'lib';
+5 -4
View File
@@ -108,9 +108,10 @@ $lang->admin->menuOrder[15] = 'custom';
$lang->admin->menuOrder[20] = 'sso';
$lang->admin->menuOrder[25] = 'extension';
$lang->admin->menuOrder[30] = 'dev';
$lang->admin->menuOrder[35] = 'data';
$lang->admin->menuOrder[40] = 'safe';
$lang->admin->menuOrder[45] = 'system';
$lang->admin->menuOrder[35] = 'translate';
$lang->admin->menuOrder[40] = 'data';
$lang->admin->menuOrder[45] = 'safe';
$lang->admin->menuOrder[50] = 'system';
$lang->admin->subMenuOrder = new stdclass();
$lang->admin->subMenuOrder->message[5] = 'mail';
@@ -133,8 +134,8 @@ $lang->backup->menuOrder = $lang->admin->menuOrder;
$lang->cron->menuOrder = $lang->admin->menuOrder;
$lang->extension->menuOrder = $lang->admin->menuOrder;
$lang->custom->menuOrder = $lang->admin->menuOrder;
$lang->editor->menuOrder = $lang->admin->menuOrder;
$lang->mail->menuOrder = $lang->admin->menuOrder;
$lang->dev->menuOrder = $lang->admin->menuOrder;
$lang->entry->menuOrder = $lang->admin->menuOrder;
$lang->webhook->menuOrder = $lang->admin->menuOrder;
$lang->editor->menuOrder = $lang->admin->menuOrder;
+15 -8
View File
@@ -10,7 +10,7 @@
* @link http://www.zentao.net
*/
$lang->arrow = '&nbsp;<i class="icon-angle-right"></i>&nbsp;';
$lang->colon = '::';
$lang->colon = '-';
$lang->comma = ',';
$lang->dot = '。';
$lang->at = ' 于 ';
@@ -88,7 +88,6 @@ $lang->customMenu = '自定义导航';
$lang->customField = '自定义表单项';
$lang->lineNumber = '行号';
$lang->tutorialConfirm = '检测到你尚未退出新手教程模式,是否现在退出?';
$lang->youCould = '您现在可以 ';
$lang->preShortcutKey = '[快捷键:←]';
$lang->nextShortcutKey = '[快捷键:→]';
@@ -99,6 +98,7 @@ $lang->selectAll = '全选';
$lang->selectReverse = '反选';
$lang->loading = '稍候...';
$lang->notFound = '抱歉,您访问的对象并不存在!';
$lang->notPage = '抱歉,您访问的功能正在开发中!';
$lang->showAll = '[[全部显示]]';
$lang->future = '未来';
@@ -193,7 +193,7 @@ $lang->my->menu->dynamic = '动态|my|dynamic|';
$lang->my->menu->profile = array('link' => '档案|my|profile', 'alias' => 'editprofile');
$lang->my->menu->changePassword = '密码|my|changepassword';
$lang->my->menu->manageContacts = '联系人|my|managecontacts';
$lang->my->menu->score = '积分|my|score';
$lang->my->menu->score = array('link' => '积分|my|score', 'subModule' => 'score');
$lang->my->dividerMenu = ',task,myProject,profile,';
@@ -262,7 +262,6 @@ $lang->task = new stdclass();
$lang->build = new stdclass();
$lang->task->menu = $lang->project->menu;
$lang->build->menu = $lang->project->menu;
$lang->build->menu->qa = array('link' => '版本|project|build|projectID=%s', 'subModule' => 'bug,build,testtask', 'alias' => 'build,testtask', 'class' => 'dropdown dropdown-hover');
/* QA视图菜单设置。*/
$lang->qa = new stdclass();
@@ -348,7 +347,7 @@ $lang->report->menu->test = array('link' => '测试|report|bugcreate', 'alias
$lang->report->menu->staff = array('link' => '组织|report|workload');
$lang->report->notice = new stdclass();
$lang->report->notice->help = '注:统计报表的数据,来源于列表页面的检索结果,生成统计报表前请先在列表页面进行检索。';
$lang->report->notice->help = '注:统计报表的数据来源于列表页面的检索结果,生成统计报表前请先在列表页面进行检索。';
/* 组织结构视图菜单设置。*/
$lang->company = new stdclass();
@@ -376,6 +375,7 @@ $lang->admin->menu->custom = array('link' => '自定义|custom|set', 'subModu
$lang->admin->menu->sso = array('link' => '集成|admin|sso');
$lang->admin->menu->extension = array('link' => '插件|extension|browse', 'subModule' => 'extension');
$lang->admin->menu->dev = array('link' => '二次开发|dev|api', 'alias' => 'db', 'subModule' => 'dev,editor,entry');
$lang->admin->menu->translate = array('link' => '翻译|translate|index', 'subModule' => 'translate');
$lang->admin->menu->data = array('link' => '数据|backup|index', 'subModule' => 'backup,action');
$lang->admin->menu->safe = array('link' => '安全|admin|safe', 'alias' => 'checkweak');
$lang->admin->menu->system = array('link' => '系统|cron|index', 'subModule' => 'cron');
@@ -409,7 +409,6 @@ $lang->action = new stdclass();
$lang->backup = new stdclass();
$lang->extension = new stdclass();
$lang->custom = new stdclass();
$lang->editor = new stdclass();
$lang->mail = new stdclass();
$lang->cron = new stdclass();
$lang->dev = new stdclass();
@@ -417,6 +416,8 @@ $lang->entry = new stdclass();
$lang->webhook = new stdclass();
$lang->message = new stdclass();
$lang->search = new stdclass();
$lang->translate = new stdclass();
$lang->editor = new stdclass();
$lang->convert->menu = $lang->admin->menu;
$lang->upgrade->menu = $lang->admin->menu;
@@ -425,12 +426,13 @@ $lang->backup->menu = $lang->admin->menu;
$lang->cron->menu = $lang->admin->menu;
$lang->extension->menu = $lang->admin->menu;
$lang->custom->menu = $lang->admin->menu;
$lang->editor->menu = $lang->admin->menu;
$lang->mail->menu = $lang->admin->menu;
$lang->dev->menu = $lang->admin->menu;
$lang->entry->menu = $lang->admin->menu;
$lang->webhook->menu = $lang->admin->menu;
$lang->message->menu = $lang->admin->menu;
$lang->translate->menu = $lang->admin->menu;
$lang->editor->menu = $lang->admin->menu;
/* 菜单分组。*/
$lang->menugroup = new stdclass();
@@ -446,10 +448,13 @@ $lang->menugroup->user = 'company';
$lang->menugroup->group = 'company';
$lang->menugroup->bug = 'qa';
$lang->menugroup->testcase = 'qa';
$lang->menugroup->case = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testtask = 'qa';
$lang->menugroup->testsuite = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testreport = 'qa';
$lang->menugroup->doclib = 'doc';
$lang->menugroup->people = 'company';
$lang->menugroup->dept = 'company';
$lang->menugroup->todo = 'my';
@@ -459,12 +464,13 @@ $lang->menugroup->backup = 'admin';
$lang->menugroup->cron = 'admin';
$lang->menugroup->extension = 'admin';
$lang->menugroup->custom = 'admin';
$lang->menugroup->editor = 'admin';
$lang->menugroup->mail = 'admin';
$lang->menugroup->dev = 'admin';
$lang->menugroup->entry = 'admin';
$lang->menugroup->webhook = 'admin';
$lang->menugroup->message = 'admin';
$lang->menugroup->translate = 'admin';
$lang->menugroup->editor = 'admin';
/* 错误提示信息。*/
$lang->error = new stdclass();
@@ -859,6 +865,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust menu group. */
$lang->menugroup->bug = 'bug';
$lang->menugroup->testcase = 'testcase';
$lang->menugroup->case = 'testcase';
$lang->menugroup->testtask = 'testtask';
$lang->menugroup->testsuite = 'testsuite';
$lang->menugroup->testreport = 'testtask';
+5 -1
View File
@@ -88,7 +88,6 @@ $lang->customMenu = '自定義導航';
$lang->customField = '自定義表單項';
$lang->lineNumber = '行號';
$lang->tutorialConfirm = '檢測到你尚未退出新手教程模式,是否現在退出?';
$lang->youCould = '您現在可以 ';
$lang->preShortcutKey = '[快捷鍵:←]';
$lang->nextShortcutKey = '[快捷鍵:→]';
@@ -99,6 +98,7 @@ $lang->selectAll = '全選';
$lang->selectReverse = '反選';
$lang->loading = '稍候...';
$lang->notFound = '抱歉,您訪問的對象並不存在!';
$lang->notPage = '抱歉,您訪問的功能正在開發中!';
$lang->showAll = '[[全部顯示]]';
$lang->future = '未來';
@@ -446,10 +446,13 @@ $lang->menugroup->user = 'company';
$lang->menugroup->group = 'company';
$lang->menugroup->bug = 'qa';
$lang->menugroup->testcase = 'qa';
$lang->menugroup->case = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testtask = 'qa';
$lang->menugroup->testsuite = 'qa';
$lang->menugroup->caselib = 'qa';
$lang->menugroup->testreport = 'qa';
$lang->menugroup->doclib = 'doc';
$lang->menugroup->people = 'company';
$lang->menugroup->dept = 'company';
$lang->menugroup->todo = 'my';
@@ -858,6 +861,7 @@ if(isset($config->global->flow) and $config->global->flow == 'onlyTest')
/* Adjust menu group. */
$lang->menugroup->bug = 'bug';
$lang->menugroup->testcase = 'testcase';
$lang->menugroup->case = 'testcase';
$lang->menugroup->testtask = 'testtask';
$lang->menugroup->testsuite = 'testsuite';
$lang->menugroup->testreport = 'testtask';
+38 -14
View File
@@ -254,12 +254,12 @@ class commonModel extends model
if(!$isGuest)
{
echo '<li class="user-profile-item">';
echo "<a href='". helper::createLink('my', 'profile', '', '', true) . "' class='iframe" . (!empty($app->user->role) && isset($lang->user->roleList[$app->user->role]) ? '' : ' no-role') . "' data-width='600'>";
echo "<a href='". helper::createLink('my', 'profile') . (!empty($app->user->role) && isset($lang->user->roleList[$app->user->role]) ? '' : ' no-role') . "'>";
echo "<div class='avatar avatar bg-secondary avatar-circle'>" . strtoupper($app->user->account{0}) . "</div>\n";
echo '<div class="user-profile-name">' . (empty($app->user->realname) ? $app->user->account : $app->user->realname) . '</div>';
if(isset($lang->user->roleList[$app->user->role])) echo '<div class="user-profile-role">' . $lang->user->roleList[$app->user->role] . '</div>';
echo '</a></li><li class="divider"></li>';
echo '<li>' . html::a(helper::createLink('my', 'profile', '', '', true), $lang->profile, '', "class='iframe' data-width='600'") . '</li>';
echo '<li>' . html::a(helper::createLink('my', 'profile'), $lang->profile) . '</li>';
echo '<li>' . html::a(helper::createLink('my', 'changepassword', '', '', true), $lang->changePassword, '', "class='iframe' data-width='500'") . '</li>';
echo "<li class='divider'></li>";
@@ -320,7 +320,7 @@ class commonModel extends model
echo '<li>' . html::a($lang->manualUrl, $lang->manual, '_blank', "class='open-help-tab'") . '</li>';
echo '<li>' . html::a(helper::createLink('misc', 'changeLog'), $lang->changeLog, '', "class='iframe' data-width='800' data-headerless='true' data-backdrop='true' data-keyboard='true'") . '</li>';
echo "</ul></li>\n";
echo '<li>' . html::a(helper::createLink('misc', 'about'), $lang->aboutZenTao, '', "class='about iframe' data-width='900' data-headerless='true' data-backdrop='true' data-keyboard='true' data-class='modal-about'") . '</li>';
echo '<li>' . html::a(helper::createLink('misc', 'about'), $lang->aboutZenTao, '', "class='about iframe' data-width='950' data-headerless='true' data-backdrop='true' data-keyboard='true' data-class='modal-about'") . '</li>';
}
/**
@@ -381,11 +381,14 @@ class commonModel extends model
$link['method'] = $subMenuMethod;
$link['vars'] = $subMenuParams;
$menu = new stdclass();
$menu->name = $subMenuKey;
$menu->link = $link;
$menu->text = $subMenuName;
$menu->hidden = false;
$subMenuItem = isset($items->$subMenuKey) ? $items->$subMenuKey : array();
$menu = new stdclass();
$menu->name = $subMenuKey;
$menu->link = $link;
$menu->text = $subMenuName;
$menu->subModule = isset($subMenuItem['subModule']) ? $subMenuItem['subModule'] : '';
$menu->alias = isset($subMenuItem['alias']) ? $subMenuItem['alias'] : '';
$menu->hidden = false;
$subMenu[$subMenuKey] = $menu;
}
@@ -1645,7 +1648,6 @@ EOD;
public function checkEntry()
{
$this->loadModel('entry');
if($this->session->valid_entry)
{
if(!$this->session->entry_code) $this->response('SESSION_CODE_MISSING');
@@ -1661,7 +1663,7 @@ EOD;
if(!$entry->key) $this->response('EMPTY_KEY');
if(empty($entry->account)) $this->response('ACCOUNT_UNBOUND');
if(!$this->checkIP($entry->ip)) $this->response('IP_DENIED');
if(!$this->checkEntryToken($entry->key)) $this->response('INVALID_TOKEN');
if(!$this->checkEntryToken($entry)) $this->response('INVALID_TOKEN');
$this->loadModel('user');
$user = $this->dao->findByAccount($entry->account)->from(TABLE_USER)->fetch();
@@ -1676,6 +1678,14 @@ EOD;
$this->session->set('VALID_ENTRY', md5(md5($this->get->code) . $this->server->remote_addr));
$this->loadModel('entry')->saveLog($entry->id, $this->server->request_uri);
/* Add for task #5384. */
if($_SERVER['REQUEST_METHOD'] == 'POST' and empty($_POST))
{
$post = file_get_contents("php://input");
if(!empty($post)) $post = json_decode($post, true);
if(!empty($post)) $_POST = $post;
}
unset($_GET['code']);
unset($_GET['token']);
}
@@ -1683,16 +1693,30 @@ EOD;
/**
* Check token of an entry.
*
* @param string $key
* @param object $entry
* @access public
* @return void
* @return bool
*/
public function checkEntryToken($key)
public function checkEntryToken($entry)
{
parse_str($this->server->query_String, $queryString);
unset($queryString['token']);
/* Change for task #5384. */
if(isset($queryString['time']))
{
$result = $this->get->token == md5($entry->code . $entry->key . $queryString['time']);
if($result)
{
if($queryString['time'] <= $entry->calledTime) $this->response('CALLED_TIME');
$this->loadModel('entry')->updateTime($entry->code, $queryString['time']);
unset($_GET['time']);
return $result;
}
}
$queryString = http_build_query($queryString);
return $this->get->token == md5(md5($queryString) . $key);
return $this->get->token == md5(md5($queryString) . $entry->key);
}
/**
+1 -1
View File
@@ -6,7 +6,7 @@
$(function()
{
<?php if(!empty($setShowModule)):?>
$('#sidebar .cell .text-center:last').append("<a href='#showModuleModal' data-toggle='modal' class='text-secondary small'><?php echo $lang->datatable->showModule?></a><hr class='space-sm' />");
$('#sidebar .cell .text-center:last').append("<a href='#showModuleModal' data-toggle='modal' class='text-secondary small'><?php echo $lang->datatable->showModuleAB?></a><hr class='space-sm' />");
<?php endif;?>
var $btnToolbar = $('#main .table-header .btn-toolbar:first');
+8 -163
View File
@@ -26,7 +26,7 @@ $uid = uniqid('');
var simpleTools =
[ 'formatblock', 'fontname', 'fontsize', '|', 'forecolor', 'hilitecolor', 'bold', 'italic','underline', '|',
'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', '|',
'emoticons', 'image', 'code', 'link', '|', 'removeformat','undo', 'redo', 'fullscreen', 'source', 'about'];
'emoticons', 'image', 'code', 'link', 'table', '|', 'removeformat','undo', 'redo', 'fullscreen', 'source', 'about'];
var fullTools =
[ 'formatblock', 'fontname', 'fontsize', 'lineheight', '|', 'forecolor', 'hilitecolor', '|', 'bold', 'italic','underline', 'strikethrough', '|',
'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', '|',
@@ -37,7 +37,6 @@ $uid = uniqid('');
'table', 'code', '|', 'pagebreak', 'anchor', '|',
'fullscreen', 'source', 'preview', 'about'];
var editorToolsMap = {fullTools: fullTools, simpleTools: simpleTools, bugTools: bugTools};
var imageLoadingEle = '<div class="image-loading-ele small" style="padding: 5px; background: #FFF3E0; width: 300px; border-radius: 2px; border: 1px solid #FF9800; color: #ff5d5d; margin: 10px 0;"><i class="icon icon-spin icon-spinner-indicator muted"></i> <?php echo $this->lang->pasteImgUploading?></div>';
// Kindeditor default options
var editorDefaults =
@@ -51,18 +50,22 @@ $uid = uniqid('');
uploadJson: createLink('file', 'ajaxUpload', 'uid=' + kuid),
allowFileManager: true,
langType: '<?php echo $editorLang?>',
cssData: 'html,body {background: none}.article-content, .article-content table td, .article-content table th {line-height: 1.3846153846; font-size: 13px;}.article-content .table-auto {width: auto!important; max-width: 100%;}',
placeholderStyle: {fontSize: '13px', color: '#888'},
pasteImage: {postUrl: createLink('file', 'ajaxPasteImage', 'uid=' + kuid), placeholder: true},
syncAfterBlur: true,
spellcheck: false
};
window.editor = {};
var nextFormControl = 'input:not([type="hidden"]), textarea:not(.ke-edit-textarea), button[type="submit"], select';
// Init kindeditor
var setKindeditor = function(element, options)
{
var $editor = $(element);
var pasted = false;
options = $.extend({}, editorDefaults, $editor.data(), options);
var editorID = $editor.attr('id');
options = $.extend({}, editorDefaults, $editor.data(), options);
if(editorID === undefined)
{
editorID = 'kindeditor-' + $.zui.uuid();
@@ -70,7 +73,6 @@ $uid = uniqid('');
}
var editorTool = editorToolsMap[options.tools || editor.tools] || simpleTools;
var placeholder = $editor.attr('placeholder') || options.placeholder || '';
/* Remove fullscreen in modal. */
if(config.onlybody == 'yes')
@@ -86,164 +88,7 @@ $uid = uniqid('');
$.extend(options,
{
items: editorTool,
afterChange: function(){$editor.change().hide();},
afterCreate : function()
{
var frame = this.edit;
var doc = this.edit.doc;
var cmd = this.edit.cmd;
pasted = true;
if(!K.WEBKIT && !K.GECKO)
{
var pasted = false;
$(doc.body).bind('paste', function(ev)
{
pasted = true;
return true;
});
setTimeout(function()
{
$(doc.body).bind('keyup', function(ev)
{
if(pasted)
{
pasted = false;
return true;
}
if(ev.keyCode == 86 && ev.ctrlKey) alert('<?php echo $this->lang->error->pasteImg;?>');
})
}, 10);
}
if(pasted && placeholder.indexOf('<?php echo $this->lang->noticePasteImg?>') < 0)
{
if(placeholder) placeholder += '<br />';
placeholder += ' <?php echo $this->lang->noticePasteImg?>';
}
var pasteBegin = function()
{
$.enableForm(false, 0, 1);
$('body').one('click.ke' + kuid, function(){$.enableForm(true);});
cmd.inserthtml(imageLoadingEle);
keditor.readonly(true);
};
var pasteEnd = function(error)
{
if(error)
{
if(error === true) error = '<?php echo $this->lang->pasteImgFail;?>';
$.zui.messager.danger(error, {placement: 'center'});
}
$.enableForm(true, 0, 1);
$('body').off('.ke' + kuid);
$(doc.body).find('.image-loading-ele').remove();
keditor.readonly(false);
};
var pasteUrl = createLink('file', 'ajaxPasteImage', 'uid=' + kuid);
/* Paste in chrome.*/
/* Code reference from http://www.foliotek.com/devblog/copy-images-from-clipboard-in-javascript/. */
if(K.WEBKIT)
{
$(doc.body).bind('paste', function(ev)
{
var $this = $(this);
var original = ev.originalEvent;
var file = original.clipboardData.items[0].getAsFile();
if(file)
{
pasteBegin();
var reader = new FileReader();
reader.onload = function(evt)
{
var result = evt.target.result;
var arr = result.split(",");
var data = arr[1]; // raw base64
var contentType = arr[0].split(";")[0].split(":")[1];
html = '<img src="' + result + '" alt="" />';
$.post(pasteUrl, {editor: html}, function(data)
{
cmd.inserthtml(data);
pasteEnd();
}).error(function()
{
pasteEnd(true);
});
};
reader.readAsDataURL(file);
}
});
}
/* Paste in firefox and other firefox. */
else
{
K(doc.body).bind('paste', function(ev)
{
setTimeout(function()
{
var html = K(doc.body).html();
if(html.search(/<img src="data:.+;base64,/) > -1)
{
pasteBegin();
$.post(pasteUrl, {editor: html}, function(data)
{
if(data.indexOf('<img') === 0) data = '<p>' + data + '</p>';
frame.html(data);
pasteEnd();
}).error(function()
{
pasteEnd(true);
});
}
}, 80);
});
}
/* End */
/* Add for placeholder. */
$(this.edit.doc).find('body').after('<span class="kindeditor-ph" style="width:100%;color:#888; padding:5px 5px 5px 7px; background-color:transparent; position:absolute;z-index:10;top:2px;border:0;overflow:auto;resize:none; font-size:13px;"></span>');
var $placeholder = $(this.edit.doc).find('.kindeditor-ph');
$placeholder.html(placeholder);
$placeholder.css('pointerEvents', 'none');
$placeholder.click(function(){frame.doc.body.focus()});
if(frame.html() != '') $placeholder.hide();
},
afterFocus: function()
{
var frame = this.edit;
var $placeholder = $(frame.doc).find('.kindeditor-ph');
if($placeholder.size() == 0)
{
setTimeout(function(){$(frame.doc).find('.kindeditor-ph').hide();}, 50);
}
else
{
$placeholder.hide();
}
$editor.prev('.ke-container').addClass('focus');
$(document).trigger('mousedown'); // see http://pms.zentao.net/task-view-5115.html
},
afterBlur: function()
{
this.sync();
$editor.prev('.ke-container').removeClass('focus');
var frame = this.edit;
if(K(frame.doc.body).html() == '') $(frame.doc).find('.kindeditor-ph').show();
},
afterTab: function(id)
{
var $next = $editor.next(nextFormControl);
if(!$next.length) $next = $editor.parent().next().find(nextFormControl);
if(!$next.length) $next = $editor.parent().parent().next().find(nextFormControl);
$next = $next.first().focus();
var keditor = $next.data('keditor');
if(keditor) keditor.focus();
else if($next.hasClass('chosen')) $next.trigger('chosen:activate');
}
placeholder: $editor.attr('placeholder') || options.placeholder || ''
});
try
+52
View File
@@ -0,0 +1,52 @@
<style>
#mainMenu #query.btn-group li {position: relative;}
#mainMenu #query.btn-group li a{margin-right:20px;}
#mainMenu #query.btn-group li .btn-delete{
padding:0 7px;
position: absolute;
right: -10px;
top: -5px;
display: block;
width: 20px;
text-align: center;
}
</style>
<?php
if(isset($lang->custom->queryList))
{
echo '<div class="btn-group" id="query">';
$active = '';
$current = $menuItem->text;
$dropdownHtml = "<ul class='dropdown-menu'>";
foreach($lang->custom->queryList as $queryID => $queryTitle)
{
if($isBySearch and $queryID == $param)
{
$active = 'btn-active-text';
$current = "<span class='text'>{$queryTitle}</span> <span class='label label-light label-badge'>{$pager->recTotal}</span>";
}
$dropdownHtml .= '<li' . ($param == $queryID ? " class='active'" : '') . '>';
$dropdownHtml .= html::a(sprintf($searchBrowseLink, $queryID), $queryTitle);
$dropdownHtml .= html::a("###", "<i class='icon icon-close'></i>", '', "class='btn-delete' data-id={$queryID} onclick='removeQueryFromMenu(this)'");
$dropdownHtml .= '</li>';
}
$dropdownHtml .= '</ul>';
echo html::a('javascript:;', $current . " <span class='caret'></span>", '', "data-toggle='dropdown' class='btn btn-link $active'");
echo $dropdownHtml;
echo '</div>';
}
?>
<script>
function removeQueryFromMenu(obj)
{
var $obj = $(obj);
var link = createLink('search', 'ajaxRemoveMenu', "queryID=" + $obj.data('id'));
$.get(link, function()
{
$obj.closest('li').remove();
if($('#mainMenu #query.btn-group').find('li').length == 0) $('#mainMenu #query.btn-group').remove();
})
return false;
}
</script>
+3 -3
View File
@@ -14,10 +14,10 @@ $lang->company->index = "Home";
$lang->company->edit = "Edit Company";
$lang->company->view = "Company Information";
$lang->company->browse = "User List";
$lang->company->dynamic = "Dynamic";
$lang->company->dynamic = "Dynamics";
$lang->company->orgView = 'View';
$lang->company->name = 'Name';
$lang->company->name = 'Company Name';
$lang->company->phone = 'Phone';
$lang->company->fax = 'Fax';
$lang->company->address = 'Mailing Address';
@@ -25,7 +25,7 @@ $lang->company->zipcode = 'Zip Code';
$lang->company->website = 'Website';
$lang->company->backyard = 'Intranet';
$lang->company->guest = 'Guest Login';
$lang->company->admins = 'Administrators';
$lang->company->admins = 'Administrator';
$lang->company->product = $lang->productCommon;
$lang->company->project = $lang->projectCommon;
+11 -2
View File
@@ -39,7 +39,16 @@
<div id='dynamics'>
<?php $firstAction = '';?>
<?php foreach($dateGroups as $date => $actions):?>
<?php $isToday = date(DT_DATE4) == $date;?>
<?php
if($this->app->getClientLang() == 'en')
{
$isToday = date('M d') == $date;
}
else
{
$isToday = date(DT_DATE4) == $date;
}
?>
<div class="dynamic <?php if($isToday) echo 'active';?>">
<div class="dynamic-date">
<?php if($isToday):?>
@@ -58,7 +67,7 @@
<span class="timeline-text">
<?php echo zget($users, $action->actor) . ' ' . $action->actionLabel;?>
<?php if($action->action != 'login' and $action->action != 'logout'):?>
<span class="text-muted"><?php echo $action->objectLabel;?></span>
<span class="text"><?php echo $action->objectLabel;?></span>
<?php echo html::a($action->objectLink, $action->objectName);?>
<span class="label label-id"><?php echo $action->objectID;?></span>
<?php endif;?>
+2 -1
View File
@@ -23,7 +23,8 @@
<form class='main-form' method='post' target='hiddenwin'>
<table class='table table-form'>
<tr>
<th><?php echo $lang->company->name;?></th>
<?php $colWidth = $app->getClientLang() == 'en' ? 'w-120px' : 'w-80px';?>
<th class='<?php echo $colWidth;?>'><?php echo $lang->company->name;?></th>
<td><?php echo html::input('name', $company->name, "class='form-control'");?></td>
</tr>
<tr>
+12 -12
View File
@@ -14,8 +14,8 @@ $lang->convert->index = 'Home';
$lang->convert->start = 'Start';
$lang->convert->desc = <<<EOT
<p>Welcome to the System Conversion Wizard, this program will assist you to convert data to ZenTao PMS.</p>
<strong>There is certain risk of conversion, so it is strongly recommended that you back up your databse and relavant files before conversion, and make sure no one is operating on either systems.</strong>
<p>Welcome to the System Conversion Wizard, this program will assist you to convert data to ZenTao.</p>
<strong>There are risks in the conversion, so it is strongly recommended that you back up your databse and relavant files before conversion, and make sure that no one is using either system.</strong>
EOT;
$lang->convert->setConfig = 'Source Config';
@@ -31,7 +31,7 @@ $lang->convert->mustSelectSource = "You must select a source system.";
$lang->convert->direction = "{$lang->projectCommon} converted to";
$lang->convert->questionTypeOfRedmine = 'Type in Redmine';
$lang->convert->aimTypeOfZentao = 'Convert to Type in Zentao';
$lang->convert->aimTypeOfZentao = 'Convert to Type in ZenTao';
$lang->convert->directionList['bug'] = 'Bug';
$lang->convert->directionList['task'] = 'Task';
@@ -48,20 +48,20 @@ $lang->convert->fail = '<span class="text-danger"><i class="icon-remove-s
$lang->convert->dbHost = 'Database Server';
$lang->convert->dbPort = 'Server Port';
$lang->convert->dbUser = 'Databse User Name';
$lang->convert->dbUser = 'Database User Name';
$lang->convert->dbPassword = 'Database Password';
$lang->convert->dbName = 'Databse used in %s';
$lang->convert->dbCharset = '%s Database Code';
$lang->convert->dbName = 'Database used in %s';
$lang->convert->dbCharset = '%s Database Coding';
$lang->convert->dbPrefix = '%s Table Prefix';
$lang->convert->installPath = '%s Installed path';
$lang->convert->installPath = '%s Installation Root Directory';
$lang->convert->checkDB = 'Database';
$lang->convert->checkTable = 'Table';
$lang->convert->checkPath = 'Installed Path';
$lang->convert->checkPath = 'Installation Path';
$lang->convert->execute = 'Convert';
$lang->convert->item = 'Item Converted';
$lang->convert->count = 'Count';
$lang->convert->count = 'No.';
$lang->convert->info = 'Info';
$lang->convert->bugfree = new stdclass();
@@ -72,7 +72,7 @@ $lang->convert->bugfree->bugs = 'Bug';
$lang->convert->bugfree->cases = 'Test Case';
$lang->convert->bugfree->results = 'Result';
$lang->convert->bugfree->actions = 'History';
$lang->convert->bugfree->files = 'File';
$lang->convert->bugfree->files = 'Files';
$lang->convert->redmine = new stdclass();
$lang->convert->redmine->users = 'User';
@@ -88,7 +88,7 @@ $lang->convert->redmine->releases = 'Release';
$lang->convert->redmine->builds = 'Build';
$lang->convert->redmine->docLibs = 'Doc Lib';
$lang->convert->redmine->docs = 'Doc';
$lang->convert->redmine->files = 'File';
$lang->convert->redmine->files = 'Files';
$lang->convert->errorFileNotExits = 'File %s is not found.';
$lang->convert->errorUserExists = 'User %s existed.';
@@ -97,7 +97,7 @@ $lang->convert->errorBuildExists = 'Build %s existed.';
$lang->convert->errorReleaseExists = 'Release %s existed.';
$lang->convert->errorCopyFailed = 'File %s copy failed.';
$lang->convert->setParam = 'Please set parameters.';
$lang->convert->setParam = 'Set parameters.';
$lang->convert->statusType = new stdclass();
$lang->convert->priType = new stdclass();
+13 -13
View File
@@ -1,7 +1,7 @@
<?php
$lang->cron->common = 'Scheduled Task';
$lang->cron->common = 'Cron';
$lang->cron->index = 'Home';
$lang->cron->list = 'Tasks';
$lang->cron->list = 'Task';
$lang->cron->create = 'Add';
$lang->cron->edit = 'Edit';
$lang->cron->delete = 'Delete';
@@ -9,7 +9,7 @@ $lang->cron->toggle = 'Activate/Deactivate';
$lang->cron->turnon = 'On/Off';
$lang->cron->openProcess = 'Restart';
$lang->cron->m = 'Min';
$lang->cron->m = 'Minute';
$lang->cron->h = 'Hour';
$lang->cron->dom = 'Day';
$lang->cron->mon = 'Month';
@@ -17,37 +17,37 @@ $lang->cron->dow = 'Week';
$lang->cron->command = 'Command';
$lang->cron->status = 'Status';
$lang->cron->type = 'Type';
$lang->cron->remark = 'Remark';
$lang->cron->lastTime = 'Last Executed';
$lang->cron->remark = 'Comment';
$lang->cron->lastTime = 'Last Run';
$lang->cron->turnonList['1'] = 'On';
$lang->cron->turnonList['0'] = 'Shutdown';
$lang->cron->turnonList['0'] = 'Off';
$lang->cron->statusList['normal'] = 'Normal';
$lang->cron->statusList['running'] = 'Running';
$lang->cron->statusList['stop'] = 'Stop';
$lang->cron->typeList['zentao'] = 'Self call';
$lang->cron->typeList['zentao'] = 'Self Call';
$lang->cron->typeList['system'] = 'System Command';
$lang->cron->toggleList['start'] = 'Activate';
$lang->cron->toggleList['stop'] = 'Deactivate';
$lang->cron->confirmDelete = 'Do you want to delete the Scheduled Task?';
$lang->cron->confirmTurnon = 'Do you want to truncoff the Cron?';
$lang->cron->confirmDelete = 'Do you want to delete the cron?';
$lang->cron->confirmTurnon = 'Do you want to turn off the cron?';
$lang->cron->introduction = <<<EOD
<p>Scheduled Task can do scheduled execution, such as update burndown chart, backup, etc.</p>
<p>This function need to be improved, so it is turned off by default.</p>
<p>Cron is to perform scheduled actions, such as update burndown chart, backup, etc.</p>
<p>Features of Cron need to be improved, so it is turned off by default.</p>
EOD;
$lang->cron->confirmOpen = <<<EOD
<p>Do you want to turn it on?<a href="%s" target='hiddenwin'><strong>Turn On Scheduled Task<strong></a></p>
EOD;
$lang->cron->notice = new stdclass();
$lang->cron->notice->m = 'Range:0-59,"*" means the numbers within the range, "/" means "per", "-" means ranger.';
$lang->cron->notice->m = 'Range:0-59,"*" means the numbers within the range, "/" means "per", "-" means the range.';
$lang->cron->notice->h = 'Range:0-23';
$lang->cron->notice->dom = 'Range:1-31';
$lang->cron->notice->mon = 'Range:1-12';
$lang->cron->notice->dow = 'Range:0-6';
$lang->cron->notice->help = 'Note:If server restarted, or Scheduled Task is not working, it means Scheduled Task has stopped. You can restart it by clicking 【Restart】 or reload this page. If the last execution time in changed, it means the Task is running.';
$lang->cron->notice->help = 'Note:If the server is restarted, or the Cron is not working, it means the Cron has stopped. You can restart it by clicking 【Restart】 or refresh this page. If the last execution time is changed, it means the Cron is running.';
$lang->cron->notice->errorRule = '"%s" is not valid';
+1 -2
View File
@@ -62,7 +62,7 @@ class cronModel extends model
$parsedCron['schema'] = trim($matchs[0][0]);
$parsedCron['command'] = trim($matchs[0][1]);
$parsedCron['cron'] = CronExpression::factory($parsedCron['schema']);
$parsedCron['time'] = $parsedCron['cron']->getNextRunDate();
$parsedCron['time'] = $parsedCron['cron']->getNextRunDate($cron->lastTime);
$parsedCrons[$cron->id] = $parsedCron;
}
catch(InvalidArgumentException $e)
@@ -72,7 +72,6 @@ class cronModel extends model
}
}
}
$this->dao->update(TABLE_CRON)->set('lastTime')->eq(date(DT_DATETIME1))->where('lastTime')->eq('0000-00-00 00:00:00')->andWhere('status')->ne('stop')->exec();
return $parsedCrons;
}
+7 -9
View File
@@ -13,27 +13,25 @@
<?php include '../../common/view/header.html.php';?>
<div id='mainMenu' class='clearfix'>
<div class='btn-toolbar pull-left'><?php common::printAdminSubMenu('system');?></div>
<div class='btn-toolbar pull-right'>
<?php if(common::hasPriv('cron', 'openProcess') and !empty($config->global->cron)) echo html::a(inlink('openProcess'), $lang->cron->openProcess, 'hiddenwin', "class='btn'")?>
<?php if(common::hasPriv('cron', 'turnon') and !empty($config->global->cron)) echo html::a(inlink('turnon'), $lang->cron->turnonList[0], 'hiddenwin', "class='btn'");?>
</div>
</div>
<div id='mainContent' class='main-content'>
<?php if(!empty($config->global->cron)):?>
<div class='main-header'>
<h2><?php echo $lang->cron->list?></h2>
<div class='btn-toolbar pull-right'>
<?php if(common::hasPriv('cron', 'openProcess') and !empty($config->global->cron)) echo html::a(inlink('openProcess'), $lang->cron->openProcess, 'hiddenwin', "class='btn'")?>
<?php if(common::hasPriv('cron', 'turnon') and !empty($config->global->cron)) echo html::a(inlink('turnon'), $lang->cron->turnonList[0], 'hiddenwin', "class='btn'");?>
<?php if(common::hasPriv('cron', 'create')) echo html::a(inlink('create'), $lang->cron->create, '', "class='btn btn-primary'")?>
</div>
</div>
<table class='table table-condensed table-bordered table-fixed main-table'>
<thead>
<tr>
<th class='w-50px'><?php echo $lang->cron->m?></th>
<th class='w-50px'><?php echo $lang->cron->h?></th>
<th class='w-50px'><?php echo $lang->cron->dom?></th>
<th class='w-50px'><?php echo $lang->cron->mon?></th>
<th class='w-50px'><?php echo $lang->cron->dow?></th>
<th class='w-70px text-center'><?php echo $lang->cron->m?></th>
<th class='w-50px text-center'><?php echo $lang->cron->h?></th>
<th class='w-50px text-center'><?php echo $lang->cron->dom?></th>
<th class='w-60px text-center'><?php echo $lang->cron->mon?></th>
<th class='w-60px text-center'><?php echo $lang->cron->dow?></th>
<th><?php echo $lang->cron->command?></th>
<th class='w-200px'><?php echo $lang->cron->remark?></th>
<th class='w-130px'><?php echo $lang->cron->lastTime?></th>
+10 -1
View File
@@ -43,6 +43,7 @@ class custom extends control
if($module == 'bug' and $field == 'typeList')
{
unset($fieldList['interface']);
unset($fieldList['designchange']);
unset($fieldList['newfeature']);
unset($fieldList['trackthings']);
@@ -110,6 +111,7 @@ class custom extends control
elseif($module == 'user' and $field == 'contactField')
{
$data = fixer::input('post')->join('contactField', ',')->get();
if(!isset($data->contactField)) $data->contactField = '';
$this->loadModel('setting')->setItem('system.user.contactField', $data->contactField);
}
elseif($module == 'user' and $field == 'deleted')
@@ -212,7 +214,14 @@ class custom extends control
{
if($confirm == 'no') die(js::confirm($this->lang->custom->confirmRestore, inlink('restore', "module=$module&field=$field&confirm=yes")));
$this->custom->deleteItems("module=$module&section=$field");
if($module == 'user' and $field == 'contactField')
{
$this->loadModel('setting')->deleteItems("module=$module&key=$field");
}
else
{
$this->custom->deleteItems("module=$module&section=$field");
}
die(js::reload('parent'));
}
+31 -28
View File
@@ -2,11 +2,11 @@
$lang->custom->common = 'Custom';
$lang->custom->index = 'Home';
$lang->custom->set = 'Customize';
$lang->custom->restore = 'Reset to Default';
$lang->custom->restore = 'Reset';
$lang->custom->key = 'Key';
$lang->custom->value = 'Value';
$lang->custom->flow = 'Workflow';
$lang->custom->working = 'Work Mode';
$lang->custom->working = 'Mode';
$lang->custom->select = 'Select Workflow';
$lang->custom->branch = 'Multi-Branch';
$lang->custom->owner = 'Owner';
@@ -14,10 +14,11 @@ $lang->custom->module = 'Module';
$lang->custom->section = 'Section';
$lang->custom->lang = 'Language';
$lang->custom->setPublic = 'Set Public';
$lang->custom->required = 'Required';
$lang->custom->required = 'Required Fields';
$lang->custom->score = 'Point';
$lang->custom->timezone = 'Timezone';
$lang->custom->scoreReset = 'Reset Point';
$lang->custom->scoreReset = 'Reset Points';
$lang->custom->scoreTitle = 'Point Feature';
$lang->custom->object['story'] = 'Story';
$lang->custom->object['task'] = 'Task';
@@ -26,7 +27,7 @@ $lang->custom->object['testcase'] = 'Case';
$lang->custom->object['testtask'] = 'Build';
$lang->custom->object['todo'] = 'Todo';
$lang->custom->object['user'] = 'User';
$lang->custom->object['block'] = 'ClosedBlock';
$lang->custom->object['block'] = 'Block';
$lang->custom->story = new stdClass();
$lang->custom->story->fields['priList'] = 'Priority';
@@ -35,7 +36,7 @@ $lang->custom->story->fields['reasonList'] = 'Close Reason';
$lang->custom->story->fields['stageList'] = 'Phase';
$lang->custom->story->fields['statusList'] = 'Status';
$lang->custom->story->fields['reviewResultList'] = 'Review Result';
$lang->custom->story->fields['review'] = 'Review Required';
$lang->custom->story->fields['review'] = 'Need Review';
$lang->custom->task = new stdClass();
$lang->custom->task->fields['priList'] = 'Priority';
@@ -50,17 +51,17 @@ $lang->custom->bug->fields['severityList'] = 'Severity';
$lang->custom->bug->fields['osList'] = 'OS';
$lang->custom->bug->fields['browserList'] = 'Browser';
$lang->custom->bug->fields['typeList'] = 'Type';
$lang->custom->bug->fields['resolutionList'] = 'Solution';
$lang->custom->bug->fields['resolutionList'] = 'Resolution';
$lang->custom->bug->fields['statusList'] = 'Status';
$lang->custom->bug->fields['longlife'] = 'Longlife days';
$lang->custom->bug->fields['longlife'] = 'Stalled Days';
$lang->custom->testcase = new stdClass();
$lang->custom->testcase->fields['priList'] = 'Priority';
$lang->custom->testcase->fields['typeList'] = 'Type';
$lang->custom->testcase->fields['stageList'] = 'Stage';
$lang->custom->testcase->fields['stageList'] = 'Phase';
$lang->custom->testcase->fields['resultList'] = 'Result';
$lang->custom->testcase->fields['statusList'] = 'Status';
$lang->custom->testcase->fields['review'] = 'Review Required';
$lang->custom->testcase->fields['review'] = 'Need Review';
$lang->custom->testtask = new stdClass();
$lang->custom->testtask->fields['priList'] = 'Priority';
@@ -77,43 +78,45 @@ $lang->custom->user->fields['statusList'] = 'Status';
$lang->custom->user->fields['contactField'] = 'Available Contact';
$lang->custom->user->fields['deleted'] = 'Deleted User';
$lang->custom->system = array('flow', 'working', 'required', 'score');
$lang->custom->block->fields['closed'] = 'Closed Block';
$lang->custom->currentLang = 'Current Language';
$lang->custom->allLang = 'All Language';
$lang->custom->allLang = 'All Languages';
$lang->custom->confirmRestore = 'Do you want to reset to Default?';
$lang->custom->confirmRestore = 'Do you want to reset?';
$lang->custom->notice = new stdclass();
$lang->custom->notice->userFieldNotice = 'Control whether the above fields are displayed on the user-related page, and leave blank to display all';
$lang->custom->notice->userFieldNotice = 'Control whether the above fields are displayed on the user-related page. Leave it blank to display all.';
$lang->custom->notice->canNotAdd = 'It will be calculated, so customization is not enabled.';
$lang->custom->notice->forceReview = '%s Review is required for certain submitters.';
$lang->custom->notice->forceNotReview = "%s Review is NOT required for certain submitters.";
$lang->custom->notice->longlife = 'Define longlife bugs.';
$lang->custom->notice->forceReview = '%s review is required for committers selected.';
$lang->custom->notice->forceNotReview = "%s review is not required for committers selected.";
$lang->custom->notice->longlife = 'Define stalled bugs.';
$lang->custom->notice->invalidNumberKey = 'The key should be =< 255.';
$lang->custom->notice->invalidStringKey = 'The key should be a combination of lowercase letters, numbers or underlines.';
$lang->custom->notice->cannotSetTimezone = 'date_default_timezone_set does not exist or is disabled. Time zone cannot be set.';
$lang->custom->notice->noClosedBlock = 'Blocks without permanent closure';
$lang->custom->notice->cannotSetTimezone = 'date_default_timezone_set does not exist or is disabled. Timezone cannot be set.';
$lang->custom->notice->noClosedBlock = 'You have no blocks that are closed permanently.';
$lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Homepage. Do you want to go to Product Homepage?";
$lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Homepage. Do you want to go to Project Homepage?";
$lang->custom->notice->indexPage['product'] = "ZenTao 8.2+ has Product Home. Do you want to go to Product Home?";
$lang->custom->notice->indexPage['project'] = "ZenTao 8.2+ has Project Home. Do you want to go to Project Home?";
$lang->custom->notice->indexPage['qa'] = "ZenTao 8.2+ has QA Homepage. Do you want to go to QA Homepage?";
$lang->custom->notice->invalidStrlen['ten'] = 'The length of the key must be less than 10 characters.';
$lang->custom->notice->invalidStrlen['twenty'] = 'The length of the key must be less than 20 characters.';
$lang->custom->notice->invalidStrlen['thirty'] = 'The length of the key must be less than 30 characters.';
$lang->custom->notice->invalidStrlen['twoHundred'] = 'The length of the key must be less than 225 characters.';
$lang->custom->notice->invalidStrlen['ten'] = 'The key should be <= 10 characters.';
$lang->custom->notice->invalidStrlen['twenty'] = 'The key should be <= 20 characters.';
$lang->custom->notice->invalidStrlen['thirty'] = 'The key should be <= 30 characters.';
$lang->custom->notice->invalidStrlen['twoHundred'] = 'The key should be <= 225 characters.';
$lang->custom->storyReview = 'Review';
$lang->custom->forceReview = 'Selective Review';
$lang->custom->forceNotReview = 'No review';
$lang->custom->forceReview = 'Review Required';
$lang->custom->forceNotReview = 'No Review Required';
$lang->custom->reviewList[1] = 'On';
$lang->custom->reviewList[0] = 'Off';
$lang->custom->deletedList[1] = 'Show';
$lang->custom->deletedList[0] = 'Hide';
$lang->custom->workingHours = 'hours/day';
$lang->custom->workingHours = 'Hours/Day';
$lang->custom->weekend = 'Weekend';
$lang->custom->weekendList[2] = '2-Day Off';
$lang->custom->weekendList[1] = '1-Day Off';
@@ -130,7 +133,7 @@ $lang->custom->workingList['onlyTest'] = 'Test Management';
$lang->custom->workingList['onlyStory'] = 'Story Management';
$lang->custom->workingList['onlyTask'] = 'Task Management';
$lang->custom->menuTip = 'Click to show/hide navigation bar. Drag to swtich display order.';
$lang->custom->menuTip = 'Click to show/hide the navigation bar. Drag to swtich display order.';
$lang->custom->saveFail = 'Failed to save!';
$lang->custom->scoreStatus[0] = 'Off';
+2
View File
@@ -77,6 +77,8 @@ $lang->custom->user->fields['statusList'] = '状态';
$lang->custom->user->fields['contactField'] = '可用联系方式';
$lang->custom->user->fields['deleted'] = '列出已删除用户';
$lang->custom->system = array('flow', 'working', 'required', 'score');
$lang->custom->block->fields['closed'] = '关闭的区块';
$lang->custom->currentLang = '适用当前语言';
+2
View File
@@ -77,6 +77,8 @@ $lang->custom->user->fields['statusList'] = '狀態';
$lang->custom->user->fields['contactField'] = '可用聯繫方式';
$lang->custom->user->fields['deleted'] = '列出已刪除用戶';
$lang->custom->system = array('flow', 'working', 'required', 'score');
$lang->custom->block->fields['closed'] = '關閉的區塊';
$lang->custom->currentLang = '適用當前語言';
+5 -4
View File
@@ -6,10 +6,11 @@
{
common::printLink('custom', 'set', "module=$object", "<span class='text'>{$name}</span>", '', "class='btn btn-link' id='{$object}Tab'");
}
common::printLink('custom', 'flow', "", "<span class='text'>{$lang->custom->flow}</span>", '', "class='btn btn-link' id='flowTab'");
common::printLink('custom', 'working', '', "<span class='text'>{$lang->custom->working}</span>", '', "class='btn btn-link' id='workingTab'");
common::printLink('custom', 'required', '', "<span class='text'>{$lang->custom->required}</span>", '', "class='btn btn-link' id='requiredTab'");
common::printLink('custom', 'score', '', "<span class='text'>{$lang->custom->score}</span>", '', "class='btn btn-link' id='scoreTab'");
foreach($lang->custom->system as $sysObject)
{
common::printLink('custom', $sysObject, "", "<span class='text'>{$lang->custom->$sysObject}</span>", '', "class='btn btn-link' id='{$sysObject}Tab'");
}
?>
</div>
</div>
+2 -1
View File
@@ -33,9 +33,10 @@
</div>
</div>
<table class='table table-form mw-800px'>
<?php $colWidth = $app->getClientLang() == 'en' ? 'w-200px' : 'w-100px';?>
<?php foreach($requiredFields as $method => $requiredField):?>
<tr>
<th class='w-100px'>
<th class='<?php echo $colWidth;?>'>
<?php
$fields = $this->custom->getFormFields($moduleName, $method);
+2 -2
View File
@@ -14,12 +14,12 @@
<form class="load-indicator main-form form-ajax" method='post'>
<div class='main-header'>
<div class='heading'>
<strong><?php echo $lang->custom->score?></strong>
<strong><?php echo $lang->custom->scoreTitle?></strong>
</div>
</div>
<table class='table table-form'>
<tr>
<th class='w-100px text-top'><?php echo $lang->custom->score;?></th>
<th class='w-100px text-top'><?php echo $lang->custom->scoreTitle;?></th>
<td>
<?php $checkedKey = isset($config->global->scoreStatus) ? $config->global->scoreStatus : 0;?>
<?php foreach($lang->custom->scoreStatus as $key => $value):?>
+6 -2
View File
@@ -54,7 +54,8 @@ EOT;
<?php if(($module == 'story' or $module == 'testcase') and $field == 'review'):?>
<table class='table table-form mw-800px'>
<tr>
<th class='w-80px'><?php echo $lang->custom->storyReview;?></th>
<?php $colWidth = $app->getClientLang() == 'en' ? 'w-140px' : 'w-80px';?>
<th class='<?php echo $colWidth;?>'><?php echo $lang->custom->storyReview;?></th>
<td><?php echo html::radio('needReview', $lang->custom->reviewList, $needReview);?></td>
<td></td>
</tr>
@@ -138,7 +139,10 @@ EOT;
</tr>
<tr>
<td></td>
<td><?php echo html::submitButton();?></td>
<td>
<?php echo html::submitButton();?>
<?php if(common::hasPriv('custom', 'restore')) echo html::linkButton($lang->custom->restore, inlink('restore', "module=user&field=contactField"), 'hiddenwin', '', 'btn btn-wide');?>
</td>
</tr>
</table>
<?php elseif($module == 'user' and $field == 'deleted'):?>

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