Merge branch '15.0.beta3'
This commit is contained in:
@@ -26,7 +26,7 @@ common:
|
||||
cp -fr sdk zentaopms/
|
||||
cp -fr www zentaopms && rm -fr zentaopms/www/data/ && mkdir -p zentaopms/www/data/upload
|
||||
mkdir zentaopms/tmp
|
||||
mkdir zentaopms/tmp/cache/
|
||||
mkdir zentaopms/tmp/cache/
|
||||
mkdir zentaopms/tmp/extension/
|
||||
mkdir zentaopms/tmp/log/
|
||||
mkdir zentaopms/tmp/model/
|
||||
@@ -58,7 +58,7 @@ zentaoxx:
|
||||
cd $(XUANPATH); git archive --format=zip --prefix=xuan/ $(XUANVERSION) > xuan.zip
|
||||
mv $(XUANPATH)/xuan.zip .
|
||||
unzip xuan.zip
|
||||
cp xuan/xxb/config/ext/xuanxuan.php zentaoxx/config/ext/
|
||||
cp xuan/xxb/config/ext/_0_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/
|
||||
@@ -78,8 +78,7 @@ zentaoxx:
|
||||
cp -r xuan/xxb/www/x.php zentaoxx/www/
|
||||
mkdir zentaoxx/module/action
|
||||
cp -r xuan/xxb/module/action/ext zentaoxx/module/action
|
||||
cp -r xuan/xxb/config/ext/xxb.php zentaoxx/config/ext/
|
||||
cp -r xuan/xxb/config/ext/maps.php zentaoxx/config/ext/
|
||||
cp -r xuan/xxb/config/ext/_1_maps.php zentaoxx/config/ext/
|
||||
cp -r xuanxuan/config/* zentaoxx/config/
|
||||
cp -r xuanxuan/module/* zentaoxx/module/
|
||||
cp -r xuanxuan/www/* zentaoxx/www/
|
||||
@@ -87,8 +86,8 @@ zentaoxx:
|
||||
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/XXBVERSION/$(XVERSION)/g' zentaoxx/config/ext/_0_xuanxuan.php
|
||||
sed -i "/\$$config->xuanxuan->backend /c\\\$$config->xuanxuan->backend = 'zentao';" zentaoxx/config/ext/_0_xuanxuan.php
|
||||
sed -i 's/site,//' zentaoxx/module/im/model/user.php
|
||||
sed -i 's/admin, g/g/' zentaoxx/module/im/model/user.php
|
||||
sed -i '/password = md5/d' zentaoxx/module/im/model/user.php
|
||||
@@ -110,7 +109,7 @@ zentaoxx:
|
||||
sed -i '/deviceToken/d' zentaoxx/db/*.sql
|
||||
sed -i '/deviceType/d' zentaoxx/db/*.sql
|
||||
sed -i "/fetch('push', 'pushMessage');/d" zentaoxx/module/im/control.php
|
||||
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 "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
|
||||
@@ -120,7 +119,10 @@ zentaoxx:
|
||||
sed -i 's/helper::jsonEncode(/json_encode(/g' zentaoxx/framework/xuanxuan.class.php
|
||||
sed -i "s/lang->goback,/lang->goback, '',/g" zentaoxx/module/im/view/debug.html.php
|
||||
sed -i 's/v\.//g' zentaoxx/module/client/js/checkupgrade.js
|
||||
sed -i 's/commonModel::getLicensePropertyValue/extCommonModel::getLicensePropertyValue/g' zentaoxx/module/im/control.php
|
||||
sed -i 's/commonModel::getLicensePropertyValue/extCommonModel::getLicensePropertyValue/g' zentaoxx/module/im/model/conference.php
|
||||
sed -i 's/xxb_/zt_/g' zentaoxx/db/*.sql
|
||||
echo "ALTER TABLE \`zt_user\` ADD \`pinyin\` varchar(255) NOT NULL DEFAULT '' AFTER \`realname\`;" >> zentaoxx/db/xuanxuan.sql
|
||||
mkdir zentaoxx/tools; cp tools/cn2tw.php zentaoxx/tools; cd zentaoxx/tools; php cn2tw.php
|
||||
cp tools/en2de.php zentaoxx/tools; cd zentaoxx/tools; php en2de.php ../
|
||||
rm -rf zentaoxx/tools
|
||||
@@ -141,8 +143,8 @@ package:
|
||||
#rm -r zentaopms/module/misc/ext
|
||||
rm -rf zentaopms/tools
|
||||
pms:
|
||||
make common
|
||||
make zentaoxx
|
||||
make common
|
||||
make zentaoxx
|
||||
unzip zentaoxx.*.zip
|
||||
cp zentaoxx/* zentaopms/ -r
|
||||
cat zentaoxx/db/xuanxuan.sql >> zentaopms/db/zentao.sql
|
||||
|
||||
+23
-11
@@ -16,7 +16,7 @@ if(!class_exists('config')){class config{}}
|
||||
if(!function_exists('getWebRoot')){function getWebRoot(){}}
|
||||
|
||||
/* 基本设置。Basic settings. */
|
||||
$config->version = '20.0.beta4'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
|
||||
$config->version = '15.0.1'; // ZenTaoPHP的版本。 The version of ZenTaoPHP. Don't change it.
|
||||
$config->charset = 'UTF-8'; // ZenTaoPHP的编码。 The encoding of ZenTaoPHP.
|
||||
$config->cookieLife = time() + 2592000; // Cookie的生存时间。The cookie life time.
|
||||
$config->timezone = 'Asia/Shanghai'; // 时区设置。 The time zone setting, for more see http://www.php.net/manual/en/timezones.php.
|
||||
@@ -37,10 +37,10 @@ $config->themes['default'] = 'default';
|
||||
$config->langs['zh-cn'] = '简体';
|
||||
$config->langs['zh-tw'] = '繁體';
|
||||
$config->langs['en'] = 'English';
|
||||
$config->langs['de'] = 'Deutsch';
|
||||
$config->langs['fr'] = 'Français';
|
||||
$config->langs['vi'] = 'Tiếng Việt';
|
||||
$config->langs['ja'] = '日本語';
|
||||
//$config->langs['de'] = 'Deutsch';
|
||||
//$config->langs['fr'] = 'Français';
|
||||
//$config->langs['vi'] = 'Tiếng Việt';
|
||||
//$config->langs['ja'] = '日本語';
|
||||
|
||||
/* 设备类型视图文件前缀。The prefix for view file for different device. */
|
||||
$config->devicePrefix['mhtml'] = '';
|
||||
@@ -89,6 +89,10 @@ $config->domainPostfix .= "|villas|foundation|expert|works|tools|watch|zone|barg
|
||||
$config->domainPostfix .= "|farm|pics|photo|marketing|holiday|gift|buzz|guitars|trade|construction|";
|
||||
$config->domainPostfix .= "|international|house|coffee|florist|rich|ceo|camp|education|repair|win|site|";
|
||||
|
||||
/* Config for Content-Security-Policy. */
|
||||
$config->CSPs = array();
|
||||
$config->CSPs[] = "form-action 'self';connect-src 'self'";
|
||||
|
||||
/* 系统框架配置。Framework settings. */
|
||||
$config->framework = new stdclass();
|
||||
$config->framework->autoConnectDB = true; // 是否自动连接数据库。 Whether auto connect database or not.
|
||||
@@ -106,6 +110,13 @@ $config->framework->logDays = 14; // 日志文件保存的天数。
|
||||
$config->framework->autoRepairTable = true;
|
||||
$config->framework->autoLang = false;
|
||||
$config->framework->filterCSRF = false;
|
||||
$config->framework->setCookieSecure = true;
|
||||
$config->framework->sendXCTO = true; // Send X-Content-Type-Options header.
|
||||
$config->framework->sendXXP = true; // Send X-XSS-Protection header.
|
||||
$config->framework->sendHSTS = true; // Send HTTP Strict Transport Security header.
|
||||
$config->framework->sendRP = true; // Send Referrer-Policy header.
|
||||
$config->framework->sendXPCDP = true; // Send X-Permitted-Cross-Domain-Policies header.
|
||||
$config->framework->sendXDO = true; // Send X-Download-Options header.
|
||||
|
||||
$config->framework->detectDevice['zh-cn'] = true; // 在zh-cn语言情况下,是否启用设备检测功能。 Whether enable device detect or not.
|
||||
$config->framework->detectDevice['zh-tw'] = true; // 在zh-tw语言情况下,是否启用设备检测功能。 Whether enable device detect or not.
|
||||
@@ -127,8 +138,9 @@ $config->features->checkClient = true;
|
||||
|
||||
/* 文件上传设置。 Upload settings. */
|
||||
$config->file = new stdclass();
|
||||
$config->file->dangers = 'php,php3,php4,phtml,php5,jsp,py,rb,asp,aspx,ashx,asa,cer,cdx,aspl,shtm,shtml,html,htm';
|
||||
$config->file->allowed = 'txt,doc,docx,dot,wps,wri,pdf,ppt,pptx,xls,xlsx,ett,xlt,xlsm,csv,jpg,jpeg,png,psd,gif,ico,bmp,swf,avi,rmvb,rm,mp3,mp4,3gp,flv,mov,movie,rar,zip,bz,bz2,tar,gz,mpp,rp,pdm,vsdx,vsd,sql';
|
||||
$config->file->dangers = 'php,php3,php4,phtml,php5,jsp,py,rb,asp,aspx,ashx,asa,cer,cdx,aspl,shtm,shtml,html,htm';
|
||||
$config->file->allowed = 'txt,doc,docx,dot,wps,wri,pdf,ppt,pptx,xls,xlsx,ett,xlt,xlsm,csv,jpg,jpeg,png,psd,gif,ico,bmp,swf,avi,rmvb,rm,mp3,mp4,3gp,flv,mov,movie,rar,zip,bz,bz2,tar,gz,mpp,rp,pdm,vsdx,vsd,sql';
|
||||
$config->file->storageType = 'fs'; // fs or s3
|
||||
|
||||
/* Upload settings. */
|
||||
$config->allowedTags = '<p><span><h1><h2><h3><h4><h5><em><u><strong><br><ol><ul><li><img><a><b><font><hr><pre><div><table><td><th><tr><tbody><embed><style>';
|
||||
@@ -150,6 +162,10 @@ if(file_exists($filterConfig)) include $filterConfig;
|
||||
$dbConfig = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'db.php';
|
||||
if(file_exists($dbConfig)) include $dbConfig;
|
||||
|
||||
/* 引用自定义的配置。 Include the custom config file. */
|
||||
$myConfig = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'my.php';
|
||||
if(file_exists($myConfig)) include $myConfig;
|
||||
|
||||
/* 禅道配置文件。zentaopms settings. */
|
||||
$zentaopmsConfig = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'zentaopms.php';
|
||||
if(file_exists($zentaopmsConfig)) include $zentaopmsConfig;
|
||||
@@ -157,7 +173,3 @@ if(file_exists($zentaopmsConfig)) include $zentaopmsConfig;
|
||||
/* Include extension config files. */
|
||||
$extConfigFiles = glob(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'ext/*.php');
|
||||
if($extConfigFiles) foreach($extConfigFiles as $extConfigFile) include $extConfigFile;
|
||||
|
||||
/* 引用自定义的配置。 Include the custom config file. */
|
||||
$myConfig = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'my.php';
|
||||
if(file_exists($myConfig)) include $myConfig;
|
||||
|
||||
+43
-34
@@ -26,33 +26,36 @@ $filter->default->cookie['lang'] = 'reg::lang';
|
||||
$filter->default->cookie['theme'] = 'reg::word';
|
||||
$filter->default->cookie['fingerprint'] = 'reg::word';
|
||||
$filter->default->cookie['hideMenu'] = 'equal::true';
|
||||
$filter->default->cookie['openApp'] = 'reg::word';
|
||||
|
||||
$filter->bug = new stdclass();
|
||||
$filter->caselib = new stdclass();
|
||||
$filter->doc = new stdclass();
|
||||
$filter->product = new stdclass();
|
||||
$filter->qa = new stdclass();
|
||||
$filter->story = new stdclass();
|
||||
$filter->task = new stdclass();
|
||||
$filter->testcase = new stdclass();
|
||||
$filter->program = new stdclass();
|
||||
$filter->project = new stdclass();
|
||||
$filter->testreport = new stdclass();
|
||||
$filter->testsuite = new stdclass();
|
||||
$filter->todo = new stdclass();
|
||||
$filter->testtask = new stdclass();
|
||||
$filter->upgrade = new stdclass();
|
||||
$filter->sso = new stdclass();
|
||||
$filter->misc = new stdclass();
|
||||
$filter->mail = new stdclass();
|
||||
$filter->user = new stdclass();
|
||||
$filter->block = new stdclass();
|
||||
$filter->file = new stdclass();
|
||||
$filter->repo = new stdclass();
|
||||
$filter->webhook = new stdclass();
|
||||
$filter->git = new stdclass();
|
||||
$filter->svn = new stdclass();
|
||||
$filter->search = new stdclass();
|
||||
$filter->bug = new stdclass();
|
||||
$filter->caselib = new stdclass();
|
||||
$filter->doc = new stdclass();
|
||||
$filter->product = new stdclass();
|
||||
$filter->branch = new stdclass();
|
||||
$filter->qa = new stdclass();
|
||||
$filter->story = new stdclass();
|
||||
$filter->task = new stdclass();
|
||||
$filter->testcase = new stdclass();
|
||||
$filter->program = new stdclass();
|
||||
$filter->project = new stdclass();
|
||||
$filter->projectstory = new stdclass();
|
||||
$filter->testreport = new stdclass();
|
||||
$filter->testsuite = new stdclass();
|
||||
$filter->todo = new stdclass();
|
||||
$filter->testtask = new stdclass();
|
||||
$filter->upgrade = new stdclass();
|
||||
$filter->sso = new stdclass();
|
||||
$filter->misc = new stdclass();
|
||||
$filter->mail = new stdclass();
|
||||
$filter->user = new stdclass();
|
||||
$filter->block = new stdclass();
|
||||
$filter->file = new stdclass();
|
||||
$filter->repo = new stdclass();
|
||||
$filter->webhook = new stdclass();
|
||||
$filter->git = new stdclass();
|
||||
$filter->svn = new stdclass();
|
||||
$filter->search = new stdclass();
|
||||
|
||||
$filter->block->default = new stdclass();
|
||||
$filter->block->main = new stdclass();
|
||||
@@ -77,6 +80,7 @@ $filter->product->default = new stdclass();
|
||||
$filter->product->index = new stdclass();
|
||||
$filter->product->export = new stdclass();
|
||||
$filter->product->project = new stdclass();
|
||||
$filter->branch->default = new stdclass();
|
||||
$filter->program->default = new stdclass();
|
||||
$filter->program->pgmproject = new stdclass();
|
||||
$filter->program->prjbrowse = new stdclass();
|
||||
@@ -85,12 +89,13 @@ $filter->program->browse = new stdclass();
|
||||
$filter->program->export = new stdclass();
|
||||
$filter->program->pgmbrowse = new stdclass();
|
||||
$filter->program->export = new stdclass();
|
||||
$filter->program->ajaxgetpgmdropmenu = new stdclass();
|
||||
$filter->program->ajaxgetdropmenu = new stdclass();
|
||||
$filter->project->default = new stdclass();
|
||||
$filter->project->browse = new stdclass();
|
||||
$filter->project->story = new stdclass();
|
||||
$filter->project->export = new stdclass();
|
||||
$filter->project->task = new stdclass();
|
||||
$filter->projectstory->story = new stdclass();
|
||||
$filter->qa->default = new stdclass();
|
||||
$filter->story->create = new stdclass();
|
||||
$filter->story->export = new stdclass();
|
||||
@@ -165,13 +170,15 @@ $filter->product->index->cookie['preBranch'] = 'int';
|
||||
$filter->product->export->cookie['checkedItem'] = 'reg::checked';
|
||||
$filter->product->project->cookie['involved'] = 'code';
|
||||
|
||||
$filter->program->default->cookie['lastPGM'] = 'int';
|
||||
$filter->program->default->cookie['lastPRJ'] = 'int';
|
||||
$filter->program->prjbrowse->cookie['programType'] = 'code';
|
||||
$filter->program->project->cookie['involved'] = 'code';
|
||||
$filter->program->browse->cookie['showClosed'] = 'code';
|
||||
$filter->program->export->cookie['checkedItem'] = 'reg::checked';
|
||||
$filter->program->ajaxgetpgmdropmenu->cookie['showClosed'] = 'code';
|
||||
$filter->branch->default->cookie['preBranch'] = 'int';
|
||||
|
||||
$filter->program->default->cookie['lastPGM'] = 'int';
|
||||
$filter->program->default->cookie['lastPRJ'] = 'int';
|
||||
$filter->program->prjbrowse->cookie['programType'] = 'code';
|
||||
$filter->program->project->cookie['involved'] = 'code';
|
||||
$filter->program->browse->cookie['showClosed'] = 'code';
|
||||
$filter->program->export->cookie['checkedItem'] = 'reg::checked';
|
||||
$filter->program->ajaxgetdropmenu->cookie['showClosed'] = 'code';
|
||||
|
||||
$filter->project->default->cookie['lastProject'] = 'int';
|
||||
$filter->project->default->cookie['lastPRJ'] = 'int';
|
||||
@@ -189,6 +196,8 @@ $filter->project->task->cookie['projectTaskOrder'] = 'reg::orderBy';
|
||||
$filter->project->task->cookie['windowWidth'] = 'int';
|
||||
$filter->project->export->cookie['checkedItem'] = 'reg::checked';
|
||||
|
||||
$filter->projectstory->story->cookie['storyModuleParam'] = 'int';
|
||||
|
||||
$filter->qa->default->cookie['lastProduct'] = 'int';
|
||||
$filter->qa->default->cookie['preBranch'] = 'int';
|
||||
$filter->qa->default->cookie['preProductID'] = 'int';
|
||||
|
||||
@@ -136,7 +136,9 @@ define('TABLE_EXPECT', '`' . $config->db->prefix . 'expect`');
|
||||
define('TABLE_STAKEHOLDER', '`' . $config->db->prefix . 'stakeholder`');
|
||||
define('TABLE_STORY', '`' . $config->db->prefix . 'story`');
|
||||
define('TABLE_STORYSPEC', '`' . $config->db->prefix . 'storyspec`');
|
||||
define('TABLE_STORYREVIEW', '`' . $config->db->prefix . 'storyreview`');
|
||||
define('TABLE_STORYSTAGE', '`' . $config->db->prefix . 'storystage`');
|
||||
define('TABLE_STORYESTIMATE', '`' . $config->db->prefix . 'storyestimate`');
|
||||
define('TABLE_PRODUCTPLAN', '`' . $config->db->prefix . 'productplan`');
|
||||
define('TABLE_PLANSTORY', '`' . $config->db->prefix . 'planstory`');
|
||||
define('TABLE_RELEASE', '`' . $config->db->prefix . 'release`');
|
||||
@@ -193,8 +195,8 @@ if(!defined('TABLE_SEARCHINDEX')) define('TABLE_SEARCHINDEX', $config->db->prefi
|
||||
if(!defined('TABLE_SEARCHDICT')) define('TABLE_SEARCHDICT', $config->db->prefix . 'searchdict');
|
||||
|
||||
$config->objectTables['product'] = TABLE_PRODUCT;
|
||||
$config->objectTables['story'] = TABLE_STORY;
|
||||
$config->objectTables['productplan'] = TABLE_PRODUCTPLAN;
|
||||
$config->objectTables['story'] = TABLE_STORY;
|
||||
$config->objectTables['release'] = TABLE_RELEASE;
|
||||
$config->objectTables['program'] = TABLE_PROJECT;
|
||||
$config->objectTables['project'] = TABLE_PROJECT;
|
||||
@@ -219,6 +221,7 @@ $config->objectTables['entry'] = TABLE_ENTRY;
|
||||
$config->objectTables['webhook'] = TABLE_WEBHOOK;
|
||||
$config->objectTables['stakeholder'] = TABLE_STAKEHOLDER;
|
||||
$config->objectTables['job'] = TABLE_JOB;
|
||||
$config->objectTables['team'] = TABLE_TEAM;
|
||||
|
||||
/* Program privs.*/
|
||||
$config->programPriv = new stdclass();
|
||||
|
||||
+692
-316
File diff suppressed because it is too large
Load Diff
+685
-330
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,170 @@
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_chat` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`gid` char(40) NOT NULL DEFAULT '',
|
||||
`name` varchar(60) NOT NULL DEFAULT '',
|
||||
`type` varchar(20) NOT NULL DEFAULT 'group',
|
||||
`admins` varchar(255) NOT NULL DEFAULT '',
|
||||
`committers` varchar(255) NOT NULL DEFAULT '',
|
||||
`subject` mediumint(8) unsigned NOT NULL DEFAULT 0,
|
||||
`public` enum('0', '1') NOT NULL DEFAULT '0',
|
||||
`createdBy` varchar(30) NOT NULL DEFAULT '',
|
||||
`createdDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`editedBy` varchar(30) NOT NULL DEFAULT '',
|
||||
`editedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`lastActiveTime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`lastMessage` int(11) unsigned NOT NULL DEFAULT 0,
|
||||
`dismissDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`pinnedMessages` text NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `gid` (`gid`),
|
||||
KEY `name` (`name`),
|
||||
KEY `type` (`type`),
|
||||
KEY `public` (`public`),
|
||||
KEY `createdBy` (`createdBy`),
|
||||
KEY `editedBy` (`editedBy`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_chatuser` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`cgid` char(40) NOT NULL DEFAULT '',
|
||||
`user` mediumint(8) NOT NULL DEFAULT 0,
|
||||
`order` smallint(5) NOT NULL DEFAULT 0,
|
||||
`star` enum('0', '1') NOT NULL DEFAULT '0',
|
||||
`hide` enum('0', '1') NOT NULL DEFAULT '0',
|
||||
`mute` enum('0', '1') NOT NULL DEFAULT '0',
|
||||
`freeze` enum('0', '1') NOT NULL DEFAULT '0',
|
||||
`join` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`quit` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`category` varchar(40) NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `cgid` (`cgid`),
|
||||
KEY `user` (`user`),
|
||||
KEY `order` (`order`),
|
||||
KEY `star` (`star`),
|
||||
KEY `hide` (`hide`),
|
||||
UNIQUE KEY `chatuser` (`cgid`, `user`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_client` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`version` char(30) NOT NULL DEFAULT '',
|
||||
`desc` varchar(100) NOT NULL DEFAULT '',
|
||||
`changeLog` text NOT NULL,
|
||||
`strategy` varchar(10) NOT NULL DEFAULT '',
|
||||
`downloads` text NOT NULL,
|
||||
`createdDate` datetime NOT NULL,
|
||||
`createdBy` varchar(30) NOT NULL DEFAULT '',
|
||||
`editedDate` datetime NOT NULL,
|
||||
`editedBy` varchar(30) NOT NULL DEFAULT '',
|
||||
`status` enum('released','wait') NOT NULL DEFAULT 'wait',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_message` (
|
||||
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`gid` char(40) NOT NULL DEFAULT '',
|
||||
`cgid` char(40) NOT NULL DEFAULT '',
|
||||
`user` varchar(30) NOT NULL DEFAULT '',
|
||||
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`type` enum('normal', 'broadcast', 'notify', 'bulletin') NOT NULL DEFAULT 'normal',
|
||||
`content` text NOT NULL DEFAULT '',
|
||||
`contentType` enum('text', 'plain', 'emotion', 'image', 'file', 'object', 'code') NOT NULL DEFAULT 'text',
|
||||
`data` text NOT NULL DEFAULT '',
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `mgid` (`gid`),
|
||||
KEY `mcgid` (`cgid`),
|
||||
KEY `muser` (`user`),
|
||||
KEY `mtype` (`type`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_message_backup` (
|
||||
`id` int(11) unsigned NOT NULL,
|
||||
`gid` char(40) NOT NULL DEFAULT '',
|
||||
`cgid` char(40) NOT NULL DEFAULT '',
|
||||
`user` varchar(30) NOT NULL DEFAULT '',
|
||||
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`type` enum('normal', 'broadcast', 'notify') NOT NULL DEFAULT 'normal',
|
||||
`content` text NOT NULL DEFAULT '',
|
||||
`contentType` enum('text', 'plain', 'emotion', 'image', 'file', 'object', 'code') NOT NULL DEFAULT 'text',
|
||||
`data` text NOT NULL DEFAULT '',
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_message_index` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`tableName` char(64) NOT NULL,
|
||||
`start` int(11) unsigned NOT NULL,
|
||||
`end` int(11) unsigned NOT NULL,
|
||||
`startDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`endDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`chats` text NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `tableName` (`tableName`),
|
||||
KEY `start` (`start`),
|
||||
KEY `end` (`end`),
|
||||
KEY `startDate` (`startDate`),
|
||||
KEY `endDate` (`endDate`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_chat_message_index` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`gid` char(40) NOT NULL,
|
||||
`tableName` char(64) NOT NULL,
|
||||
`start` int(11) unsigned NOT NULL,
|
||||
`end` int(11) unsigned NOT NULL,
|
||||
`startDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`endDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`count` mediumint(8) unsigned NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `chattable` (`gid`,`tableName`),
|
||||
KEY `start` (`start`),
|
||||
KEY `end` (`end`),
|
||||
KEY `startDate` (`startDate`),
|
||||
KEY `endDate` (`endDate`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_messagestatus` (
|
||||
`user` mediumint(8) NOT NULL DEFAULT 0,
|
||||
`message` int(11) unsigned NOT NULL,
|
||||
`status` enum('waiting','sent','readed','deleted') NOT NULL DEFAULT 'waiting',
|
||||
UNIQUE KEY `user` (`user`,`message`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_queue` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`type` char(30) NOT NULL,
|
||||
`content` text NOT NULL,
|
||||
`addDate` datetime NOT NULL,
|
||||
`processDate` datetime NOT NULL,
|
||||
`result` text NOT NULL,
|
||||
`status` char(30) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_conference` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`rid` char(24) NOT NULL DEFAULT '',
|
||||
`cgid` char(40) NOT NULL DEFAULT '',
|
||||
`status` enum('closed','open') NOT NULL DEFAULT 'closed',
|
||||
`participants` text NOT NULL,
|
||||
`invitee` text NOT NULL,
|
||||
`openedBy` mediumint(8) NOT NULL DEFAULT 0,
|
||||
`openedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_conferenceaction` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`rid` char(24) NOT NULL DEFAULT '',
|
||||
`type` enum('create','join','leave','close') NOT NULL DEFAULT 'create',
|
||||
`user` mediumint(8) NOT NULL DEFAULT 0,
|
||||
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`device` char(40) NOT NULL DEFAULT 'default',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
CREATE TABLE IF NOT EXISTS `zt_im_userdevice` (
|
||||
`id` mediumint(8) unsigned NOT NULL auto_increment,
|
||||
`user` mediumint(8) NOT NULL DEFAULT 0,
|
||||
`device` char(40) NOT NULL DEFAULT 'default',
|
||||
`deviceID` char(40) NOT NULL DEFAULT '',
|
||||
`token` char(64) NOT NULL DEFAULT '',
|
||||
`validUntil` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`lastLogin` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
`lastLogout` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `user` (`user`),
|
||||
KEY `lastLogin` (`lastLogin`),
|
||||
KEY `lastLogout` (`lastLogout`),
|
||||
UNIQUE KEY `userdevice` (`user`, `device`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,358 @@
|
||||
ALTER TABLE `zt_project` DROP `isCat`, DROP `catID`;
|
||||
ALTER TABLE `zt_project` ADD `project` mediumint(8) NOT NULL DEFAULT 0 AFTER `id`;
|
||||
ALTER TABLE `zt_project` ADD `model` char(30) NOT NULL AFTER `project`;
|
||||
ALTER TABLE `zt_project` CHANGE `type` `lifetime` char(30) NOT NULL DEFAULT '';
|
||||
ALTER TABLE `zt_project` CHANGE `acl` `acl` char(30) NOT NULL DEFAULT 'open';
|
||||
ALTER TABLE `zt_project` ADD `type` char(30) NOT NULL DEFAULT 'sprint' AFTER `model`;
|
||||
ALTER TABLE `zt_project` ADD `product` varchar(20) NOT NULL DEFAULT 'single' AFTER `type`;
|
||||
ALTER TABLE `zt_project` ADD `budget` varchar(30) NOT NULL DEFAULT '0' AFTER `lifetime`;
|
||||
ALTER TABLE `zt_project` ADD `budgetUnit` char(30) NOT NULL DEFAULT 'CNY' AFTER `budget`;
|
||||
ALTER TABLE `zt_project` ADD `percent` float unsigned NOT NULL DEFAULT '0' AFTER `budgetUnit`;
|
||||
ALTER TABLE `zt_project` ADD `path` varchar(255) NOT NULL AFTER `parent`;
|
||||
ALTER TABLE `zt_project` ADD `grade` tinyint unsigned NOT NULL AFTER `path`;
|
||||
ALTER TABLE `zt_project` ADD `auth` char(30) NOT NULL AFTER `percent`;
|
||||
ALTER TABLE `zt_project` ADD `milestone` enum('0','1') NOT NULL default '0' AFTER `percent`;
|
||||
ALTER TABLE `zt_project` ADD `attribute` varchar(30) NOT NULL DEFAULT '' AFTER `budgetUnit`;
|
||||
ALTER TABLE `zt_project` ADD `realBegan` date NOT NULL AFTER `end`;
|
||||
ALTER TABLE `zt_project` ADD `realEnd` date NOT NULL AFTER `realBegan`;
|
||||
ALTER TABLE `zt_project` ADD `version` smallint(6) NOT NULL AFTER `desc`;
|
||||
ALTER TABLE `zt_project` ADD `parentVersion` smallint(6) NOT NULL AFTER `version`;
|
||||
ALTER TABLE `zt_project` ADD `planDuration` int(11) NOT NULL AFTER `parentVersion`;
|
||||
ALTER TABLE `zt_project` ADD `realDuration` int(11) NOT NULL AFTER `planDuration`;
|
||||
ALTER TABLE `zt_project` ADD `output` text NOT NULL AFTER `milestone`;
|
||||
ALTER TABLE `zt_project` ADD `lastEditedBy` varchar(30) NOT NULL DEFAULT '' AFTER `openedVersion`;
|
||||
ALTER TABLE `zt_project` ADD `lastEditedDate` datetime NOT NULL AFTER `lastEditedBy`;
|
||||
|
||||
ALTER TABLE `zt_action` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_bug` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_build` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_burn` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_doc` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_relation` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_relation` CHANGE `program` `project` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_doclib` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_task` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_testreport` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_testtask` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_webhook` CHANGE `projects` `executions` text NOT NULL;
|
||||
|
||||
ALTER TABLE `zt_action` ADD `project` mediumint(8) unsigned NOT NULL AFTER `product`;
|
||||
ALTER TABLE `zt_task` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_doclib` ADD `project` mediumint(8) unsigned NOT NULL AFTER `product`;
|
||||
ALTER TABLE `zt_doc` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_story` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_bug` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_case` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_testtask` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_testreport` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_testsuite` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_build` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_release` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
|
||||
ALTER TABLE `zt_product` ADD `bind` enum('0','1') NOT NULL DEFAULT '0' AFTER `code`;
|
||||
ALTER TABLE `zt_product` ADD `program` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_repo` ADD `product` varchar(255) NOT NULL AFTER `id`;
|
||||
|
||||
ALTER TABLE `zt_group` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
INSERT INTO `zt_group` (`name`, `role`, `desc`) VALUES ('项目管理员', 'projectAdmin', '项目管理员可以维护项目的权限');
|
||||
|
||||
ALTER TABLE `zt_usergroup` ADD `project` text NOT NULL;
|
||||
|
||||
ALTER TABLE `zt_userview` CHANGE `projects` `sprints` mediumtext NOT NULL;
|
||||
ALTER TABLE `zt_userview` ADD `programs` mediumtext NOT NULL AFTER `account`;
|
||||
ALTER TABLE `zt_userview` ADD `projects` mediumtext NOT NULL AFTER `programs`;
|
||||
|
||||
ALTER TABLE `zt_user` ADD `company` mediumint unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_user` ADD `type` char(30) NOT NULL default 'inside' AFTER `account`;
|
||||
ALTER TABLE `zt_user` ADD `nature` text NOT NULL AFTER `zipcode`;
|
||||
ALTER TABLE `zt_user` ADD `analysis` text NOT NULL AFTER `nature`;
|
||||
ALTER TABLE `zt_user` ADD `strategy` text NOT NULL AFTER `analysis`;
|
||||
ALTER TABLE `zt_user` CHANGE `avatar` `avatar` text NOT NULL AFTER `commiter`;
|
||||
|
||||
REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'custom', '', 'URSR', '2');
|
||||
REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'project', '', 'unitList', 'CNY,USD');
|
||||
REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'project', '', 'defaultCurrency', 'CNY');
|
||||
|
||||
ALTER TABLE `zt_config` MODIFY COLUMN `value` longtext NOT NULL AFTER `key`;
|
||||
|
||||
UPDATE `zt_config` SET `key` = 'CRExecution' WHERE `module` = 'common' AND `key` = 'CRProject';
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_stakeholder`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_stakeholder` (
|
||||
`id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`objectID` mediumint(8) NOT NULL,
|
||||
`objectType` char(30) NOT NULL,
|
||||
`user` char(30) NOT NULL,
|
||||
`type` char(30) NOT NULL,
|
||||
`key` enum('0','1') NOT NULL,
|
||||
`from` char(30) NOT NULL,
|
||||
`createdBy` char(30) NOT NULL,
|
||||
`createdDate` date NOT NULL,
|
||||
`editedBy` char(30) NOT NULL,
|
||||
`editedDate` date NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_expect`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_expect` (
|
||||
`id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`userID` mediumint(8) NOT NULL,
|
||||
`project` mediumint(8) NOT NULL DEFAULT 0,
|
||||
`expect` text NOT NULL,
|
||||
`progress` text NOT NULL,
|
||||
`createdBy` char(30) NOT NULL,
|
||||
`createdDate` date NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_projectspec`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_projectspec` (
|
||||
`project` mediumint(8) NOT NULL,
|
||||
`version` smallint(6) NOT NULL,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`milestone` enum('0','1') NOT NULL DEFAULT '0',
|
||||
`begin` date NOT NULL,
|
||||
`end` date NOT NULL,
|
||||
UNIQUE KEY `project` (`project`,`version`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_projectcase`;
|
||||
CREATE TABLE `zt_projectcase` (
|
||||
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`case` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`version` smallint(6) NOT NULL DEFAULT '1',
|
||||
`order` smallint(6) unsigned NOT NULL,
|
||||
UNIQUE KEY `project` (`project`,`case`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `zt_task` ADD `design` mediumint(8) unsigned NOT NULL AFTER `module`;
|
||||
ALTER TABLE `zt_task` ADD `version` smallint(6) NOT NULL AFTER `desc`;
|
||||
ALTER TABLE `zt_task` ADD `activatedDate` date NOT NULL AFTER `lastEditedDate`;
|
||||
ALTER TABLE `zt_task` ADD `planDuration` int(11) NOT NULL AFTER `closedDate`;
|
||||
ALTER TABLE `zt_task` ADD `realDuration` int(11) NOT NULL AFTER `closedDate`;
|
||||
ALTER TABLE `zt_task` ADD `designVersion` smallint(6) unsigned NOT NULL AFTER `storyVersion`;
|
||||
|
||||
ALTER TABLE `zt_burn` ADD `storyPoint` float NOT NULL AFTER `consumed`;
|
||||
ALTER TABLE `zt_burn` ADD `product` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `execution`;
|
||||
|
||||
ALTER TABLE `zt_projectcase` ADD `count` mediumint(8) unsigned NOT NULL DEFAULT '1' AFTER `case`;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_taskspec`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_taskspec` (
|
||||
`task` mediumint(8) NOT NULL,
|
||||
`version` smallint(6) NOT NULL,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`estStarted` date NOT NULL,
|
||||
`deadline` date NOT NULL,
|
||||
UNIQUE KEY `task` (`task`,`version`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `zt_block` ADD `type` char(30) NOT NULL AFTER `module`;
|
||||
ALTER TABLE `zt_block` ADD UNIQUE `account_module_type_order` (`account`, `module`, `type`, `order`), DROP INDEX `accountModuleOrder`;
|
||||
|
||||
ALTER TABLE `zt_story` ADD `URChanged` enum('0','1') NOT NULL DEFAULT '0' AFTER `version`;
|
||||
|
||||
ALTER TABLE `zt_team` MODIFY `type` enum('project','task','execution') NOT NULL DEFAULT 'project' AFTER `root`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zt_planstory` (
|
||||
`plan` mediumint(8) unsigned NOT NULL,
|
||||
`story` mediumint(8) unsigned NOT NULL,
|
||||
`order` mediumint(9) NOT NULL,
|
||||
UNIQUE KEY `unique` (`plan`,`story`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zt_acl` (
|
||||
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`account` char(30) NOT NULL,
|
||||
`objectType` char(30) NOT NULL,
|
||||
`objectID` mediumint(9) NOT NULL DEFAULT '0',
|
||||
`type` char(40) NOT NULL DEFAULT 'whitelist',
|
||||
`source` char(30) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_searchindex`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_searchindex` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`objectType` char(20) NOT NULL,
|
||||
`objectID` mediumint(9) NOT NULL,
|
||||
`title` text NOT NULL,
|
||||
`content` text NOT NULL,
|
||||
`addedDate` datetime NOT NULL,
|
||||
`editedDate` datetime NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `object` (`objectType`,`objectID`),
|
||||
KEY `addedDate` (`addedDate`),
|
||||
FULLTEXT KEY `content` (`content`),
|
||||
FULLTEXT KEY `title` (`title`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_searchdict`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_searchdict` (
|
||||
`key` smallint(5) unsigned NOT NULL,
|
||||
`value` char(3) NOT NULL,
|
||||
PRIMARY KEY (`key`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(1, 'product', 'dashboard'),
|
||||
(1, 'product', 'manageLine'),
|
||||
(1, 'projectstory', 'story'),
|
||||
(1, 'projectstory', 'track'),
|
||||
(1, 'projectstory', 'view'),
|
||||
(1, 'projectstory', 'linkStory'),
|
||||
(1, 'projectstory', 'unLinkStory'),
|
||||
(1, 'my', 'preference'),
|
||||
(1, 'my', 'uploadAvatar'),
|
||||
(1, 'user', 'execution'),
|
||||
(1, 'user', 'cropAvatar'),
|
||||
(1, 'program', 'browse'),
|
||||
(1, 'program', 'view'),
|
||||
(1, 'search', 'index'),
|
||||
(1, 'search', 'buildIndex'),
|
||||
(2, 'product', 'dashboard'),
|
||||
(2, 'product', 'manageLine'),
|
||||
(2, 'projectstory', 'story'),
|
||||
(2, 'projectstory', 'track'),
|
||||
(2, 'projectstory', 'view'),
|
||||
(2, 'my', 'preference'),
|
||||
(2, 'my', 'uploadAvatar'),
|
||||
(2, 'user', 'execution'),
|
||||
(2, 'user', 'cropAvatar'),
|
||||
(2, 'search', 'index'),
|
||||
(2, 'program', 'browse'),
|
||||
(3, 'product', 'dashboard'),
|
||||
(3, 'product', 'manageLine'),
|
||||
(3, 'projectstory', 'story'),
|
||||
(3, 'projectstory', 'track'),
|
||||
(3, 'projectstory', 'view'),
|
||||
(3, 'my', 'preference'),
|
||||
(3, 'my', 'uploadAvatar'),
|
||||
(3, 'user', 'execution'),
|
||||
(3, 'user', 'cropAvatar'),
|
||||
(3, 'search', 'index'),
|
||||
(3, 'program', 'browse'),
|
||||
(4, 'product', 'dashboard'),
|
||||
(4, 'product', 'manageLine'),
|
||||
(4, 'projectstory', 'story'),
|
||||
(4, 'projectstory', 'track'),
|
||||
(4, 'projectstory', 'view'),
|
||||
(4, 'my', 'preference'),
|
||||
(4, 'my', 'uploadAvatar'),
|
||||
(4, 'user', 'execution'),
|
||||
(4, 'user', 'cropAvatar'),
|
||||
(4, 'program', 'view'),
|
||||
(4, 'program', 'browse'),
|
||||
(4, 'search', 'index'),
|
||||
(5, 'product', 'dashboard'),
|
||||
(5, 'product', 'manageLine'),
|
||||
(5, 'projectstory', 'story'),
|
||||
(5, 'projectstory', 'track'),
|
||||
(5, 'projectstory', 'view'),
|
||||
(5, 'projectstory', 'linkStory'),
|
||||
(5, 'projectstory', 'unLinkStory'),
|
||||
(5, 'my', 'preference'),
|
||||
(5, 'my', 'uploadAvatar'),
|
||||
(5, 'user', 'execution'),
|
||||
(5, 'user', 'cropAvatar'),
|
||||
(5, 'program', 'view'),
|
||||
(5, 'program', 'browse'),
|
||||
(5, 'search', 'index'),
|
||||
(6, 'product', 'dashboard'),
|
||||
(6, 'product', 'manageLine'),
|
||||
(6, 'projectstory', 'story'),
|
||||
(6, 'projectstory', 'track'),
|
||||
(6, 'projectstory', 'view'),
|
||||
(6, 'my', 'preference'),
|
||||
(6, 'my', 'uploadAvatar'),
|
||||
(6, 'user', 'execution'),
|
||||
(6, 'user', 'cropAvatar'),
|
||||
(6, 'program', 'view'),
|
||||
(6, 'program', 'browse'),
|
||||
(6, 'search', 'index'),
|
||||
(7, 'product', 'dashboard'),
|
||||
(7, 'product', 'manageLine'),
|
||||
(7, 'projectstory', 'story'),
|
||||
(7, 'projectstory', 'track'),
|
||||
(7, 'projectstory', 'view'),
|
||||
(7, 'projectstory', 'linkStory'),
|
||||
(7, 'projectstory', 'unLinkStory'),
|
||||
(7, 'my', 'preference'),
|
||||
(7, 'my', 'uploadAvatar'),
|
||||
(7, 'user', 'execution'),
|
||||
(7, 'user', 'cropAvatar'),
|
||||
(7, 'program', 'view'),
|
||||
(7, 'program', 'browse'),
|
||||
(7, 'search', 'index'),
|
||||
(8, 'product', 'dashboard'),
|
||||
(8, 'product', 'manageLine'),
|
||||
(8, 'projectstory', 'story'),
|
||||
(8, 'projectstory', 'track'),
|
||||
(8, 'projectstory', 'view'),
|
||||
(8, 'my', 'preference'),
|
||||
(8, 'my', 'uploadAvatar'),
|
||||
(8, 'user', 'execution'),
|
||||
(8, 'user', 'cropAvatar'),
|
||||
(8, 'program', 'view'),
|
||||
(8, 'program', 'browse'),
|
||||
(8, 'search', 'index'),
|
||||
(9, 'product', 'dashboard'),
|
||||
(9, 'product', 'manageLine'),
|
||||
(9, 'projectstory', 'story'),
|
||||
(9, 'projectstory', 'track'),
|
||||
(9, 'projectstory', 'view'),
|
||||
(9, 'projectstory', 'linkStory'),
|
||||
(9, 'projectstory', 'unLinkStory'),
|
||||
(9, 'my', 'preference'),
|
||||
(9, 'my', 'uploadAvatar'),
|
||||
(9, 'user', 'execution'),
|
||||
(9, 'user', 'cropAvatar'),
|
||||
(9, 'program', 'view'),
|
||||
(9, 'program', 'browse'),
|
||||
(9, 'search', 'index'),
|
||||
(10, 'product', 'dashboard'),
|
||||
(10, 'product', 'manageLine'),
|
||||
(10, 'projectstory', 'story'),
|
||||
(10, 'projectstory', 'track'),
|
||||
(10, 'projectstory', 'view'),
|
||||
(10, 'my', 'preference'),
|
||||
(10, 'my', 'uploadAvatar'),
|
||||
(10, 'user', 'execution'),
|
||||
(10, 'user', 'cropAvatar'),
|
||||
(10, 'search', 'index'),
|
||||
(10, 'program', 'browse'),
|
||||
(11, 'product', 'dashboard'),
|
||||
(11, 'product', 'manageLine'),
|
||||
(11, 'projectstory', 'story'),
|
||||
(11, 'projectstory', 'track'),
|
||||
(11, 'projectstory', 'view'),
|
||||
(11, 'my', 'preference'),
|
||||
(11, 'my', 'uploadAvatar'),
|
||||
(11, 'user', 'execution'),
|
||||
(11, 'program', 'browse'),
|
||||
(11, 'user', 'cropAvatar');
|
||||
|
||||
REPLACE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`) VALUES
|
||||
('zh-cn', 'custom', 'URSRList', '1', '{\"SRName\":\"\\u8f6f\\u4ef6\\u9700\\u6c42\",\"URName\":\"\\u7528\\u6237\\u9700\\u6c42\"}', '1'),
|
||||
('zh-cn', 'custom', 'URSRList', '2', '{\"SRName\":\"\\u7814\\u53d1\\u9700\\u6c42\",\"URName\":\"\\u7528\\u6237\\u9700\\u6c42\"}', '1'),
|
||||
('zh-cn', 'custom', 'URSRList', '3', '{\"SRName\":\"\\u8f6f\\u9700\",\"URName\":\"\\u7528\\u9700\"}', '1'),
|
||||
('zh-cn', 'custom', 'URSRList', '4', '{\"SRName\":\"\\u6545\\u4e8b\",\"URName\":\"\\u53f2\\u8bd7\"}', '1'),
|
||||
('zh-cn', 'custom', 'URSRList', '5', '{\"SRName\":\"\\u9700\\u6c42\",\"URName\":\"\\u7528\\u6237\\u9700\\u6c42\"}', '1'),
|
||||
('en', 'custom', 'URSRList', '1', '{\"SRName\":\"Story\",\"URName\":\"Epic\"}', '0'),
|
||||
('en', 'custom', 'URSRList', '2', '{\"SRName\":\"Story\",\"URName\":\"Requirement\"}', '0');
|
||||
|
||||
REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProduct', '1');
|
||||
REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRExecution', '1');
|
||||
|
||||
update zt_config set `value`='project-browse' where `key`='projectLink';
|
||||
update zt_config set `value`='program-browse' where `key`='programLink';
|
||||
|
||||
update zt_team set type='execution' where type='project';
|
||||
update zt_action set objectType='execution' where objectType='project';
|
||||
update zt_file set objectType='execution' where objectType='project';
|
||||
|
||||
ALTER TABLE `zt_todo` ADD `deleted` ENUM( "0", "1" ) NOT NULL DEFAULT '0';
|
||||
|
||||
TRUNCATE `zt_block`;
|
||||
DELETE FROM `zt_config` WHERE `key` = 'blockInited';
|
||||
@@ -0,0 +1,2 @@
|
||||
DELETE FROM zt_cron WHERE command='moduleName=weekly&methodName=computeWeekly';
|
||||
ALTER TABLE zt_story drop column `project`;
|
||||
@@ -0,0 +1,8 @@
|
||||
ALTER TABLE `zt_webhook` CHANGE `projects` `executions` text NOT NULL;
|
||||
ALTER TABLE `zt_webhook` CHANGE `executions` `executions` text NOT NULL;
|
||||
ALTER TABLE `zt_projectcase` ADD `count` mediumint(8) unsigned NOT NULL DEFAULT '1' AFTER `case`;
|
||||
|
||||
ALTER TABLE `zt_repo` ADD `extra` char(30) COLLATE 'utf8_general_ci' NOT NULL AFTER `desc`;
|
||||
|
||||
UPDATE `zt_config` set `value`='program-browse' where `key`='programLink' and `value`='program-pgmbrowse';
|
||||
UPDATE `zt_config` set `value`='project-browse' where `key`='projectLink' and `value`='program-prjbrowse';
|
||||
+23
-335
@@ -1,342 +1,30 @@
|
||||
ALTER TABLE `zt_project` DROP `isCat`, DROP `catID`;
|
||||
ALTER TABLE `zt_project` ADD `project` mediumint(8) NOT NULL DEFAULT 0 AFTER `id`;
|
||||
ALTER TABLE `zt_project` ADD `model` char(30) NOT NULL AFTER `project`;
|
||||
ALTER TABLE `zt_project` CHANGE `type` `type` char(30) NOT NULL DEFAULT 'sprint' AFTER `model`;
|
||||
ALTER TABLE `zt_project` CHANGE `acl` `acl` char(30) NOT NULL DEFAULT 'open';
|
||||
ALTER TABLE `zt_project` ADD `product` varchar(20) NOT NULL DEFAULT 'single' AFTER `type`;
|
||||
ALTER TABLE `zt_project` ADD `lifetime` char(30) NOT NULL AFTER `product`;
|
||||
ALTER TABLE `zt_project` ADD `budget` varchar(30) NOT NULL DEFAULT '0' AFTER `lifetime`;
|
||||
ALTER TABLE `zt_project` ADD `budgetUnit` char(30) NOT NULL DEFAULT 'CNY' AFTER `budget`;
|
||||
ALTER TABLE `zt_project` ADD `percent` float unsigned NOT NULL DEFAULT '0' AFTER `budgetUnit`;
|
||||
ALTER TABLE `zt_project` ADD `path` varchar(255) NOT NULL AFTER `parent`;
|
||||
ALTER TABLE `zt_project` ADD `grade` tinyint unsigned NOT NULL AFTER `path`;
|
||||
ALTER TABLE `zt_project` ADD `auth` char(30) NOT NULL AFTER `percent`;
|
||||
ALTER TABLE `zt_project` ADD `milestone` enum('0','1') NOT NULL default '0' AFTER `percent`;
|
||||
ALTER TABLE `zt_project` ADD `attribute` varchar(30) NOT NULL DEFAULT '' AFTER `budgetUnit`;
|
||||
ALTER TABLE `zt_project` ADD `realBegan` date NOT NULL AFTER `end`;
|
||||
ALTER TABLE `zt_project` ADD `realEnd` date NOT NULL AFTER `realBegan`;
|
||||
ALTER TABLE `zt_project` ADD `version` smallint(6) NOT NULL AFTER `desc`;
|
||||
ALTER TABLE `zt_project` ADD `parentVersion` smallint(6) NOT NULL AFTER `version`;
|
||||
ALTER TABLE `zt_project` ADD `planDuration` int(11) NOT NULL AFTER `parentVersion`;
|
||||
ALTER TABLE `zt_project` ADD `realDuration` int(11) NOT NULL AFTER `planDuration`;
|
||||
ALTER TABLE `zt_project` ADD `output` text NOT NULL AFTER `milestone`;
|
||||
ALTER TABLE `zt_project` ADD `lastEditedBy` varchar(30) NOT NULL DEFAULT '' AFTER `openedVersion`;
|
||||
ALTER TABLE `zt_project` ADD `lastEditedDate` datetime NOT NULL AFTER `lastEditedBy`;
|
||||
|
||||
ALTER TABLE `zt_action` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_bug` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_build` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_burn` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_doc` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_relation` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_relation` CHANGE `program` `project` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_doclib` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_task` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_testreport` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_testtask` CHANGE `project` `execution` mediumint(8) unsigned NOT NULL;
|
||||
ALTER TABLE `zt_webhook` CHANGE `projects` `executions` mediumint(8) unsigned NOT NULL;
|
||||
|
||||
ALTER TABLE `zt_task` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_doclib` ADD `project` mediumint(8) unsigned NOT NULL AFTER `product`;
|
||||
ALTER TABLE `zt_doc` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_story` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_bug` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_case` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_testtask` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_testreport` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_testsuite` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_build` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_release` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
|
||||
ALTER TABLE `zt_product` ADD `bind` enum('0','1') NOT NULL DEFAULT '0' AFTER `code`;
|
||||
ALTER TABLE `zt_product` ADD `program` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_repo` ADD `product` varchar(255) NOT NULL AFTER `id`;
|
||||
|
||||
ALTER TABLE `zt_group` ADD `project` mediumint(8) unsigned NOT NULL AFTER `id`;
|
||||
INSERT INTO `zt_group` (`name`, `role`, `desc`) VALUES ('项目管理员', 'projectAdmin', '项目管理员可以维护项目的权限');
|
||||
|
||||
ALTER TABLE `zt_usergroup` ADD `project` text NOT NULL;
|
||||
|
||||
ALTER TABLE `zt_userview` ADD `programs` mediumtext NOT NULL AFTER `account`;
|
||||
ALTER TABLE `zt_userview` ADD `sprints` mediumtext NOT NULL AFTER `programs`;
|
||||
|
||||
ALTER TABLE `zt_user` ADD `company` mediumint unsigned NOT NULL AFTER `id`;
|
||||
ALTER TABLE `zt_user` ADD `type` char(30) NOT NULL default 'inside' AFTER `account`;
|
||||
ALTER TABLE `zt_user` ADD `nature` text NOT NULL AFTER `zipcode`;
|
||||
ALTER TABLE `zt_user` ADD `analysis` text NOT NULL AFTER `nature`;
|
||||
ALTER TABLE `zt_user` ADD `strategy` text NOT NULL AFTER `analysis`;
|
||||
ALTER TABLE `zt_user` CHANGE `avatar` `avatar` text NOT NULL AFTER `commiter`;
|
||||
|
||||
REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'custom', '', 'URSR', '6');
|
||||
REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'project', '', 'unitList', 'CNY,USD');
|
||||
REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'project', '', 'defaultCurrency', 'CNY');
|
||||
|
||||
ALTER TABLE `zt_config` MODIFY COLUMN `value` longtext NOT NULL AFTER `key`;
|
||||
|
||||
UPDATE `zt_config` SET `key` = 'CRExecution' WHERE `module` = 'common' AND `key` = 'CRProject';
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_stakeholder`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_stakeholder` (
|
||||
`id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`objectID` mediumint(8) NOT NULL,
|
||||
`objectType` char(30) NOT NULL,
|
||||
`user` char(30) NOT NULL,
|
||||
`type` char(30) NOT NULL,
|
||||
`key` enum('0','1') NOT NULL,
|
||||
`from` char(30) NOT NULL,
|
||||
`createdBy` char(30) NOT NULL,
|
||||
`createdDate` date NOT NULL,
|
||||
`editedBy` char(30) NOT NULL,
|
||||
`editedDate` date NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_expect`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_expect` (
|
||||
`id` mediumint(8) NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`userID` mediumint(8) NOT NULL,
|
||||
`project` mediumint(8) NOT NULL DEFAULT 0,
|
||||
`expect` text NOT NULL,
|
||||
`progress` text NOT NULL,
|
||||
`createdBy` char(30) NOT NULL,
|
||||
`createdDate` date NOT NULL,
|
||||
`deleted` enum('0','1') NOT NULL DEFAULT '0'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_projectspec`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_projectspec` (
|
||||
`project` mediumint(8) NOT NULL,
|
||||
-- DROP TABLE IF EXISTS `zt_storyreview`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_storyreview` (
|
||||
`story` mediumint(9) NOT NULL,
|
||||
`version` smallint(6) NOT NULL,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`milestone` enum('0','1') NOT NULL DEFAULT '0',
|
||||
`begin` date NOT NULL,
|
||||
`end` date NOT NULL,
|
||||
UNIQUE KEY `project` (`project`,`version`)
|
||||
`reviewer` varchar(30) NOT NULL,
|
||||
`result` varchar(30) NOT NULL,
|
||||
`reviewDate` datetime NOT NULL,
|
||||
UNIQUE KEY `story` (`story`,`version`,`reviewer`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_projectcase`;
|
||||
CREATE TABLE `zt_projectcase` (
|
||||
`project` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`product` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`case` mediumint(8) unsigned NOT NULL DEFAULT '0',
|
||||
`version` smallint(6) NOT NULL DEFAULT '1',
|
||||
`order` smallint(6) unsigned NOT NULL,
|
||||
UNIQUE KEY `project` (`project`,`case`)
|
||||
-- DROP TABLE IF EXISTS `zt_storyestimate`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_storyestimate` (
|
||||
`story` mediumint(9) NOT NULL,
|
||||
`round` smallint(6) NOT NULL,
|
||||
`estimate` text NOT NULL,
|
||||
`average` float(10,2) NOT NULL,
|
||||
`openedBy` varchar(30) NOT NULL,
|
||||
`openedDate` datetime NOT NULL,
|
||||
UNIQUE KEY `story` (`story`,`round`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `zt_task` ADD `design` mediumint(8) unsigned NOT NULL AFTER `module`;
|
||||
ALTER TABLE `zt_task` ADD `version` smallint(6) NOT NULL AFTER `desc`;
|
||||
ALTER TABLE `zt_task` ADD `activatedDate` date NOT NULL AFTER `lastEditedDate`;
|
||||
ALTER TABLE `zt_task` ADD `planDuration` int(11) NOT NULL AFTER `closedDate`;
|
||||
ALTER TABLE `zt_task` ADD `realDuration` int(11) NOT NULL AFTER `closedDate`;
|
||||
ALTER TABLE `zt_task` ADD `designVersion` smallint(6) unsigned NOT NULL AFTER `storyVersion`;
|
||||
ALTER TABLE `zt_project` CHANGE `lifetime` `lifetime` char(30) NOT NULL DEFAULT '';
|
||||
ALTER TABLE `zt_story` ADD `category` varchar(30) NOT NULL DEFAULT 'feature' AFTER `type`;
|
||||
ALTER TABLE `zt_testtask` ADD `type` varchar(255) NOT NULL DEFAULT '' AFTER `build`;
|
||||
ALTER TABLE `zt_testtask` ADD `testreport` mediumint(8) unsigned NOT NULL AFTER `status`;
|
||||
ALTER TABLE `zt_story` MODIFY COLUMN `reviewedDate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00';
|
||||
|
||||
ALTER TABLE `zt_burn` ADD `storyPoint` float NOT NULL AFTER `consumed`;
|
||||
ALTER TABLE `zt_burn` ADD `product` mediumint(8) unsigned NOT NULL DEFAULT '0' AFTER `execution`;
|
||||
REPLACE INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'story', '', 'reviewRules', 'allpass');
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_taskspec`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_taskspec` (
|
||||
`task` mediumint(8) NOT NULL,
|
||||
`version` smallint(6) NOT NULL,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`estStarted` date NOT NULL,
|
||||
`deadline` date NOT NULL,
|
||||
UNIQUE KEY `task` (`task`,`version`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
ALTER TABLE `zt_block` ADD `type` char(30) NOT NULL AFTER `module`;
|
||||
ALTER TABLE `zt_block` ADD UNIQUE `account_module_type_order` (`account`, `module`, `type`, `order`), DROP INDEX `accountModuleOrder`;
|
||||
|
||||
INSERT INTO `zt_cron` (`m`, `h`, `dom`, `mon`, `dow`, `command`, `remark`, `type`, `buildin`, `status`, `lastTime`) VALUES ('1', '0', '*', '*', '*', 'moduleName=weekly&methodName=computeWeekly', '更新项目周报', 'system', 0, 'normal', '2020-08-27 10:07:53');
|
||||
|
||||
ALTER TABLE `zt_story` ADD `URChanged` enum('0','1') NOT NULL DEFAULT '0' AFTER `version`;
|
||||
|
||||
ALTER TABLE `zt_team` MODIFY `type` enum('project','task','execution') NOT NULL DEFAULT 'project' AFTER `root`;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zt_planstory` (
|
||||
`plan` mediumint(8) unsigned NOT NULL,
|
||||
`story` mediumint(8) unsigned NOT NULL,
|
||||
`order` mediumint(9) NOT NULL,
|
||||
UNIQUE KEY `unique` (`plan`,`story`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS `zt_acl` (
|
||||
`id` mediumint(9) NOT NULL AUTO_INCREMENT,
|
||||
`account` char(30) NOT NULL,
|
||||
`objectType` char(30) NOT NULL,
|
||||
`objectID` mediumint(9) NOT NULL DEFAULT '0',
|
||||
`type` char(40) NOT NULL DEFAULT 'whitelist',
|
||||
`source` char(30) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_searchindex`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_searchindex` (
|
||||
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
|
||||
`objectType` char(20) NOT NULL,
|
||||
`objectID` mediumint(9) NOT NULL,
|
||||
`title` text NOT NULL,
|
||||
`content` text NOT NULL,
|
||||
`addedDate` datetime NOT NULL,
|
||||
`editedDate` datetime NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `object` (`objectType`,`objectID`),
|
||||
KEY `addedDate` (`addedDate`),
|
||||
FULLTEXT KEY `content` (`content`),
|
||||
FULLTEXT KEY `title` (`title`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
-- DROP TABLE IF EXISTS `zt_searchdict`;
|
||||
CREATE TABLE IF NOT EXISTS `zt_searchdict` (
|
||||
`key` smallint(5) unsigned NOT NULL,
|
||||
`value` char(3) NOT NULL,
|
||||
PRIMARY KEY (`key`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
|
||||
|
||||
REPLACE INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
|
||||
(1, 'product', 'dashboard'),
|
||||
(1, 'product', 'manageLine'),
|
||||
(1, 'projectstory', 'story'),
|
||||
(1, 'projectstory', 'track'),
|
||||
(1, 'projectstory', 'view'),
|
||||
(1, 'projectstory', 'linkStory'),
|
||||
(1, 'projectstory', 'unLinkStory'),
|
||||
(1, 'my', 'preference'),
|
||||
(1, 'my', 'uploadAvatar'),
|
||||
(1, 'user', 'execution'),
|
||||
(1, 'user', 'cropAvatar'),
|
||||
(1, 'program', 'browse'),
|
||||
(1, 'program', 'view'),
|
||||
(1, 'search', 'index'),
|
||||
(1, 'search', 'buildIndex'),
|
||||
(2, 'product', 'dashboard'),
|
||||
(2, 'product', 'manageLine'),
|
||||
(2, 'projectstory', 'story'),
|
||||
(2, 'projectstory', 'track'),
|
||||
(2, 'projectstory', 'view'),
|
||||
(2, 'my', 'preference'),
|
||||
(2, 'my', 'uploadAvatar'),
|
||||
(2, 'user', 'execution'),
|
||||
(2, 'user', 'cropAvatar'),
|
||||
(2, 'search', 'index'),
|
||||
(2, 'program', 'browse'),
|
||||
(3, 'product', 'dashboard'),
|
||||
(3, 'product', 'manageLine'),
|
||||
(3, 'projectstory', 'story'),
|
||||
(3, 'projectstory', 'track'),
|
||||
(3, 'projectstory', 'view'),
|
||||
(3, 'my', 'preference'),
|
||||
(3, 'my', 'uploadAvatar'),
|
||||
(3, 'user', 'execution'),
|
||||
(3, 'user', 'cropAvatar'),
|
||||
(3, 'search', 'index'),
|
||||
(3, 'program', 'browse'),
|
||||
(4, 'product', 'dashboard'),
|
||||
(4, 'product', 'manageLine'),
|
||||
(4, 'projectstory', 'story'),
|
||||
(4, 'projectstory', 'track'),
|
||||
(4, 'projectstory', 'view'),
|
||||
(4, 'my', 'preference'),
|
||||
(4, 'my', 'uploadAvatar'),
|
||||
(4, 'user', 'execution'),
|
||||
(4, 'user', 'cropAvatar'),
|
||||
(4, 'program', 'view'),
|
||||
(4, 'program', 'browse'),
|
||||
(4, 'search', 'index'),
|
||||
(5, 'product', 'dashboard'),
|
||||
(5, 'product', 'manageLine'),
|
||||
(5, 'projectstory', 'story'),
|
||||
(5, 'projectstory', 'track'),
|
||||
(5, 'projectstory', 'view'),
|
||||
(5, 'projectstory', 'linkStory'),
|
||||
(5, 'projectstory', 'unLinkStory'),
|
||||
(5, 'my', 'preference'),
|
||||
(5, 'my', 'uploadAvatar'),
|
||||
(5, 'user', 'execution'),
|
||||
(5, 'user', 'cropAvatar'),
|
||||
(5, 'program', 'view'),
|
||||
(5, 'program', 'browse'),
|
||||
(5, 'search', 'index'),
|
||||
(6, 'product', 'dashboard'),
|
||||
(6, 'product', 'manageLine'),
|
||||
(6, 'projectstory', 'story'),
|
||||
(6, 'projectstory', 'track'),
|
||||
(6, 'projectstory', 'view'),
|
||||
(6, 'my', 'preference'),
|
||||
(6, 'my', 'uploadAvatar'),
|
||||
(6, 'user', 'execution'),
|
||||
(6, 'user', 'cropAvatar'),
|
||||
(6, 'program', 'view'),
|
||||
(6, 'program', 'browse'),
|
||||
(6, 'search', 'index'),
|
||||
(7, 'product', 'dashboard'),
|
||||
(7, 'product', 'manageLine'),
|
||||
(7, 'projectstory', 'story'),
|
||||
(7, 'projectstory', 'track'),
|
||||
(7, 'projectstory', 'view'),
|
||||
(7, 'projectstory', 'linkStory'),
|
||||
(7, 'projectstory', 'unLinkStory'),
|
||||
(7, 'my', 'preference'),
|
||||
(7, 'my', 'uploadAvatar'),
|
||||
(7, 'user', 'execution'),
|
||||
(7, 'user', 'cropAvatar'),
|
||||
(7, 'program', 'view'),
|
||||
(7, 'program', 'browse'),
|
||||
(7, 'search', 'index'),
|
||||
(8, 'product', 'dashboard'),
|
||||
(8, 'product', 'manageLine'),
|
||||
(8, 'projectstory', 'story'),
|
||||
(8, 'projectstory', 'track'),
|
||||
(8, 'projectstory', 'view'),
|
||||
(8, 'my', 'preference'),
|
||||
(8, 'my', 'uploadAvatar'),
|
||||
(8, 'user', 'execution'),
|
||||
(8, 'user', 'cropAvatar'),
|
||||
(8, 'program', 'view'),
|
||||
(8, 'program', 'browse'),
|
||||
(8, 'search', 'index'),
|
||||
(9, 'product', 'dashboard'),
|
||||
(9, 'product', 'manageLine'),
|
||||
(9, 'projectstory', 'story'),
|
||||
(9, 'projectstory', 'track'),
|
||||
(9, 'projectstory', 'view'),
|
||||
(9, 'projectstory', 'linkStory'),
|
||||
(9, 'projectstory', 'unLinkStory'),
|
||||
(9, 'my', 'preference'),
|
||||
(9, 'my', 'uploadAvatar'),
|
||||
(9, 'user', 'execution'),
|
||||
(9, 'user', 'cropAvatar'),
|
||||
(9, 'program', 'view'),
|
||||
(9, 'program', 'browse'),
|
||||
(9, 'search', 'index'),
|
||||
(10, 'product', 'dashboard'),
|
||||
(10, 'product', 'manageLine'),
|
||||
(10, 'projectstory', 'story'),
|
||||
(10, 'projectstory', 'track'),
|
||||
(10, 'projectstory', 'view'),
|
||||
(10, 'my', 'preference'),
|
||||
(10, 'my', 'uploadAvatar'),
|
||||
(10, 'user', 'execution'),
|
||||
(10, 'user', 'cropAvatar'),
|
||||
(10, 'search', 'index'),
|
||||
(10, 'program', 'browse'),
|
||||
(11, 'product', 'dashboard'),
|
||||
(11, 'product', 'manageLine'),
|
||||
(11, 'projectstory', 'story'),
|
||||
(11, 'projectstory', 'track'),
|
||||
(11, 'projectstory', 'view'),
|
||||
(11, 'my', 'preference'),
|
||||
(11, 'my', 'uploadAvatar'),
|
||||
(11, 'user', 'execution'),
|
||||
(11, 'program', 'browse'),
|
||||
(11, 'user', 'cropAvatar');
|
||||
|
||||
INSERT INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `system`) VALUES
|
||||
('zh-cn', 'custom', 'URSRList', '1', '{\"SRName\":\"\\u8f6f\\u4ef6\\u9700\\u6c42\",\"URName\":\"\\u7528\\u6237\\u9700\\u6c42\"}', '1'),
|
||||
('zh-cn', 'custom', 'URSRList', '2', '{\"SRName\":\"\\u7814\\u53d1\\u9700\\u6c42\",\"URName\":\"\\u7528\\u6237\\u9700\\u6c42\"}', '1'),
|
||||
('zh-cn', 'custom', 'URSRList', '3', '{\"SRName\":\"\\u8f6f\\u9700\",\"URName\":\"\\u7528\\u9700\"}', '1'),
|
||||
('zh-cn', 'custom', 'URSRList', '4', '{\"SRName\":\"\\u6545\\u4e8b\",\"URName\":\"\\u53f2\\u8bd7\"}', '1'),
|
||||
('zh-cn', 'custom', 'URSRList', '5', '{\"SRName\":\"\\u9700\\u6c42\",\"URName\":\"\\u7528\\u6237\\u9700\\u6c42\"}', '1');
|
||||
|
||||
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRProduct', '1');
|
||||
INSERT INTO `zt_config` (`owner`, `module`, `section`, `key`, `value`) VALUES ('system', 'common', '', 'CRExecution', '1');
|
||||
UPDATE zt_project SET lifetime = '' WHERE lifetime = 'sprint';
|
||||
|
||||
+647
-587
File diff suppressed because it is too large
Load Diff
@@ -16,7 +16,7 @@ class baseControl
|
||||
/**
|
||||
* 全局对象 $app。
|
||||
* The global $app object.
|
||||
*
|
||||
*
|
||||
* @var object
|
||||
* @access public
|
||||
*/
|
||||
@@ -25,7 +25,7 @@ class baseControl
|
||||
/**
|
||||
* 应用名称 $appName
|
||||
* The global $appName.
|
||||
*
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
@@ -34,7 +34,7 @@ class baseControl
|
||||
/**
|
||||
* 全局对象 $config。
|
||||
* The global $config object.
|
||||
*
|
||||
*
|
||||
* @var object
|
||||
* @access public
|
||||
*/
|
||||
@@ -43,7 +43,7 @@ class baseControl
|
||||
/**
|
||||
* 全局对象 $lang。
|
||||
* The global $lang object.
|
||||
*
|
||||
*
|
||||
* @var object
|
||||
* @access public
|
||||
*/
|
||||
@@ -52,7 +52,7 @@ class baseControl
|
||||
/**
|
||||
* 全局对象 $dbh,数据库连接句柄。
|
||||
* The global $dbh object, the database connection handler.
|
||||
*
|
||||
*
|
||||
* @var object
|
||||
* @access public
|
||||
*/
|
||||
@@ -61,7 +61,7 @@ class baseControl
|
||||
/**
|
||||
* $dao对象,实现sql的拼装和执行。
|
||||
* The $dao object, used to join sql and excute sql.
|
||||
*
|
||||
*
|
||||
* @var object
|
||||
* @access public
|
||||
*/
|
||||
@@ -70,7 +70,7 @@ class baseControl
|
||||
/**
|
||||
* $post对象,用户可以通过$this->post->key来引用$_POST变量。
|
||||
* The $post object, useer can access a post var by $this->post->key.
|
||||
*
|
||||
*
|
||||
* @var object
|
||||
* @access public
|
||||
*/
|
||||
@@ -79,7 +79,7 @@ class baseControl
|
||||
/**
|
||||
* $get对象,用户可以通过$this->get->key来引用$_GET变量。
|
||||
* The $get object, useer can access a get var by $this->get->key.
|
||||
*
|
||||
*
|
||||
* @var object
|
||||
* @access public
|
||||
*/
|
||||
@@ -88,7 +88,7 @@ class baseControl
|
||||
/**
|
||||
* $session对象,用户可以通过$this->session->key来引用$_SESSION变量。
|
||||
* The $session object, useer can access a session var by $this->session->key.
|
||||
*
|
||||
*
|
||||
* @var object
|
||||
* @access public
|
||||
*/
|
||||
@@ -97,7 +97,7 @@ class baseControl
|
||||
/**
|
||||
* $server对象,用户可以通过$this->server->key来引用$_SERVER变量。
|
||||
* The $server object, useer can access a server var by $this->server->key.
|
||||
*
|
||||
*
|
||||
* @var object
|
||||
* @access public
|
||||
*/
|
||||
@@ -106,7 +106,7 @@ class baseControl
|
||||
/**
|
||||
* $cookie对象,用户可以通过$this->cookie->key来引用$_COOKIE变量。
|
||||
* The $cookie object, useer can access a cookie var by $this->cookie->key.
|
||||
*
|
||||
*
|
||||
* @var object
|
||||
* @access public
|
||||
*/
|
||||
@@ -115,7 +115,7 @@ class baseControl
|
||||
/**
|
||||
* 当前模块的名称。
|
||||
* The name of current module.
|
||||
*
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
@@ -124,16 +124,16 @@ class baseControl
|
||||
/**
|
||||
* $view用于存放从control传到view视图的数据。
|
||||
* The vars assigned to the view page.
|
||||
*
|
||||
*
|
||||
* @var object
|
||||
* @access public
|
||||
*/
|
||||
public $view;
|
||||
public $view;
|
||||
|
||||
/**
|
||||
* 视图的类型,比如html, json。
|
||||
* The type of the view, such html, json.
|
||||
*
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
@@ -142,7 +142,7 @@ class baseControl
|
||||
/**
|
||||
* 输出到浏览器的内容。
|
||||
* The content to display.
|
||||
*
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
@@ -151,25 +151,25 @@ class baseControl
|
||||
/**
|
||||
* 客户端设备。
|
||||
* The client device.
|
||||
*
|
||||
* @var string
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
public $clientDevice;
|
||||
|
||||
/**
|
||||
* 不同设备下视图文件的前缀。
|
||||
* The prefix of view file for mobile or PC.
|
||||
*
|
||||
* @var string
|
||||
* The prefix of view file for mobile or PC.
|
||||
*
|
||||
* @var string
|
||||
* @access public
|
||||
*/
|
||||
public $devicePrefix;
|
||||
|
||||
/**
|
||||
* 构造方法。
|
||||
*
|
||||
* 1. 将全局变量设为baseControl类的成员变量,方便baseControl的派生类调用;
|
||||
* 构造方法。
|
||||
*
|
||||
* 1. 将全局变量设为baseControl类的成员变量,方便baseControl的派生类调用;
|
||||
* 2. 设置当前模块,读取该模块的model类;
|
||||
* 3. 初始化$view视图类。
|
||||
*
|
||||
@@ -178,10 +178,10 @@ class baseControl
|
||||
* 1. global the global vars, refer them by the class member such as $this->app.
|
||||
* 2. set the pathes of current module, and load it's model class.
|
||||
* 3. auto assign the $lang and $config to the view.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $methodName
|
||||
* @param string $appName
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $methodName
|
||||
* @param string $appName
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -234,10 +234,10 @@ class baseControl
|
||||
|
||||
//-------------------- Model相关方法(Model related methods) --------------------//
|
||||
|
||||
/*
|
||||
* 设置模块名。
|
||||
* Set the module name.
|
||||
*
|
||||
/*
|
||||
* 设置模块名。
|
||||
* Set the module name.
|
||||
*
|
||||
* @param string $moduleName 模块名,如果为空,则从$app中获取. The module name, if empty, get it from $app.
|
||||
* @access public
|
||||
* @return void
|
||||
@@ -250,8 +250,8 @@ class baseControl
|
||||
/**
|
||||
* 设置方法名。
|
||||
* Set the method name.
|
||||
*
|
||||
* @param string $methodName 方法名,如果为空,则从$app中获取。The method name, if empty, get it from $app.
|
||||
*
|
||||
* @param string $methodName 方法名,如果为空,则从$app中获取。The method name, if empty, get it from $app.
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -263,7 +263,7 @@ class baseControl
|
||||
/**
|
||||
* 加载指定模块的model文件。
|
||||
* Load the model file of one module.
|
||||
*
|
||||
*
|
||||
* @param string $moduleName 模块名,如果为空,使用当前模块。The module name, if empty, use current module's name.
|
||||
* @param string $appName The app name, if empty, use current app's name.
|
||||
* @access public
|
||||
@@ -286,9 +286,9 @@ class baseControl
|
||||
|
||||
/**
|
||||
* 如果没有model文件,尝试加载config配置信息。
|
||||
* If no model file, try load config.
|
||||
* If no model file, try load config.
|
||||
*/
|
||||
if(!helper::import($modelFile))
|
||||
if(!helper::import($modelFile))
|
||||
{
|
||||
$this->app->loadModuleConfig($moduleName, $appName);
|
||||
$this->app->loadLang($moduleName, $appName);
|
||||
@@ -296,7 +296,7 @@ class baseControl
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* 如果没有扩展文件,model类名是$moduleName + 'model',如果有扩展,还需要增加ext前缀。
|
||||
* If no extension file, model class name is $moduleName + 'model', else with 'ext' as the prefix.
|
||||
*/
|
||||
@@ -307,7 +307,7 @@ class baseControl
|
||||
if(!class_exists($modelClass)) $this->app->triggerError(" The model $modelClass not found", __FILE__, __LINE__, $exit = true);
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* 初始化model对象,在control对象中可以通过$this->$moduleName来引用。同时将dao对象赋为control对象的成员变量,方便引用。
|
||||
* Init the model object thus you can try $this->$moduleName to access it. Also assign the $dao object as a member of control object.
|
||||
*/
|
||||
@@ -320,7 +320,7 @@ class baseControl
|
||||
/**
|
||||
* 设置超级全局变量,方便直接引用。
|
||||
* Set the super vars.
|
||||
*
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -336,7 +336,7 @@ class baseControl
|
||||
/**
|
||||
* 设置客户端的设备类型。
|
||||
* Set client device.
|
||||
*
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -362,7 +362,7 @@ class baseControl
|
||||
/**
|
||||
* 设置视图文件:主视图文件,扩展视图文件, 站点扩展视图文件,以及钩子脚本。
|
||||
* Set view files: the main file, extension view file, site extension view file and hook files.
|
||||
*
|
||||
*
|
||||
* @param string $moduleName module name
|
||||
* @param string $methodName method name
|
||||
* @access public
|
||||
@@ -401,15 +401,15 @@ class baseControl
|
||||
/**
|
||||
* 获取某一个视图文件的扩展。
|
||||
* Get the extension file of an view.
|
||||
*
|
||||
* @param string $viewFile
|
||||
*
|
||||
* @param string $viewFile
|
||||
* @access public
|
||||
* @return string|bool If extension view file exists, return the path. Else return fasle.
|
||||
*/
|
||||
public function getExtViewFile($viewFile)
|
||||
{
|
||||
/**
|
||||
* 首先找sitecode下的扩展文件,如果没有,再找ext下的扩展文件。
|
||||
* 首先找sitecode下的扩展文件,如果没有,再找ext下的扩展文件。
|
||||
* Find extViewFile in ext/_$siteCode/view first, then try ext/view/.
|
||||
*/
|
||||
if($this->app->siteCode)
|
||||
@@ -437,9 +437,9 @@ class baseControl
|
||||
/**
|
||||
* 获取适用于当前方法的css:该模块公用的css + 当前方法的css + 扩展的css。
|
||||
* Get css codes applied to current method: module common css + method css + extension css.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $methodName
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $methodName
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
@@ -504,8 +504,8 @@ class baseControl
|
||||
|
||||
/**
|
||||
* Get extension css and extension css with lang.
|
||||
*
|
||||
* @param array $files
|
||||
*
|
||||
* @param array $files
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
@@ -556,9 +556,9 @@ class baseControl
|
||||
/**
|
||||
* 获取适用于当前方法的js:该模块公用的js + 当前方法的js + 扩展的js。
|
||||
* Get js codes applied to current method: module common js + method js + extension js.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $methodName
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $methodName
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
@@ -599,14 +599,14 @@ class baseControl
|
||||
if(!empty($jsExtFiles) and is_array($jsExtFiles)) foreach($jsExtFiles as $jsFile) $js .= file_get_contents($jsFile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return $js;
|
||||
}
|
||||
|
||||
/**
|
||||
* 向$view传递一个变量。
|
||||
* Assign one var to the view vars.
|
||||
*
|
||||
*
|
||||
* @param string $name the name.
|
||||
* @param mixed $value the value.
|
||||
* @access public
|
||||
@@ -631,7 +631,7 @@ class baseControl
|
||||
|
||||
/**
|
||||
* 渲染视图文件。
|
||||
* Parse view file.
|
||||
* Parse view file.
|
||||
*
|
||||
* @param string $moduleName module name, if empty, use current module.
|
||||
* @param string $methodName method name, if empty, use current method.
|
||||
@@ -698,7 +698,7 @@ class baseControl
|
||||
|
||||
/**
|
||||
* 获得当前页面的CSS和JS。
|
||||
* Get css and js codes for current method.
|
||||
* Get css and js codes for current method.
|
||||
*/
|
||||
$css = $this->getCSS($moduleName, $methodName);
|
||||
$js = $this->getJS($moduleName, $methodName);
|
||||
@@ -707,7 +707,7 @@ class baseControl
|
||||
|
||||
/**
|
||||
* 切换到视图文件所在的目录,以保证视图文件里面的include语句能够正常运行。
|
||||
* Change the dir to the view file to keep the relative pathes work.
|
||||
* Change the dir to the view file to keep the relative pathes work.
|
||||
*/
|
||||
$currentPWD = getcwd();
|
||||
chdir(dirname($viewFile));
|
||||
@@ -725,7 +725,7 @@ class baseControl
|
||||
|
||||
/**
|
||||
* 渲染完毕后,再切换回之前的路径。
|
||||
* At the end, chang the dir to the previous.
|
||||
* At the end, chang the dir to the previous.
|
||||
*/
|
||||
chdir($currentPWD);
|
||||
}
|
||||
@@ -752,7 +752,7 @@ class baseControl
|
||||
if($moduleName == '') $moduleName = $this->moduleName;
|
||||
if($methodName == '') $methodName = $this->methodName;
|
||||
if($appName == '') $appName = $this->appName;
|
||||
if($moduleName == $this->moduleName and $methodName == $this->methodName)
|
||||
if($moduleName == $this->moduleName and $methodName == $this->methodName)
|
||||
{
|
||||
$this->parse($moduleName, $methodName);
|
||||
return $this->output;
|
||||
@@ -810,7 +810,7 @@ class baseControl
|
||||
|
||||
/**
|
||||
* 加载控制器文件。
|
||||
* Load the control file.
|
||||
* Load the control file.
|
||||
*/
|
||||
if(!is_file($file2Included)) $this->app->triggerError("The control file $file2Included not found", __FILE__, __LINE__, $exit = true);
|
||||
if(!class_exists($classNameToFetch))
|
||||
@@ -821,26 +821,26 @@ class baseControl
|
||||
|
||||
/**
|
||||
* 设置调用的类名。
|
||||
* Set the name of the class to be called.
|
||||
* Set the name of the class to be called.
|
||||
*/
|
||||
$className = class_exists("my$moduleName") ? "my$moduleName" : $moduleName;
|
||||
if(!class_exists($className)) $this->app->triggerError(" The class $className not found", __FILE__, __LINE__, $exit = true);
|
||||
|
||||
/**
|
||||
* 解析参数,创建模块control对象。
|
||||
* Parse the params, create the $module control object.
|
||||
* Parse the params, create the $module control object.
|
||||
*/
|
||||
$module = new $className($moduleName, $methodName, $appName);
|
||||
|
||||
/**
|
||||
* 调用对应方法,使用ob方法获取输出内容。
|
||||
* Call the method and use ob function to get the output.
|
||||
* Call the method and use ob function to get the output.
|
||||
*/
|
||||
ob_start();
|
||||
call_user_func_array(array($module, $methodName), $params);
|
||||
$output = ob_get_contents();
|
||||
ob_end_clean();
|
||||
|
||||
|
||||
unset($module);
|
||||
|
||||
/**
|
||||
@@ -855,14 +855,14 @@ class baseControl
|
||||
|
||||
/**
|
||||
* 返回内容。
|
||||
* Return the content.
|
||||
* Return the content.
|
||||
*/
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* 向浏览器输出内容。
|
||||
* Print the content of the view.
|
||||
* Print the content of the view.
|
||||
*
|
||||
* @param string $moduleName module name
|
||||
* @param string $methodName method name
|
||||
@@ -875,12 +875,12 @@ class baseControl
|
||||
echo $this->output;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* 直接输出data数据,通常用于ajax请求中。
|
||||
* Send data directly, for ajax requests.
|
||||
*
|
||||
* @param misc $data
|
||||
* @param string $type
|
||||
* @param misc $data
|
||||
* @param string $type
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -897,7 +897,7 @@ class baseControl
|
||||
|
||||
/**
|
||||
* 响应非ajax的请求。
|
||||
* Response request not ajax.
|
||||
* Response request not ajax.
|
||||
*/
|
||||
if(isset($data['result']) and $data['result'] == 'success')
|
||||
{
|
||||
@@ -928,21 +928,19 @@ class baseControl
|
||||
* @param string|array $vars the params passed, can be array(key=>value) or key1=value1&key2=value2
|
||||
* @param string $viewType the view type
|
||||
* @param string $onlybody remove header and footer or not in iframe
|
||||
* @param string $PRJID the project id
|
||||
* @param string $removePRJ if remove PRJ param
|
||||
* @access public
|
||||
* @return string the link string.
|
||||
*/
|
||||
public function createLink($moduleName, $methodName = 'index', $vars = array(), $viewType = '', $onlybody = false, $PRJID = 0, $removePRJ = false)
|
||||
public function createLink($moduleName, $methodName = 'index', $vars = array(), $viewType = '', $onlybody = false)
|
||||
{
|
||||
if(empty($moduleName)) $moduleName = $this->moduleName;
|
||||
return helper::createLink($moduleName, $methodName, $vars, $viewType, $onlybody, $PRJID, $removePRJ);
|
||||
return helper::createLink($moduleName, $methodName, $vars, $viewType, $onlybody);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建当前模块的一个方法链接。
|
||||
* Create a link to the inner method of current module.
|
||||
*
|
||||
*
|
||||
* @param string $methodName method name
|
||||
* @param string|array $vars the params passed, can be array(key=>value) or key1=value1&key2=value2
|
||||
* @param string $viewType the view type
|
||||
@@ -957,7 +955,7 @@ class baseControl
|
||||
/**
|
||||
* 重定向到另一个页面。
|
||||
* Location to another page.
|
||||
*
|
||||
*
|
||||
* @param string $url the target url.
|
||||
* @access public
|
||||
* @return void
|
||||
|
||||
@@ -56,17 +56,14 @@ class baseHelper
|
||||
* @param string|array $vars the params passed to the method, can be array('key' => 'value') or key1=value1&key2=value2) or key1=value1&key2=value2
|
||||
* @param string $viewType the view type
|
||||
* @param bool $onlyBody pass onlyBody=yes to the link thus the app can control the header and footer hide or show..
|
||||
* @param bool $PRJID set PRJ id in to session.
|
||||
* @param bool $removePRJ if true, remove PRJ param.
|
||||
* @static
|
||||
* @access public
|
||||
* @return string the link string.
|
||||
*/
|
||||
static public function createLink($moduleName, $methodName = 'index', $vars = '', $viewType = '', $onlyBody = false, $PRJID = 0, $removePRJ = false)
|
||||
static public function createLink($moduleName, $methodName = 'index', $vars = '', $viewType = '', $onlyBody = false)
|
||||
{
|
||||
/* 设置$appName和$moduleName。Set appName and moduleName. */
|
||||
global $app, $config;
|
||||
$PRJID = $PRJID ? $PRJID : $app->session->PRJ;
|
||||
|
||||
if(strpos($moduleName, '.') !== false)
|
||||
{
|
||||
@@ -98,8 +95,7 @@ class baseHelper
|
||||
if($viewType != 'html') $link .= "&{$config->viewVar}=" . $viewType;
|
||||
foreach($vars as $key => $value) $link .= "&$key=$value";
|
||||
|
||||
$link = self::processOnlyBodyParam($link, $onlyBody);
|
||||
return self::processProjectParam($link, $PRJID, $onlyBody, $moduleName, $removePRJ);
|
||||
return self::processOnlyBodyParam($link, $onlyBody);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -114,8 +110,7 @@ class baseHelper
|
||||
foreach($vars as $value) $link .= "{$config->requestFix}$value";
|
||||
$link .= '.' . $viewType;
|
||||
|
||||
$link = self::processOnlyBodyParam($link, $onlyBody);
|
||||
return self::processProjectParam($link, $PRJID, $onlyBody, $moduleName, $removePRJ);
|
||||
return self::processOnlyBodyParam($link, $onlyBody);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -126,8 +121,7 @@ class baseHelper
|
||||
if($moduleName == $config->default->module)
|
||||
{
|
||||
$link .= $config->default->method . '.' . $viewType;
|
||||
$link = self::processOnlyBodyParam($link, $onlyBody);
|
||||
return self::processProjectParam($link, $PRJID, $onlyBody, $moduleName, $removePRJ);
|
||||
return self::processOnlyBodyParam($link, $onlyBody);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -138,8 +132,7 @@ class baseHelper
|
||||
if($viewType == $app->getViewType())
|
||||
{
|
||||
$link .= $moduleName . '/';
|
||||
$link = self::processOnlyBodyParam($link, $onlyBody);
|
||||
return self::processProjectParam($link, $PRJID, $onlyBody, $moduleName, $removePRJ);
|
||||
return self::processOnlyBodyParam($link, $onlyBody);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -148,36 +141,7 @@ class baseHelper
|
||||
*
|
||||
*/
|
||||
$link .= $moduleName . '.' . $viewType;
|
||||
$link = self::processOnlyBodyParam($link, $onlyBody);
|
||||
return self::processProjectParam($link, $PRJID, $onlyBody, $moduleName, $removePRJ);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理PRJ 参数。
|
||||
* Process the PRJID param in url.
|
||||
*
|
||||
* 如果传参的时候设定了$PRJID,在生成链接的时候继续追加。
|
||||
* If $progrmID in the url, append it to the link.
|
||||
*
|
||||
* @param string $link
|
||||
* @param int $PRJID
|
||||
* @param bool $onlybody
|
||||
* @param string $moduleName
|
||||
* @param bool $removePRJ
|
||||
* @static
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public static function processProjectParam($link, $PRJID = '', $onlybody = false, $moduleName = '', $removePRJ = false)
|
||||
{
|
||||
global $config, $lang;
|
||||
|
||||
if(!$PRJID || $removePRJ) return $link;
|
||||
$app = zget($lang->navGroup, $moduleName);
|
||||
if($app != 'project' and $app != 'execution') return $link;
|
||||
|
||||
$link .= strpos($link, '?') === false ? "?PRJ=$PRJID" : "&PRJ=$PRJID";
|
||||
return $link;
|
||||
return self::processOnlyBodyParam($link, $onlyBody);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -251,15 +215,12 @@ class baseHelper
|
||||
{
|
||||
if(is_array($idList))
|
||||
{
|
||||
if(!function_exists('get_magic_quotes_gpc') or !get_magic_quotes_gpc())
|
||||
{
|
||||
foreach($idList as $key=>$value) $idList[$key] = addslashes($value);
|
||||
}
|
||||
foreach($idList as $key=>$value) $idList[$key] = addslashes($value);
|
||||
return "IN ('" . join("','", $idList) . "')";
|
||||
}
|
||||
|
||||
if(!is_string($idList)) $idList = json_encode($idList);
|
||||
if(!function_exists('get_magic_quotes_gpc') or !get_magic_quotes_gpc()) $idList = addslashes($idList);
|
||||
$idList = addslashes($idList);
|
||||
return "IN ('" . str_replace(',', "','", str_replace(' ', '', $idList)) . "')";
|
||||
}
|
||||
|
||||
@@ -302,7 +263,7 @@ class baseHelper
|
||||
*/
|
||||
static public function jsonEncode($data)
|
||||
{
|
||||
return (function_exists('get_magic_quotes_gpc') and get_magic_quotes_gpc()) ? addslashes(json_encode($data)) : json_encode($data);
|
||||
return json_encode($data);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -331,7 +292,7 @@ class baseHelper
|
||||
$oversize = strlen($password) % 8;
|
||||
if($oversize != 0) $password .= str_repeat("\0", 8 - $oversize);
|
||||
|
||||
$encrypted = @openssl_encrypt($password, 'DES-CBC', $secret, OPENSSL_ZERO_PADDING);
|
||||
$encrypted = @openssl_encrypt($password, 'DES-CBC', substr($secret, 0, 8), OPENSSL_ZERO_PADDING);
|
||||
}
|
||||
}
|
||||
if(empty($encrypted)) $encrypted = $password;
|
||||
@@ -357,7 +318,7 @@ class baseHelper
|
||||
$secret = $config->encryptSecret;
|
||||
if(function_exists('mcrypt_decrypt'))
|
||||
{
|
||||
$decryptedPassword = @mcrypt_decrypt(MCRYPT_DES, $secret, base64_decode($password), MCRYPT_MODE_CBC);
|
||||
$decryptedPassword = @mcrypt_decrypt(MCRYPT_DES, substr($secret, 0, 8), base64_decode($password), MCRYPT_MODE_CBC);
|
||||
}
|
||||
elseif(function_exists('openssl_decrypt'))
|
||||
{
|
||||
@@ -907,3 +868,17 @@ function zget($var, $key, $valueWhenNone = false, $valueWhenExists = false)
|
||||
if($valueWhenNone !== false) return $valueWhenNone;
|
||||
return $key;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is https.
|
||||
*
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
function isHttps()
|
||||
{
|
||||
if(!empty($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) !== 'off') return true;
|
||||
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') return true;
|
||||
if(!empty($_SERVER['HTTP_FRONT_END_HTTPS']) && strtolower($_SERVER['HTTP_FRONT_END_HTTPS']) !== 'off') return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -376,13 +376,13 @@ class baseRouter
|
||||
$this->loadClass('dao', $static = true);
|
||||
$this->loadClass('mobile', $static = true);
|
||||
|
||||
$this->setCookieSecure();
|
||||
$this->setOpenApp();
|
||||
$this->setSuperVars();
|
||||
$this->setDebug();
|
||||
$this->setErrorHandler();
|
||||
$this->setTimezone();
|
||||
$this->startSession();
|
||||
$this->setProject();
|
||||
$this->setOpenApp();
|
||||
|
||||
if($this->config->framework->multiSite) $this->setSiteCode() && $this->loadExtraConfig();
|
||||
if($this->config->framework->autoConnectDB) $this->connectDB();
|
||||
@@ -600,7 +600,7 @@ class baseRouter
|
||||
$this->get = new super('get');
|
||||
$this->server = new super('server');
|
||||
$this->cookie = new super('cookie');
|
||||
$this->session = new super('session');
|
||||
$this->session = new super('session', $this->openApp);
|
||||
|
||||
unset($GLOBALS);
|
||||
unset($_REQUEST);
|
||||
@@ -619,6 +619,18 @@ class baseRouter
|
||||
$_COOKIE = validater::filterSuper($_COOKIE);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set cookieSecure config.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setCookieSecure()
|
||||
{
|
||||
$this->config->cookieSecure = false;
|
||||
if($this->config->framework->setCookieSecure and isHttps()) $this->config->cookieSecure = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置Debug模式。
|
||||
* set Debug.
|
||||
@@ -841,7 +853,7 @@ class baseRouter
|
||||
{
|
||||
$sessionName = $this->config->sessionVar;
|
||||
session_name($sessionName);
|
||||
session_set_cookie_params(0, $this->config->webRoot);
|
||||
session_set_cookie_params(0, $this->config->webRoot, '', $this->config->cookieSecure, true);
|
||||
if($this->config->customSession) session_save_path($this->getTmpRoot() . 'session');
|
||||
session_start();
|
||||
|
||||
@@ -854,18 +866,6 @@ class baseRouter
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 从Get里取project id 设置到session中。
|
||||
* Get project id from Get and set it to session.
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setProject()
|
||||
{
|
||||
if(isset($_GET['PRJ'])) $this->session->set('PRJ', $_GET['PRJ']); //Set project id into session.
|
||||
}
|
||||
|
||||
/**
|
||||
* 从cookie中获取当前的group, 即URL锚链接'#open=?'。
|
||||
* Get current group from cookie, original source is url '#open=?'.
|
||||
@@ -875,7 +875,15 @@ class baseRouter
|
||||
*/
|
||||
public function setOpenApp()
|
||||
{
|
||||
if(isset($_COOKIE['openApp'])) $this->openApp = $_COOKIE['openApp'];
|
||||
if(isset($_COOKIE['openApp']) and $_COOKIE['openApp'])
|
||||
{
|
||||
$this->openApp = $_COOKIE['openApp'];
|
||||
}
|
||||
else
|
||||
{
|
||||
$module = $this->rawModule;
|
||||
$this->openApp = isset($this->lang->navGroup->$module) ? $this->lang->navGroup->$module : 'my';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -906,7 +914,7 @@ class baseRouter
|
||||
$this->clientLang = $this->config->default->lang;
|
||||
}
|
||||
|
||||
setcookie('lang', $this->clientLang, $this->config->cookieLife, $this->config->webRoot, '', false, false);
|
||||
setcookie('lang', $this->clientLang, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, false);
|
||||
if(!isset($_COOKIE['lang'])) $_COOKIE['lang'] = $this->clientLang;
|
||||
|
||||
return true;
|
||||
@@ -960,7 +968,7 @@ class baseRouter
|
||||
$this->clientTheme = $this->config->default->theme;
|
||||
}
|
||||
|
||||
setcookie('theme', $this->clientTheme, $this->config->cookieLife, $this->config->webRoot, '', false, false);
|
||||
setcookie('theme', $this->clientTheme, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, false);
|
||||
if(!isset($_COOKIE['theme'])) $_COOKIE['theme'] = $this->clientTheme;
|
||||
|
||||
return true;
|
||||
@@ -986,7 +994,7 @@ class baseRouter
|
||||
$this->clientDevice = ($mobile->isMobile() and !$mobile->isTablet()) ? 'mobile' : 'desktop';
|
||||
}
|
||||
|
||||
setcookie('device', $this->clientDevice, $this->config->cookieLife, $this->config->webRoot, '', false, true);
|
||||
setcookie('device', $this->clientDevice, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true);
|
||||
if(!isset($_COOKIE['device'])) $_COOKIE['device'] = $this->clientDevice;
|
||||
|
||||
return $this->clientDevice;
|
||||
@@ -1830,7 +1838,6 @@ class baseRouter
|
||||
global $filter;
|
||||
|
||||
/* Remove these three params. */
|
||||
unset($passedParams['PRJ']);
|
||||
unset($passedParams['onlybody']);
|
||||
unset($passedParams['HTTP_X_REQUESTED_WITH']);
|
||||
|
||||
@@ -2269,6 +2276,9 @@ class baseRouter
|
||||
extract($trace[1]);
|
||||
$log .= ", last called by $file on line $line through function $function.\n";
|
||||
|
||||
/* Change absolute path to relative path. */
|
||||
$log = str_replace($this->basePath, '', $log);
|
||||
|
||||
/* 触发错误(Trigger the error) */
|
||||
trigger_error($log, $exit ? E_USER_ERROR : E_USER_WARNING);
|
||||
}
|
||||
@@ -2477,9 +2487,10 @@ class super
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($scope)
|
||||
public function __construct($scope, $openApp = '')
|
||||
{
|
||||
$this->scope = $scope;
|
||||
$this->scope = $scope;
|
||||
$this->openApp = $openApp;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2491,7 +2502,7 @@ class super
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function set($key, $value)
|
||||
public function set($key, $value, $openApp = '')
|
||||
{
|
||||
if($this->scope == 'post')
|
||||
{
|
||||
@@ -2511,6 +2522,7 @@ class super
|
||||
}
|
||||
elseif($this->scope == 'session')
|
||||
{
|
||||
if($openApp) $_SESSION["app-$openApp"][$key] = $value;
|
||||
$_SESSION[$key] = $value;
|
||||
}
|
||||
elseif($this->scope == 'env')
|
||||
@@ -2558,6 +2570,8 @@ class super
|
||||
}
|
||||
elseif($this->scope == 'session')
|
||||
{
|
||||
$openApp = $this->openApp;
|
||||
if($openApp and isset($_SESSION["app-$openApp"][$key])) return $_SESSION["app-$openApp"][$key];
|
||||
if(isset($_SESSION[$key])) return $_SESSION[$key];
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -21,11 +21,11 @@ include dirname(__FILE__) . '/base/control.class.php';
|
||||
class control extends baseControl
|
||||
{
|
||||
/**
|
||||
* Check requiredFields and set exportFields for workflow.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $methodName
|
||||
* @param string $appName
|
||||
* Check requiredFields and set exportFields for workflow.
|
||||
*
|
||||
* @param string $moduleName
|
||||
* @param string $methodName
|
||||
* @param string $appName
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -33,6 +33,8 @@ class control extends baseControl
|
||||
{
|
||||
parent::__construct($moduleName, $methodName, $appName);
|
||||
|
||||
$this->app->setOpenApp();
|
||||
|
||||
if(defined('IN_USE') or (defined('RUN_MODE') and RUN_MODE == 'api')) $this->setPreference();
|
||||
|
||||
if(!isset($this->config->bizVersion)) return false;
|
||||
@@ -78,7 +80,7 @@ class control extends baseControl
|
||||
|
||||
/**
|
||||
* Go to preference setting page if preference not setted.
|
||||
*
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -89,7 +91,7 @@ class control extends baseControl
|
||||
if($this->app->getModuleName() == 'my' and $this->app->getMethodName() == 'changepassword') return true;
|
||||
if($this->app->getModuleName() == 'my' and $this->app->getMethodName() == 'preference') return true;
|
||||
|
||||
if(!isset($this->config->preferenceSetted))
|
||||
if(!isset($this->config->preferenceSetted))
|
||||
{
|
||||
$this->locate(helper::createLink('my', 'preference'));
|
||||
}
|
||||
@@ -208,7 +210,7 @@ class control extends baseControl
|
||||
chdir(dirname($viewFile));
|
||||
|
||||
/**
|
||||
* 使用extract安定ob方法渲染$viewFile里面的代码。
|
||||
* 使用extract和ob方法渲染$viewFile里面的代码。
|
||||
* Use extract and ob functions to eval the codes in $viewFile.
|
||||
*/
|
||||
extract((array)$this->view);
|
||||
@@ -293,7 +295,7 @@ class control extends baseControl
|
||||
|
||||
/**
|
||||
* Check require with flow field when post data.
|
||||
*
|
||||
*
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
|
||||
@@ -66,7 +66,7 @@ class helper extends baseHelper
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
static public function jsonEncode4Parse($data, $options = 0)
|
||||
public static function jsonEncode4Parse($data, $options = 0)
|
||||
{
|
||||
$json = json_encode($data);
|
||||
if($options) $json = str_replace(array("'", '"'), array('\u0027', '\u0022'), $json);
|
||||
@@ -86,7 +86,7 @@ class helper extends baseHelper
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
static public function convertEncoding($string, $fromEncoding, $toEncoding = 'utf-8')
|
||||
public static function convertEncoding($string, $fromEncoding, $toEncoding = 'utf-8')
|
||||
{
|
||||
$toEncoding = str_replace('utf8', 'utf-8', $toEncoding);
|
||||
if(function_exists('mb_convert_encoding'))
|
||||
@@ -121,7 +121,7 @@ class helper extends baseHelper
|
||||
*
|
||||
* @return bool|float
|
||||
*/
|
||||
static public function workDays($begin, $end)
|
||||
public static function workDays($begin, $end)
|
||||
{
|
||||
$begin = strtotime($begin);
|
||||
$end = strtotime($end);
|
||||
|
||||
+39
-15
@@ -154,7 +154,6 @@ class router extends baseRouter
|
||||
{
|
||||
if(!defined('ITERATION_KEY')) define('ITERATION_KEY', 0);
|
||||
if(!defined('SPRINT_KEY')) define('SPRINT_KEY', 1);
|
||||
if(!defined('STAGE_KEY')) define('STAGE_KEY', 2);
|
||||
if(!defined('PRODUCT_KEY')) define('PRODUCT_KEY', 0);
|
||||
if(!defined('STORYPOINT_KEY')) define('STORYPOINT_KEY', 1);
|
||||
if(!defined('FUNCTIONPOINT_KEY')) define('FUNCTIONPOINT_KEY', 2);
|
||||
@@ -171,7 +170,7 @@ class router extends baseRouter
|
||||
$commonSettings = array();
|
||||
try
|
||||
{
|
||||
$commonSettings = $this->dbh->query('SELECT section, `key`, value FROM' . TABLE_CONFIG . "WHERE `owner`='system' AND (`module`='custom' or `module`='common') and `key` in ('sprintConcept', 'hourPoint', 'URSR', 'mode', 'URAndSR')")->fetchAll();
|
||||
$commonSettings = $this->dbh->query('SELECT section, `key`, value FROM' . TABLE_CONFIG . "WHERE `owner`='system' AND (`module`='custom' or `module`='common') and `key` in ('sprintConcept', 'hourPoint', 'URSR', 'mode', 'URAndSR', 'scoreStatus')")->fetchAll();
|
||||
}
|
||||
catch (PDOException $exception)
|
||||
{
|
||||
@@ -179,8 +178,9 @@ class router extends baseRouter
|
||||
}
|
||||
}
|
||||
|
||||
$hourKey = $planKey = $URSR = $URAndSR = 0;
|
||||
$mode = 'new';
|
||||
$hourKey = $planKey = $URSR = $URAndSR = 0;
|
||||
$mode = 'new';
|
||||
$score = '0';
|
||||
$projectKey = empty($this->config->isINT) ? ITERATION_KEY : SPRINT_KEY;
|
||||
|
||||
foreach($commonSettings as $setting)
|
||||
@@ -190,23 +190,22 @@ class router extends baseRouter
|
||||
if($setting->key == 'URSR') $URSR = $setting->value;
|
||||
if($setting->key == 'URAndSR') $URAndSR = $setting->value;
|
||||
if($setting->key == 'mode' and $setting->section == 'global') $mode = $setting->value;
|
||||
if($setting->key == 'scoreStatus' and $setting->section == 'global') $score = $setting->value;
|
||||
}
|
||||
|
||||
/* Record system mode. */
|
||||
$config->systemMode = $mode;
|
||||
if($config->systemMode == 'classic') $this->config->executionCommonList = $this->config->projectCommonList;
|
||||
|
||||
/* Record hour unit. */
|
||||
$config->hourUnit = 'H';
|
||||
if($hourKey == STORYPOINT_KEY) $config->hourUnit = 'SP';
|
||||
if($hourKey == FUNCTIONPOINT_KEY) $config->hourUnit = 'FP';
|
||||
/* Record system score.*/
|
||||
$config->systemScore = $score;
|
||||
|
||||
$model = new stdclass();
|
||||
$model->model = 'scrum';
|
||||
if($this->session->PRJ) $model = $this->dbh->query('SELECT model FROM' . TABLE_PROJECT . "WHERE id = {$this->session->PRJ}")->fetch();
|
||||
/* Record hour unit. */
|
||||
$config->hourUnit = 'h';
|
||||
if($hourKey == STORYPOINT_KEY) $config->hourUnit = 'sp';
|
||||
if($hourKey == FUNCTIONPOINT_KEY) $config->hourUnit = 'fp';
|
||||
|
||||
$iterationKey = $projectKey;
|
||||
if(isset($model->model) && $model->model == 'waterfall') $projectKey = STAGE_KEY;
|
||||
|
||||
/* Set productCommon, projectCommon and hourCommon. Default english lang. */
|
||||
$lang->productCommon = $this->config->productCommonList[$this->clientLang][PRODUCT_KEY];
|
||||
@@ -239,7 +238,8 @@ class router extends baseRouter
|
||||
if($this->dbh and !empty($this->config->db->name) and !defined('IN_UPGRADE'))
|
||||
{
|
||||
/* Get story concept in project and product. */
|
||||
$URSRList = $this->dbh->query('SELECT `key`, `value` FROM' . TABLE_LANG . "WHERE module = 'custom' and section = 'URSRList' and lang = \"{$this->clientLang}\"")->fetchAll();
|
||||
$URSRList = $this->dbh->query('SELECT `key`, `value` FROM' . TABLE_LANG . "WHERE module = 'custom' and section = 'URSRList' and `lang` = \"{$this->clientLang}\"")->fetchAll();
|
||||
if(empty($URSRList)) $URSRList = $this->dbh->query('SELECT `key`, `value` FROM' . TABLE_LANG . "WHERE module = 'custom' and section = 'URSRList' and `key` = \"{$config->URSR}\"")->fetchAll();
|
||||
|
||||
/* Get UR pairs and SR pairs. */
|
||||
$URPairs = array();
|
||||
@@ -252,8 +252,8 @@ class router extends baseRouter
|
||||
}
|
||||
|
||||
/* Set default story concept and init UR and SR concept. */
|
||||
$lang->URCommon = zget($URPairs, $config->URSR);
|
||||
$lang->SRCommon = zget($SRPairs, $config->URSR);
|
||||
$lang->URCommon = isset($URPairs[$config->URSR]) ? $URPairs[$config->URSR] : reset($URPairs);
|
||||
$lang->SRCommon = isset($SRPairs[$config->URSR]) ? $SRPairs[$config->URSR] : reset($SRPairs);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,6 +498,18 @@ class router extends baseRouter
|
||||
/* Prepend other params. */
|
||||
if($methodName == 'operate') array_unshift($params, $this->rawMethod); // $params = array('close', 1);
|
||||
if($methodName == 'batchOperate') array_unshift($params, $this->rawMethod); // $params = array('close', 1);
|
||||
if($methodName == 'browse')
|
||||
{
|
||||
if(isset($params[0]) and $params[0] == 'bysearch')
|
||||
{
|
||||
$params[0] = '';
|
||||
array_unshift($params, 'bysearch');
|
||||
}
|
||||
else
|
||||
{
|
||||
array_unshift($params, 'browse');
|
||||
}
|
||||
}
|
||||
array_unshift($params, $this->rawModule); // $params = array($module, 'close', 1);
|
||||
array_unshift($params, $methodName); // $params = array('operate', $module, 'close', 1);
|
||||
array_unshift($params, $moduleName); // $params = array('flow', 'operate', $module, 'close', 1);
|
||||
@@ -519,6 +531,18 @@ class router extends baseRouter
|
||||
$params = array_reverse($params); // $params = array('label' => 1, 'mode' => 'search');
|
||||
|
||||
/* Prepend other params. */
|
||||
if($methodName == 'browse')
|
||||
{
|
||||
if(isset($params['label']) and $params['label'] == 'bysearch')
|
||||
{
|
||||
$params['label'] = '';
|
||||
$params['mode'] = 'bysearch';
|
||||
}
|
||||
else
|
||||
{
|
||||
$params['mode'] = 'browse';
|
||||
}
|
||||
}
|
||||
$params['module'] = $this->rawModule; // $param = array('label' => 1, 'mode' => 'search', 'module' => $module);
|
||||
$params[$this->config->methodVar] = $methodName; // $param = array('label' => 1, 'mode' => 'search', 'module' => $module, 'f' => 'browse');
|
||||
$params[$this->config->moduleVar] = $moduleName; // $param = array('label' => 1, 'mode' => 'search', 'module' => $module, 'f' => 'browse', 'm' => 'flow');
|
||||
|
||||
@@ -264,9 +264,9 @@ class baseValidater
|
||||
{
|
||||
if(empty($date)) return true;
|
||||
if($date == '0000-00-00') return true;
|
||||
$stamp = strtotime($date);
|
||||
if(!is_numeric($stamp)) return false;
|
||||
return checkdate(date('m', $stamp), date('d', $stamp), date('Y', $stamp));
|
||||
$date = substr($date, 0, 10);
|
||||
if(preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $date, $parts)) return checkdate($parts[2], $parts[3], $parts[1]);
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -282,9 +282,9 @@ class baseValidater
|
||||
if(empty($datetime)) return true;
|
||||
if($datetime == '0000-00-00') return true;
|
||||
if($datetime == '0000-00-00 00:00:00') return true;
|
||||
$stamp = strtotime($datetime);
|
||||
if(!is_numeric($stamp)) return false;
|
||||
return checkdate(date('m', $stamp), date('d', $stamp), date('Y', $stamp));
|
||||
$date = substr($datetime, 0, 10);
|
||||
if(preg_match ("/^([0-9]{4})-([0-9]{2})-([0-9]{2})$/", $date, $parts)) return checkdate($parts[2], $parts[3], $parts[1]);
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1029,8 +1029,6 @@ class baseFixer
|
||||
$fields = $this->processFields($fieldName);
|
||||
foreach($fields as $fieldName)
|
||||
{
|
||||
if(function_exists('get_magic_quotes_gpc') and get_magic_quotes_gpc()) $this->data->$fieldName = stripslashes($this->data->$fieldName);
|
||||
|
||||
if(!isset($this->stripedFields[$fieldName]) and (!defined('RUN_MODE') or RUN_MODE != 'admin'))
|
||||
{
|
||||
$this->data->$fieldName = self::stripDataTags($this->data->$fieldName, $allowedTags, $attributes);
|
||||
|
||||
@@ -813,6 +813,10 @@ class baseJS
|
||||
return json_encode($output);
|
||||
}
|
||||
|
||||
/* Convert ' to \'. */
|
||||
$message = str_replace("\\'", "'", $message);
|
||||
$message = str_replace("'", "\\'", $message);
|
||||
|
||||
return self::start($full) . "alert('" . $message . "')" . self::end() . self::resetForm();
|
||||
}
|
||||
|
||||
@@ -885,16 +889,18 @@ class baseJS
|
||||
* 显示一个确认框,点击确定跳转到$okURL,点击取消跳转到$cancelURL。
|
||||
* show a confirm box, press ok go to okURL, else go to cancleURL.
|
||||
*
|
||||
* @param string $message 显示的内容。 the text to be showed.
|
||||
* @param string $okURL 点击确定后跳转的地址。 the url to go to when press 'ok'.
|
||||
* @param string $cancleURL 点击取消后跳转的地址。 the url to go to when press 'cancle'.
|
||||
* @param string $okTarget 点击确定后跳转的target。 the target to go to when press 'ok'.
|
||||
* @param string $cancleTarget 点击取消后跳转的target。 the target to go to when press 'cancle'.
|
||||
* @param string $message 显示的内容。 the text to be showed.
|
||||
* @param string $okURL 点击确定后跳转的地址。 the url to go to when press 'ok'.
|
||||
* @param string $cancleURL 点击取消后跳转的地址。 the url to go to when press 'cancle'.
|
||||
* @param string $okTarget 点击确定后跳转的target。 the target to go to when press 'ok'.
|
||||
* @param string $cancleTarget 点击取消后跳转的target。 the target to go to when press 'cancle'.
|
||||
* @param string $okOpenApp 点击确定后跳转的应用。 the app to go to when press 'ok'.
|
||||
* @param string $cancleOpenApp 点击取消后跳转的应用。 the app to go to when press 'cancle'.
|
||||
* @static
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
static public function confirm($message = '', $okURL = '', $cancleURL = '', $okTarget = "self", $cancleTarget = "self")
|
||||
static public function confirm($message = '', $okURL = '', $cancleURL = '', $okTarget = "self", $cancleTarget = "self", $okOpenApp = '', $cancleOpenApp = '')
|
||||
{
|
||||
global $app;
|
||||
if($app->viewType == 'json')
|
||||
@@ -921,6 +927,10 @@ class baseJS
|
||||
{
|
||||
$confirmAction = "history.back(-1);";
|
||||
}
|
||||
elseif(strpos($okTarget, '$.apps.open') !== false)
|
||||
{
|
||||
$confirmAction = "$okTarget('$okURL', '$okOpenApp');";
|
||||
}
|
||||
elseif(!empty($okURL))
|
||||
{
|
||||
$confirmAction = "$okTarget.location = '$okURL';";
|
||||
@@ -931,6 +941,10 @@ class baseJS
|
||||
{
|
||||
$cancleAction = "history.back(-1);";
|
||||
}
|
||||
elseif(strpos($cancleTarget, '$.apps.open') !== false)
|
||||
{
|
||||
$cancleAction = "$cancleTarget('$cancleURL', '$cancleOpenApp');";
|
||||
}
|
||||
elseif(!empty($cancleURL))
|
||||
{
|
||||
$cancleAction = "$cancleTarget.location = '$cancleURL';";
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
*/
|
||||
|
||||
helper::import(dirname(dirname(__FILE__)) . '/base/front/front.class.php');
|
||||
|
||||
/**
|
||||
* html类,生成html标签。
|
||||
* The html class, to build html tags.
|
||||
|
||||
+393
-306
@@ -2,86 +2,83 @@
|
||||
class gitlab
|
||||
{
|
||||
public $client;
|
||||
public $root;
|
||||
public $projectID;
|
||||
|
||||
/**
|
||||
* Construct
|
||||
*
|
||||
* @param string $client
|
||||
* @param string $root
|
||||
* Construct
|
||||
*
|
||||
* @param string $client gitlab api url.
|
||||
* @param string $root id of gitlab project.
|
||||
* @param string $username null
|
||||
* @param string $password token of gitlab api.
|
||||
* @param string $encoding
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function __construct($client, $token)
|
||||
public function __construct($client, $root, $username, $password, $encoding = 'UTF-8')
|
||||
{
|
||||
putenv('LC_CTYPE=en_US.UTF-8');
|
||||
|
||||
$this->client = $client;
|
||||
$this->root = rtrim($root, DIRECTORY_SEPARATOR);
|
||||
$this->branch = isset($_COOKIE['repoBranch']) ? $_COOKIE['repoBranch'] : '';
|
||||
|
||||
chdir($this->root);
|
||||
exec("{$this->client} config core.quotepath false");
|
||||
}
|
||||
|
||||
public function projects()
|
||||
{
|
||||
|
||||
$this->root = rtrim($root, '/') . '/';
|
||||
$this->token = $password;
|
||||
$this->branch = isset($_COOKIE['repoBranch']) ? $_COOKIE['repoBranch'] : 'HEAD';
|
||||
}
|
||||
|
||||
/**
|
||||
* List files.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function ls($path, $revision = 'HEAD')
|
||||
{
|
||||
if(!scm::checkRevision($revision)) return array();
|
||||
$api = "tree";
|
||||
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
$sub = '';
|
||||
chdir($this->root);
|
||||
if(!empty($path)) $sub = ":$path";
|
||||
if(!empty($this->branch))$revision = $this->branch;
|
||||
$cmd = escapeCmd("$this->client ls-tree -l $revision$sub");
|
||||
$list = execCmd($cmd . ' 2>&1', 'array', $result);
|
||||
if($result) return array();
|
||||
$param = new stdclass();
|
||||
$param->path = ltrim($path, '/');
|
||||
$param->ref = $revision;
|
||||
$param->recursive = 0;
|
||||
if(!empty($this->branch)) $param->ref = $this->branch;
|
||||
|
||||
$infos = array();
|
||||
foreach($list as $entry)
|
||||
$list = $this->fetch($api, $param);
|
||||
if(empty($list)) return array();
|
||||
|
||||
$infos = array();
|
||||
foreach($list as $file)
|
||||
{
|
||||
list($mod, $kind, $revision, $size, $name) = preg_split('/[\t ]+/', $entry);
|
||||
if(!isset($file->type)) continue;
|
||||
|
||||
/* Get commit info. */
|
||||
$pathName = ltrim($path . DIRECTORY_SEPARATOR . $name, DIRECTORY_SEPARATOR);
|
||||
$cmd = escapeCmd("$this->client log -1 $this->branch -- $pathName");
|
||||
$commit = execCmd($cmd, 'array');
|
||||
$logs = $this->parseLog($commit);
|
||||
$info = new stdClass();
|
||||
if($file->type == 'blob')
|
||||
{
|
||||
$path = $file->path;
|
||||
$file = $this->files($file->path);
|
||||
|
||||
if($size > 1024 * 1024)
|
||||
{
|
||||
$size = round($size / (1024 * 1024), 2) . 'MB';
|
||||
}
|
||||
else if($size > 1024)
|
||||
{
|
||||
$size = round($size / 1024, 2) . 'KB';
|
||||
$info->name = $file->file_name;
|
||||
$info->kind = 'file';
|
||||
$info->account = $file->committer;
|
||||
$info->date = $file->date;
|
||||
$info->size = $file->size;
|
||||
$info->comment = $file->comment;
|
||||
$info->revision = $file->revision;
|
||||
}
|
||||
else
|
||||
{
|
||||
$size .= 'Bytes';
|
||||
$commits = $this->getCommitsByPath($file->path);
|
||||
if(empty($commits)) continue;
|
||||
$commit = $commits[0];
|
||||
|
||||
$info->name = $file->name;
|
||||
$info->kind = 'dir';
|
||||
$info->revision = $commit->id;
|
||||
$info->account = $commit->committer_name;
|
||||
$info->date = date('Y-m-d H:i:s', strtotime($commit->committed_date));
|
||||
$info->size = 0;
|
||||
$info->comment = $commit->message;
|
||||
}
|
||||
|
||||
$info = new stdClass();
|
||||
$info->name = $name;
|
||||
$info->kind = $kind == 'tree' ? 'dir' : 'file';
|
||||
$info->revision = $logs ? $logs[0]->revision : $revision;
|
||||
$info->size = $size;
|
||||
$info->account = $logs ? $logs[0]->committer : '';
|
||||
$info->date = $logs ? $logs[0]->time : '';
|
||||
$info->comment = $logs ? $logs[0]->comment : '';
|
||||
$infos[] = $info;
|
||||
unset($info);
|
||||
}
|
||||
@@ -89,84 +86,97 @@ class gitlab
|
||||
/* Sort by kind */
|
||||
foreach($infos as $key => $info) $kinds[$key] = $info->kind;
|
||||
if($infos) array_multisort($kinds, SORT_ASC, $infos);
|
||||
|
||||
return $infos;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tags
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* Get files info.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $ref
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function files($path, $ref = 'master')
|
||||
{
|
||||
$path = urlencode($path);
|
||||
$api = "files/$path";
|
||||
$param = new stdclass();
|
||||
$param->ref = $ref;
|
||||
$file = $this->fetch($api, $param);
|
||||
|
||||
$commits = $this->getCommitsByPath($path);
|
||||
$file->revision = $file->commit_id;
|
||||
$file->size = $this->formatBytes($file->size);
|
||||
|
||||
if(!empty($commits))
|
||||
{
|
||||
$commit = $commits[0];
|
||||
$file->committer = $commit->committer_name;
|
||||
$file->comment = $commit->message;
|
||||
$file->date = date('Y-m-d H:i:s', strtotime($commit->committed_date));
|
||||
}
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tags
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function tags($path, $revision = 'HEAD')
|
||||
{
|
||||
if(!scm::checkRevision($revision)) return array();
|
||||
$api = "tags";
|
||||
$list = $this->fetch($api);
|
||||
|
||||
chdir($this->root);
|
||||
$cmd = escapeCmd("$this->client tag --sort=taggerdate");
|
||||
$list = execCmd($cmd . ' 2>&1', 'array', $result);
|
||||
if($result) return array();
|
||||
return $list;
|
||||
$tags = array();
|
||||
foreach($list as $tag) $tags[] = $tag->name;
|
||||
|
||||
return $tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get branch
|
||||
*
|
||||
* Get branch
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function branch()
|
||||
{
|
||||
chdir($this->root);
|
||||
|
||||
/* Get local branch. */
|
||||
$cmd = escapeCmd("$this->client branch");
|
||||
$list = execCmd($cmd . ' 2>&1', 'array', $result);
|
||||
if($result) return array();
|
||||
$api = "branches";
|
||||
$list = $this->fetch($api);
|
||||
|
||||
$branches = array();
|
||||
foreach($list as $localBranch)
|
||||
{
|
||||
if($localBranch[0] == '*') $localBranch = substr($localBranch, 1);
|
||||
|
||||
$localBranch = trim($localBranch);
|
||||
if(empty($localBranch))continue;
|
||||
$branches[$localBranch] = $localBranch;
|
||||
}
|
||||
foreach($list as $branch) $branches[$branch->name] = $branch->name;
|
||||
asort($branches);
|
||||
|
||||
return $branches;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get last log.
|
||||
*
|
||||
* @param string $path
|
||||
* @param int $count
|
||||
* Get last log.
|
||||
*
|
||||
* @param string $path
|
||||
* @param int $count
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getLastLog($path, $count = 10)
|
||||
{
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
$revision = $this->branch ? $this->branch : 'HEAD';
|
||||
|
||||
chdir($this->root);
|
||||
$list = execCmd(escapeCmd("$this->client log -10 $revision -- $path"), 'array');
|
||||
$logs = $this->parseLog($list);
|
||||
|
||||
return $logs;
|
||||
return $this->log($path);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get logs
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $fromRevision
|
||||
* @param string $toRevision
|
||||
* @param int $count
|
||||
* Get logs.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $fromRevision
|
||||
* @param string $toRevision
|
||||
* @param int $count
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -177,39 +187,18 @@ class gitlab
|
||||
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
$count = $count == 0 ? '' : "-n $count";
|
||||
/* compatible with svn. */
|
||||
if($fromRevision == 'HEAD' and $this->branch) $fromRevision = $this->branch;
|
||||
if($toRevision == 'HEAD' and $this->branch) $toRevision = $this->branch;
|
||||
if($fromRevision === $toRevision)
|
||||
{
|
||||
$logs = array();
|
||||
chdir($this->root);
|
||||
|
||||
$list = execCmd(escapeCmd("$this->client log --stat=1024 --name-status --stat-name-width=1000 -1 $fromRevision -- $path"), 'array');
|
||||
$logs = $this->parseLog($list);
|
||||
return $logs;
|
||||
}
|
||||
$list = $this->getCommitsByPath($path, $fromRevision, $toRevision);
|
||||
foreach($list as $commit) $commit->diffs = $this->getFilesByCommit($commit->id);
|
||||
|
||||
if(!$fromRevision)
|
||||
{
|
||||
$revisions = " $toRevision";
|
||||
}
|
||||
else
|
||||
{
|
||||
$revisions = "$fromRevision..$toRevision";
|
||||
}
|
||||
chdir($this->root);
|
||||
$list = execCmd(escapeCmd("$this->client log --stat=1024 --name-status --stat-name-width=1000 $count $revisions -- $path"), 'array');
|
||||
$logs = $this->parseLog($list);
|
||||
|
||||
return $logs;
|
||||
return $this->parseLog($list);
|
||||
}
|
||||
|
||||
/**
|
||||
* Blame file
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -218,51 +207,47 @@ class gitlab
|
||||
if(!scm::checkRevision($revision)) return array();
|
||||
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
chdir($this->root);
|
||||
$list = execCmd(escapeCmd("$this->client blame -l $revision -- $path"), 'array');
|
||||
$path = urlencode($path);
|
||||
$api = "files/$path/blame";
|
||||
$param = new stdclass;
|
||||
$param->ref = $this->branch;
|
||||
$results = $this->fetch($api, $param);
|
||||
|
||||
$blames = array();
|
||||
$revLine = 0;
|
||||
$revision = '';
|
||||
foreach($list as $line)
|
||||
|
||||
$lineNumber = 1;
|
||||
foreach($results as $blame)
|
||||
{
|
||||
if(empty($line)) continue;
|
||||
if($line[0] == '^') $line = substr($line, 1);
|
||||
preg_match('/^([0-9a-f]{39,40})\s.*\((\S+)\s+([\d-]+)\s(.*)\s(\d+)\)(.*)$/U', $line, $matches);
|
||||
$line = array();
|
||||
$line['revision'] = $blame->commit->id;
|
||||
$line['committer'] = $blame->commit->committer_name;
|
||||
$line['time'] = $blame->commit->committer_name;
|
||||
$line['line'] = $lineNumber;
|
||||
$line['lines'] = count($blame->lines);
|
||||
$line['content'] = array_shift($blame->lines);
|
||||
|
||||
if(isset($matches[1]) and $matches[1] != $revision)
|
||||
$blames[] = $line;
|
||||
|
||||
$lineNumber ++;
|
||||
|
||||
foreach($blame->lines as $line)
|
||||
{
|
||||
$blame = array();
|
||||
$blame['revision'] = $matches[1];
|
||||
$blame['committer'] = $matches[2];
|
||||
$blame['time'] = $matches[3];
|
||||
$blame['line'] = $matches[5];
|
||||
$blame['lines'] = 1;
|
||||
$blame['content'] = strpos($matches[6], ' ') === false ? $matches[6] : substr($matches[6], 1);
|
||||
|
||||
$revision = $matches[1];
|
||||
$revLine = $matches[5];
|
||||
$blames[$revLine] = $blame;
|
||||
}
|
||||
elseif(isset($matches[5]))
|
||||
{
|
||||
$blame = array();
|
||||
$blame['line'] = $matches[5];
|
||||
$blame['content'] = strpos($matches[6], ' ') === false ? $matches[6] : substr($matches[6], 1);
|
||||
|
||||
$blames[$matches[5]] = $blame;
|
||||
$blames[$revLine]['lines'] ++;
|
||||
$blames[] = array('line' => $lineNumber, 'content' => $line);
|
||||
$lineNumber ++;
|
||||
}
|
||||
}
|
||||
|
||||
return $blames;
|
||||
}
|
||||
|
||||
/**
|
||||
* Diff file.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $fromRevision
|
||||
* @param string $toRevision
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $fromRevision
|
||||
* @param string $toRevision
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -271,44 +256,50 @@ class gitlab
|
||||
if(!scm::checkRevision($fromRevision)) return array();
|
||||
if(!scm::checkRevision($toRevision)) return array();
|
||||
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
chdir($this->root);
|
||||
if($toRevision == 'HEAD' and $this->branch) $toRevision = $this->branch;
|
||||
if($fromRevision == '^') $fromRevision = $toRevision . '^';
|
||||
if(strpos($fromRevision, '^') !== false)
|
||||
$api = "compare";
|
||||
$params = array('from' => $fromRevision, 'to' => $toRevision, 'straight' => 1);
|
||||
if($toRevision == 'HEAD' and $this->branch) $params['to'] = $this->branch;
|
||||
$results = $this->fetch($api, $params);
|
||||
foreach($results->diffs as $key => $diff)
|
||||
{
|
||||
$list = execCmd(escapeCmd("$this->client log -2 $toRevision --pretty=format:%H -- $path"), 'array');
|
||||
if(isset($list[1])) $fromRevision = $list[1];
|
||||
if($path != '' and strpos($diff->new_path, $path) === false) unset($results->diffs[$key]);
|
||||
}
|
||||
$diffs = $results->diffs;
|
||||
$lines = array();
|
||||
foreach($diffs as $diff)
|
||||
{
|
||||
$lines[] = sprintf("diff --git a/%s b/%s", $diff->old_path, $diff->new_path);
|
||||
$lines[] = sprintf("index %s ... %s %s ", $fromRevision, $toRevision, $diff->b_mode);
|
||||
$lines[] = sprintf("--a/%s", $diff->old_path);
|
||||
$lines[] = sprintf("--b/%s", $diff->new_path);
|
||||
$diffLines = explode("\n", $diff->diff);
|
||||
foreach($diffLines as $diffLine) $lines[] = $diffLine;
|
||||
}
|
||||
$lines = execCmd(escapeCmd("$this->client diff $fromRevision $toRevision -- $path"), 'array');
|
||||
return $lines;
|
||||
//return $results->diffs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cat file.
|
||||
*
|
||||
* @param string $entry
|
||||
* @param string $revision
|
||||
*
|
||||
* @param string $entry
|
||||
* @param string $revision
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public function cat($entry, $revision = 'HEAD')
|
||||
{
|
||||
if(!scm::checkRevision($revision)) return false;
|
||||
|
||||
chdir($this->root);
|
||||
if($revision == 'HEAD' and $this->branch) $revision = $this->branch;
|
||||
$cmd = escapeCmd("$this->client show $revision:$entry");
|
||||
$content = execCmd($cmd);
|
||||
if(is_array($content)) $content = implode("\n", $content);
|
||||
return $content;
|
||||
$file = $this->files($entry, $revision);
|
||||
return base64_decode($file->content);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get info.
|
||||
*
|
||||
* @param string $entry
|
||||
* @param string $revision
|
||||
*
|
||||
* @param string $entry
|
||||
* @param string $revision
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
@@ -316,53 +307,48 @@ class gitlab
|
||||
{
|
||||
if(!scm::checkRevision($revision)) return false;
|
||||
|
||||
chdir($this->root);
|
||||
if($revision == 'HEAD' and $this->branch) $revision = $this->branch;
|
||||
$path = ltrim($entry, DIRECTORY_SEPARATOR);
|
||||
$cmd = escapeCmd("$this->client ls-tree $revision -- $path");
|
||||
$result = execCmd($cmd);
|
||||
$kind = '';
|
||||
if($result)
|
||||
$info = new stdclass();
|
||||
$info->kind = 'dir';
|
||||
$info->path = $entry;
|
||||
$info->revision = $revision;
|
||||
$info->root = '';
|
||||
if($revision == 'HEAD' and $this->branch) $info->revision = $this->branch;
|
||||
|
||||
if($entry)
|
||||
{
|
||||
$results = explode("\n", trim($result));
|
||||
if(count($results) >= 2)
|
||||
{
|
||||
$kind = 'dir';
|
||||
}
|
||||
else
|
||||
{
|
||||
list($mode, $type) = explode(' ', $results[0]);
|
||||
$kind = $type == 'tree' ? 'dir' : 'file';
|
||||
}
|
||||
$parent = dirname($entry);
|
||||
if($parent == '.') $parent = '/';
|
||||
if($parent == '') $parent = '/';
|
||||
$list = $this->tree($parent, 0);
|
||||
|
||||
foreach($list as $node) if($node->path == $entry) $file = $node;
|
||||
|
||||
$commits = $this->getCommitsByPath($entry);
|
||||
|
||||
if(!empty($commits)) $file->revision = zget($commits[0], 'id', '');
|
||||
$info->kind = $file->type == 'tree' ? 'dir' : 'file';
|
||||
}
|
||||
|
||||
$list = execCmd(escapeCmd("$this->client log -1 $revision --pretty=format:%H -- $path"), 'array');
|
||||
$revision = $list[0];
|
||||
$info = new stdclass();
|
||||
$info->kind = $kind;
|
||||
$info->path = $entry;
|
||||
$info->revision = $revision;
|
||||
$info->root = $this->root;
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Exec git cmd.
|
||||
*
|
||||
* @param string $cmd
|
||||
*
|
||||
* @param string $cmd
|
||||
* @access public
|
||||
* @todo Exec commads by gitlab api.
|
||||
* @return array
|
||||
*/
|
||||
public function exec($cmd)
|
||||
{
|
||||
chdir($this->root);
|
||||
return execCmd(escapeCmd("$this->client $cmd"), 'array');
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse diff.
|
||||
*
|
||||
* @param array $lines
|
||||
*
|
||||
* @param array $lines
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -456,9 +442,9 @@ class gitlab
|
||||
|
||||
/**
|
||||
* Get commit count.
|
||||
*
|
||||
* @param int $commits
|
||||
* @param string $lastVersion
|
||||
*
|
||||
* @param int $commits
|
||||
* @param string $lastVersion
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
@@ -473,7 +459,7 @@ class gitlab
|
||||
|
||||
/**
|
||||
* Get first revision.
|
||||
*
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
@@ -485,8 +471,8 @@ class gitlab
|
||||
}
|
||||
|
||||
/**
|
||||
* Get latest revision
|
||||
*
|
||||
* Get latest revision
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
@@ -500,71 +486,205 @@ class gitlab
|
||||
|
||||
/**
|
||||
* Get commits.
|
||||
*
|
||||
* @param string $version
|
||||
* @param int $count
|
||||
* @param string $branch
|
||||
*
|
||||
* @param string $version
|
||||
* @param int $count
|
||||
* @param string $branch
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getCommits($version = '', $count = 0, $branch = '')
|
||||
{
|
||||
if(!scm::checkRevision($version)) return array();
|
||||
$api = "commits";
|
||||
|
||||
if($version == 'HEAD' and $branch) $version = $branch;
|
||||
$revision = empty($version) ? $revision : $version;
|
||||
$revision = is_numeric($revision) ? "--skip=$revision $branch" : $revision;
|
||||
$count = $count == 0 ? '' : "-n $count";
|
||||
if(empty($count)) $count = 100;
|
||||
$params = array();
|
||||
$params['ref_name'] = $branch;
|
||||
$params['per_page'] = $count;
|
||||
$params['all'] = 1;
|
||||
|
||||
chdir($this->root);
|
||||
$list = execCmd(escapeCmd("$this->client log $count $revision -- ./"), 'array');
|
||||
$commits = $this->parseLog($list);
|
||||
|
||||
$logs = array();
|
||||
foreach($commits as $commit)
|
||||
if($version and $version != 'HEAD')
|
||||
{
|
||||
$hash = $commit->revision;
|
||||
$log = new stdClass();
|
||||
$log->committer = $commit->committer;
|
||||
$log->revision = $commit->revision;
|
||||
$log->comment = $commit->comment;
|
||||
$log->time = $commit->time;
|
||||
$logs['commits'][$hash] = $log;
|
||||
$logs['files'][$hash] = array();
|
||||
}
|
||||
if(empty($logs)) return $logs;
|
||||
$lastCommit = $this->getSingleCommit($version);
|
||||
if(!isset($lastCommit->committed_date)) return array('commits' => array(), 'files' => array());
|
||||
|
||||
$hash = '';
|
||||
$files = execCmd(escapeCmd("$this->client whatchanged $count $revision --pretty=format:%an@_@%cd@_@%H@_@%s -- ./"), 'array');
|
||||
foreach($files as $commit)
|
||||
{
|
||||
$commit = trim($commit);
|
||||
if(empty($commit)) continue;
|
||||
$parsedCommit = explode('@_@', $commit);
|
||||
if(count($parsedCommit) == 4)
|
||||
{
|
||||
list($account, $date, $hash, $comment) = $parsedCommit;
|
||||
}
|
||||
else
|
||||
{
|
||||
$file = explode(' ', $commit);
|
||||
$file = end($file);
|
||||
list($action, $path) = explode("\t", $file);
|
||||
$parsedFile = new stdclass();
|
||||
$parsedFile->revision = $hash;
|
||||
$parsedFile->path = '/' . trim($path);
|
||||
$parsedFile->type = 'file';
|
||||
$parsedFile->action = $action;
|
||||
$logs['files'][$hash][] = $parsedFile;
|
||||
}
|
||||
$params['until'] = $lastCommit->committed_date;
|
||||
}
|
||||
return $logs;
|
||||
|
||||
$list = $this->fetch($api, $params);
|
||||
|
||||
$commits = array();
|
||||
foreach($list as $commit)
|
||||
{
|
||||
$log = new stdclass;
|
||||
$log->committer = $commit->committer_name;
|
||||
$log->revision = $commit->id;
|
||||
$log->comment = $commit->message;
|
||||
$log->time = date('Y-m-d H:i:s', strtotime($commit->created_at));
|
||||
|
||||
$commits[$commit->id] = $log;
|
||||
$files[$commit->id] = $this->getFilesByCommit($log->revision);
|
||||
}
|
||||
|
||||
return array('commits' => $commits, 'files' => $files);
|
||||
}
|
||||
|
||||
/**
|
||||
* getCommit
|
||||
*
|
||||
* @param int $sha
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function getSingleCommit($sha)
|
||||
{
|
||||
if(!scm::checkRevision($sha)) return null;
|
||||
$api = "commits/$sha";
|
||||
return $this->fetch($api);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get commits by path.
|
||||
*
|
||||
* @param string $path
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getCommitsByPath($path, $fromRevision = '', $toRevision = '')
|
||||
{
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
$api = "commits";
|
||||
|
||||
$param = new stdclass();
|
||||
$param->path = urldecode($path);
|
||||
$param->ref_name = $this->branch;
|
||||
|
||||
$fromRevision = ($fromRevision and $fromRevision != 'HEAD') ? $this->getSingleCommit($fromRevision) : '';
|
||||
$toRevision = ($toRevision and $toRevision != 'HEAD') ? $this->getSingleCommit($toRevision) : '';
|
||||
|
||||
$since = '';
|
||||
$until = '';
|
||||
if($fromRevision and $toRevision)
|
||||
{
|
||||
$since = min($fromRevision->committed_date, $toRevision->committed_date);
|
||||
$until = max($fromRevision->committed_date, $toRevision->committed_date);
|
||||
}
|
||||
elseif($fromRevision)
|
||||
{
|
||||
$since = $fromRevision->committed_date;
|
||||
}
|
||||
|
||||
if($since) $param->since = $since;
|
||||
if($until) $param->until = $until;
|
||||
|
||||
return $this->fetch($api, $param);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get files by commit.
|
||||
*
|
||||
* @param string $commit
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function getFilesByCommit($revision)
|
||||
{
|
||||
if(!scm::checkRevision($revision)) return array();
|
||||
$api = "commits/{$revision}/diff";
|
||||
$params = new stdclass;
|
||||
$params->page = 1;
|
||||
$params->per_page = 200;
|
||||
|
||||
$allResults = array();
|
||||
while($results = $this->fetch($api, $params))
|
||||
{
|
||||
$params->page ++;
|
||||
$allResults = $allResults + $results;
|
||||
}
|
||||
|
||||
$files = array();
|
||||
foreach($allResults as $row)
|
||||
{
|
||||
$file = new stdclass();
|
||||
$file->revision = $revision;
|
||||
$file->path = '/' . $row->new_path;
|
||||
$file->type = 'file';
|
||||
|
||||
$file->action = 'M';
|
||||
if($row->new_file) $file->action = 'A';
|
||||
if($row->renamed_file) $file->action = 'R';
|
||||
if($row->deleted_file) $file->action = 'D';
|
||||
$files[] = $file;
|
||||
}
|
||||
|
||||
return $files;
|
||||
}
|
||||
|
||||
/**
|
||||
* Repository/tree api.
|
||||
*
|
||||
* @param string $path
|
||||
* @param bool $recursive
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function tree($path, $recursive = 1)
|
||||
{
|
||||
$api = "tree";
|
||||
|
||||
$params = array();
|
||||
$params['path'] = ltrim($path, '/');
|
||||
$params['ref'] = $this->branch;
|
||||
$params['recursive'] = (int) $recursive;
|
||||
return $this->fetch($api, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch data from gitlab api.
|
||||
*
|
||||
* @param string $api
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function fetch($api, $params = array())
|
||||
{
|
||||
$params = (array) $params;
|
||||
$params['private_token'] = $this->token;
|
||||
|
||||
$api = ltrim($api, '/');
|
||||
$api = $this->root . $api . '?' . http_build_query($params);
|
||||
|
||||
$response = commonModel::http($api);
|
||||
if(!empty(commonModel::$requestErrors))
|
||||
{
|
||||
commonModel::$requestErrors = array();
|
||||
return array();
|
||||
}
|
||||
|
||||
return json_decode($response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Format bytes shown.
|
||||
*
|
||||
* @param int $size
|
||||
* @static
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
public static function formatBytes($size)
|
||||
{
|
||||
if($size < 1024) return $size . 'Bytes';
|
||||
if(round($size / (1024 * 1024), 2) > 1) return round($size / (1024 * 1024), 2) . 'G';
|
||||
if(round($size / 1024, 2) > 1) return round($size / 1024, 2) . 'M';
|
||||
return round($size, 2) . 'KB';
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse log.
|
||||
*
|
||||
* @param array $logs
|
||||
*
|
||||
* @param array $logs
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -572,54 +692,21 @@ class gitlab
|
||||
{
|
||||
$parsedLogs = array();
|
||||
$i = 0;
|
||||
foreach($logs as $line)
|
||||
foreach($logs as $commit)
|
||||
{
|
||||
if(strpos($line, 'commit ') === 0)
|
||||
$parsedLog = new stdclass();
|
||||
$parsedLog->revision = $commit->id;
|
||||
$parsedLog->committer = $commit->committer_name;
|
||||
$parsedLog->time = date('Y-m-d H:i:s', strtotime($commit->committed_date));
|
||||
$parsedLog->comment = $commit->message;
|
||||
$parsedLog->change = array();
|
||||
foreach($commit->diffs as $diff)
|
||||
{
|
||||
if(isset($log))
|
||||
{
|
||||
$log->comment = trim($comment);
|
||||
$log->change = $changes;
|
||||
$parsedLogs[$i] = $log;
|
||||
$i++;
|
||||
}
|
||||
|
||||
$log = new stdclass();
|
||||
$comment = '';
|
||||
$changes = array();
|
||||
|
||||
$log->revision = trim(preg_replace('/^commit/', '', $line));
|
||||
$parsedLog->change[$diff->path] = array();
|
||||
$parsedLog->change[$diff->path]['action'] = $diff->action;
|
||||
$parsedLog->change[$diff->path]['kind'] = $diff->type;
|
||||
}
|
||||
elseif(strpos($line, 'Author:') === 0)
|
||||
{
|
||||
$account = preg_replace('/^Author:/', '', $line);
|
||||
$log->committer = trim(preg_replace('/<[a-zA-Z0-9_\-\.]+@[a-zA-Z0-9_\-\.]+>/', '', $account));
|
||||
}
|
||||
elseif(strpos($line, 'Date:') === 0)
|
||||
{
|
||||
$date = trim(preg_replace('/^Date:/', '', $line));
|
||||
$log->time = date('Y-m-d H:i:s', strtotime($date));
|
||||
}
|
||||
elseif(preg_match('/^\s{2,}/', $line))
|
||||
{
|
||||
$comment .= $line;
|
||||
}
|
||||
elseif(strpos($line, "\t") !== false)
|
||||
{
|
||||
list($action, $entry) = explode("\t", $line);
|
||||
$entry = '/' . trim($entry);
|
||||
$pathInfo = array();
|
||||
$pathInfo['action'] = $action;
|
||||
$pathInfo['kind'] = 'file';
|
||||
$changes[$entry] = $pathInfo;
|
||||
}
|
||||
}
|
||||
|
||||
if(isset($log))
|
||||
{
|
||||
$log->comment = trim($comment);
|
||||
$log->change = $changes;
|
||||
$parsedLogs[$i] = $log;
|
||||
$parsedLogs[] = $parsedLog;
|
||||
}
|
||||
|
||||
return $parsedLogs;
|
||||
|
||||
+63
-63
@@ -5,13 +5,13 @@ class GitRepo
|
||||
public $root;
|
||||
|
||||
/**
|
||||
* Construct
|
||||
*
|
||||
* @param string $client
|
||||
* @param string $root
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @param string $encoding
|
||||
* Construct
|
||||
*
|
||||
* @param string $client
|
||||
* @param string $root
|
||||
* @param string $username
|
||||
* @param string $password
|
||||
* @param string $encoding
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
@@ -29,9 +29,9 @@ class GitRepo
|
||||
|
||||
/**
|
||||
* List files.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -40,7 +40,7 @@ class GitRepo
|
||||
if(!scm::checkRevision($revision)) return array();
|
||||
|
||||
$path = ltrim($path, DIRECTORY_SEPARATOR);
|
||||
$sub = '';
|
||||
$sub = '';
|
||||
chdir($this->root);
|
||||
if(!empty($path)) $sub = ":$path";
|
||||
if(!empty($this->branch))$revision = $this->branch;
|
||||
@@ -69,7 +69,7 @@ class GitRepo
|
||||
}
|
||||
else
|
||||
{
|
||||
$size .= 'Bytes';
|
||||
$size .= 'Bytes';
|
||||
}
|
||||
|
||||
$info = new stdClass();
|
||||
@@ -92,10 +92,10 @@ class GitRepo
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tags
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* Get tags
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -111,8 +111,8 @@ class GitRepo
|
||||
}
|
||||
|
||||
/**
|
||||
* Get branch
|
||||
*
|
||||
* Get branch
|
||||
*
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -139,10 +139,10 @@ class GitRepo
|
||||
}
|
||||
|
||||
/**
|
||||
* Get last log.
|
||||
*
|
||||
* @param string $path
|
||||
* @param int $count
|
||||
* Get last log.
|
||||
*
|
||||
* @param string $path
|
||||
* @param int $count
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -160,11 +160,11 @@ class GitRepo
|
||||
|
||||
/**
|
||||
* Get logs
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $fromRevision
|
||||
* @param string $toRevision
|
||||
* @param int $count
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $fromRevision
|
||||
* @param string $toRevision
|
||||
* @param int $count
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -194,7 +194,7 @@ class GitRepo
|
||||
}
|
||||
else
|
||||
{
|
||||
$revisions = "$fromRevision..$toRevision";
|
||||
$revisions = "$fromRevision..$toRevision";
|
||||
}
|
||||
chdir($this->root);
|
||||
$list = execCmd(escapeCmd("$this->client log --stat=1024 --name-status --stat-name-width=1000 $count $revisions -- $path"), 'array');
|
||||
@@ -205,9 +205,9 @@ class GitRepo
|
||||
|
||||
/**
|
||||
* Blame file
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $revision
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -257,10 +257,10 @@ class GitRepo
|
||||
|
||||
/**
|
||||
* Diff file.
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $fromRevision
|
||||
* @param string $toRevision
|
||||
*
|
||||
* @param string $path
|
||||
* @param string $fromRevision
|
||||
* @param string $toRevision
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -284,9 +284,9 @@ class GitRepo
|
||||
|
||||
/**
|
||||
* Cat file.
|
||||
*
|
||||
* @param string $entry
|
||||
* @param string $revision
|
||||
*
|
||||
* @param string $entry
|
||||
* @param string $revision
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
@@ -304,9 +304,9 @@ class GitRepo
|
||||
|
||||
/**
|
||||
* Get info.
|
||||
*
|
||||
* @param string $entry
|
||||
* @param string $revision
|
||||
*
|
||||
* @param string $entry
|
||||
* @param string $revision
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
@@ -337,17 +337,17 @@ class GitRepo
|
||||
$list = execCmd(escapeCmd("$this->client log -1 $revision --pretty=format:%H -- $path"), 'array');
|
||||
$revision = $list[0];
|
||||
$info = new stdclass();
|
||||
$info->kind = $kind;
|
||||
$info->path = $entry;
|
||||
$info->revision = $revision;
|
||||
$info->root = $this->root;
|
||||
$info->kind = $kind;
|
||||
$info->path = $entry;
|
||||
$info->revision = $revision;
|
||||
$info->root = $this->root;
|
||||
return $info;
|
||||
}
|
||||
|
||||
/**
|
||||
* Exec git cmd.
|
||||
*
|
||||
* @param string $cmd
|
||||
*
|
||||
* @param string $cmd
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -359,8 +359,8 @@ class GitRepo
|
||||
|
||||
/**
|
||||
* Parse diff.
|
||||
*
|
||||
* @param array $lines
|
||||
*
|
||||
* @param array $lines
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -454,9 +454,9 @@ class GitRepo
|
||||
|
||||
/**
|
||||
* Get commit count.
|
||||
*
|
||||
* @param int $commits
|
||||
* @param string $lastVersion
|
||||
*
|
||||
* @param int $commits
|
||||
* @param string $lastVersion
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
@@ -471,7 +471,7 @@ class GitRepo
|
||||
|
||||
/**
|
||||
* Get first revision.
|
||||
*
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
@@ -483,8 +483,8 @@ class GitRepo
|
||||
}
|
||||
|
||||
/**
|
||||
* Get latest revision
|
||||
*
|
||||
* Get latest revision
|
||||
*
|
||||
* @access public
|
||||
* @return string
|
||||
*/
|
||||
@@ -498,10 +498,10 @@ class GitRepo
|
||||
|
||||
/**
|
||||
* Get commits.
|
||||
*
|
||||
* @param string $version
|
||||
* @param int $count
|
||||
* @param string $branch
|
||||
*
|
||||
* @param string $version
|
||||
* @param int $count
|
||||
* @param string $branch
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -543,7 +543,7 @@ class GitRepo
|
||||
{
|
||||
list($account, $date, $hash, $comment) = $parsedCommit;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
$file = explode(' ', $commit);
|
||||
$file = end($file);
|
||||
@@ -561,8 +561,8 @@ class GitRepo
|
||||
|
||||
/**
|
||||
* Parse log.
|
||||
*
|
||||
* @param array $logs
|
||||
*
|
||||
* @param array $logs
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
@@ -596,7 +596,7 @@ class GitRepo
|
||||
elseif(strpos($line, 'Date:') === 0)
|
||||
{
|
||||
$date = trim(preg_replace('/^Date:/', '', $line));
|
||||
$log->time = date('Y-m-d H:i:s', strtotime($date));
|
||||
$log->time = date('Y-m-d H:i:s', strtotime($date));
|
||||
}
|
||||
elseif(preg_match('/^\s{2,}/', $line))
|
||||
{
|
||||
|
||||
@@ -8,22 +8,22 @@
|
||||
* @package spliter
|
||||
* @version $Id$
|
||||
* @link http://www.chanzhi.org
|
||||
* @see http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html
|
||||
* @see http://www.cnblogs.com/chenwenbiao/archive/2011/08/11/2134503.html
|
||||
* @see http://stackoverflow.com/questions/9361303/can-i-get-the-unicode-value-of-a-character-or-vise-versa-with-php
|
||||
*/
|
||||
class spliter
|
||||
{
|
||||
/**
|
||||
* Split a utf-8 string into words, computing unicode for every word.
|
||||
*
|
||||
* @param string $string
|
||||
*
|
||||
* @param string $string
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function utf8Split($string)
|
||||
{
|
||||
$string = strtolower($string);
|
||||
$i = 0;
|
||||
$i = 0;
|
||||
$length = strlen($string);
|
||||
$dict = array();
|
||||
$words = '';
|
||||
@@ -50,12 +50,16 @@ class spliter
|
||||
$word .= $letter;
|
||||
$i++;
|
||||
}
|
||||
|
||||
|
||||
/* Process intigers. */
|
||||
if(is_numeric($word) and (strpos($word, '.') === false)) $word = "|" . $word . "|";
|
||||
$word = str_pad(strtolower($word), 5, '_');
|
||||
$words .= ' ' . $word;
|
||||
}
|
||||
elseif($ord == 32)
|
||||
{
|
||||
$words .= ' ';
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -76,7 +80,14 @@ class spliter
|
||||
}
|
||||
else
|
||||
{
|
||||
$words .= ' ' . $letter;
|
||||
if(is_numeric(substr($words, strlen($words) - 1, 1)))
|
||||
{
|
||||
$words .= ' ' . $letter;
|
||||
}
|
||||
else
|
||||
{
|
||||
$words .= $letter;
|
||||
}
|
||||
}
|
||||
$i += $offset;
|
||||
}
|
||||
@@ -86,13 +97,13 @@ class spliter
|
||||
}
|
||||
|
||||
/**
|
||||
* Return unicode value for a char.
|
||||
*
|
||||
* @param string $c
|
||||
* Return unicode value for a char.
|
||||
*
|
||||
* @param string $c
|
||||
* @access public
|
||||
* @return int
|
||||
*/
|
||||
public function unicode($c)
|
||||
public function unicode($c)
|
||||
{
|
||||
if(ord($c{0}) >= 0 && ord($c{0}) <= 127) return ord($c{0});
|
||||
if(ord($c{0}) >= 192 && ord($c{0}) <= 223) return (ord($c{0}) - 192) * 64 + (ord($c{1}) - 128);
|
||||
@@ -107,8 +118,8 @@ class spliter
|
||||
|
||||
/**
|
||||
* Judge a char is Letter or not.
|
||||
*
|
||||
* @param string $letter
|
||||
*
|
||||
* @param string $letter
|
||||
* @access public
|
||||
* @return bool
|
||||
*/
|
||||
|
||||
@@ -29,6 +29,7 @@ $config->action->objectNameFields['design'] = 'name';
|
||||
$config->action->objectNameFields['stakeholder'] = 'user';
|
||||
$config->action->objectNameFields['budget'] = 'name';
|
||||
$config->action->objectNameFields['job'] = 'name';
|
||||
$config->action->objectNameFields['team'] = 'name';
|
||||
|
||||
$config->action->commonImgSize = 870;
|
||||
|
||||
@@ -42,4 +43,5 @@ $config->action->majorList['program'] = array('opened', 'edited');
|
||||
$config->action->majorList['project'] = array('opened', 'edited');
|
||||
$config->action->majorList['execution'] = array('opened', 'edited');
|
||||
|
||||
$config->action->needGetProjectType = 'story,build,task,bug,case,testcase,caselib,testtask,testsuite,testreport,doc,issue,release,risk,design';
|
||||
$config->action->needGetProjectType = 'build,task,bug,case,testcase,caselib,testtask,testsuite,testreport,doc,issue,release,risk,design,opportunity,trainplan,gapanalysis';
|
||||
$config->action->needGetRelateField = ',story,productplan,release,task,build,bug,case,testtask,testreport,doc,doclib,issue,risk,opportunity,trainplan,gapanalysis,team,whitelist,';
|
||||
|
||||
+16
-11
@@ -28,17 +28,22 @@ class action extends control
|
||||
|
||||
/* Save session. */
|
||||
$uri = $this->app->getURI(true);
|
||||
$this->session->set('productList', $uri);
|
||||
$this->session->set('productPlanList', $uri);
|
||||
$this->session->set('releaseList', $uri);
|
||||
$this->session->set('storyList', $uri);
|
||||
$this->session->set('projectList', $uri);
|
||||
$this->session->set('taskList', $uri);
|
||||
$this->session->set('buildList', $uri);
|
||||
$this->session->set('bugList', $uri);
|
||||
$this->session->set('caseList', $uri);
|
||||
$this->session->set('testtaskList', $uri);
|
||||
$this->session->set('docList', $uri);
|
||||
$this->session->set('productList', $uri, 'product');
|
||||
$this->session->set('productPlanList', $uri, 'product');
|
||||
$this->session->set('storyList', $uri, 'product');
|
||||
$this->session->set('releaseList', $uri, 'product');
|
||||
$this->session->set('programList', $uri, 'program');
|
||||
$this->session->set('projectList', $uri, 'project');
|
||||
$this->session->set('executionList', $uri, 'execution');
|
||||
$this->session->set('taskList', $uri, 'execution');
|
||||
$this->session->set('buildList', $uri, 'execution');
|
||||
$this->session->set('bugList', $uri, 'qa');
|
||||
$this->session->set('caseList', $uri, 'qa');
|
||||
$this->session->set('testtaskList', $uri, 'qa');
|
||||
$this->session->set('docList', $uri, 'doc');
|
||||
$this->session->set('opportunityList', $uri, 'project');
|
||||
$this->session->set('riskList', $uri, 'project');
|
||||
$this->session->set('trainplanList', $uri, 'project');
|
||||
|
||||
/* Get deleted objects. */
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
|
||||
+87
-64
@@ -97,53 +97,58 @@ $lang->action->objectTypes['budget'] = 'Cost Estimate';
|
||||
$lang->action->objectTypes['entry'] = 'Eintrag';
|
||||
$lang->action->objectTypes['webhook'] = 'Webhook';
|
||||
$lang->action->objectTypes['job'] = 'Job';
|
||||
$lang->action->objectTypes['team'] = 'Team';
|
||||
$lang->action->objectTypes['whitelist'] = 'Whitelist';
|
||||
|
||||
/* 用来描述操作历史记录。*/
|
||||
$lang->action->desc = new stdclass();
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> als <strong>$extra</strong> von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->opened = '$date, erstellt von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
|
||||
$lang->action->desc->created = '$date, erstellt von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->added = '$date, hinzugefügt durch <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->changed = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->edited = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->assigned = '$date, <strong>$actor</strong> zugewisen an <strong>$extra</strong>.' . "\n";
|
||||
$lang->action->desc->closed = '$date, geschlossen von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
|
||||
$lang->action->desc->deleted = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> löschte <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->editfile = '$date, <strong>$actor</strong> bearbeitete <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->erased = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, wiederhergestellt von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->hidden = '$date, versteckt von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->commented = '$date, hinzugefügt von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->activated = '$date, aktiviert von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->blocked = '$date, geblockt von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->moved = '$date, verschoben von <strong>$actor</strong> , ursprünglich "$extra".' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> hat die Anpassung der Story bestätigt. Das letzte Build ist <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> hat die Anpassung des Falls bestätigt. Das letzte Build ist <strong>#$extra</strong>' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> hat den Bug bestätigt.' . "\n";
|
||||
$lang->action->desc->frombug = '$date, konvertiert von <strong>$actor</strong>. Die ID war <strong>$extra</strong>.';
|
||||
$lang->action->desc->started = '$date, gestartet von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->delayed = '$date, zurückgestellt von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->suspended = '$date, ausgesetzt von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, aufgenommen von <strong>$actor</strong> und hat <strong>$extra</strong> Stunden aufgebraucht.';
|
||||
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> Stunden angepaast.';
|
||||
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> Stunden gelöscht.';
|
||||
$lang->action->desc->canceled = '$date, abgebrochen von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->finished = '$date, abgeschlossen von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->paused = '$date, pausiert von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->verified = '$date, überprüft von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> wurde geändert. Es war "%s" und ist jetzt "%s".<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> wurde geändert. Die Differenz ist ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
|
||||
$lang->action->desc->diff3 = 'Dateiname %s wurde geändert zu %s .' . "\n";
|
||||
$lang->action->desc->linked2bug = '$date Verknüpft mit <strong>$extra</strong> von <strong>$actor</strong>';
|
||||
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
|
||||
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> als <strong>$extra</strong> von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->opened = '$date, erstellt von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
|
||||
$lang->action->desc->created = '$date, erstellt von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->added = '$date, hinzugefügt durch <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->changed = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->edited = '$date, bearbeitet von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->assigned = '$date, <strong>$actor</strong> zugewisen an <strong>$extra</strong>.' . "\n";
|
||||
$lang->action->desc->closed = '$date, geschlossen von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
|
||||
$lang->action->desc->deleted = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> löschte <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->editfile = '$date, <strong>$actor</strong> bearbeitete <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->erased = '$date, gelöscht von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, wiederhergestellt von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->hidden = '$date, versteckt von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->commented = '$date, hinzugefügt von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->activated = '$date, aktiviert von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->blocked = '$date, geblockt von <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->moved = '$date, verschoben von <strong>$actor</strong> , ursprünglich "$extra".' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> hat die Anpassung der Story bestätigt. Das letzte Build ist <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> hat die Anpassung des Falls bestätigt. Das letzte Build ist <strong>#$extra</strong>' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> hat den Bug bestätigt.' . "\n";
|
||||
$lang->action->desc->frombug = '$date, konvertiert von <strong>$actor</strong>. Die ID war <strong>$extra</strong>.';
|
||||
$lang->action->desc->started = '$date, gestartet von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->delayed = '$date, zurückgestellt von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->suspended = '$date, ausgesetzt von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, aufgenommen von <strong>$actor</strong> und hat <strong>$extra</strong> Stunden aufgebraucht.';
|
||||
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> Stunden angepaast.';
|
||||
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> Stunden gelöscht.';
|
||||
$lang->action->desc->canceled = '$date, abgebrochen von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> festgelegt. Build ist <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->finished = '$date, abgeschlossen von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->paused = '$date, pausiert von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->verified = '$date, überprüft von <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> wurde geändert. Es war "%s" und ist jetzt "%s".<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> wurde geändert. Die Differenz ist ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
|
||||
$lang->action->desc->diff3 = 'Dateiname %s wurde geändert zu %s .' . "\n";
|
||||
$lang->action->desc->linked2bug = '$date Verknüpft mit <strong>$extra</strong> von <strong>$actor</strong>';
|
||||
$lang->action->desc->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
|
||||
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
|
||||
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
|
||||
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
|
||||
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
|
||||
|
||||
/* 子任务修改父任务的历史操作记录 */
|
||||
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
|
||||
@@ -231,6 +236,8 @@ $lang->action->label->logout = "Logout";
|
||||
$lang->action->label->deleteestimate = "deleted ";
|
||||
$lang->action->label->linked2build = "linked ";
|
||||
$lang->action->label->linked2bug = "linked ";
|
||||
$lang->action->label->linked2testtask = "linked";
|
||||
$lang->action->label->unlinkedfromtesttask = "unlinked";
|
||||
$lang->action->label->linkchildtask = "linked a child task";
|
||||
$lang->action->label->unlinkchildrentask = "unlinked a child task";
|
||||
$lang->action->label->linkparenttask = "linked a parent task";
|
||||
@@ -238,6 +245,8 @@ $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->label->managedteam = "managed";
|
||||
$lang->action->label->managedwhitelist = "managed";
|
||||
$lang->action->label->deletechildrentask = "delete children task";
|
||||
$lang->action->label->createchildrenstory = "create child stories";
|
||||
$lang->action->label->linkchildstory = "linked a child story";
|
||||
@@ -247,6 +256,13 @@ $lang->action->label->unlinkparentstory = "unlink from parent story";
|
||||
$lang->action->label->deletechildrenstory = "delete children story";
|
||||
$lang->action->label->tracked = 'tracked';
|
||||
$lang->action->label->hangup = 'hangup';
|
||||
$lang->action->label->run = 'run';
|
||||
$lang->action->label->estimated = 'estimated';
|
||||
$lang->action->label->reviewclosed = 'Review Failed';
|
||||
$lang->action->label->passreviewed = 'Pass';
|
||||
$lang->action->label->clarifyreviewed = 'Clarify';
|
||||
$lang->action->label->commitsummary = 'Commit Summary';
|
||||
$lang->action->label->updatetrainee = 'Update Trainee';
|
||||
|
||||
/* 动态信息按照对象分组 */
|
||||
$lang->action->dynamicAction = new stdclass;
|
||||
@@ -289,22 +305,25 @@ $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->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->story['linked2execution'] = "Link Story";
|
||||
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "Unlink Story";
|
||||
$lang->action->dynamicAction->story['estimated'] = "Estimate $lang->SRCommon";
|
||||
|
||||
$lang->action->dynamicAction->execution['opened'] = 'Create ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['edited'] = 'Edit ' . $lang->executionCommon;
|
||||
@@ -319,6 +338,8 @@ $lang->action->dynamicAction->execution['undeleted'] = 'Restore ' . $lang->execu
|
||||
$lang->action->dynamicAction->execution['hidden'] = 'Hide ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['moved'] = 'Improt Task';
|
||||
|
||||
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
|
||||
|
||||
$lang->action->dynamicAction->task['opened'] = 'Create Task';
|
||||
$lang->action->dynamicAction->task['edited'] = 'Edit Task';
|
||||
$lang->action->dynamicAction->task['commented'] = 'Task Comment';
|
||||
@@ -348,8 +369,9 @@ $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->build['opened'] = 'Create Build';
|
||||
$lang->action->dynamicAction->build['edited'] = 'Edit Build';
|
||||
$lang->action->dynamicAction->build['deleted'] = 'Delete Build';
|
||||
|
||||
$lang->action->dynamicAction->bug['opened'] = 'Report Bug';
|
||||
$lang->action->dynamicAction->bug['edited'] = 'Edit Bug';
|
||||
@@ -407,6 +429,7 @@ $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->doclib['deleted'] = 'Delete Doc Library';
|
||||
|
||||
$lang->action->dynamicAction->doc['created'] = 'Create Document';
|
||||
$lang->action->dynamicAction->doc['edited'] = 'Edit Document';
|
||||
@@ -468,12 +491,12 @@ $lang->action->search->objectTypeList[''] = '';
|
||||
$lang->action->search->objectTypeList['product'] = $lang->productCommon;
|
||||
$lang->action->search->objectTypeList['program'] = 'Program';
|
||||
$lang->action->search->objectTypeList['project'] = 'Project';
|
||||
$lang->action->search->objectTypeList['execution'] = $lang->sprintCommon;
|
||||
$lang->action->search->objectTypeList['execution'] = 'Execution';
|
||||
$lang->action->search->objectTypeList['bug'] = 'Bug';
|
||||
$lang->action->search->objectTypeList['case'] = 'Fälle';
|
||||
$lang->action->search->objectTypeList['caseresult'] = 'Fallergebnisse';
|
||||
$lang->action->search->objectTypeList['stepresult'] = 'Fallschritte';
|
||||
$lang->action->search->objectTypeList['story'] = 'Story';
|
||||
$lang->action->search->objectTypeList['story'] = "$lang->SRCommon/$lang->URCommon";
|
||||
$lang->action->search->objectTypeList['task'] = 'Aufgaben';
|
||||
$lang->action->search->objectTypeList['testtask'] = 'Testaufgaben';
|
||||
$lang->action->search->objectTypeList['user'] = 'Benutzer';
|
||||
|
||||
+96
-70
@@ -9,6 +9,8 @@
|
||||
* @version $Id: en.php 4729 2013-05-03 07:53:55Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
global $config;
|
||||
|
||||
$lang->action->common = 'Log';
|
||||
$lang->action->product = $lang->productCommon;
|
||||
$lang->action->project = 'Project';
|
||||
@@ -30,6 +32,9 @@ $lang->action->editComment = 'Edit Comment';
|
||||
$lang->action->create = 'Add Comment';
|
||||
$lang->action->comment = 'Comment';
|
||||
|
||||
$lang->action->undeleteAction = 'Reset Data';
|
||||
$lang->action->hideOneAction = 'Hide Data';
|
||||
|
||||
$lang->action->trashTips = 'Note: Delete in ZenTao is logic.';
|
||||
$lang->action->textDiff = 'Text Format';
|
||||
$lang->action->original = 'Original Format';
|
||||
@@ -96,54 +101,58 @@ $lang->action->objectTypes['stakeholder'] = 'Stakeholder';
|
||||
$lang->action->objectTypes['budget'] = 'Cost Estimate';
|
||||
$lang->action->objectTypes['entry'] = 'Entry';
|
||||
$lang->action->objectTypes['webhook'] = 'Webhook';
|
||||
$lang->action->objectTypes['job'] = 'Job';
|
||||
$lang->action->objectTypes['team'] = 'Team';
|
||||
$lang->action->objectTypes['whitelist'] = 'Whitelist';
|
||||
|
||||
/* Used to describe operation history. */
|
||||
$lang->action->desc = new stdclass();
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->opened = '$date, created by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
|
||||
$lang->action->desc->created = '$date, created by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->added = '$date, added by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
|
||||
$lang->action->desc->closed = '$date, closed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
|
||||
$lang->action->desc->deleted = '$date, deleted by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> deleted <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->editfile = '$date, <strong>$actor</strong> edited <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->erased = '$date, deleted by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, restored by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->hidden = '$date, hidden by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->commented = '$date, added by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->activated = '$date, activated by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->moved = '$date, moved by <strong>$actor</strong> , which was "$extra".' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
|
||||
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
|
||||
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, recorded by <strong>$actor</strong> and it cost <strong>$extra</strong> hours.';
|
||||
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
|
||||
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
|
||||
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
|
||||
$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->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
|
||||
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->opened = '$date, created by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
|
||||
$lang->action->desc->created = '$date, created by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->added = '$date, added by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
|
||||
$lang->action->desc->closed = '$date, closed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
|
||||
$lang->action->desc->deleted = '$date, deleted by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> deleted <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->editfile = '$date, <strong>$actor</strong> edited <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->erased = '$date, deleted by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, restored by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->hidden = '$date, hidden by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->commented = '$date, added by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->activated = '$date, activated by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->moved = '$date, moved by <strong>$actor</strong> , which was "$extra".' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
|
||||
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
|
||||
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, recorded by <strong>$actor</strong> and it cost <strong>$extra</strong> hours.';
|
||||
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
|
||||
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
|
||||
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
|
||||
$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->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
|
||||
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
|
||||
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
|
||||
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
|
||||
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
|
||||
|
||||
/* Used to describe the history of operations related to parent-child tasks. */
|
||||
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
|
||||
@@ -231,6 +240,8 @@ $lang->action->label->logout = "logout";
|
||||
$lang->action->label->deleteestimate = "deleted ";
|
||||
$lang->action->label->linked2build = "linked ";
|
||||
$lang->action->label->linked2bug = "linked ";
|
||||
$lang->action->label->linked2testtask = "linked";
|
||||
$lang->action->label->unlinkedfromtesttask = "unlinked";
|
||||
$lang->action->label->linkchildtask = "linked a child task";
|
||||
$lang->action->label->unlinkchildrentask = "unlinked a child task";
|
||||
$lang->action->label->linkparenttask = "linked a parent task";
|
||||
@@ -238,6 +249,8 @@ $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->label->managedteam = "managed";
|
||||
$lang->action->label->managedwhitelist = "managed";
|
||||
$lang->action->label->deletechildrentask = "delete children task";
|
||||
$lang->action->label->createchildrenstory = "create child stories";
|
||||
$lang->action->label->linkchildstory = "linked a child story";
|
||||
@@ -247,6 +260,13 @@ $lang->action->label->unlinkparentstory = "unlink from parent story";
|
||||
$lang->action->label->deletechildrenstory = "delete children story";
|
||||
$lang->action->label->tracked = 'tracked';
|
||||
$lang->action->label->hangup = 'hangup';
|
||||
$lang->action->label->run = 'run';
|
||||
$lang->action->label->estimated = 'estimated';
|
||||
$lang->action->label->reviewclosed = 'Review Failed';
|
||||
$lang->action->label->passreviewed = 'Pass';
|
||||
$lang->action->label->clarifyreviewed = 'Clarify';
|
||||
$lang->action->label->commitsummary = 'Commit Summary';
|
||||
$lang->action->label->updatetrainee = 'Update Trainee';
|
||||
|
||||
/* Dynamic information is grouped by object. */
|
||||
$lang->action->dynamicAction = new stdclass;
|
||||
@@ -289,22 +309,25 @@ $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->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->story['linked2execution'] = "Link Story";
|
||||
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "Unlink Story";
|
||||
$lang->action->dynamicAction->story['estimated'] = "Estimate $lang->SRCommon";
|
||||
|
||||
$lang->action->dynamicAction->execution['opened'] = 'Create ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['edited'] = 'Edit ' . $lang->executionCommon;
|
||||
@@ -319,6 +342,8 @@ $lang->action->dynamicAction->execution['undeleted'] = 'Restore ' . $lang->execu
|
||||
$lang->action->dynamicAction->execution['hidden'] = 'Hide ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['moved'] = 'Improt Task';
|
||||
|
||||
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
|
||||
|
||||
$lang->action->dynamicAction->task['opened'] = 'Create Task';
|
||||
$lang->action->dynamicAction->task['edited'] = 'Edit Task';
|
||||
$lang->action->dynamicAction->task['commented'] = 'Task Comment';
|
||||
@@ -348,8 +373,9 @@ $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->build['opened'] = 'Create Build';
|
||||
$lang->action->dynamicAction->build['edited'] = 'Edit Build';
|
||||
$lang->action->dynamicAction->build['deleted'] = 'Delete Build';
|
||||
|
||||
$lang->action->dynamicAction->bug['opened'] = 'Report Bug';
|
||||
$lang->action->dynamicAction->bug['edited'] = 'Edit Bug';
|
||||
@@ -407,6 +433,7 @@ $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->doclib['deleted'] = 'Delete Doc Library';
|
||||
|
||||
$lang->action->dynamicAction->doc['created'] = 'Create Document';
|
||||
$lang->action->dynamicAction->doc['edited'] = 'Edit Document';
|
||||
@@ -427,12 +454,11 @@ $lang->action->dynamicAction->entry['created'] = 'Add Application';
|
||||
$lang->action->dynamicAction->entry['edited'] = 'Edit Application';
|
||||
|
||||
/* Generate the corresponding object link. */
|
||||
global $config;
|
||||
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
|
||||
$lang->action->label->productplan = 'Plan|productplan|view|productID=%s';
|
||||
$lang->action->label->release = 'Release|release|view|productID=%s';
|
||||
$lang->action->label->story = 'Story|story|view|storyID=%s';
|
||||
$lang->action->label->program = "Program|program|pgmproduct|programID=%s";
|
||||
$lang->action->label->program = "Program|program|product|programID=%s";
|
||||
$lang->action->label->project = "Project|project|index|projectID=%s";
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
@@ -468,15 +494,15 @@ $lang->action->search->objectTypeList[''] = '';
|
||||
$lang->action->search->objectTypeList['product'] = $lang->productCommon;
|
||||
$lang->action->search->objectTypeList['program'] = 'Program';
|
||||
$lang->action->search->objectTypeList['project'] = 'Project';
|
||||
$lang->action->search->objectTypeList['execution'] = $lang->sprintCommon;
|
||||
$lang->action->search->objectTypeList['execution'] = 'Execution';
|
||||
$lang->action->search->objectTypeList['bug'] = 'Bug';
|
||||
$lang->action->search->objectTypeList['case'] = 'Case';
|
||||
$lang->action->search->objectTypeList['caseresult'] = 'Case Result';
|
||||
$lang->action->search->objectTypeList['stepresult'] = 'Case Steps';
|
||||
$lang->action->search->objectTypeList['story'] = 'UR/SR';
|
||||
$lang->action->search->objectTypeList['task'] = 'Task';
|
||||
$lang->action->search->objectTypeList['testtask'] = 'Request';
|
||||
$lang->action->search->objectTypeList['user'] = 'User';
|
||||
$lang->action->search->objectTypeList['story'] = "$lang->SRCommon/$lang->URCommon";
|
||||
$lang->action->search->objectTypeList['task'] = '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';
|
||||
$lang->action->search->objectTypeList['todo'] = 'Todo';
|
||||
|
||||
+104
-68
@@ -97,53 +97,58 @@ $lang->action->objectTypes['budget'] = 'Cost Estimate';
|
||||
$lang->action->objectTypes['entry'] = 'Entrée';
|
||||
$lang->action->objectTypes['webhook'] = 'Webhook';
|
||||
$lang->action->objectTypes['job'] = 'Job';
|
||||
$lang->action->objectTypes['team'] = 'Team';
|
||||
$lang->action->objectTypes['whitelist'] = 'Whitelist';
|
||||
|
||||
/* 用来描述操作历史记录。*/
|
||||
$lang->action->desc = new stdclass();
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> en tant que <strong>$extra</strong> par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->opened = '$date, initié par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
|
||||
$lang->action->desc->created = '$date, créé par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->added = '$date, ajouter par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->changed = '$date, modifié par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->edited = '$date, édité par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->assigned = '$date, <strong>$actor</strong> affecté à <strong>$extra</strong>.' . "\n";
|
||||
$lang->action->desc->closed = '$date, fermé par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
|
||||
$lang->action->desc->deleted = '$date, supprimé par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> a supprimé <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->editfile = '$date, <strong>$actor</strong> a édité <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->erased = '$date, supprimé par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, restauré par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->hidden = '$date, masqué par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->commented = '$date, ajouté par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->activated = '$date, activé par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->blocked = '$date, bloqué par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->moved = '$date, déplacé par <strong>$actor</strong> , qui était "$extra".' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> a confirmé la modification de la story. Le dernier build est <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> a confirmé la modification du CasTest. Le dernier build est <strong>#$extra</strong>' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> a confirmé le Bug.' . "\n";
|
||||
$lang->action->desc->frombug = '$date, converti par <strong>$actor</strong>. Son ID était <strong>$extra</strong>.';
|
||||
$lang->action->desc->started = '$date, commencé par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->restarted = '$date, reprise par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->delayed = '$date, ajourné par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->suspended = '$date, suspendu par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, enregistré par <strong>$actor</strong> et son coût est de <strong>$extra</strong> heures.';
|
||||
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> a édité son temps estimé.';
|
||||
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> a supprimé son estimation de temps.';
|
||||
$lang->action->desc->canceled = '$date, annulé par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->finished = '$date, terminé par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->paused = '$date, mis en pause par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->verified = '$date, verifié par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> a changé. Il est passé de "%s" à "%s".<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> a changé. La différence est ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
|
||||
$lang->action->desc->diff3 = 'Le nom du fichier %s a changé pour %s .' . "\n";
|
||||
$lang->action->desc->linked2bug = '$date, affecté à <strong>$extra</strong> par <strong>$actor</strong>';
|
||||
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
|
||||
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> en tant que <strong>$extra</strong> par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->opened = '$date, initié par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
|
||||
$lang->action->desc->created = '$date, créé par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->added = '$date, ajouter par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->changed = '$date, modifié par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->edited = '$date, édité par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->assigned = '$date, <strong>$actor</strong> affecté à <strong>$extra</strong>.' . "\n";
|
||||
$lang->action->desc->closed = '$date, fermé par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
|
||||
$lang->action->desc->deleted = '$date, supprimé par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> a supprimé <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->editfile = '$date, <strong>$actor</strong> a édité <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->erased = '$date, supprimé par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, restauré par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->hidden = '$date, masqué par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->commented = '$date, ajouté par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->activated = '$date, activé par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->blocked = '$date, bloqué par <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->moved = '$date, déplacé par <strong>$actor</strong> , qui était "$extra".' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> a confirmé la modification de la story. Le dernier build est <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> a confirmé la modification du CasTest. Le dernier build est <strong>#$extra</strong>' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> a confirmé le Bug.' . "\n";
|
||||
$lang->action->desc->frombug = '$date, converti par <strong>$actor</strong>. Son ID était <strong>$extra</strong>.';
|
||||
$lang->action->desc->started = '$date, commencé par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->restarted = '$date, reprise par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->delayed = '$date, ajourné par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->suspended = '$date, suspendu par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, enregistré par <strong>$actor</strong> et son coût est de <strong>$extra</strong> heures.';
|
||||
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> a édité son temps estimé.';
|
||||
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> a supprimé son estimation de temps.';
|
||||
$lang->action->desc->canceled = '$date, annulé par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> a validé, le build est <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->finished = '$date, terminé par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->paused = '$date, mis en pause par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->verified = '$date, verifié par <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->diff1 = '<strong><i>%s</i></strong> a changé. Il est passé de "%s" à "%s".<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '<strong><i>%s</i></strong> a changé. La différence est ' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
|
||||
$lang->action->desc->diff3 = 'Le nom du fichier %s a changé pour %s .' . "\n";
|
||||
$lang->action->desc->linked2bug = '$date, affecté à <strong>$extra</strong> par <strong>$actor</strong>';
|
||||
$lang->action->desc->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
|
||||
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
|
||||
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
|
||||
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
|
||||
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
|
||||
|
||||
/* 子任务修改父任务的历史操作记录 */
|
||||
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> a créé un sous-tâche <strong>$extra</strong>。' . "\n";
|
||||
@@ -231,6 +236,8 @@ $lang->action->label->logout = "s'est Déconnecté";
|
||||
$lang->action->label->deleteestimate = "a remis à zéro ";
|
||||
$lang->action->label->linked2build = "a ajouté au Build ";
|
||||
$lang->action->label->linked2bug = "a lié au Bug ";
|
||||
$lang->action->label->linked2testtask = "linked";
|
||||
$lang->action->label->unlinkedfromtesttask = "unlinked";
|
||||
$lang->action->label->linkchildtask = "a raccroché à une sous-tâche";
|
||||
$lang->action->label->unlinkchildrentask = "a décroché la sous-tâche";
|
||||
$lang->action->label->linkparenttask = "a raccroché à une tâche parent";
|
||||
@@ -238,6 +245,8 @@ $lang->action->label->unlinkparenttask = "a décroché de la tâche parent"
|
||||
$lang->action->label->batchcreate = "a créé tâches par lot";
|
||||
$lang->action->label->createchildren = "a créé sous-tâches par lot";
|
||||
$lang->action->label->managed = "a managé";
|
||||
$lang->action->label->managedteam = "managed";
|
||||
$lang->action->label->managedwhitelist = "managed";
|
||||
$lang->action->label->deletechildrentask = "a supprimé une sous-tâche";
|
||||
$lang->action->label->createchildrenstory = "a créé une sous-story";
|
||||
$lang->action->label->linkchildstory = "a raccroché à une sous-story";
|
||||
@@ -247,6 +256,13 @@ $lang->action->label->unlinkparentstory = "a décroché de la story parent";
|
||||
$lang->action->label->deletechildrenstory = "a supprimé la sous-story";
|
||||
$lang->action->label->tracked = 'tracked';
|
||||
$lang->action->label->hangup = 'hangup';
|
||||
$lang->action->label->run = 'run';
|
||||
$lang->action->label->estimated = 'estimated';
|
||||
$lang->action->label->reviewclosed = 'Review Failed';
|
||||
$lang->action->label->passreviewed = 'Pass';
|
||||
$lang->action->label->clarifyreviewed = 'Clarify';
|
||||
$lang->action->label->commitsummary = 'Commit Summary';
|
||||
$lang->action->label->updatetrainee = 'Update Trainee';
|
||||
|
||||
/* 动态信息按照对象分组 */
|
||||
$lang->action->dynamicAction = new stdclass();
|
||||
@@ -289,22 +305,25 @@ $lang->action->dynamicAction->release['changestatus'] = 'Changer Statut Release'
|
||||
$lang->action->dynamicAction->release['undeleted'] = 'Restaurer Release';
|
||||
$lang->action->dynamicAction->release['hidden'] = 'Masquer Release';
|
||||
|
||||
$lang->action->dynamicAction->story['opened'] = 'Créer Story';
|
||||
$lang->action->dynamicAction->story['edited'] = 'Editer Story';
|
||||
$lang->action->dynamicAction->story['activated'] = 'Activer Story';
|
||||
$lang->action->dynamicAction->story['reviewed'] = 'Consulter Story';
|
||||
$lang->action->dynamicAction->story['closed'] = 'Fermer Story';
|
||||
$lang->action->dynamicAction->story['assigned'] = 'Assigner Story';
|
||||
$lang->action->dynamicAction->story['changed'] = 'Changer Story';
|
||||
$lang->action->dynamicAction->story['linked2plan'] = 'Inclure Story au Plan';
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Enlever Story du Plan';
|
||||
$lang->action->dynamicAction->story['linked2release'] = 'Inclure Story à la Release';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Enlever Story de la Release';
|
||||
$lang->action->dynamicAction->story['linked2build'] = 'Ajouter Story au Build';
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Détacher Story du Build';
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Détacher du Project';
|
||||
$lang->action->dynamicAction->story['undeleted'] = 'Restaurer Story';
|
||||
$lang->action->dynamicAction->story['hidden'] = 'Masquer Story';
|
||||
$lang->action->dynamicAction->story['opened'] = 'Créer Story';
|
||||
$lang->action->dynamicAction->story['edited'] = 'Editer Story';
|
||||
$lang->action->dynamicAction->story['activated'] = 'Activer Story';
|
||||
$lang->action->dynamicAction->story['reviewed'] = 'Consulter Story';
|
||||
$lang->action->dynamicAction->story['closed'] = 'Fermer Story';
|
||||
$lang->action->dynamicAction->story['assigned'] = 'Assigner Story';
|
||||
$lang->action->dynamicAction->story['changed'] = 'Changer Story';
|
||||
$lang->action->dynamicAction->story['linked2plan'] = 'Inclure Story au Plan';
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Enlever Story du Plan';
|
||||
$lang->action->dynamicAction->story['linked2release'] = 'Inclure Story à la Release';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Enlever Story de la Release';
|
||||
$lang->action->dynamicAction->story['linked2build'] = 'Ajouter Story au Build';
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Détacher Story du Build';
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Détacher du Project';
|
||||
$lang->action->dynamicAction->story['undeleted'] = 'Restaurer Story';
|
||||
$lang->action->dynamicAction->story['hidden'] = 'Masquer Story';
|
||||
$lang->action->dynamicAction->story['linked2execution'] = "Link Story";
|
||||
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "Unlink Story";
|
||||
$lang->action->dynamicAction->story['estimated'] = "Estimate $lang->SRCommon";
|
||||
|
||||
$lang->action->dynamicAction->project['opened'] = 'Créer ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->project['edited'] = 'Editer ' . $lang->executionCommon;
|
||||
@@ -319,6 +338,21 @@ $lang->action->dynamicAction->project['undeleted'] = 'Restaurer ' . $lang->execu
|
||||
$lang->action->dynamicAction->project['hidden'] = 'Masquer ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->project['moved'] = 'Déplacer Tâche';
|
||||
|
||||
$lang->action->dynamicAction->execution['opened'] = 'Create ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['edited'] = 'Edit ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['deleted'] = 'Delete ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['started'] = 'Start ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['delayed'] = 'Delay ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['suspended'] = 'Suspend ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['activated'] = 'Activate ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['closed'] = 'Close ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['managed'] = 'Manage ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['undeleted'] = 'Restore ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['hidden'] = 'Hide ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['moved'] = 'Improt Task';
|
||||
|
||||
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
|
||||
|
||||
$lang->action->dynamicAction->task['opened'] = 'Créer Tâche';
|
||||
$lang->action->dynamicAction->task['edited'] = 'Editer Tâche';
|
||||
$lang->action->dynamicAction->task['commented'] = 'Commenter Tâche';
|
||||
@@ -348,8 +382,9 @@ $lang->action->dynamicAction->task['hidden'] = 'Masquer Tâche';
|
||||
$lang->action->dynamicAction->task['svncommited'] = 'Committer SVN';
|
||||
$lang->action->dynamicAction->task['gitcommited'] = 'Committer GIT';
|
||||
|
||||
$lang->action->dynamicAction->build['opened'] = 'Créer Build';
|
||||
$lang->action->dynamicAction->build['edited'] = 'Editer Build';
|
||||
$lang->action->dynamicAction->build['opened'] = 'Créer Build';
|
||||
$lang->action->dynamicAction->build['edited'] = 'Editer Build';
|
||||
$lang->action->dynamicAction->build['deleted'] = 'Delete Build';
|
||||
|
||||
$lang->action->dynamicAction->bug['opened'] = 'Remonter Bug';
|
||||
$lang->action->dynamicAction->bug['edited'] = 'Editer Bug';
|
||||
@@ -407,6 +442,7 @@ $lang->action->dynamicAction->caselib['hidden'] = 'Masqué CasTest Lib';
|
||||
|
||||
$lang->action->dynamicAction->doclib['created'] = 'Créer Doc Library';
|
||||
$lang->action->dynamicAction->doclib['edited'] = 'Editer Doc Library';
|
||||
$lang->action->dynamicAction->doclib['deleted'] = 'Delete Doc Library';
|
||||
|
||||
$lang->action->dynamicAction->doc['created'] = 'Créer Document';
|
||||
$lang->action->dynamicAction->doc['edited'] = 'Editer Document';
|
||||
@@ -467,15 +503,15 @@ $lang->action->search->objectTypeList[''] = '';
|
||||
$lang->action->search->objectTypeList['product'] = $lang->productCommon;
|
||||
$lang->action->search->objectTypeList['program'] = 'Program';
|
||||
$lang->action->search->objectTypeList['project'] = 'Project';
|
||||
$lang->action->search->objectTypeList['execution'] = $lang->sprintCommon;
|
||||
$lang->action->search->objectTypeList['execution'] = 'Execution';
|
||||
$lang->action->search->objectTypeList['bug'] = 'Bug';
|
||||
$lang->action->search->objectTypeList['case'] = 'CasTest';
|
||||
$lang->action->search->objectTypeList['case'] = 'CasTest';
|
||||
$lang->action->search->objectTypeList['caseresult'] = 'CasTest Result';
|
||||
$lang->action->search->objectTypeList['stepresult'] = 'CasTest Steps';
|
||||
$lang->action->search->objectTypeList['story'] = 'UR/SR';
|
||||
$lang->action->search->objectTypeList['task'] = 'Tâche';
|
||||
$lang->action->search->objectTypeList['testtask'] = 'Recette';
|
||||
$lang->action->search->objectTypeList['user'] = 'Utilisateur';
|
||||
$lang->action->search->objectTypeList['story'] = "$lang->SRCommon/$lang->URCommon";
|
||||
$lang->action->search->objectTypeList['task'] = 'Tâche';
|
||||
$lang->action->search->objectTypeList['testtask'] = 'Recette';
|
||||
$lang->action->search->objectTypeList['user'] = 'Utilisateur';
|
||||
$lang->action->search->objectTypeList['doc'] = 'Doc';
|
||||
$lang->action->search->objectTypeList['doclib'] = 'Doc Lib';
|
||||
$lang->action->search->objectTypeList['todo'] = 'Todo';
|
||||
|
||||
+92
-69
@@ -97,53 +97,58 @@ $lang->action->objectTypes['budget'] = 'Cost Estimate';
|
||||
$lang->action->objectTypes['entry'] = 'Entry';
|
||||
$lang->action->objectTypes['webhook'] = 'Webhook';
|
||||
$lang->action->objectTypes['job'] = 'Job';
|
||||
$lang->action->objectTypes['team'] = 'Team';
|
||||
$lang->action->objectTypes['whitelist'] = 'Whitelist';
|
||||
|
||||
/* Used to describe operation history. */
|
||||
$lang->action->desc = new stdclass();
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> bởi <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> như <strong>$extra</strong> bởi <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->opened = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
|
||||
$lang->action->desc->created = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->added = '$date, thêm bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
|
||||
$lang->action->desc->closed = '$date, được đóng bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
|
||||
$lang->action->desc->deleted = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> đã xóa <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->editfile = '$date, <strong>$actor</strong> đã sửa <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->erased = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, khôi phục bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->hidden = '$date, ẩn bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->commented = '$date, được thêm bởi <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->activated = '$date, kích hoạt bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->moved = '$date, chuyển bởi <strong>$actor</strong> , cái là "$extra".' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
|
||||
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
|
||||
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, ghi nhận bởi <strong>$actor</strong> and it cost <strong>$extra</strong> giờ.';
|
||||
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
|
||||
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
|
||||
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
|
||||
$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, liên kết tới <strong>$extra</strong> bởi <strong>$actor</strong>';
|
||||
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
|
||||
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> bởi <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> như <strong>$extra</strong> bởi <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->opened = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, opened by system.' . "\n";
|
||||
$lang->action->desc->created = '$date, được tạo bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->added = '$date, thêm bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->changed = '$date, changed by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->edited = '$date, edited by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->assigned = '$date, <strong>$actor</strong> assigned to <strong>$extra</strong>.' . "\n";
|
||||
$lang->action->desc->closed = '$date, được đóng bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, closed by system.' . "\n";
|
||||
$lang->action->desc->deleted = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, <strong>$actor</strong> đã xóa <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->editfile = '$date, <strong>$actor</strong> đã sửa <strong><i>$extra</i></strong>.' . "\n";
|
||||
$lang->action->desc->erased = '$date, được xóa bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, khôi phục bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->hidden = '$date, ẩn bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->commented = '$date, được thêm bởi <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->activated = '$date, kích hoạt bởi <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->blocked = '$date, blocked by <strong>$actor</strong> .' . "\n";
|
||||
$lang->action->desc->moved = '$date, chuyển bởi <strong>$actor</strong> , cái là "$extra".' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, <strong>$actor</strong> confirmed the story change. The latest build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, <strong>$actor</strong> confirmed the case change. The latest build is <strong>#$extra</strong>' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, <strong>$actor</strong> confirmed Bug.' . "\n";
|
||||
$lang->action->desc->frombug = '$date, converted from <strong>$actor</strong>. Its ID was <strong>$extra</strong>.';
|
||||
$lang->action->desc->started = '$date, started by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->restarted = '$date, continued by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->delayed = '$date, postponed by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->suspended = '$date, suspended by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, ghi nhận bởi <strong>$actor</strong> and it cost <strong>$extra</strong> giờ.';
|
||||
$lang->action->desc->editestimate = '$date, <strong>$actor</strong> edited Hour.';
|
||||
$lang->action->desc->deleteestimate = '$date, <strong>$actor</strong> deleted Hour.';
|
||||
$lang->action->desc->canceled = '$date, cancelled by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, <strong>$actor</strong> committed and the build is <strong>#$extra</strong>.' . "\n";
|
||||
$lang->action->desc->finished = '$date, finished by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->paused = '$date, paused by <strong>$actor</strong>.' . "\n";
|
||||
$lang->action->desc->verified = '$date, verified by <strong>$actor</strong>.' . "\n";
|
||||
$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, liên kết tới <strong>$extra</strong> bởi <strong>$actor</strong>';
|
||||
$lang->action->desc->linked2testtask = '$date, linked to <strong>$extra</strong> by <strong>$actor</strong>';
|
||||
$lang->action->desc->resolved = '$date, resolved by <strong>$actor</strong> ' . "\n";
|
||||
$lang->action->desc->managed = '$date, by <strong>$actor</strong> managed.' . "\n";
|
||||
$lang->action->desc->estimated = '$date, by <strong>$actor</strong> estimated.' . "\n";
|
||||
$lang->action->desc->run = '$date, by <strong>$actor</strong> executed.' . "\n";
|
||||
|
||||
/* Used to describe the history of operations related to parent-child tasks. */
|
||||
$lang->action->desc->createchildren = '$date, <strong>$actor</strong> created a child task <strong>$extra</strong>。' . "\n";
|
||||
@@ -231,6 +236,8 @@ $lang->action->label->logout = "logout";
|
||||
$lang->action->label->deleteestimate = "deleted ";
|
||||
$lang->action->label->linked2build = "linked ";
|
||||
$lang->action->label->linked2bug = "linked ";
|
||||
$lang->action->label->linked2testtask = "linked";
|
||||
$lang->action->label->unlinkedfromtesttask = "unlinked";
|
||||
$lang->action->label->linkchildtask = "linked a child task";
|
||||
$lang->action->label->unlinkchildrentask = "hủy liên kết a child task";
|
||||
$lang->action->label->linkparenttask = "linked a nhiệm vụ cha";
|
||||
@@ -238,6 +245,8 @@ $lang->action->label->unlinkparenttask = "unlink from nhiệm vụ cha";
|
||||
$lang->action->label->batchcreate = "batch created tasks";
|
||||
$lang->action->label->createchildren = "create child tasks";
|
||||
$lang->action->label->managed = "managed";
|
||||
$lang->action->label->managedteam = "managed";
|
||||
$lang->action->label->managedwhitelist = "managed";
|
||||
$lang->action->label->deletechildrentask = "delete children task";
|
||||
$lang->action->label->createchildrenstory = "create child stories";
|
||||
$lang->action->label->linkchildstory = "linked a child story";
|
||||
@@ -247,6 +256,13 @@ $lang->action->label->unlinkparentstory = "unlink from parent story";
|
||||
$lang->action->label->deletechildrenstory = "delete children story";
|
||||
$lang->action->label->tracked = 'tracked';
|
||||
$lang->action->label->hangup = 'hangup';
|
||||
$lang->action->label->run = 'run';
|
||||
$lang->action->label->estimated = 'estimated';
|
||||
$lang->action->label->reviewclosed = 'Review Failed';
|
||||
$lang->action->label->passreviewed = 'Pass';
|
||||
$lang->action->label->clarifyreviewed = 'Clarify';
|
||||
$lang->action->label->commitsummary = 'Commit Summary';
|
||||
$lang->action->label->updatetrainee = 'Update Trainee';
|
||||
|
||||
/* Dynamic information is grouped by object. */
|
||||
$lang->action->dynamicAction = new stdclass;
|
||||
@@ -289,22 +305,25 @@ $lang->action->dynamicAction->release['changestatus'] = 'Thay đổi Tình trạ
|
||||
$lang->action->dynamicAction->release['undeleted'] = 'Khôi phục phát hành';
|
||||
$lang->action->dynamicAction->release['hidden'] = 'Ẩn phát hành';
|
||||
|
||||
$lang->action->dynamicAction->story['opened'] = 'Tạo câu chuyện';
|
||||
$lang->action->dynamicAction->story['edited'] = 'Sửa câu chuyện';
|
||||
$lang->action->dynamicAction->story['activated'] = 'Kích hoạt câu chuyện';
|
||||
$lang->action->dynamicAction->story['reviewed'] = 'Duyệt câu chuyện';
|
||||
$lang->action->dynamicAction->story['closed'] = 'Đóng câu chuyện';
|
||||
$lang->action->dynamicAction->story['assigned'] = 'Bàn giao câu chuyện';
|
||||
$lang->action->dynamicAction->story['changed'] = 'Thay đổi câu chuyện';
|
||||
$lang->action->dynamicAction->story['linked2plan'] = 'Liên kết Story to kế hoạch';
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Hủy liên kết Story from kế hoạch';
|
||||
$lang->action->dynamicAction->story['linked2release'] = 'Liên kết Story to phát hành';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Hủy liên kết Story from kế hoạch';
|
||||
$lang->action->dynamicAction->story['linked2build'] = 'Liên kết Story to bản dựng';
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Hủy liên kết Story from bản dựng';
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Hủy liên kết Project';
|
||||
$lang->action->dynamicAction->story['undeleted'] = 'Khôi phục câu chuyện';
|
||||
$lang->action->dynamicAction->story['hidden'] = 'Ẩn câu chuyện';
|
||||
$lang->action->dynamicAction->story['opened'] = 'Tạo câu chuyện';
|
||||
$lang->action->dynamicAction->story['edited'] = 'Sửa câu chuyện';
|
||||
$lang->action->dynamicAction->story['activated'] = 'Kích hoạt câu chuyện';
|
||||
$lang->action->dynamicAction->story['reviewed'] = 'Duyệt câu chuyện';
|
||||
$lang->action->dynamicAction->story['closed'] = 'Đóng câu chuyện';
|
||||
$lang->action->dynamicAction->story['assigned'] = 'Bàn giao câu chuyện';
|
||||
$lang->action->dynamicAction->story['changed'] = 'Thay đổi câu chuyện';
|
||||
$lang->action->dynamicAction->story['linked2plan'] = 'Liên kết Story to kế hoạch';
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = 'Hủy liên kết Story from kế hoạch';
|
||||
$lang->action->dynamicAction->story['linked2release'] = 'Liên kết Story to phát hành';
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = 'Hủy liên kết Story from kế hoạch';
|
||||
$lang->action->dynamicAction->story['linked2build'] = 'Liên kết Story to bản dựng';
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = 'Hủy liên kết Story from bản dựng';
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = 'Hủy liên kết Project';
|
||||
$lang->action->dynamicAction->story['undeleted'] = 'Khôi phục câu chuyện';
|
||||
$lang->action->dynamicAction->story['hidden'] = 'Ẩn câu chuyện';
|
||||
$lang->action->dynamicAction->story['linked2execution'] = "Link Story";
|
||||
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "Unlink Story";
|
||||
$lang->action->dynamicAction->story['estimated'] = "Estimate $lang->SRCommon";
|
||||
|
||||
$lang->action->dynamicAction->execution['opened'] = 'Tạo ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['edited'] = 'Sửa ' . $lang->executionCommon;
|
||||
@@ -319,6 +338,8 @@ $lang->action->dynamicAction->execution['undeleted'] = 'Phục hổi ' . $lang->
|
||||
$lang->action->dynamicAction->execution['hidden'] = 'Ẩn ' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['moved'] = 'Nhập nhiệm vụ';
|
||||
|
||||
$lang->action->dynamicAction->team['managedTeam'] = 'Manage Team';
|
||||
|
||||
$lang->action->dynamicAction->task['opened'] = 'Tạo nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['edited'] = 'Sửa nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['commented'] = 'Task nhận xét';
|
||||
@@ -348,8 +369,9 @@ $lang->action->dynamicAction->task['hidden'] = 'Ẩn nhiệm vụ';
|
||||
$lang->action->dynamicAction->task['svncommited'] = 'SVN Commit';
|
||||
$lang->action->dynamicAction->task['gitcommited'] = 'GIT Commit';
|
||||
|
||||
$lang->action->dynamicAction->build['opened'] = 'Tạo bản dựng';
|
||||
$lang->action->dynamicAction->build['edited'] = 'Sửa bản dựng';
|
||||
$lang->action->dynamicAction->build['opened'] = 'Tạo bản dựng';
|
||||
$lang->action->dynamicAction->build['edited'] = 'Sửa bản dựng';
|
||||
$lang->action->dynamicAction->build['deleted'] = 'Delete Build';
|
||||
|
||||
$lang->action->dynamicAction->bug['opened'] = 'Báo cáo Bug';
|
||||
$lang->action->dynamicAction->bug['edited'] = 'Sửa Bug';
|
||||
@@ -407,6 +429,7 @@ $lang->action->dynamicAction->caselib['hidden'] = 'Ẩn Case Lib';
|
||||
|
||||
$lang->action->dynamicAction->doclib['created'] = 'Tạo Doc thư viện';
|
||||
$lang->action->dynamicAction->doclib['edited'] = 'Sửa Doc thư viện';
|
||||
$lang->action->dynamicAction->doclib['deleted'] = 'Delete Doc Library';
|
||||
|
||||
$lang->action->dynamicAction->doc['created'] = 'Tạo tài liệu';
|
||||
$lang->action->dynamicAction->doc['edited'] = 'Sửa tài liệu';
|
||||
@@ -464,19 +487,19 @@ $lang->action->label->stakeholder = 'Stakeholder|stakeholder|view|userID=%s';
|
||||
|
||||
/* Object type. */
|
||||
$lang->action->search = new stdclass();
|
||||
$lang->action->search->objectTypeList[''] = '';
|
||||
$lang->action->search->objectTypeList[''] = '';
|
||||
$lang->action->search->objectTypeList['product'] = $lang->productCommon;
|
||||
$lang->action->search->objectTypeList['program'] = 'Program';
|
||||
$lang->action->search->objectTypeList['project'] = 'Project';
|
||||
$lang->action->search->objectTypeList['execution'] = $lang->sprintCommon;
|
||||
$lang->action->search->objectTypeList['execution'] = 'Execution';
|
||||
$lang->action->search->objectTypeList['bug'] = 'Bug';
|
||||
$lang->action->search->objectTypeList['case'] = 'Tình huống';
|
||||
$lang->action->search->objectTypeList['case'] = 'Tình huống';
|
||||
$lang->action->search->objectTypeList['caseresult'] = 'Kết quả tình huống';
|
||||
$lang->action->search->objectTypeList['stepresult'] = 'Các bước tình huống';
|
||||
$lang->action->search->objectTypeList['story'] = 'UR/SR';
|
||||
$lang->action->search->objectTypeList['task'] = 'Nhiệm vụ';
|
||||
$lang->action->search->objectTypeList['testtask'] = 'Yêu cầu';
|
||||
$lang->action->search->objectTypeList['user'] = 'Người dùng';
|
||||
$lang->action->search->objectTypeList['story'] = "$lang->SRCommon/$lang->URCommon";
|
||||
$lang->action->search->objectTypeList['task'] = 'Nhiệm vụ';
|
||||
$lang->action->search->objectTypeList['testtask'] = 'Yêu cầu';
|
||||
$lang->action->search->objectTypeList['user'] = 'Người dùng';
|
||||
$lang->action->search->objectTypeList['doc'] = 'Tài liệu';
|
||||
$lang->action->search->objectTypeList['doclib'] = 'Doc Lib';
|
||||
$lang->action->search->objectTypeList['todo'] = 'Việc làm';
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
* @version $Id: zh-cn.php 4955 2013-07-02 01:47:21Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
global $config;
|
||||
|
||||
$lang->action->common = '系统日志';
|
||||
$lang->action->product = $lang->productCommon;
|
||||
$lang->action->project = '项目';
|
||||
@@ -30,6 +32,9 @@ $lang->action->editComment = '修改备注';
|
||||
$lang->action->create = '添加备注';
|
||||
$lang->action->comment = '备注';
|
||||
|
||||
$lang->action->undeleteAction = '还原数据';
|
||||
$lang->action->hideOneAction = '隐藏数据';
|
||||
|
||||
$lang->action->trashTips = '提示:为了保证系统的完整性,禅道系统的删除都是标记删除。';
|
||||
$lang->action->textDiff = '文本格式';
|
||||
$lang->action->original = '原始格式';
|
||||
@@ -73,7 +78,7 @@ $lang->action->objectTypes['productplan'] = '计划';
|
||||
$lang->action->objectTypes['release'] = '发布';
|
||||
$lang->action->objectTypes['program'] = '项目集';
|
||||
$lang->action->objectTypes['project'] = '项目';
|
||||
$lang->action->objectTypes['execution'] = $lang->executionCommon;
|
||||
$lang->action->objectTypes['execution'] = $config->systemMode == 'new' ? '执行' : $lang->executionCommon;
|
||||
$lang->action->objectTypes['task'] = '任务';
|
||||
$lang->action->objectTypes['build'] = '版本';
|
||||
$lang->action->objectTypes['job'] = '构建';
|
||||
@@ -96,54 +101,58 @@ $lang->action->objectTypes['stakeholder'] = '干系人';
|
||||
$lang->action->objectTypes['budget'] = '费用估算';
|
||||
$lang->action->objectTypes['entry'] = '应用';
|
||||
$lang->action->objectTypes['webhook'] = 'Webhook';
|
||||
$lang->action->objectTypes['job'] = '构建';
|
||||
$lang->action->objectTypes['team'] = '团队';
|
||||
$lang->action->objectTypes['whitelist'] = '白名单';
|
||||
|
||||
/* 用来描述操作历史记录。*/
|
||||
$lang->action->desc = new stdclass();
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
|
||||
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, 由系统创建。' . "\n";
|
||||
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
|
||||
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
|
||||
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 变更。' . "\n";
|
||||
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 编辑。' . "\n";
|
||||
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派给 <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 关闭。' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, 由系统关闭。' . "\n";
|
||||
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 删除了附件:<strong><i>$extra</i></strong>。' . "\n";
|
||||
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 编辑了附件:<strong><i>$extra</i></strong>。' . "\n";
|
||||
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 还原。' . "\n";
|
||||
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隐藏。' . "\n";
|
||||
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加备注。' . "\n";
|
||||
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
|
||||
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
|
||||
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移动,之前为 "$extra"。' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 确认' . $lang->SRCommon . '变动,最新版本为<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 确认用例变动,最新版本为<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 确认Bug。' . "\n";
|
||||
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug转化而来,Bug编号为 <strong>$extra</strong>。';
|
||||
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 启动。' . "\n";
|
||||
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 继续。' . "\n";
|
||||
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
|
||||
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 挂起。' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 记录工时,消耗 <strong>$extra</strong> 小时。';
|
||||
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 编辑工时。';
|
||||
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 删除工时。';
|
||||
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
|
||||
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暂停。' . "\n";
|
||||
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 验收。' . "\n";
|
||||
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,旧值为 "%s",新值为 "%s"。<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,区别为:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
|
||||
$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n";
|
||||
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 关联到版本 <strong>$extra</strong>';
|
||||
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解决。' . "\n";
|
||||
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 维护。' . "\n";
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
|
||||
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, 由系统创建。' . "\n";
|
||||
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 创建。' . "\n";
|
||||
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
|
||||
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 变更。' . "\n";
|
||||
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 编辑。' . "\n";
|
||||
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派给 <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 关闭。' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, 由系统关闭。' . "\n";
|
||||
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 删除了附件:<strong><i>$extra</i></strong>。' . "\n";
|
||||
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 编辑了附件:<strong><i>$extra</i></strong>。' . "\n";
|
||||
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 删除。' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 还原。' . "\n";
|
||||
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隐藏。' . "\n";
|
||||
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加备注。' . "\n";
|
||||
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
|
||||
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
|
||||
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移动,之前为 "$extra"。' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 确认' . $lang->SRCommon . '变动,最新版本为<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 确认用例变动,最新版本为<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 确认Bug。' . "\n";
|
||||
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug转化而来,Bug编号为 <strong>$extra</strong>。';
|
||||
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 启动。' . "\n";
|
||||
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 继续。' . "\n";
|
||||
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
|
||||
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 挂起。' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 记录工时,消耗 <strong>$extra</strong> 小时。';
|
||||
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 编辑工时。';
|
||||
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 删除工时。';
|
||||
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代码,版本为<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
|
||||
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暂停。' . "\n";
|
||||
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 验收。' . "\n";
|
||||
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,旧值为 "%s",新值为 "%s"。<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,区别为:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
|
||||
$lang->action->desc->diff3 = '将文件名 %s 改为 %s 。' . "\n";
|
||||
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 关联到版本 <strong>$extra</strong>';
|
||||
$lang->action->desc->linked2testtask = '$date 由 <strong>$actor</strong> 关联到测试单 <strong>$extra</strong>';
|
||||
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解决。' . "\n";
|
||||
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 维护。' . "\n";
|
||||
$lang->action->desc->estimated = '$date, 由 <strong>$actor</strong> 估算。' . "\n";
|
||||
$lang->action->desc->run = '$date, 由 <strong>$actor</strong> 执行。' . "\n";
|
||||
|
||||
/* 用来描述和父子任务相关的操作历史记录。*/
|
||||
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 创建子任务 <strong>$extra</strong>。' . "\n";
|
||||
@@ -231,6 +240,8 @@ $lang->action->label->logout = "退出登录";
|
||||
$lang->action->label->deleteestimate = "删除了工时";
|
||||
$lang->action->label->linked2build = "关联了";
|
||||
$lang->action->label->linked2bug = "关联了";
|
||||
$lang->action->label->linked2testtask = "关联了";
|
||||
$lang->action->label->unlinkedfromtesttask = "移除了";
|
||||
$lang->action->label->linkchildtask = "关联子任务";
|
||||
$lang->action->label->unlinkchildrentask = "取消关联子任务";
|
||||
$lang->action->label->linkparenttask = "关联到父任务";
|
||||
@@ -238,6 +249,8 @@ $lang->action->label->unlinkparenttask = "从父任务取消关联";
|
||||
$lang->action->label->batchcreate = "批量创建任务";
|
||||
$lang->action->label->createchildren = "创建子任务";
|
||||
$lang->action->label->managed = "维护";
|
||||
$lang->action->label->managedteam = "维护了";
|
||||
$lang->action->label->managedwhitelist = "维护了";
|
||||
$lang->action->label->deletechildrentask = "删除子任务";
|
||||
$lang->action->label->createchildrenstory = "创建子需求";
|
||||
$lang->action->label->linkchildstory = "关联子需求";
|
||||
@@ -247,6 +260,13 @@ $lang->action->label->unlinkparentstory = "从父需求取消关联";
|
||||
$lang->action->label->deletechildrenstory = "删除子需求";
|
||||
$lang->action->label->tracked = '跟踪了';
|
||||
$lang->action->label->hangup = '挂起了';
|
||||
$lang->action->label->run = '执行了';
|
||||
$lang->action->label->estimated = '估算了';
|
||||
$lang->action->label->reviewclosed = '评审失败';
|
||||
$lang->action->label->passreviewed = '确认通过';
|
||||
$lang->action->label->clarifyreviewed = '有待明确';
|
||||
$lang->action->label->commitsummary = '提交培训总结';
|
||||
$lang->action->label->updatetrainee = '更新培训人员';
|
||||
|
||||
/* 动态信息按照对象分组 */
|
||||
$lang->action->dynamicAction = new stdclass();
|
||||
@@ -289,22 +309,25 @@ $lang->action->dynamicAction->release['changestatus'] = '修改发布状态';
|
||||
$lang->action->dynamicAction->release['undeleted'] = '还原发布';
|
||||
$lang->action->dynamicAction->release['hidden'] = '隐藏发布';
|
||||
|
||||
$lang->action->dynamicAction->story['opened'] = "创建{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['edited'] = "编辑{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['activated'] = "激活{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['reviewed'] = "评审{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['closed'] = "关闭{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['assigned'] = "指派{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['changed'] = "变更{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2plan'] = "{$lang->SRCommon}关联计划";
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = "计划移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2release'] = "{$lang->SRCommon}关联发布";
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = "发布移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2build'] = "{$lang->SRCommon}关联版本";
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = "版本移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = '移除项目';
|
||||
$lang->action->dynamicAction->story['undeleted'] = "还原{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['hidden'] = "隐藏{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['opened'] = "创建{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['edited'] = "编辑{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['activated'] = "激活{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['reviewed'] = "评审{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['closed'] = "关闭{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['assigned'] = "指派{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['changed'] = "变更{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2plan'] = "{$lang->SRCommon}关联计划";
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = "计划移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2release'] = "{$lang->SRCommon}关联发布";
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = "发布移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2build'] = "{$lang->SRCommon}关联版本";
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = "版本移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = '移除项目';
|
||||
$lang->action->dynamicAction->story['undeleted'] = "还原{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['hidden'] = "隐藏{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2execution'] = "关联$lang->SRCommon";
|
||||
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "移除$lang->SRCommon";
|
||||
$lang->action->dynamicAction->story['estimated'] = "估算$lang->SRCommon";
|
||||
|
||||
$lang->action->dynamicAction->execution['opened'] = '创建' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['edited'] = '编辑' . $lang->executionCommon;
|
||||
@@ -319,6 +342,8 @@ $lang->action->dynamicAction->execution['undeleted'] = '还原' . $lang->executi
|
||||
$lang->action->dynamicAction->execution['hidden'] = '隐藏' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['moved'] = '导入任务';
|
||||
|
||||
$lang->action->dynamicAction->team['managedTeam'] = '维护团队';
|
||||
|
||||
$lang->action->dynamicAction->task['opened'] = '创建任务';
|
||||
$lang->action->dynamicAction->task['edited'] = '编辑任务';
|
||||
$lang->action->dynamicAction->task['commented'] = '备注任务';
|
||||
@@ -348,8 +373,9 @@ $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->build['opened'] = '创建版本';
|
||||
$lang->action->dynamicAction->build['edited'] = '编辑版本';
|
||||
$lang->action->dynamicAction->build['deleted'] = '删除版本';
|
||||
|
||||
$lang->action->dynamicAction->bug['opened'] = '创建Bug';
|
||||
$lang->action->dynamicAction->bug['edited'] = '编辑Bug';
|
||||
@@ -407,6 +433,7 @@ $lang->action->dynamicAction->caselib['hidden'] = '隐藏用例库';
|
||||
|
||||
$lang->action->dynamicAction->doclib['created'] = '创建文档库';
|
||||
$lang->action->dynamicAction->doclib['edited'] = '编辑文档库';
|
||||
$lang->action->dynamicAction->doclib['deleted'] = '删除文档库';
|
||||
|
||||
$lang->action->dynamicAction->doc['created'] = '创建文档';
|
||||
$lang->action->dynamicAction->doc['edited'] = '编辑文档';
|
||||
@@ -427,12 +454,11 @@ $lang->action->dynamicAction->entry['created'] = '添加应用';
|
||||
$lang->action->dynamicAction->entry['edited'] = '编辑应用';
|
||||
|
||||
/* 用来生成相应对象的链接。*/
|
||||
global $config;
|
||||
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
|
||||
$lang->action->label->productplan = "计划|productplan|view|productID=%s";
|
||||
$lang->action->label->release = '发布|release|view|productID=%s';
|
||||
$lang->action->label->story = "{$lang->SRCommon}|story|view|storyID=%s";
|
||||
$lang->action->label->program = "项目集|program|pgmproduct|programID=%s";
|
||||
$lang->action->label->program = "项目集|program|product|programID=%s";
|
||||
$lang->action->label->project = "项目|project|index|projectID=%s";
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
@@ -450,7 +476,7 @@ $lang->action->label->testtask = '测试单|testtask|view|caseID=%s';
|
||||
$lang->action->label->testsuite = '测试套件|testsuite|view|suiteID=%s';
|
||||
$lang->action->label->caselib = '用例库|caselib|view|libID=%s';
|
||||
$lang->action->label->todo = '待办|todo|view|todoID=%s';
|
||||
$lang->action->label->doclib = '文档库|doc|browse|libID=%s';
|
||||
$lang->action->label->doclib = '文档库|doc|objectLibs|type=&objectID=&libID=%s';
|
||||
$lang->action->label->doc = '文档|doc|view|docID=%s';
|
||||
$lang->action->label->user = '用户|user|view|account=%s';
|
||||
$lang->action->label->testreport = '报告|testreport|view|report=%s';
|
||||
@@ -468,12 +494,12 @@ $lang->action->search->objectTypeList[''] = '';
|
||||
$lang->action->search->objectTypeList['product'] = $lang->productCommon;
|
||||
$lang->action->search->objectTypeList['program'] = '项目集';
|
||||
$lang->action->search->objectTypeList['project'] = '项目';
|
||||
$lang->action->search->objectTypeList['execution'] = $lang->sprintCommon;
|
||||
$lang->action->search->objectTypeList['execution'] = '执行';
|
||||
$lang->action->search->objectTypeList['bug'] = 'Bug';
|
||||
$lang->action->search->objectTypeList['case'] = '用例';
|
||||
$lang->action->search->objectTypeList['caseresult'] = '用例结果';
|
||||
$lang->action->search->objectTypeList['stepresult'] = '用例步骤';
|
||||
$lang->action->search->objectTypeList['story'] = '用需/软需';
|
||||
$lang->action->search->objectTypeList['story'] = "$lang->SRCommon/$lang->URCommon";
|
||||
$lang->action->search->objectTypeList['task'] = '任务';
|
||||
$lang->action->search->objectTypeList['testtask'] = '测试单';
|
||||
$lang->action->search->objectTypeList['user'] = '用户';
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
* @version $Id: zh-tw.php 4955 2013-07-02 01:47:21Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
global $config;
|
||||
|
||||
$lang->action->common = '系統日誌';
|
||||
$lang->action->product = $lang->productCommon;
|
||||
$lang->action->project = '項目';
|
||||
@@ -30,6 +32,9 @@ $lang->action->editComment = '修改備註';
|
||||
$lang->action->create = '添加備註';
|
||||
$lang->action->comment = '備註';
|
||||
|
||||
$lang->action->undeleteAction = '還原數據';
|
||||
$lang->action->hideOneAction = '隱藏數據';
|
||||
|
||||
$lang->action->trashTips = '提示:為了保證系統的完整性,禪道系統的刪除都是標記刪除。';
|
||||
$lang->action->textDiff = '文本格式';
|
||||
$lang->action->original = '原始格式';
|
||||
@@ -73,7 +78,7 @@ $lang->action->objectTypes['productplan'] = '計劃';
|
||||
$lang->action->objectTypes['release'] = '發佈';
|
||||
$lang->action->objectTypes['program'] = '項目集';
|
||||
$lang->action->objectTypes['project'] = '項目';
|
||||
$lang->action->objectTypes['execution'] = $lang->executionCommon;
|
||||
$lang->action->objectTypes['execution'] = $config->systemMode == 'new' ? '執行' : $lang->executionCommon;
|
||||
$lang->action->objectTypes['task'] = '任務';
|
||||
$lang->action->objectTypes['build'] = '版本';
|
||||
$lang->action->objectTypes['job'] = '構建';
|
||||
@@ -96,54 +101,58 @@ $lang->action->objectTypes['stakeholder'] = '干係人';
|
||||
$lang->action->objectTypes['budget'] = '費用估算';
|
||||
$lang->action->objectTypes['entry'] = '應用';
|
||||
$lang->action->objectTypes['webhook'] = 'Webhook';
|
||||
$lang->action->objectTypes['job'] = '構建';
|
||||
$lang->action->objectTypes['team'] = '團隊';
|
||||
$lang->action->objectTypes['whitelist'] = '白名單';
|
||||
|
||||
/* 用來描述操作歷史記錄。*/
|
||||
$lang->action->desc = new stdclass();
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
|
||||
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, 由系統創建。' . "\n";
|
||||
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
|
||||
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
|
||||
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 變更。' . "\n";
|
||||
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 編輯。' . "\n";
|
||||
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派給 <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 關閉。' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, 由系統關閉。' . "\n";
|
||||
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 刪除了附件:<strong><i>$extra</i></strong>。' . "\n";
|
||||
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 編輯了附件:<strong><i>$extra</i></strong>。' . "\n";
|
||||
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 還原。' . "\n";
|
||||
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隱藏。' . "\n";
|
||||
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加備註。' . "\n";
|
||||
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
|
||||
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
|
||||
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移動,之前為 "$extra"。' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 確認' . $lang->SRCommon . '變動,最新版本為<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 確認用例變動,最新版本為<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 確認Bug。' . "\n";
|
||||
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug轉化而來,Bug編號為 <strong>$extra</strong>。';
|
||||
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 啟動。' . "\n";
|
||||
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 繼續。' . "\n";
|
||||
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
|
||||
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 掛起。' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 記錄工時,消耗 <strong>$extra</strong> 小時。';
|
||||
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 編輯工時。';
|
||||
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 刪除工時。';
|
||||
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
|
||||
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暫停。' . "\n";
|
||||
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 驗收。' . "\n";
|
||||
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,舊值為 "%s",新值為 "%s"。<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,區別為:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
|
||||
$lang->action->desc->diff3 = '將檔案名 %s 改為 %s 。' . "\n";
|
||||
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 關聯到版本 <strong>$extra</strong>';
|
||||
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解決。' . "\n";
|
||||
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 維護。' . "\n";
|
||||
$lang->action->desc->common = '$date, <strong>$action</strong> by <strong>$actor</strong>。' . "\n";
|
||||
$lang->action->desc->extra = '$date, <strong>$action</strong> as <strong>$extra</strong> by <strong>$actor</strong>。' . "\n";
|
||||
$lang->action->desc->opened = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
|
||||
$lang->action->desc->openedbysystem = '$date, 由系統創建。' . "\n";
|
||||
$lang->action->desc->created = '$date, 由 <strong>$actor</strong> 創建。' . "\n";
|
||||
$lang->action->desc->added = '$date, 由 <strong>$actor</strong> 添加。' . "\n";
|
||||
$lang->action->desc->changed = '$date, 由 <strong>$actor</strong> 變更。' . "\n";
|
||||
$lang->action->desc->edited = '$date, 由 <strong>$actor</strong> 編輯。' . "\n";
|
||||
$lang->action->desc->assigned = '$date, 由 <strong>$actor</strong> 指派給 <strong>$extra</strong>。' . "\n";
|
||||
$lang->action->desc->closed = '$date, 由 <strong>$actor</strong> 關閉。' . "\n";
|
||||
$lang->action->desc->closedbysystem = '$date, 由系統關閉。' . "\n";
|
||||
$lang->action->desc->deleted = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
|
||||
$lang->action->desc->deletedfile = '$date, 由 <strong>$actor</strong> 刪除了附件:<strong><i>$extra</i></strong>。' . "\n";
|
||||
$lang->action->desc->editfile = '$date, 由 <strong>$actor</strong> 編輯了附件:<strong><i>$extra</i></strong>。' . "\n";
|
||||
$lang->action->desc->erased = '$date, 由 <strong>$actor</strong> 刪除。' . "\n";
|
||||
$lang->action->desc->undeleted = '$date, 由 <strong>$actor</strong> 還原。' . "\n";
|
||||
$lang->action->desc->hidden = '$date, 由 <strong>$actor</strong> 隱藏。' . "\n";
|
||||
$lang->action->desc->commented = '$date, 由 <strong>$actor</strong> 添加備註。' . "\n";
|
||||
$lang->action->desc->activated = '$date, 由 <strong>$actor</strong> 激活。' . "\n";
|
||||
$lang->action->desc->blocked = '$date, 由 <strong>$actor</strong> 阻塞。' . "\n";
|
||||
$lang->action->desc->moved = '$date, 由 <strong>$actor</strong> 移動,之前為 "$extra"。' . "\n";
|
||||
$lang->action->desc->confirmed = '$date, 由 <strong>$actor</strong> 確認' . $lang->SRCommon . '變動,最新版本為<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->caseconfirmed = '$date, 由 <strong>$actor</strong> 確認用例變動,最新版本為<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->bugconfirmed = '$date, 由 <strong>$actor</strong> 確認Bug。' . "\n";
|
||||
$lang->action->desc->frombug = '$date, 由 <strong>$actor</strong> Bug轉化而來,Bug編號為 <strong>$extra</strong>。';
|
||||
$lang->action->desc->started = '$date, 由 <strong>$actor</strong> 啟動。' . "\n";
|
||||
$lang->action->desc->restarted = '$date, 由 <strong>$actor</strong> 繼續。' . "\n";
|
||||
$lang->action->desc->delayed = '$date, 由 <strong>$actor</strong> 延期。' . "\n";
|
||||
$lang->action->desc->suspended = '$date, 由 <strong>$actor</strong> 掛起。' . "\n";
|
||||
$lang->action->desc->recordestimate = '$date, 由 <strong>$actor</strong> 記錄工時,消耗 <strong>$extra</strong> 小時。';
|
||||
$lang->action->desc->editestimate = '$date, 由 <strong>$actor</strong> 編輯工時。';
|
||||
$lang->action->desc->deleteestimate = '$date, 由 <strong>$actor</strong> 刪除工時。';
|
||||
$lang->action->desc->canceled = '$date, 由 <strong>$actor</strong> 取消。' . "\n";
|
||||
$lang->action->desc->svncommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->gitcommited = '$date, 由 <strong>$actor</strong> 提交代碼,版本為<strong>#$extra</strong>。' . "\n";
|
||||
$lang->action->desc->finished = '$date, 由 <strong>$actor</strong> 完成。' . "\n";
|
||||
$lang->action->desc->paused = '$date, 由 <strong>$actor</strong> 暫停。' . "\n";
|
||||
$lang->action->desc->verified = '$date, 由 <strong>$actor</strong> 驗收。' . "\n";
|
||||
$lang->action->desc->diff1 = '修改了 <strong><i>%s</i></strong>,舊值為 "%s",新值為 "%s"。<br />' . "\n";
|
||||
$lang->action->desc->diff2 = '修改了 <strong><i>%s</i></strong>,區別為:' . "\n" . "<blockquote class='textdiff'>%s</blockquote>" . "\n<blockquote class='original'>%s</blockquote>";
|
||||
$lang->action->desc->diff3 = '將檔案名 %s 改為 %s 。' . "\n";
|
||||
$lang->action->desc->linked2bug = '$date 由 <strong>$actor</strong> 關聯到版本 <strong>$extra</strong>';
|
||||
$lang->action->desc->linked2testtask = '$date 由 <strong>$actor</strong> 關聯到測試單 <strong>$extra</strong>';
|
||||
$lang->action->desc->resolved = '$date, 由 <strong>$actor</strong> 解決。' . "\n";
|
||||
$lang->action->desc->managed = '$date, 由 <strong>$actor</strong> 維護。' . "\n";
|
||||
$lang->action->desc->estimated = '$date, 由 <strong>$actor</strong> 估算。' . "\n";
|
||||
$lang->action->desc->run = '$date, 由 <strong>$actor</strong> 執行。' . "\n";
|
||||
|
||||
/* 用來描述和父子任務相關的操作歷史記錄。*/
|
||||
$lang->action->desc->createchildren = '$date, 由 <strong>$actor</strong> 創建子任務 <strong>$extra</strong>。' . "\n";
|
||||
@@ -231,6 +240,8 @@ $lang->action->label->logout = "退出登錄";
|
||||
$lang->action->label->deleteestimate = "刪除了工時";
|
||||
$lang->action->label->linked2build = "關聯了";
|
||||
$lang->action->label->linked2bug = "關聯了";
|
||||
$lang->action->label->linked2testtask = "關聯了";
|
||||
$lang->action->label->unlinkedfromtesttask = "移除了";
|
||||
$lang->action->label->linkchildtask = "關聯子任務";
|
||||
$lang->action->label->unlinkchildrentask = "取消關聯子任務";
|
||||
$lang->action->label->linkparenttask = "關聯到父任務";
|
||||
@@ -238,6 +249,8 @@ $lang->action->label->unlinkparenttask = "從父任務取消關聯";
|
||||
$lang->action->label->batchcreate = "批量創建任務";
|
||||
$lang->action->label->createchildren = "創建子任務";
|
||||
$lang->action->label->managed = "維護";
|
||||
$lang->action->label->managedteam = "維護了";
|
||||
$lang->action->label->managedwhitelist = "維護了";
|
||||
$lang->action->label->deletechildrentask = "刪除子任務";
|
||||
$lang->action->label->createchildrenstory = "創建子需求";
|
||||
$lang->action->label->linkchildstory = "關聯子需求";
|
||||
@@ -247,6 +260,8 @@ $lang->action->label->unlinkparentstory = "從父需求取消關聯";
|
||||
$lang->action->label->deletechildrenstory = "刪除子需求";
|
||||
$lang->action->label->tracked = '跟蹤了';
|
||||
$lang->action->label->hangup = '掛起了';
|
||||
$lang->action->label->run = '執行了';
|
||||
$lang->action->label->estimated = '估算了';
|
||||
|
||||
/* 動態信息按照對象分組 */
|
||||
$lang->action->dynamicAction = new stdclass();
|
||||
@@ -289,22 +304,25 @@ $lang->action->dynamicAction->release['changestatus'] = '修改發佈狀態';
|
||||
$lang->action->dynamicAction->release['undeleted'] = '還原發佈';
|
||||
$lang->action->dynamicAction->release['hidden'] = '隱藏發佈';
|
||||
|
||||
$lang->action->dynamicAction->story['opened'] = "創建{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['edited'] = "編輯{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['activated'] = "激活{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['reviewed'] = "評審{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['closed'] = "關閉{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['assigned'] = "指派{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['changed'] = "變更{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2plan'] = "{$lang->SRCommon}關聯計劃";
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = "計劃移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2release'] = "{$lang->SRCommon}關聯發佈";
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = "發佈移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2build'] = "{$lang->SRCommon}關聯版本";
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = "版本移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = '移除項目';
|
||||
$lang->action->dynamicAction->story['undeleted'] = "還原{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['hidden'] = "隱藏{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['opened'] = "創建{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['edited'] = "編輯{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['activated'] = "激活{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['reviewed'] = "評審{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['closed'] = "關閉{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['assigned'] = "指派{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['changed'] = "變更{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2plan'] = "{$lang->SRCommon}關聯計劃";
|
||||
$lang->action->dynamicAction->story['unlinkedfromplan'] = "計劃移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2release'] = "{$lang->SRCommon}關聯發佈";
|
||||
$lang->action->dynamicAction->story['unlinkedfromrelease'] = "發佈移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2build'] = "{$lang->SRCommon}關聯版本";
|
||||
$lang->action->dynamicAction->story['unlinkedfrombuild'] = "版本移除{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['unlinkedfromproject'] = '移除項目';
|
||||
$lang->action->dynamicAction->story['undeleted'] = "還原{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['hidden'] = "隱藏{$lang->SRCommon}";
|
||||
$lang->action->dynamicAction->story['linked2execution'] = "關聯$lang->SRCommon";
|
||||
$lang->action->dynamicAction->story['unlinkedfromexecution'] = "移除$lang->SRCommon";
|
||||
$lang->action->dynamicAction->story['estimated'] = "估算$lang->SRCommon";
|
||||
|
||||
$lang->action->dynamicAction->execution['opened'] = '創建' . $lang->executionCommon;
|
||||
$lang->action->dynamicAction->execution['edited'] = '編輯' . $lang->executionCommon;
|
||||
@@ -348,8 +366,9 @@ $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->build['opened'] = '創建版本';
|
||||
$lang->action->dynamicAction->build['edited'] = '編輯版本';
|
||||
$lang->action->dynamicAction->build['deleted'] = '刪除版本';
|
||||
|
||||
$lang->action->dynamicAction->bug['opened'] = '創建Bug';
|
||||
$lang->action->dynamicAction->bug['edited'] = '編輯Bug';
|
||||
@@ -407,6 +426,7 @@ $lang->action->dynamicAction->caselib['hidden'] = '隱藏用例庫';
|
||||
|
||||
$lang->action->dynamicAction->doclib['created'] = '創建文檔庫';
|
||||
$lang->action->dynamicAction->doclib['edited'] = '編輯文檔庫';
|
||||
$lang->action->dynamicAction->doclib['deleted'] = '刪除文檔庫';
|
||||
|
||||
$lang->action->dynamicAction->doc['created'] = '創建文檔';
|
||||
$lang->action->dynamicAction->doc['edited'] = '編輯文檔';
|
||||
@@ -427,12 +447,11 @@ $lang->action->dynamicAction->entry['created'] = '添加應用';
|
||||
$lang->action->dynamicAction->entry['edited'] = '編輯應用';
|
||||
|
||||
/* 用來生成相應對象的連結。*/
|
||||
global $config;
|
||||
$lang->action->label->product = $lang->productCommon . '|product|view|productID=%s';
|
||||
$lang->action->label->productplan = "計劃|productplan|view|productID=%s";
|
||||
$lang->action->label->release = '發佈|release|view|productID=%s';
|
||||
$lang->action->label->story = "{$lang->SRCommon}|story|view|storyID=%s";
|
||||
$lang->action->label->program = "項目集|program|pgmproduct|programID=%s";
|
||||
$lang->action->label->program = "項目集|program|product|programID=%s";
|
||||
$lang->action->label->project = "項目|project|index|projectID=%s";
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
@@ -450,7 +469,7 @@ $lang->action->label->testtask = '測試單|testtask|view|caseID=%s';
|
||||
$lang->action->label->testsuite = '測試套件|testsuite|view|suiteID=%s';
|
||||
$lang->action->label->caselib = '用例庫|caselib|view|libID=%s';
|
||||
$lang->action->label->todo = '待辦|todo|view|todoID=%s';
|
||||
$lang->action->label->doclib = '文檔庫|doc|browse|libID=%s';
|
||||
$lang->action->label->doclib = '文檔庫|doc|objectLibs|type=&objectID=&libID=%s';
|
||||
$lang->action->label->doc = '文檔|doc|view|docID=%s';
|
||||
$lang->action->label->user = '用戶|user|view|account=%s';
|
||||
$lang->action->label->testreport = '報告|testreport|view|report=%s';
|
||||
@@ -468,12 +487,12 @@ $lang->action->search->objectTypeList[''] = '';
|
||||
$lang->action->search->objectTypeList['product'] = $lang->productCommon;
|
||||
$lang->action->search->objectTypeList['program'] = '項目集';
|
||||
$lang->action->search->objectTypeList['project'] = '項目';
|
||||
$lang->action->search->objectTypeList['execution'] = $lang->sprintCommon;
|
||||
$lang->action->search->objectTypeList['execution'] = '執行';
|
||||
$lang->action->search->objectTypeList['bug'] = 'Bug';
|
||||
$lang->action->search->objectTypeList['case'] = '用例';
|
||||
$lang->action->search->objectTypeList['caseresult'] = '用例結果';
|
||||
$lang->action->search->objectTypeList['stepresult'] = '用例步驟';
|
||||
$lang->action->search->objectTypeList['story'] = '用需/軟需';
|
||||
$lang->action->search->objectTypeList['story'] = "$lang->SRCommon/$lang->URCommon";
|
||||
$lang->action->search->objectTypeList['task'] = '任務';
|
||||
$lang->action->search->objectTypeList['testtask'] = '測試單';
|
||||
$lang->action->search->objectTypeList['user'] = '用戶';
|
||||
|
||||
+179
-54
@@ -36,6 +36,7 @@ class actionModel extends model
|
||||
|
||||
$actor = $actor ? $actor : $this->app->user->account;
|
||||
$actionType = strtolower($actionType);
|
||||
$actor = $actionType == 'openedbysystem' ? '' : $actor;
|
||||
if($actor == 'guest' and $actionType == 'logout') return false;
|
||||
|
||||
$objectType = str_replace('`', '', $objectType);
|
||||
@@ -48,6 +49,9 @@ class actionModel extends model
|
||||
$action->date = helper::now();
|
||||
$action->extra = $extra;
|
||||
|
||||
if($objectType == 'story' and $actionType !== 'reviewed' and strpos('reviewclosed,passreviewed,clarifyreviewed', $actionType) !== false) $action->actor = 'System';
|
||||
|
||||
|
||||
/* Use purifier to process comment. Fix bug #2683. */
|
||||
$action->comment = fixer::stripDataTags($comment);
|
||||
|
||||
@@ -58,10 +62,12 @@ class actionModel extends model
|
||||
if($autoDelete) $this->file->autoDelete($this->post->uid);
|
||||
}
|
||||
|
||||
/* Get product and project for this object. */
|
||||
$productAndProject = $this->getProductAndProject($action->objectType, $objectID);
|
||||
$action->product = $productAndProject['product'];
|
||||
$action->execution = $actionType == 'unlinkedfromproject' ? (int)$extra : (int)$productAndProject['project'];
|
||||
/* Get product project and execution for this object. */
|
||||
$relation = $this->getRelatedFields($action->objectType, $objectID, $actionType, $extra);
|
||||
$action->product = (int)$relation['product'];
|
||||
$action->project = (int)$relation['project'];
|
||||
$action->execution = (int)$relation['execution'];
|
||||
|
||||
|
||||
$this->dao->insert(TABLE_ACTION)->data($action)->autoCheck()->exec();
|
||||
$actionID = $this->dbh->lastInsertID();
|
||||
@@ -136,43 +142,71 @@ class actionModel extends model
|
||||
}
|
||||
|
||||
/**
|
||||
* Get product and project of an object.
|
||||
* Get product, project, execution of the object.
|
||||
*
|
||||
* @param string $objectType
|
||||
* @param int $objectID
|
||||
* @param string $actionType
|
||||
* @param string $extra
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getProductAndProject($objectType, $objectID)
|
||||
public function getRelatedFields($objectType, $objectID, $actionType = '', $extra = '')
|
||||
{
|
||||
$emptyRecord = array('product' => ',0,', 'project' => 0);
|
||||
$emptyRecord = array('product' => ',0,', 'project' => 0, 'execution' => 0);
|
||||
|
||||
/* If objectType is product or project, return the objectID. */
|
||||
if($objectType == 'product') return array('product' => ",$objectID,", 'project' => 0);
|
||||
if($objectType == 'program') return array('product' => "", 'project' => $objectID);
|
||||
if($objectType == 'project')
|
||||
/* If objectType is program, return empty record. */
|
||||
if($objectType == 'program') return $emptyRecord;
|
||||
|
||||
/* If objectType is product or execution, return the objectID. */
|
||||
if($objectType == 'product') return array('product' => ",$objectID,", 'project' => 0, 'execution' => 0);
|
||||
|
||||
/* If objectType is project or execution, return objectID products and project. */
|
||||
if($objectType == 'project' or $objectType == 'execution')
|
||||
{
|
||||
$products = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($objectID)->fetchPairs('product');
|
||||
$productList = ',' . join(',', array_keys($products)) . ',';
|
||||
return array('project' => $objectID, 'product' => $productList);
|
||||
|
||||
$relation = array($objectType => $objectID, 'product' => $productList);
|
||||
|
||||
if($objectType == 'execution')
|
||||
{
|
||||
$project = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq($objectID)->fetch('project');
|
||||
$relation['project'] = $project;
|
||||
}
|
||||
else
|
||||
{
|
||||
$relation['execution'] = 0;
|
||||
}
|
||||
|
||||
return $relation;
|
||||
}
|
||||
|
||||
/* Only process these object types. */
|
||||
if(strpos(',story,productplan,release,task,build,bug,case,testtask,doc,', ",{$objectType},") !== false)
|
||||
if(strpos($this->config->action->needGetRelateField, ",{$objectType},") !== false)
|
||||
{
|
||||
if(!isset($this->config->objectTables[$objectType])) return $emptyRecord;
|
||||
|
||||
/* Set fields to fetch. */
|
||||
$fields = '*';
|
||||
if(strpos('story, productplan, case', $objectType) !== false) $fields = 'product';
|
||||
if(strpos('build, bug, testtask, doc', $objectType) !== false) $fields = 'product, project';
|
||||
if(strpos('build, bug, testtask, doc', $objectType) !== false) $fields = 'product, project, execution';
|
||||
if(strpos('case, repo', $objectType) !== false) $fields = 'execution';
|
||||
if($objectType == 'release') $fields = 'product, build';
|
||||
if($objectType == 'task') $fields = 'project, story';
|
||||
if($objectType == 'task') $fields = 'project, execution, story';
|
||||
|
||||
$record = $this->dao->select($fields)->from($this->config->objectTables[$objectType])->where('id')->eq($objectID)->fetch();
|
||||
if($objectType != 'team') $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)->orderBy('project_desc')->limit(1)->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 == 'team')
|
||||
{
|
||||
$team = $this->dao->select('type')->from(TABLE_PROJECT)->where('id')->eq($objectID)->fetch();
|
||||
$type = $team->type == 'project' ? 'project' : 'execution';
|
||||
$record = new stdclass();
|
||||
$record->$type = $objectID;
|
||||
}
|
||||
if($objectType == 'task')
|
||||
{
|
||||
if($record->story != 0)
|
||||
@@ -182,16 +216,43 @@ class actionModel extends model
|
||||
}
|
||||
else
|
||||
{
|
||||
$products = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($record->project)->fetchPairs('product');
|
||||
$products = $this->dao->select('product')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($record->execution)->fetchPairs('product');
|
||||
$record->product = join(',', array_keys($products));
|
||||
}
|
||||
}
|
||||
|
||||
if($objectType == 'story' and ($actionType == 'linked2build' or $actionType == 'unlinkedfrombuild'))
|
||||
{
|
||||
$build = $this->dao->select('project,execution')->from(TABLE_BUILD)->where('id')->eq((int)$extra)->fetch();
|
||||
$record->project = $build->project;
|
||||
$record->execution = $build->execution;
|
||||
}
|
||||
|
||||
if($objectType == 'story' and $actionType == 'estimated')
|
||||
{
|
||||
$record->project = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq((int)$extra)->fetch('project');
|
||||
$record->execution = (int)$extra;
|
||||
}
|
||||
|
||||
if($objectType == 'case' and (strpos(',linked2testtask,unlinkedfromtesttask,assigned,run,', ',' . $actionType . ',') !== false) and (int)$extra)
|
||||
{
|
||||
$testtask = $this->dao->select('project,execution')->from(TABLE_TESTTASK)->where('id')->eq((int)$extra)->fetch();
|
||||
$record->project = $testtask->project;
|
||||
$record->execution = $testtask->execution;
|
||||
}
|
||||
|
||||
if($objectType == 'whitelist' and $extra == 'product') $record->product = $objectID;
|
||||
if($objectType == 'whitelist' and $extra == 'project') $record->project = $objectID;
|
||||
if($objectType == 'whitelist' and ($extra == 'sprint' or $extra == 'stage')) $record->execution = $objectID;
|
||||
if($actionType == 'unlinkedfromproject' or $actionType == 'linked2project') $record->project = (int)$extra ;
|
||||
if($actionType == 'unlinkedfromexecution' or $actionType == 'linked2execution') $record->execution = (int)$extra;
|
||||
|
||||
if($record)
|
||||
{
|
||||
$record = (array)$record;
|
||||
$record['product'] = isset($record['product']) ? ',' . $record['product'] . ',' : ',0,';
|
||||
if(!isset($record['project'])) $record['project'] = 0;
|
||||
if(empty($record['project'])) $record['project'] = 0;
|
||||
if(empty($record['execution'])) $record['execution'] = 0;
|
||||
return $record;
|
||||
}
|
||||
|
||||
@@ -214,7 +275,7 @@ class actionModel extends model
|
||||
$actions = $this->dao->select('*')->from(TABLE_ACTION)
|
||||
->beginIF($objectType == 'project')
|
||||
->where("objectType IN('project', 'testtask', 'build')")
|
||||
->andWhere('execution')->eq((int)$objectID)
|
||||
->andWhere('project')->eq((int)$objectID)
|
||||
->fi()
|
||||
->beginIF($objectType != 'project')
|
||||
->where('objectType')->eq($objectType)
|
||||
@@ -247,13 +308,13 @@ class actionModel extends model
|
||||
elseif($actionName == 'linked2execution')
|
||||
{
|
||||
$name = $this->dao->select('name')->from(TABLE_PROJECT)->where('id')->eq($action->extra)->fetch('name');
|
||||
if($name) $action->extra = common::hasPriv('project', 'story') ? html::a(helper::createLink('project', 'story', "projectID=$action->extra"), $name) : $name;
|
||||
if($name) $action->extra = common::hasPriv('execution', 'view') ? html::a(helper::createLink('execution', 'view', "executionID=$action->execution"), $name) : $name;
|
||||
}
|
||||
elseif($actionName == 'linked2project')
|
||||
{
|
||||
$name = $this->dao->select('name')->from(TABLE_PROJECT)->where('id')->eq($action->extra)->fetch('name');
|
||||
$productID = trim($action->product, ',');
|
||||
if($name) $action->extra = common::hasPriv('projectstory', 'story') ? html::a(helper::createLink('projectstory', 'story', "productID=$productID"), $name) : $name;
|
||||
if($name) $action->extra = common::hasPriv('project', 'view') ? html::a(helper::createLink('project', 'view', "projectID=$action->project"), $name) : $name;
|
||||
}
|
||||
elseif($actionName == 'linked2plan')
|
||||
{
|
||||
@@ -293,7 +354,7 @@ class actionModel extends model
|
||||
{
|
||||
$name = $this->dao->select('name')->from(TABLE_PROJECT)->where('id')->eq($action->extra)->fetch('name');
|
||||
$productID = trim($action->product, ',');
|
||||
if($name) $action->extra = common::hasPriv('projectstory', 'story') ? html::a(helper::createLink('projectstory', 'story', "productID=$productID"), "#$action->extra " . $name) : "#$action->extra " . $name;
|
||||
if($name) $action->extra = common::hasPriv('projectstory', 'story') ? html::a(helper::createLink('projectstory', 'story', "projectID=$action->execution&productID=$productID"), "#$action->extra " . $name) : "#$action->extra " . $name;
|
||||
}
|
||||
elseif($actionName == 'unlinkedfrombuild')
|
||||
{
|
||||
@@ -396,7 +457,7 @@ class actionModel extends model
|
||||
}
|
||||
elseif(($actionName == 'opened' or $actionName == 'managed' or $actionName == 'edited') and ($objectType == 'execution' || $objectType == 'project'))
|
||||
{
|
||||
$this->app->loadLang('executon');
|
||||
$this->app->loadLang('execution');
|
||||
$linkedProducts = $this->dao->select('id,name')->from(TABLE_PRODUCT)->where('id')->in($action->extra)->fetchPairs('id', 'name');
|
||||
$action->extra = '';
|
||||
if($linkedProducts)
|
||||
@@ -501,7 +562,7 @@ class actionModel extends model
|
||||
|
||||
foreach($typeTrashes as $objectType => $objectIds)
|
||||
{
|
||||
if(!isset($this->config->objectTables[$objectType]))continue;
|
||||
if(!isset($this->config->objectTables[$objectType])) continue;
|
||||
|
||||
$objectIds = array_unique($objectIds);
|
||||
$table = $this->config->objectTables[$objectType];
|
||||
@@ -576,7 +637,11 @@ class actionModel extends model
|
||||
*/
|
||||
if(empty($desc))
|
||||
{
|
||||
if(isset($this->lang->$objectType) && isset($this->lang->$objectType->action->$actionType))
|
||||
if($action->objectType == 'story' and $action->action == 'reviewed' and strpos($action->extra, ',') !== false)
|
||||
{
|
||||
$desc = $this->lang->$objectType->action->rejectreviewed;
|
||||
}
|
||||
elseif(isset($this->lang->$objectType) && isset($this->lang->$objectType->action->$actionType))
|
||||
{
|
||||
$desc = $this->lang->$objectType->action->$actionType;
|
||||
}
|
||||
@@ -617,14 +682,23 @@ class actionModel extends model
|
||||
/* Fix bug #741. */
|
||||
if(isset($desc['extra'])) $desc['extra'] = $this->lang->$objectType->{$desc['extra']};
|
||||
|
||||
$actionDesc = '';
|
||||
if(isset($desc['extra'][$extra]))
|
||||
{
|
||||
echo str_replace('$extra', $desc['extra'][$extra], $desc['main']);
|
||||
$actionDesc = str_replace('$extra', $desc['extra'][$extra], $desc['main']);
|
||||
}
|
||||
else
|
||||
{
|
||||
echo str_replace('$extra', $action->extra, $desc['main']);
|
||||
$actionDesc = str_replace('$extra', $action->extra, $desc['main']);
|
||||
}
|
||||
|
||||
if($action->objectType == 'story' and $action->action = 'reviewed' and strpos($action->extra, ',') !== false)
|
||||
{
|
||||
list($extra, $reason) = explode(',', $extra);
|
||||
$desc['reason'] = $this->lang->$objectType->{$desc['reason']};
|
||||
$actionDesc = str_replace(array('$extra', '$reason'), array($desc['extra'][$extra], $desc['reason'][$reason]), $desc['main']);
|
||||
}
|
||||
echo $actionDesc;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -640,13 +714,14 @@ class actionModel extends model
|
||||
* @param string $orderBy
|
||||
* @param object $pager
|
||||
* @param string|int $productID all|int(like 123)|notzero all => include zero, notzero, greater than 0
|
||||
* @param string|int $projectID same as productID
|
||||
* @param string|int $projectID same as productID
|
||||
* @param string|int $executionID same as productID
|
||||
* @param string $date
|
||||
* @param string $direction
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getDynamic($account = 'all', $period = 'all', $orderBy = 'date_desc', $pager = null, $productID = 'all', $projectID = 'all', $date = '', $direction = 'next')
|
||||
public function getDynamic($account = 'all', $period = 'all', $orderBy = 'date_desc', $pager = null, $productID = 'all', $projectID = 'all', $executionID = 'all', $date = '', $direction = 'next')
|
||||
{
|
||||
/* Computer the begin and end date of a period. */
|
||||
$beginAndEnd = $this->computeBeginAndEnd($period);
|
||||
@@ -654,32 +729,32 @@ class actionModel extends model
|
||||
|
||||
/* Build has priv condition. */
|
||||
$condition = 1;
|
||||
if($productID == 'all') $products = $this->app->user->view->products;
|
||||
if($projectID == 'all') $projects = $this->app->user->view->projects;
|
||||
if($productID == 'all') $products = $this->app->user->view->products;
|
||||
if($projectID == 'all') $projects = $this->app->user->view->projects;
|
||||
if($executionID == 'all') $executions = $this->app->user->view->sprints;
|
||||
|
||||
if($productID == 'all' or $projectID == 'all')
|
||||
{
|
||||
$projectCondition = $projectID == 'all' ? "execution " . helper::dbIN($projects) : '';
|
||||
$productCondition = $productID == 'all' ? "INSTR('," . $products . ",', product) > 0" : '';
|
||||
if(is_numeric($productID)) $productCondition = "product like'%,$productID,%' or product='$productID'";
|
||||
if(is_numeric($projectID)) $projectCondition = "execution='$projectID'";
|
||||
$productCondition = $productID == 'all' ? "INSTR('," . $products . ",', product) > 0" : '';
|
||||
$projectCondition = $projectID == 'all' ? "project " . helper::dbIN($projects) : '';
|
||||
$executionCondition = $executionID == 'all' ? "execution " . helper::dbIN($executions) : '';
|
||||
if(is_numeric($productID)) $productCondition = "product like '%,$productID,%' or product = '$productID'";
|
||||
if(is_numeric($projectID)) $projectCondition = "project = '$projectID'";
|
||||
if(is_numeric($executionID)) $executionCondition = "execution = '$executionID'";
|
||||
|
||||
$condition = "(product =',0,' AND execution = '0')";
|
||||
if($projectCondition) $condition .= ' OR ' . $projectCondition;
|
||||
if($productCondition) $condition .= ' OR ' . $productCondition;
|
||||
$condition = "(product =',0,' AND project = '0' AND execution = 0)";
|
||||
if($productCondition) $condition .= ' OR ' . $productCondition;
|
||||
if($projectCondition) $condition .= ' OR ' . $projectCondition;
|
||||
if($executionCondition) $condition .= ' OR ' . $executionCondition;
|
||||
if($this->app->user->admin) $condition = 1;
|
||||
}
|
||||
|
||||
/* If is project, select its related. */
|
||||
$executions = array();
|
||||
if(is_numeric($projectID))
|
||||
{
|
||||
$project = $this->loadModel('project')->getByID($projectID);
|
||||
if(isset($project->type) and $project->type == 'project') $executions = $this->loadModel('execution')->getPairs($projectID);
|
||||
}
|
||||
if(is_numeric($projectID)) $executions = $this->loadModel('execution')->getPairs($projectID);
|
||||
|
||||
$this->loadModel('doc');
|
||||
$libs = $this->doc->getLibs('all');
|
||||
$libs = $this->doc->getLibs('includeDeleted');
|
||||
$docs = $this->doc->getPrivDocs(array_keys($libs), 0, 'all');
|
||||
|
||||
$actionCondition = $this->getActionCondition();
|
||||
@@ -695,12 +770,14 @@ class actionModel extends model
|
||||
->andWhere()
|
||||
->markLeft(1)
|
||||
->where(1)
|
||||
->beginIF(is_numeric($projectID))->orWhere('execution')->eq($projectID)->fi()
|
||||
->beginIF(is_numeric($projectID))->andWhere('project')->eq($projectID)->fi()
|
||||
->beginIF(!empty($executions))->orWhere('execution')->in(array_keys($executions))->fi()
|
||||
->beginIF(is_numeric($executionID))->andWhere('execution')->eq($executionID)->fi()
|
||||
->markRight(1)
|
||||
->beginIF($productID == 'notzero')->andWhere('product')->gt(0)->andWhere('product')->notlike('%,0,%')->fi()
|
||||
->beginIF($projectID == 'notzero')->andWhere('execution')->gt(0)->fi()
|
||||
->beginIF($projectID == 'all' or $productID == 'all')->andWhere("IF((objectType!= 'doc' && objectType!= 'doclib'), ($condition), '1=1')")->fi()
|
||||
->beginIF($projectID == 'notzero')->andWhere('project')->gt(0)->fi()
|
||||
->beginIF($executionID == 'notzero')->andWhere('execution')->gt(0)->fi()
|
||||
->beginIF($productID == 'all' or $projectID == 'all' or $executionID == 'all')->andWhere("IF((objectType!= 'doc' && objectType!= 'doclib'), ($condition), '1=1')")->fi()
|
||||
->beginIF($docs and !$this->app->user->admin)->andWhere("IF(objectType != 'doc', '1=1', objectID " . helper::dbIN($docs) . ")")->fi()
|
||||
->beginIF($libs and !$this->app->user->admin)->andWhere("IF(objectType != 'doclib', '1=1', objectID " . helper::dbIN(array_keys($libs)) . ') ')->fi()
|
||||
->beginIF($actionCondition)->andWhere("($actionCondition)")->fi()
|
||||
@@ -740,6 +817,7 @@ class actionModel extends model
|
||||
* Get dynamic by search.
|
||||
*
|
||||
* @param array $products
|
||||
* @param array $projects
|
||||
* @param array $executions
|
||||
* @param int $queryID
|
||||
* @param string $orderBy
|
||||
@@ -749,7 +827,7 @@ class actionModel extends model
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getDynamicBySearch($products, $executions, $queryID, $orderBy = 'date_desc', $pager = null, $date = '', $direction = 'next')
|
||||
public function getDynamicBySearch($products, $projects, $executions, $queryID, $orderBy = 'date_desc', $pager = null, $date = '', $direction = 'next')
|
||||
{
|
||||
$query = $queryID ? $this->loadModel('search')->getQuery($queryID) : '';
|
||||
|
||||
@@ -761,7 +839,8 @@ class actionModel extends model
|
||||
}
|
||||
if($this->session->actionQuery == false) $this->session->set('actionQuery', ' 1 = 1');
|
||||
|
||||
$allProduct = "`product` = 'all'";
|
||||
$allProducts = "`product` = 'all'";
|
||||
$allProjects = "`project` = 'all'";
|
||||
$allExecutions = "`execution` = 'all'";
|
||||
$actionQuery = $this->session->actionQuery;
|
||||
|
||||
@@ -770,14 +849,25 @@ class actionModel extends model
|
||||
{
|
||||
$productID = $out[1];
|
||||
}
|
||||
|
||||
/* If the sql not include 'product', add check purview for product. */
|
||||
if(strpos($actionQuery, $allProduct) === false)
|
||||
if(strpos($actionQuery, $allProducts) === false)
|
||||
{
|
||||
if(!in_array($productID, array_keys($products))) return array();
|
||||
}
|
||||
else
|
||||
{
|
||||
$actionQuery = str_replace($allProduct, '1', $actionQuery);
|
||||
$actionQuery = str_replace($allProducts, '1', $actionQuery);
|
||||
}
|
||||
|
||||
/* If the sql not include 'project', add check purview for project. */
|
||||
if(strpos($actionQuery, $allProjects) === false)
|
||||
{
|
||||
$actionQuery = $actionQuery . ' AND `project`' . helper::dbIN(array_keys($projects));
|
||||
}
|
||||
else
|
||||
{
|
||||
$actionQuery = str_replace($allProjects, '1', $actionQuery);
|
||||
}
|
||||
|
||||
/* If the sql not include 'execution', add check purview for execution. */
|
||||
@@ -831,6 +921,7 @@ class actionModel extends model
|
||||
public function transformActions($actions)
|
||||
{
|
||||
$this->app->loadLang('todo');
|
||||
$requirements = array();
|
||||
|
||||
/* Get commiters. */
|
||||
$commiters = $this->loadModel('user')->getCommiters();
|
||||
@@ -839,10 +930,10 @@ class actionModel extends model
|
||||
foreach($actions as $object) $objectTypes[$object->objectType][] = $object->objectID;
|
||||
foreach($objectTypes as $objectType => $objectIds)
|
||||
{
|
||||
if(!isset($this->config->objectTables[$objectType])) continue; // If no defination for this type, omit it.
|
||||
if(!isset($this->config->objectTables[$objectType]) and $objectType != 'makeup') continue; // If no defination for this type, omit it.
|
||||
|
||||
$objectIds = array_unique($objectIds);
|
||||
$table = $this->config->objectTables[$objectType];
|
||||
$table = $objectType == 'makeup' ? '`zt_overtime`' : $this->config->objectTables[$objectType];
|
||||
$field = $this->config->action->objectNameFields[$objectType];
|
||||
if($table != TABLE_TODO)
|
||||
{
|
||||
@@ -864,6 +955,29 @@ class actionModel extends model
|
||||
$objectProject[$object->id] = $object->project > 0 ? $object->project : $object->id;
|
||||
}
|
||||
}
|
||||
elseif($objectType == 'story')
|
||||
{
|
||||
$objectInfo = $this->dao->select('id,title,type')->from($table)->where('id')->in($objectIds)->fetchAll();
|
||||
foreach($objectInfo as $object)
|
||||
{
|
||||
$objectName[$object->id] = $object->title;
|
||||
if($object->type == 'requirement') $requirements[$object->id] = $object->id;
|
||||
}
|
||||
$objectProject = array();
|
||||
}
|
||||
elseif($objectType == 'team')
|
||||
{
|
||||
$objectInfo = $this->dao->select('id,team,type')->from(TABLE_PROJECT)
|
||||
->where('id')->in($objectIds)
|
||||
->fetchAll();
|
||||
|
||||
$objectProject = array();
|
||||
foreach($objectInfo as $object)
|
||||
{
|
||||
$objectName[$object->id] = $object->team;
|
||||
if($object->type == 'project') $objectProject[$object->id] = $object->id;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$objectName = $this->dao->select("id, $field AS name")->from($table)->where('id')->in($objectIds)->fetchPairs();
|
||||
@@ -909,6 +1023,10 @@ class actionModel extends model
|
||||
if(isset($this->lang->action->label->$objectType))
|
||||
{
|
||||
$objectLabel = $this->lang->action->label->$objectType;
|
||||
|
||||
/* Replace story to requirement. */
|
||||
if(in_array($action->objectID, $requirements)) $objectLabel = str_replace($this->lang->SRCommon, $this->lang->URCommon, $objectLabel);
|
||||
|
||||
if(!is_array($objectLabel)) $action->objectLabel = $objectLabel;
|
||||
if(is_array($objectLabel) and isset($objectLabel[$actionType])) $action->objectLabel = $objectLabel[$actionType];
|
||||
}
|
||||
@@ -937,6 +1055,13 @@ class actionModel extends model
|
||||
$action->objectLink = helper::createLink($moduleName, $methodName, sprintf($vars, $action->objectID), '', '', $projectID);
|
||||
$action->objectLabel = $objectLabel;
|
||||
}
|
||||
elseif($action->objectType == 'team')
|
||||
{
|
||||
$action->objectLink = '';
|
||||
if($action->project) $action->objectLink = helper::createLink('project', 'manageMembers', 'projectID=' . $action->project);
|
||||
if($action->execution) $action->objectLink = helper::createLink('execution', 'team', 'executionID=' . $action->execution);
|
||||
$action->objectLabel = zget($this->lang->action->objectTypes, $action->objectLabel);
|
||||
}
|
||||
else
|
||||
{
|
||||
$action->objectLink = '';
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
?>
|
||||
<?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($type == 'hidden') echo html::a(inLink('trash', "type=all"), $lang->goback, '', "class='btn'");?>
|
||||
<?php if($type == 'all') echo html::a(inLink('trash', "type=hidden"), "<i class='icon-eye-close'></i> " . $lang->action->dynamic->hidden, '', "class='btn btn-danger'");?>
|
||||
@@ -36,10 +35,10 @@
|
||||
<thead>
|
||||
<tr class='colhead'>
|
||||
<th class='w-130px'><?php common::printOrderLink('objectType', $orderBy, $vars, $lang->action->objectType);?></th>
|
||||
<th class='w-id'> <?php common::printOrderLink('objectID', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th class='w-id'><?php common::printOrderLink('objectID', $orderBy, $vars, $lang->idAB);?></th>
|
||||
<th><?php echo $lang->action->objectName;?></th>
|
||||
<th class='w-100px'><?php common::printOrderLink('actor', $orderBy, $vars, $lang->action->actor);?></th>
|
||||
<th class='w-150px'><?php common::printOrderLink('date', $orderBy, $vars, $lang->action->date);?></th>
|
||||
<th class='w-100px'><?php common::printOrderLink('actor', $orderBy, $vars, $lang->action->actor);?></th>
|
||||
<th class='w-150px'><?php common::printOrderLink('date', $orderBy, $vars, $lang->action->date);?></th>
|
||||
<th class='w-100px'><?php echo $lang->actions;?></th>
|
||||
</tr>
|
||||
</thead>
|
||||
@@ -55,8 +54,8 @@
|
||||
$methodName = 'view';
|
||||
if($module == 'caselib')
|
||||
{
|
||||
$methodName = 'libview';
|
||||
$module = 'testsuite';
|
||||
$methodName = 'view';
|
||||
$module = 'caselib';
|
||||
}
|
||||
if(isset($config->action->customFlows[$action->objectType]))
|
||||
{
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
* @version $Id: en.php 4460 2013-02-26 02:28:02Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->admin->common = 'Admin';
|
||||
$lang->admin->index = 'Admin Home';
|
||||
$lang->admin->checkDB = 'Datenbank prüfen';
|
||||
$lang->admin->sso = 'SSO';
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
* @version $Id: en.php 4460 2013-02-26 02:28:02Z chencongzhi520@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->admin->common = 'Admin';
|
||||
$lang->admin->index = 'Admin Home';
|
||||
$lang->admin->checkDB = 'Check Database';
|
||||
$lang->admin->sso = 'Zdoo';
|
||||
@@ -80,7 +79,7 @@ $lang->admin->safe->reasonList['birthday'] = 'Same as DOB';
|
||||
$lang->admin->safe->modifyPasswordList[1] = 'Yes';
|
||||
$lang->admin->safe->modifyPasswordList[0] = 'No';
|
||||
|
||||
$lang->admin->safe->loginCaptchaList[1] = 'Yes'
|
||||
$lang->admin->safe->loginCaptchaList[1] = 'Yes';
|
||||
$lang->admin->safe->loginCaptchaList[0] = 'No';
|
||||
|
||||
$lang->admin->safe->noticeMode = 'Password will be checked when a user logs in, or a user is added or edited.';
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
* @version $Id: en.php 4460 2013-02-26 02:28:02Z chencongzhi520@gmail.com $
|
||||
* @link https://www.zentao.pm
|
||||
*/
|
||||
$lang->admin->common = 'Admin';
|
||||
$lang->admin->index = 'Admin Home';
|
||||
$lang->admin->checkDB = 'Check Database';
|
||||
$lang->admin->sso = 'Zdoo';
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
* @version $Id: vi.php 4460 2013-02-26 02:28:02Z quocnho@gmail.com $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->admin->common = 'Quản trị';
|
||||
$lang->admin->index = 'Trang quản trị';
|
||||
$lang->admin->checkDB = 'Kiểm tra CSDL';
|
||||
$lang->admin->sso = 'Zdoo';
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
* @version $Id: zh-cn.php 4767 2013-05-05 06:10:13Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->admin->common = '后台管理';
|
||||
$lang->admin->index = '后台管理首页';
|
||||
$lang->admin->checkDB = '检查数据库';
|
||||
$lang->admin->sso = 'ZDOO集成';
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
* @version $Id: zh-tw.php 4767 2013-05-05 06:10:13Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->admin->common = '後台管理';
|
||||
$lang->admin->index = '後台管理首頁';
|
||||
$lang->admin->checkDB = '檢查資料庫';
|
||||
$lang->admin->sso = 'ZDOO整合';
|
||||
@@ -54,13 +53,14 @@ $lang->admin->bind->caption = '關聯社區帳號';
|
||||
$lang->admin->bind->success = "關聯賬戶成功";
|
||||
|
||||
$lang->admin->safe = new stdclass();
|
||||
$lang->admin->safe->common = '安全策略';
|
||||
$lang->admin->safe->set = '密碼安全設置';
|
||||
$lang->admin->safe->password = '密碼安全';
|
||||
$lang->admin->safe->weak = '常用弱口令';
|
||||
$lang->admin->safe->reason = '類型';
|
||||
$lang->admin->safe->checkWeak = '弱口令掃瞄';
|
||||
$lang->admin->safe->changeWeak = '修改弱口令密碼';
|
||||
$lang->admin->safe->common = '安全策略';
|
||||
$lang->admin->safe->set = '密碼安全設置';
|
||||
$lang->admin->safe->password = '密碼安全';
|
||||
$lang->admin->safe->weak = '常用弱口令';
|
||||
$lang->admin->safe->reason = '類型';
|
||||
$lang->admin->safe->checkWeak = '弱口令掃瞄';
|
||||
$lang->admin->safe->changeWeak = '修改弱口令密碼';
|
||||
$lang->admin->safe->loginCaptcha = '登錄使用驗證碼';
|
||||
$lang->admin->safe->modifyPasswordFirstLogin = '首次登錄修改密碼';
|
||||
|
||||
$lang->admin->safe->modeList[0] = '不檢查';
|
||||
@@ -79,5 +79,8 @@ $lang->admin->safe->reasonList['birthday'] = '與生日相同';
|
||||
$lang->admin->safe->modifyPasswordList[1] = '必須修改';
|
||||
$lang->admin->safe->modifyPasswordList[0] = '不強制';
|
||||
|
||||
$lang->admin->safe->loginCaptchaList[1] = '是';
|
||||
$lang->admin->safe->loginCaptchaList[0] = '否';
|
||||
|
||||
$lang->admin->safe->noticeMode = '系統會在登錄、創建和修改用戶、修改密碼的時候檢查用戶口令。';
|
||||
$lang->admin->safe->noticeStrong = '密碼長度越長,含有大寫字母或數字或特殊符號越多,密碼字母越不重複,安全度越強!';
|
||||
|
||||
@@ -248,10 +248,10 @@ class adminModel extends model
|
||||
}
|
||||
|
||||
if(isset($weaks[$user->password])) return true;
|
||||
if($user->password and md5($user->account)) return true;
|
||||
if($user->phone and $user->password and md5($user->phone)) return true;
|
||||
if($user->mobile and $user->password and md5($user->mobile)) return true;
|
||||
if($user->birthday and $user->password and md5($user->birthday)) return true;
|
||||
if($user->password == md5($user->account)) return true;
|
||||
if($user->phone and $user->password == md5($user->phone)) return true;
|
||||
if($user->mobile and $user->password == md5($user->mobile)) return true;
|
||||
if($user->birthday and $user->password == md5($user->birthday)) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,11 +11,6 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<div class='btn-toolbar pull-left'><?php common::printAdminSubMenu('system');?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-row">
|
||||
<div class='side-col' id='sidebar'>
|
||||
<div class='cell'>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'>
|
||||
<div class='btn-toolbar pull-left'><?php common::printAdminSubMenu('system');?></div>
|
||||
<div class='btn-toolbar pull-left'><?php // common::printAdminSubMenu('system');?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="main-row">
|
||||
|
||||
@@ -11,9 +11,6 @@
|
||||
*/
|
||||
?>
|
||||
<?php include '../../common/view/header.html.php'; ?>
|
||||
<div id="mainMenu" class="clearfix">
|
||||
<div class="btn-toolbar pull-left"><?php common::printAdminSubMenu('sso');?></div>
|
||||
</div>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class='center-block'>
|
||||
<div class='main-header'>
|
||||
|
||||
@@ -1 +1,7 @@
|
||||
<?php
|
||||
$config->automation->ztfSite = 'https://ztf.im';
|
||||
$config->automation->ztfDownload = 'https://ztf.im/ztf.html';
|
||||
$config->automation->ztfManual = 'https://ztf.im/book/ztf/ztf-about-26.html';
|
||||
$config->automation->zendataSite = 'https://www.zendata.cn';
|
||||
$config->automation->zendataDownload = 'https://www.zendata.cn/download.html';
|
||||
$config->automation->zendataManual = 'https://www.zendata.cn/book/zendata/why-zendata-115.html';
|
||||
|
||||
@@ -11,14 +11,6 @@
|
||||
*/
|
||||
class automation extends control
|
||||
{
|
||||
/**
|
||||
* Project id.
|
||||
*
|
||||
* @var int
|
||||
* @access public
|
||||
*/
|
||||
public $projectID = 0;
|
||||
|
||||
/**
|
||||
* Products.
|
||||
*
|
||||
@@ -36,16 +28,7 @@ class automation extends control
|
||||
public function __construct($moduleName = '', $methodName = '')
|
||||
{
|
||||
parent::__construct($moduleName, $methodName);
|
||||
|
||||
/* Set testtask menu group. */
|
||||
$this->projectID = isset($_GET['PRJ']) ? $_GET['PRJ'] : 0;
|
||||
if(!$this->projectID)
|
||||
{
|
||||
$this->app->loadConfig('qa');
|
||||
foreach($this->config->qa->menuList as $module) $this->lang->navGroup->$module = 'qa';
|
||||
}
|
||||
|
||||
$this->view->products = $this->products = $this->loadModel('product')->getProductPairsByProject($this->projectID);
|
||||
$this->view->products = $this->products = $products = $this->loadModel('product')->getPairs();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -61,7 +44,7 @@ class automation extends control
|
||||
/* Set menu. */
|
||||
$productID = $this->product->saveState($productID, $this->products);
|
||||
if(empty($branch)) $branch = (int)$this->cookie->preBranch;
|
||||
$this->automation->setMenu($this->products, $productID, $branch);
|
||||
$this->loadModel('qa')->setMenu($this->products, $productID, $branch);
|
||||
|
||||
$this->view->title = $this->lang->automation->common;
|
||||
$this->view->position[] = $this->lang->automation->browse;
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
.ztf-block {width: 100%; margin-top: 22px; background: linear-gradient(to bottom, #deeaf8 , #f4f7fe); display: inline-flex; box-shadow: 2px 2px 5px #e2dede;}
|
||||
.ztf-logo {width: 40%; height: 190px; display: inline-block; line-height: 190px; text-align: right; padding-right: 65px;}
|
||||
.ztf-download {width: 45%; height: 190px; display: inline-block;}
|
||||
.ztf-download-trait {display: inline-block; width: 100%; margin: 45px 0px 6px 0px; font-weight:bold; font-size: 15px; color: #0c4678;}
|
||||
.ztf-download-trait div {width: 35%; float: left; padding: 8px 0px;}
|
||||
.ztf-download-button {width: 100%;}
|
||||
.ztf-download-button a {margin-right: 15px; font-weight:bold; font-size: 14px;}
|
||||
.dot-symbol{font-size: 12px; margin-right: 5px;}
|
||||
|
||||
.block-content {width: 100%;}
|
||||
.block-details {width: 49%; display: inline-block; padding: 30px 140px; margin-top: 20px; box-shadow: 2px 2px 5px #e2dede;}
|
||||
.block-details-right {float: right;}
|
||||
.block-details p {font-size: 18px; font-weight:bold; margin: 0 0 10px 20px;}
|
||||
.block-details li {width: 40%; float: left; padding: 6px 0px; font-size: 14px; font-weight:bold; color: #666666; text-align: left; list-style:none;}
|
||||
.block-details-line li {width: 100%;}
|
||||
|
||||
.zendata-block {width: 100%; margin-top: 40px; background: linear-gradient(to bottom, #deeaf8 , #f4f7fe); display: inline-flex; box-shadow: 2px 2px 5px #e2dede;}
|
||||
.zendata-logo {width: 40%; height: 170px; display: inline-block; line-height: 170px; text-align: right; padding-right: 90px;}
|
||||
.zendata-download {width: 45%; height: 170px; display: inline-block;}
|
||||
.zendata-download-trait {display: inline-block; width: 100%; margin: 60px 0px 6px 0px; font-weight:bold; font-size: 15px; color: #0c4678;}
|
||||
.zendata-download-trait div {margin-right: 35px; float: left; padding: 8px 0px;}
|
||||
.zendata-download-button {width: 100%;}
|
||||
.zendata-download-button a {margin-right: 15px; font-weight:bold; font-size: 14px;}
|
||||
|
||||
.zentata-content {display: table; width: 100%; table-layout: fixed; margin-top: 20px;}
|
||||
.block-zendata-block {display: table-cell;}
|
||||
.block-zendata {width: 96%; display: inline-block; padding: 30px 40px; margin-top: 20px; box-shadow: 2px 2px 5px #e2dede;}
|
||||
.block-zendata p {font-size: 18px; font-weight:bold; margin: 0 0 10px 20px;}
|
||||
.block-zendata li {width: 100%; float: left; padding: 6px 0px; font-size: 14px; font-weight:bold; color: #666666; text-align: left; list-style:none;}
|
||||
.qr-code {margin-top: 20px; padding: 20px 0px 20px 58px; box-shadow: 2px 2px 5px #e2dede;}
|
||||
.qr-code-img {width: 90px; height: 90px; display: inline-block; float: left;}
|
||||
.qr-code-details {display: inline-block; margin: 10px 0px 0px 10px;}
|
||||
.qr-code-details div{margin: 5px 0px;}
|
||||
.qr-code-group {color: #898989;}
|
||||
@media screen and (max-height: 768px)
|
||||
{
|
||||
.qr-code {padding: 20px 0px 20px 43px;}
|
||||
.block-details li {width: 50%;}
|
||||
.block-details-line li {width: 100%;}
|
||||
.ztf-download-trait div {width: 47%;}
|
||||
.block-details {padding: 30px 60px;}
|
||||
.block-zendata {padding: 30px 25px;}
|
||||
}
|
||||
|
||||
@media screen and (max-height: 720px)
|
||||
{
|
||||
.zendata-download {width: 50%;}
|
||||
.ztf-download-trait {margin: 35px 0px 6px 0px;}
|
||||
.block-zendata {padding: 30px 14px;}
|
||||
.ztf-download {width: 48%;}
|
||||
.qr-code {padding: 20px 0px 20px 32px;}
|
||||
}
|
||||
.btn-automation {background: linear-gradient(to bottom, #0bb6fb, #0d67e1); border: 0px; padding: 8px 12px;}
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* The automation module zh-cn file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青岛易软天创网络科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package automation
|
||||
* @version $Id: zh-cn.php 4767 2013-05-05 06:10:13Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->automation->common = 'Automated Testing';
|
||||
$lang->automation->browse = 'Home';
|
||||
|
||||
$lang->automation->title = 'Test Automation Solutions';
|
||||
|
||||
$lang->automation->ztfSite = 'ZTF Website';
|
||||
$lang->automation->ztfDownload = 'ZTF Download';
|
||||
$lang->automation->ztfManual = 'ZTF Manual';
|
||||
|
||||
$lang->automation->ztfFeature1 = 'ZTF solves problems for you.';
|
||||
$lang->automation->ztfFeature2 = 'ZTF solves the following problems for you:';
|
||||
$lang->automation->ztfFeature3 = 'Management of use cases';
|
||||
$lang->automation->ztfFeature4 = 'Comparison of test results';
|
||||
$lang->automation->ztfFeature5 = 'Execution of test scripts';
|
||||
$lang->automation->ztfFeature6 = 'Bug reporting';
|
||||
|
||||
$lang->automation->ztfFeature7 = 'ZTF is not depended on the environment';
|
||||
$lang->automation->ztfFeature8 = 'Written in Go';
|
||||
$lang->automation->ztfFeature9 = 'Deploy with no dependencies';
|
||||
$lang->automation->ztfFeature10 = 'Works on all platforms';
|
||||
$lang->automation->ztfFeature11 = 'Has only one executable';
|
||||
|
||||
$lang->automation->ztfFeature12 = 'ZTF is for all automated testing types';
|
||||
$lang->automation->ztfFeature13 = 'Support for common development languages';
|
||||
$lang->automation->ztfFeature14 = 'Can be integrated with known testing frameworks';
|
||||
$lang->automation->ztfFeature15 = 'No specific script implementation requried';
|
||||
|
||||
$lang->automation->ztfFeature16 = 'Export test cases to scripts in bulk';
|
||||
$lang->automation->ztfFeature17 = 'Submit execution results to ZenTao';
|
||||
$lang->automation->ztfFeature18 = 'Create bugs from execution results';
|
||||
$lang->automation->ztfFeature19 = 'Integrate ZenTao ALM';
|
||||
|
||||
$lang->automation->zendataSite = 'ZenData Website';
|
||||
$lang->automation->zendataDownload = 'ZenData Download';
|
||||
$lang->automation->zendataManual = 'ZenData Manual';
|
||||
|
||||
$lang->automation->zendata = 'A generic data generation tool';
|
||||
$lang->automation->zendataFeature1 = 'Easy to get started with no coding knowledge required';
|
||||
$lang->automation->zendataFeature2 = 'Customizable data format with no restrictions';
|
||||
$lang->automation->zendataFeature3 = 'Generate a million pieces of data with one click';
|
||||
|
||||
$lang->automation->zendataFeature4 = 'Cross-platform and cross-language';
|
||||
$lang->automation->zendataFeature5 = 'Only one executable is required to run it';
|
||||
$lang->automation->zendataFeature6 = 'For Windows, Linux, and MacOS';
|
||||
$lang->automation->zendataFeature7 = 'For various languages';
|
||||
|
||||
$lang->automation->zendataFeature8 = 'All kinds of black tricks';
|
||||
$lang->automation->zendataFeature9 = 'Interval, Step Size, Random, Repeat, and Reference';
|
||||
$lang->automation->zendataFeature10 = 'Specify a list of files to be queried in Excel';
|
||||
$lang->automation->zendataFeature11 = 'Parallel generation, recursive generation, and reverse parsing';
|
||||
|
||||
$lang->automation->groupTips = 'Welcome to the automated testing QQ group';
|
||||
$lang->automation->groupTitle = 'Software testing group:';
|
||||
$lang->automation->qqGroup = '522506766';
|
||||
$lang->automation->groupDescription = 'Software testing community for software testers to share software testing tools and methods and improve software testing skills';
|
||||
@@ -12,200 +12,55 @@
|
||||
$lang->automation->common = '自动化测试';
|
||||
$lang->automation->browse = '首页';
|
||||
|
||||
$lang->automation->description = '自动化测试解决方案';
|
||||
$lang->automation->ztf = 'ZTF自动化测试管理框架';
|
||||
$lang->automation->zendata = 'ZenData数据生成工具';
|
||||
$lang->automation->title = '自动化测试解决方案';
|
||||
|
||||
$lang->automation->details = <<<EOF
|
||||
<article class="article">
|
||||
<header>
|
||||
<h1 class="text-center">自动化测试解决方案</h1>
|
||||
<div class="abstract">
|
||||
<p>
|
||||
摘要:欢迎使用禅道提供的自动化解决方案,本次为大家带来了两款工具。Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。
|
||||
ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
$lang->automation->ztfSite = '禅道ZTF官网';
|
||||
$lang->automation->ztfDownload = 'ZTF框架下载';
|
||||
$lang->automation->ztfManual = 'ZTF框架手册';
|
||||
|
||||
<section class="content">
|
||||
<h2>ZTF自动化测试管理框架</h2>
|
||||
<p>
|
||||
Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。
|
||||
和市面上已有的自动化测试框架相比,ZTF更聚焦于自动化测试的管理功能。
|
||||
ZTF提供了自动化测试脚本的定义、管理、驱动、执行结果的回传、bug的创建以及和其他自动化测框架的集成。
|
||||
ZTF使用go语言开发,可以支持各种平台。ZTF支持常见的编程语言,您可以选择您喜欢用的语言来开发自动化测试脚本。
|
||||
</p>
|
||||
<div class="section">
|
||||
<div class="text-left" style="padding:25px 15px 10px 15px;">
|
||||
<p>
|
||||
<a href="https://ztf.im/index.html" class="btn btn-primary bg-primary btn-lg" target="_blank">禅道ZTF官网</a>
|
||||
<a href="https://ztf.im/ztf.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZTF框架下载</a>
|
||||
<a href="https://ztf.im/book/ztf/ztf-about-26.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZTF框架手册</a>
|
||||
</p>
|
||||
<div style="margin-top:15px;" class="text-muted">
|
||||
<p>
|
||||
我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息)
|
||||
</p>
|
||||
<p>
|
||||
软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>ZenData数据生成工具</h2>
|
||||
<p>
|
||||
ZenData主要两大功能:数据生成和数据解析。通过一个配置文件,可以使用ZenData生成您想要的各种数据。
|
||||
同样也可以对某一个数据文件,指定其数据类型定义的配置文件,完成到结构化数据的解析。
|
||||
ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。还可以一键生成海量数据用于性能和压力测试。
|
||||
</p>
|
||||
<div class="section">
|
||||
<div class="text-left" style="padding:25px 15px 10px 15px;">
|
||||
<p>
|
||||
<a href="https://www.zendata.cn/index.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData官网</a>
|
||||
<a href="https://www.zendata.cn/download.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData下载</a>
|
||||
<a href="https://www.zendata.cn/book/zendata/why-zendata-115.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData手册</a>
|
||||
</p>
|
||||
<div style="margin-top:15px;" class="text-muted">
|
||||
<p>
|
||||
我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息)
|
||||
</p>
|
||||
<p>
|
||||
软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
EOF;
|
||||
$lang->automation->ztfDetails = <<<EOF
|
||||
<article class="article">
|
||||
<header>
|
||||
<h1 class="text-center">ZTF自动化测试管理框架</h1>
|
||||
<div class="abstract">
|
||||
<p>
|
||||
摘要:Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
$lang->automation->ztfFeature1 = 'ZTF为你解决各种问题';
|
||||
$lang->automation->ztfFeature2 = 'ZTF为你解决如下问题';
|
||||
$lang->automation->ztfFeature3 = '用例信息的管理';
|
||||
$lang->automation->ztfFeature4 = '测试结果的对比';
|
||||
$lang->automation->ztfFeature5 = '测试脚本的执行';
|
||||
$lang->automation->ztfFeature6 = '缺陷Bug的提交';
|
||||
|
||||
<section class="content">
|
||||
<h4>一、ZTF是什么</h4>
|
||||
<p>
|
||||
Zentao Testing Framework,简称ZTF,是一款开源自动化测试管理框架。
|
||||
和市面上已有的自动化测试框架相比,ZTF更聚焦于自动化测试的管理功能。
|
||||
ZTF提供了自动化测试脚本的定义、管理、驱动、执行结果的回传、bug的创建以及和其他自动化测框架的集成。
|
||||
ZTF使用go语言开发,可以支持各种平台。ZTF支持常见的编程语言,您可以选择您喜欢用的语言来开发自动化测试脚本。
|
||||
</p>
|
||||
<h4>二、为什么来做ZTF</h4>
|
||||
<p>
|
||||
市面上已经有很多自动化测试框架,我们为什么还要来做ZTF呢?ZTF主要是解决测试管理的问题。
|
||||
目前市面上的自动化测试框架主要分为两大类,一类是单元测试框架,一类是某种领域的自动化测试框架。
|
||||
单元测试框架是跟各个语言绑定的,比如cppunit, phpunit等。第二类框架以selenium为代表,可以用来做web的自动化测试。
|
||||
也还有做GUI或者手机应用乃至游戏等场景的自动化测试的框架。
|
||||
</p>
|
||||
<p>
|
||||
这就产生了一个问题,我们需要将这些自动化测试框架的测试脚本统一管理起来。
|
||||
每一个脚本都可以和测试管理系统里面的一个用例进行关联,脚本里面的步骤信息和管理系统里面的用例信息可以互相同步。
|
||||
测试执行的结果可以反映到测试管理系统中,失败的测试脚本可以创建bug。
|
||||
为此我们开发了ZTF测试管理框架。
|
||||
</p>
|
||||
<h4>三、ZTF和其他自动化测试框架的关系</h4>
|
||||
<p>
|
||||
ZTF和其他的自动化测试框架是互相合作的关系。
|
||||
您可以继续使用之前的自动化测试框架来进行脚本的开发,只需要通过注释的方式加入几个标签就可以转换成ztf的自动化测试脚本。
|
||||
</p>
|
||||
<h4>四、ZTF自动化测试框架的特点</h4>
|
||||
<ol>
|
||||
<li>简单:ZTF的语法标签和规则都很简单,一看就会,很容易上手。</li>
|
||||
<li>跨平台:ZTF使用GO语言开发,跨平台,只有一个可执行文件,就可以运行。</li>
|
||||
<li>跨语言:ZTF支持常见的编程语言,你喜欢用什么就用什么。</li>
|
||||
<li>跨框架:ZTF可以和市面上常见的单元测试框架、常见的自动化测试框架都可以很好的集成。</li>
|
||||
<li>工程化:使用ZTF可以真正达到工程化的自动化测试,可以大批量大规模的进行自动化测试的管理和执行。</li>
|
||||
<li>跨场景:借助于其他框架,ZTF可以用来做单元测试、接口测试、web界面测试、GUI界面测试、APP测试等多种场景。</li>
|
||||
</ol>
|
||||
<div class="section">
|
||||
<div class="text-left" style="padding:25px 15px 10px 15px;">
|
||||
<p>
|
||||
<a href="https://ztf.im/index.html" class="btn btn-primary bg-primary btn-lg" target="_blank">禅道ZTF官网</a>
|
||||
<a href="https://ztf.im/ztf.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZTF框架下载</a>
|
||||
<a href="https://ztf.im/book/ztf/ztf-about-26.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZTF框架手册</a>
|
||||
</p>
|
||||
<div style="margin-top:15px;" class="text-muted">
|
||||
<p>
|
||||
我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息)
|
||||
</p>
|
||||
<p>
|
||||
软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</article>
|
||||
EOF;
|
||||
$lang->automation->ztfFeature7 = 'ZTF对环境无任何依赖';
|
||||
$lang->automation->ztfFeature8 = '使用Go语言开发';
|
||||
$lang->automation->ztfFeature9 = '部署无任何依赖';
|
||||
$lang->automation->ztfFeature10 = '所有平台均可运行';
|
||||
$lang->automation->ztfFeature11 = '只有一个可执行文件';
|
||||
|
||||
$lang->automation->zendataDetails = <<<EOF
|
||||
<article class="article">
|
||||
<header>
|
||||
<h1 class="text-center">ZenData数据生成工具</h1>
|
||||
<div class="abstract">
|
||||
<p>
|
||||
摘要:ZenData使用YAML来作为数据类型配置文件实现了数据的生成和解析。
|
||||
ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。
|
||||
还可以一键生成海量数据用于性能和压力测试。
|
||||
</p>
|
||||
</div>
|
||||
</header>
|
||||
$lang->automation->ztfFeature12 = 'ZTF对自动化测试方式无要求';
|
||||
$lang->automation->ztfFeature13 = '支持常见的各种开发语言';
|
||||
$lang->automation->ztfFeature14 = '可以和已知测试框架集成';
|
||||
$lang->automation->ztfFeature15 = '对脚本实现方式无要求';
|
||||
|
||||
<section class="content">
|
||||
<h4>一、ZenData的实现原理</h4>
|
||||
<p>
|
||||
ZenData使用YAML来作为数据类型配置文件。对于每一种类型的数据来讲,我们都可以将其拆分成若干的字段。
|
||||
比如我们要测试一个用户的订单表,会有订单的id,用户id或者账户名,订单的名称,订单的金额,订单的时间,订单状态等等字段。
|
||||
我们可以针对每一个字段配置其取值的范围。比如订单id,我可以定义为从1到10000,用户id可以是1-100。
|
||||
这样每一个字段都有了一个取值范围列表。当ZenData来生成数据的时候,从每一个字段里面依次取一个值,将其拼接在一起,就形成了一条记录。
|
||||
大家可以想象成每个字段都是一个转盘,按照自己的频率进行旋转,每一次旋转都从中取出一个值,和其他的字段进行组合。
|
||||
</p>
|
||||
<p>上面说的是最基本的的工作原理,ZenData还提供了步长、随机、循环、引用等多种定义方式,我们会在接下来的手册里面展开讲。</p>
|
||||
<h4>二、ZenData的用途</h4>
|
||||
<p>
|
||||
ZenData主要两大功能:数据生成和数据解析。通过一个配置文件,可以使用ZenData生成您想要的各种数据。
|
||||
同样也可以对某一个数据文件,指定其数据类型定义的配置文件,完成到结构化数据的解析。
|
||||
ZenData可以用于手工测试场景下面测试数据的准备,也可以用于自动化测试脚本里面的数据生成和解析。还可以一键生成海量数据用于性能和压力测试。
|
||||
</p>
|
||||
<h4>三、ZenData主要的特点</h4>
|
||||
<ol>
|
||||
<li>简单无依赖,只有一个可执行文件,即可满足命令行生成和HTTP接口两种数据生成服务。</li>
|
||||
<li>使用配置文件来生成数据,使用人员不需要有开发知识,即可上手应用。</li>
|
||||
<li>提供了功能强大的语法,分组、区间、步长、循环、随机、格式化和前后缀等,配置灵活性极强。</li>
|
||||
<li>支持从文本文件中读取数据,方便用户对字段取值进行精确控制。</li>
|
||||
<li>提供了Excel表格数据的标准SQL查询接口,使用更加灵活。</li>
|
||||
<li>使用预制的序列(ranges)、实例(instances)、配置(config)对定义进行复用,以解决复杂数据格式的定义。</li>
|
||||
<li>语法支持继承和扩展,为定义文件间的复用提供方便。</li>
|
||||
<li>可以反向解析数据,可以对程序的输出进行解析,方便自动化测试脚本进行比对。</li>
|
||||
<li>发行包內置了基础业务数据的定义文件(不断完善中)。</li>
|
||||
<li>提供了HTTP接口数据生成服务,各种语言都可以方便调用。</li>
|
||||
</ol>
|
||||
<div class="section">
|
||||
<div class="text-left" style="padding:25px 15px 10px 15px;">
|
||||
<p>
|
||||
<a href="https://www.zendata.cn/index.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData官网</a>
|
||||
<a href="https://www.zendata.cn/download.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData下载</a>
|
||||
<a href="https://www.zendata.cn/book/zendata/why-zendata-115.html" class="btn btn-primary bg-primary btn-lg" target="_blank">ZenData手册</a>
|
||||
</p>
|
||||
<div style="margin-top:15px;" class="text-muted">
|
||||
<p>
|
||||
我们还提供了QQ群和微信群的交流方式,官方QQ技术支持响应时间为:上午9:00—11:30,下午13:00—17:30(周六周日,节假日休息)
|
||||
</p>
|
||||
<p>
|
||||
软件测试交流群: 522506766 (添加客服微信: easycorp666,可邀请您加入软件测试微信群)
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</section>
|
||||
</article>
|
||||
EOF;
|
||||
$lang->automation->ztfFeature16 = '可批量将禅道测试用例导出为脚本';
|
||||
$lang->automation->ztfFeature17 = '可以将执行结果提交到禅道中';
|
||||
$lang->automation->ztfFeature18 = '可以将执行结果创建为Bug';
|
||||
$lang->automation->ztfFeature19 = 'ZTF和禅道深度集成';
|
||||
|
||||
$lang->automation->zendataSite = 'ZenData官网';
|
||||
$lang->automation->zendataDownload = 'ZenData下载';
|
||||
$lang->automation->zendataManual = 'ZenData手册';
|
||||
|
||||
$lang->automation->zendata = '通用数据生成利器';
|
||||
$lang->automation->zendataFeature1 = '不懂代码也可以使用,轻松上手';
|
||||
$lang->automation->zendataFeature2 = '数据格式完全自定义,无任何限制';
|
||||
$lang->automation->zendataFeature3 = '一键生成百万条数据,毫无压力';
|
||||
|
||||
$lang->automation->zendataFeature4 = '跨平台跨语言';
|
||||
$lang->automation->zendataFeature5 = '运行只需要一个可执行文件';
|
||||
$lang->automation->zendataFeature6 = 'Windows、Linux、MacOS都可以用';
|
||||
$lang->automation->zendataFeature7 = '各种语言都可以用';
|
||||
|
||||
$lang->automation->zendataFeature8 = '各种黑技巧';
|
||||
$lang->automation->zendataFeature9 = '区间,步长,随机,重复,引用';
|
||||
$lang->automation->zendataFeature10 = '指定文件列表,从excel中查询';
|
||||
$lang->automation->zendataFeature11 = '平行生成、递归生成、反向解析';
|
||||
|
||||
$lang->automation->groupTips = '欢迎扫码加入自动化测试QQ交流群';
|
||||
$lang->automation->groupTitle = '软件测试交流群:';
|
||||
$lang->automation->qqGroup = '522506766';
|
||||
$lang->automation->groupDescription = '为软件测试从业者提供的软件测试技术交流社群,分享软件测试工具与方法,帮助大家提升软件测试技能水平。';
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
<?php
|
||||
/**
|
||||
* The automation module zh-tw file of ZenTaoPMS.
|
||||
*
|
||||
* @copyright Copyright 2009-2015 青島易軟天創網絡科技有限公司(QingDao Nature Easy Soft Network Technology Co,LTD, www.cnezsoft.com)
|
||||
* @license ZPL (http://zpl.pub/page/zplv12.html)
|
||||
* @author Chunsheng Wang <chunsheng@cnezsoft.com>
|
||||
* @package automation
|
||||
* @version $Id: zh-tw.php 4767 2013-05-05 06:10:13Z wwccss $
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
$lang->automation->common = '自動化測試';
|
||||
$lang->automation->browse = '首頁';
|
||||
|
||||
$lang->automation->title = '自動化測試解決方案';
|
||||
|
||||
$lang->automation->ztfSite = '禪道ZTF官網';
|
||||
$lang->automation->ztfDownload = 'ZTF框架下載';
|
||||
$lang->automation->ztfManual = 'ZTF框架手冊';
|
||||
|
||||
$lang->automation->ztfFeature1 = 'ZTF為你解決各種問題';
|
||||
$lang->automation->ztfFeature2 = 'ZTF為你解決如下問題';
|
||||
$lang->automation->ztfFeature3 = '用例信息的管理';
|
||||
$lang->automation->ztfFeature4 = '測試結果的對比';
|
||||
$lang->automation->ztfFeature5 = '測試腳本的執行';
|
||||
$lang->automation->ztfFeature6 = '缺陷Bug的提交';
|
||||
|
||||
$lang->automation->ztfFeature7 = 'ZTF對環境無任何依賴';
|
||||
$lang->automation->ztfFeature8 = '使用Go語言開發';
|
||||
$lang->automation->ztfFeature9 = '部署無任何依賴';
|
||||
$lang->automation->ztfFeature10 = '所有平台均可運行';
|
||||
$lang->automation->ztfFeature11 = '只有一個執行檔';
|
||||
|
||||
$lang->automation->ztfFeature12 = 'ZTF對自動化測試方式無要求';
|
||||
$lang->automation->ztfFeature13 = '支持常見的各種開發語言';
|
||||
$lang->automation->ztfFeature14 = '可以和已知測試框架整合';
|
||||
$lang->automation->ztfFeature15 = '對腳本實現方式無要求';
|
||||
|
||||
$lang->automation->ztfFeature16 = '可批量將禪道測試用例導出為腳本';
|
||||
$lang->automation->ztfFeature17 = '可以將執行結果提交到禪道中';
|
||||
$lang->automation->ztfFeature18 = '可以將執行結果創建為Bug';
|
||||
$lang->automation->ztfFeature19 = 'ZTF和禪道深度整合';
|
||||
|
||||
$lang->automation->zendataSite = 'ZenData官網';
|
||||
$lang->automation->zendataDownload = 'ZenData下載';
|
||||
$lang->automation->zendataManual = 'ZenData手冊';
|
||||
|
||||
$lang->automation->zendata = '通用數據生成利器';
|
||||
$lang->automation->zendataFeature1 = '不懂代碼也可以使用,輕鬆上手';
|
||||
$lang->automation->zendataFeature2 = '數據格式完全自定義,無任何限制';
|
||||
$lang->automation->zendataFeature3 = '一鍵生成百萬條數據,毫無壓力';
|
||||
|
||||
$lang->automation->zendataFeature4 = '跨平台跨語言';
|
||||
$lang->automation->zendataFeature5 = '運行只需要一個執行檔';
|
||||
$lang->automation->zendataFeature6 = 'Windows、Linux、MacOS都可以用';
|
||||
$lang->automation->zendataFeature7 = '各種語言都可以用';
|
||||
|
||||
$lang->automation->zendataFeature8 = '各種黑技巧';
|
||||
$lang->automation->zendataFeature9 = '區間,步長,隨機,重複,引用';
|
||||
$lang->automation->zendataFeature10 = '指定檔案列表,從excel中查詢';
|
||||
$lang->automation->zendataFeature11 = '平行生成、遞歸生成、反向解析';
|
||||
|
||||
$lang->automation->groupTips = '歡迎掃碼加入自動化測試QQ交流群';
|
||||
$lang->automation->groupTitle = '軟件測試交流群:';
|
||||
$lang->automation->qqGroup = '522506766';
|
||||
$lang->automation->groupDescription = '為軟件測試從業者提供的軟件測試技術交流社群,分享軟件測試工具與方法,幫助大家提升軟件測試技能水平。';
|
||||
@@ -13,34 +13,4 @@
|
||||
<?php
|
||||
class automationModel extends model
|
||||
{
|
||||
/**
|
||||
* Set the menu.
|
||||
*
|
||||
* @param array $products
|
||||
* @param int $productID
|
||||
* @param int $branch
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function setMenu($products, $productID, $branch = 0)
|
||||
{
|
||||
$this->loadModel('product');
|
||||
foreach($this->lang->testtask->menu as $key => $value)
|
||||
{
|
||||
if($this->lang->navGroup->testtask != 'qa') $this->loadModel('qa')->setSubMenu('automation', $key, $productID);
|
||||
common::setMenuVars($this->lang->testtask->menu, $key, $productID);
|
||||
}
|
||||
|
||||
if($this->lang->navGroup->automation == 'qa')
|
||||
{
|
||||
foreach($this->lang->qa->subMenu->automation as $key => $menu)
|
||||
{
|
||||
common::setMenuVars($this->lang->qa->subMenu->automation, $key, $productID);
|
||||
}
|
||||
$this->lang->qa->menu = $this->lang->automation->menu;
|
||||
$this->lang->automation->menu = $this->lang->qa->subMenu->automation;
|
||||
$this->lang->qa->switcherMenu = $this->product->getSwitcher($productID, '', $branch);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -13,26 +13,130 @@
|
||||
<?php include '../../common/view/header.html.php';?>
|
||||
<div id='mainContent' class='main-content'>
|
||||
<div class="row">
|
||||
<div class="col-xs-2">
|
||||
<ul class="nav nav-tabs nav-stacked">
|
||||
<li class="active"><a href="###" data-target="#tab3Content1" data-toggle="tab"><?php echo $lang->automation->description;?></a></li>
|
||||
<li><a href="###" data-target="#tab3Content2" data-toggle="tab"><?php echo $lang->automation->ztf;?></a></li>
|
||||
<li><a href="###" data-target="#tab3Content3" data-toggle="tab"><?php echo $lang->automation->zendata;?></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-xs-1"></div>
|
||||
<div class="col-xs-10">
|
||||
<div class="tab-content col-xs-10">
|
||||
<div class="tab-pane fade active in" id="tab3Content1">
|
||||
<?php echo $lang->automation->details;?>
|
||||
<div class='text-center'>
|
||||
<h2 style='margin-top: 18px;'><?php echo $lang->automation->title;?></h1>
|
||||
</div>
|
||||
<div class='ztf-block'>
|
||||
<div class='ztf-logo'>
|
||||
<img src='<?php echo $config->webRoot . 'theme/default/images/main/ztf.png';?>' />
|
||||
</div>
|
||||
<div class="tab-pane fade" id="tab3Content2">
|
||||
<?php echo $lang->automation->ztfDetails;?>
|
||||
<div class='ztf-download'>
|
||||
<div class='ztf-download-trait'>
|
||||
<div><span class='dot-symbol'>●</span><span><?php echo $lang->automation->ztfFeature1;?></span></div>
|
||||
<div><span class='dot-symbol'>●</span><span><?php echo $lang->automation->ztfFeature19;?></span></div>
|
||||
<div><span class='dot-symbol'>●</span><span><?php echo $lang->automation->ztfFeature7;?></span></div>
|
||||
<div><span class='dot-symbol'>●</span><span><?php echo $lang->automation->ztfFeature12;?></span></div>
|
||||
</div>
|
||||
<div class="ztf-download-button">
|
||||
<a href="<?php echo $config->automation->ztfSite;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->ztfSite;?></a>
|
||||
<a href="<?php echo $config->automation->ztfDownload;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->ztfDownload;?></a>
|
||||
<a href="<?php echo $config->automation->ztfManual;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->ztfManual;?></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="tab3Content3">
|
||||
<?php echo $lang->automation->zendataDetails;?>
|
||||
</div>
|
||||
|
||||
<div class='block-content'>
|
||||
<div class='block-details'>
|
||||
<p><?php echo $lang->automation->ztfFeature2;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature3;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature4;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature5;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature6;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class='block-details block-details-right'>
|
||||
<p><?php echo $lang->automation->ztfFeature7;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature8;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature9;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature10;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature11;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class='block-details block-details-line'>
|
||||
<p><?php echo $lang->automation->ztfFeature12;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature13;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature14;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature15;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class='block-details block-details-line block-details-right'>
|
||||
<p><?php echo $lang->automation->ztfFeature12;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature16;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature17;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->ztfFeature18;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='zendata-block'>
|
||||
<div class='zendata-logo'>
|
||||
<img src='<?php echo $config->webRoot . 'theme/default/images/main/zendata.png';?>' />
|
||||
</div>
|
||||
<div class='zendata-download'>
|
||||
<div class='zendata-download-trait'>
|
||||
<div><span class='dot-symbol'>●</span><?php echo $lang->automation->zendata;?></div>
|
||||
<div><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature4;?></div>
|
||||
<div><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature8;?></div>
|
||||
</div>
|
||||
<div class="zendata-download-button">
|
||||
<a href="<?php echo $config->automation->zendataSite;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->zendataSite;?></a>
|
||||
<a href="<?php echo $config->automation->zendataDownload;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->zendataDownload;?></a>
|
||||
<a href="<?php echo $config->automation->zendataManual;?>" target='_blank' class='btn btn-primary btn-automation'><?php echo $lang->automation->zendataManual;?></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='zentata-content'>
|
||||
<div class='block-zendata-block'>
|
||||
<div class='block-zendata'>
|
||||
<p><?php echo $lang->automation->zendata;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature1;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature2;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature3;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class='block-zendata-block'>
|
||||
<div class='block-zendata'>
|
||||
<p><?php echo $lang->automation->zendataFeature4;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature5;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature6;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature7;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class='block-zendata-block'>
|
||||
<div class='block-zendata' style='width: 100%;'>
|
||||
<p><?php echo $lang->automation->zendataFeature8;?></p>
|
||||
<ul>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature9;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature10;?></li>
|
||||
<li><span class='dot-symbol'>●</span><?php echo $lang->automation->zendataFeature11;?></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class='qr-code'>
|
||||
<div class='qr-code-img'>
|
||||
<img src='<?php echo $config->webRoot . 'theme/default/images/main/qrcode.png';?>' />
|
||||
</div>
|
||||
<div class='qr-code-details'>
|
||||
<div style='font-size: 16px; font-weight: bold;'><?php echo $lang->automation->groupTips;?></div>
|
||||
<div class='qr-code-group'><span><?php echo $lang->automation->groupTitle;?></span> <span style='color: #1d7cf1;'><?php echo $lang->automation->qqGroup;?></span></div>
|
||||
<div class='qr-code-group'><?php echo $lang->automation->groupDescription;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-1"></div>
|
||||
</div>
|
||||
</div>
|
||||
<?php include '../../common/view/footer.html.php';?>
|
||||
|
||||
@@ -8,6 +8,9 @@ $lang->backup->restore = 'Restore';
|
||||
$lang->backup->change = 'Edit Expiration';
|
||||
$lang->backup->changeAB = 'Edit';
|
||||
$lang->backup->rmPHPHeader = 'Remove PHP header';
|
||||
$lang->backup->setting = 'Setting';
|
||||
|
||||
$lang->backup->settingAction = 'Backup Setting';
|
||||
|
||||
$lang->backup->time = 'Date';
|
||||
$lang->backup->files = 'Files';
|
||||
@@ -19,7 +22,6 @@ $lang->backup->status = 'Status';
|
||||
$lang->backup->statusList['success'] = 'Success';
|
||||
$lang->backup->statusList['fail'] = 'Fail';
|
||||
|
||||
$lang->backup->setting = 'Settings';
|
||||
$lang->backup->settingDir = 'Backup Directory';
|
||||
$lang->backup->settingList['nofile'] = 'Do not back up files or codes.';
|
||||
$lang->backup->settingList['nosafe'] = 'Do not prevent downloading PHP file header.';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
$lang->backup->common = '备份';
|
||||
$lang->backup->common = '系统备份';
|
||||
$lang->backup->index = '备份首页';
|
||||
$lang->backup->history = '备份历史';
|
||||
$lang->backup->delete = '删除备份';
|
||||
@@ -8,6 +8,9 @@ $lang->backup->restore = '还原';
|
||||
$lang->backup->change = '保留时间';
|
||||
$lang->backup->changeAB = '修改';
|
||||
$lang->backup->rmPHPHeader = '去除安全设置';
|
||||
$lang->backup->setting = '设置';
|
||||
|
||||
$lang->backup->settingAction = '备份设置';
|
||||
|
||||
$lang->backup->time = '备份时间';
|
||||
$lang->backup->files = '备份文件';
|
||||
@@ -19,7 +22,6 @@ $lang->backup->status = '状态';
|
||||
$lang->backup->statusList['success'] = '成功';
|
||||
$lang->backup->statusList['fail'] = '失败';
|
||||
|
||||
$lang->backup->setting = '设置';
|
||||
$lang->backup->settingDir = '备份目录';
|
||||
$lang->backup->settingList['nofile'] = '不备份附件和代码';
|
||||
$lang->backup->settingList['nosafe'] = '不需要防下载PHP文件头';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
$lang->backup->common = '備份';
|
||||
$lang->backup->common = '系統備份';
|
||||
$lang->backup->index = '備份首頁';
|
||||
$lang->backup->history = '備份歷史';
|
||||
$lang->backup->delete = '刪除備份';
|
||||
@@ -8,6 +8,9 @@ $lang->backup->restore = '還原';
|
||||
$lang->backup->change = '保留時間';
|
||||
$lang->backup->changeAB = '修改';
|
||||
$lang->backup->rmPHPHeader = '去除安全設置';
|
||||
$lang->backup->setting = '設置';
|
||||
|
||||
$lang->backup->settingAction = '備份設置';
|
||||
|
||||
$lang->backup->time = '備份時間';
|
||||
$lang->backup->files = '備份檔案';
|
||||
@@ -19,7 +22,6 @@ $lang->backup->status = '狀態';
|
||||
$lang->backup->statusList['success'] = '成功';
|
||||
$lang->backup->statusList['fail'] = '失敗';
|
||||
|
||||
$lang->backup->setting = '設置';
|
||||
$lang->backup->settingDir = '備份目錄';
|
||||
$lang->backup->settingList['nofile'] = '不備份附件和代碼';
|
||||
$lang->backup->settingList['nosafe'] = '不需要防下載PHP檔案頭';
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div id='mainMenu' class='clearfix'>
|
||||
<div class='btn-toolbar pull-left'><?php common::printAdminSubMenu('system');?></div>
|
||||
<div class='btn-toolbar pull-left'><?php // common::printAdminSubMenu('system');?></div>
|
||||
</div>
|
||||
<div id='mainContent' class="main-row">
|
||||
<div class='side-col' id='sidebar'>
|
||||
@@ -63,7 +63,7 @@
|
||||
<?php if($i == 0):?>
|
||||
<td <?php if($rowspan > 1) echo "rowspan='$rowspan'"?>><?php echo date(DT_DATETIME1, $backupFile->time);?></td>
|
||||
<?php endif;?>
|
||||
<td class='text-left' style='padding-left:5px;'><?php echo $file;?></td>
|
||||
<td title=<?php echo $file;?> class='text-left' style='padding-left:5px;'><?php echo $file;?></td>
|
||||
<td><?php echo zget($summary, 'allCount', '');?></td>
|
||||
<td><?php echo zget($summary, 'count', '');?></td>
|
||||
<td>
|
||||
|
||||
+100
-100
@@ -205,18 +205,19 @@ class block extends control
|
||||
*
|
||||
* @param string $module
|
||||
* @param string $type
|
||||
* @param int $projectID
|
||||
* @access public
|
||||
* @return void
|
||||
*/
|
||||
public function dashboard($module, $type = '')
|
||||
public function dashboard($module, $type = '', $projectID = 0)
|
||||
{
|
||||
if($this->loadModel('user')->isLogon()) $this->session->set('blockModule', $module);
|
||||
$blocks = $this->block->getBlockList($module, $type);
|
||||
|
||||
$commonField = 'common';
|
||||
if($module == 'project')
|
||||
if($module == 'project' and $projectID)
|
||||
{
|
||||
$project = $this->loadModel('project')->getByID($this->session->PRJ);
|
||||
$project = $this->loadModel('project')->getByID($this->session->project);
|
||||
$commonField = $project->model . 'common';
|
||||
}
|
||||
|
||||
@@ -252,10 +253,18 @@ class block extends control
|
||||
|
||||
/* The list assigned to me jumps to the work page when click more button. */
|
||||
$block->moreLink = $this->createLink($moduleName, $method, $vars);
|
||||
if($moduleName = 'my' and strpos('task|story|requirement|bug|testcase|testtask|issue|risk', $method))
|
||||
if($moduleName == 'my' and strpos('task|story|requirement|bug|testcase|testtask|issue|risk', $method))
|
||||
{
|
||||
$block->moreLink = $this->createLink($moduleName, 'work', 'mode=' . $method . '&' . $vars);
|
||||
}
|
||||
elseif($moduleName == 'project' and $method == 'dynamic')
|
||||
{
|
||||
$block->moreLink = $this->createLink('project', 'dynamic', "projectID=$projectID&type=all");
|
||||
}
|
||||
elseif($moduleName == 'project' and $method == 'testtask')
|
||||
{
|
||||
$block->moreLink = $this->createLink('project', 'testtask', "projectID=$projectID");
|
||||
}
|
||||
}
|
||||
elseif($block->block == 'dynamic')
|
||||
{
|
||||
@@ -431,7 +440,7 @@ class block extends control
|
||||
/* Create a project block. */
|
||||
if($dashboard == 'project')
|
||||
{
|
||||
$project = $this->loadModel('project')->getByID($this->session->PRJ);
|
||||
$project = $this->loadModel('project')->getByID($this->session->project);
|
||||
$model = $project->model;
|
||||
}
|
||||
|
||||
@@ -561,10 +570,12 @@ class block extends control
|
||||
$limit = $this->viewType == 'json' ? 0 : (int)$this->params->count;
|
||||
$todos = $this->loadModel('todo')->getList('all', $this->app->user->account, 'wait, doing', $limit, $pager = null, $orderBy = 'date, begin');
|
||||
$uri = $this->app->getURI(true);
|
||||
$this->session->set('todoList', $uri);
|
||||
$this->session->set('bugList', $uri);
|
||||
$this->session->set('taskList', $uri);
|
||||
$this->session->set('riskList', $uri);
|
||||
|
||||
$this->session->set('todoList', $uri, 'my');
|
||||
$this->session->set('bugList', $uri, 'qa');
|
||||
$this->session->set('taskList', $uri, 'execution');
|
||||
$this->session->set('storyList', $uri, 'product');
|
||||
$this->session->set('testtaskList', $uri, 'qa');
|
||||
|
||||
foreach($todos as $key => $todo)
|
||||
{
|
||||
@@ -582,13 +593,14 @@ class block extends control
|
||||
*/
|
||||
public function printTaskBlock()
|
||||
{
|
||||
$uri = $this->app->getURI(true);
|
||||
$this->session->set('taskList', $uri);
|
||||
$this->session->set('storyList', $uri);
|
||||
$this->session->set('taskList', $this->app->getURI(true), 'execution');
|
||||
if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die();
|
||||
|
||||
$projectID = $this->view->block->module == 'my' ? 0 : (int)$this->session->PRJ;
|
||||
$this->view->tasks = $this->loadModel('task')->getUserTasks($this->app->user->account, $this->params->type, $this->viewType == 'json' ? 0 : (int)$this->params->count, null, $this->params->orderBy, $projectID);
|
||||
$account = $this->app->user->account;
|
||||
$type = $this->params->type;
|
||||
|
||||
$this->app->loadLang('execution');
|
||||
$this->view->tasks = $this->loadModel('task')->getUserTasks($account, $type, $this->viewType == 'json' ? 0 : (int)$this->params->count, null, $this->params->orderBy);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -599,10 +611,10 @@ class block extends control
|
||||
*/
|
||||
public function printBugBlock()
|
||||
{
|
||||
$this->session->set('bugList', $this->app->getURI(true));
|
||||
$this->session->set('bugList', $this->app->getURI(true), 'qa');
|
||||
if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die();
|
||||
|
||||
$projectID = $this->lang->navGroup->qa == 'project' ? $this->session->PRJ : 0;
|
||||
$projectID = $this->lang->navGroup->qa == 'project' ? $this->session->project : 0;
|
||||
$projectID = $this->view->block->module == 'my' ? 0 : $projectID;
|
||||
$this->view->bugs = $this->loadModel('bug')->getUserBugs($this->app->user->account, $this->params->type, $this->params->orderBy, $this->viewType == 'json' ? 0 : (int)$this->params->count, null, $projectID);
|
||||
}
|
||||
@@ -615,11 +627,11 @@ class block extends control
|
||||
*/
|
||||
public function printCaseBlock()
|
||||
{
|
||||
$this->session->set('caseList', $this->app->getURI(true));
|
||||
$this->session->set('caseList', $this->app->getURI(true), 'qa');
|
||||
$this->app->loadLang('testcase');
|
||||
$this->app->loadLang('testtask');
|
||||
|
||||
$projectID = $this->lang->navGroup->qa == 'project' ? $this->session->PRJ : 0;
|
||||
$projectID = $this->lang->navGroup->qa == 'project' ? $this->session->project : 0;
|
||||
$projectID = $this->view->block->module == 'my' ? 0 : $projectID;
|
||||
|
||||
$cases = array();
|
||||
@@ -660,20 +672,19 @@ class block extends control
|
||||
{
|
||||
$this->app->loadLang('testtask');
|
||||
|
||||
$this->session->set('testtaskList', $this->app->getURI(true));
|
||||
$this->session->set('productList', $this->app->getURI(true), 'product');
|
||||
$this->session->set('testtaskList', $this->app->getURI(true), 'qa');
|
||||
$this->session->set('buildList', $this->app->getURI(true), 'execution');
|
||||
if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die();
|
||||
|
||||
$projectID = $this->lang->navGroup->qa == 'project' ? $this->session->PRJ : 0;
|
||||
$projectID = $this->view->block->module == 'my' ? 0 : $projectID;
|
||||
|
||||
$this->view->testtasks = $this->dao->select('t1.*,t2.name as productName,t3.name as buildName,t4.name as projectName')->from(TABLE_TESTTASK)->alias('t1')
|
||||
->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product=t2.id')
|
||||
->leftJoin(TABLE_BUILD)->alias('t3')->on('t1.build=t3.id')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t4')->on('t1.project=t4.id')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t5')->on('t1.project=t5.project')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t4')->on('t1.execution=t4.id')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t5')->on('t1.execution=t5.project')
|
||||
->where('t1.deleted')->eq('0')
|
||||
->beginIF($projectID)->andWhere('t1.project')->eq($projectID)->fi()
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t1.product')->in($this->app->user->view->products)->fi()
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t1.execution')->in($this->app->user->view->sprints)->fi()
|
||||
->andWhere('t1.product = t5.product')
|
||||
->beginIF($this->params->type != 'all')->andWhere('t1.status')->eq($this->params->type)->fi()
|
||||
->orderBy('t1.id desc')
|
||||
@@ -689,15 +700,16 @@ class block extends control
|
||||
*/
|
||||
public function printStoryBlock()
|
||||
{
|
||||
$this->session->set('storyList', $this->app->getURI(true));
|
||||
$this->session->set('storyList', $this->app->getURI(true), 'product');
|
||||
if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die();
|
||||
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$count = isset($this->params->count) ? (int)$this->params->count : 0;
|
||||
$pager = pager::init(0, $count , 1);
|
||||
$type = isset($this->params->type) ? $this->params->type : 'assignedTo';
|
||||
$orderBy = isset($this->params->type) ? $this->params->orderBy : 'id_asc';
|
||||
|
||||
$this->view->stories = $this->loadModel('story')->getUserStories($this->app->user->account, $type, $orderBy, $this->viewType != 'json' ? $pager : '', 'story');
|
||||
$this->view->stories = $this->loadModel('story')->getUserStories($this->app->user->account, $type, $orderBy, $this->viewType != 'json' ? $pager : '', 'story');
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -708,7 +720,9 @@ class block extends control
|
||||
*/
|
||||
public function printPlanBlock()
|
||||
{
|
||||
$this->session->set('productPlanList', $this->app->getURI(true));
|
||||
$this->session->set('productList', $this->app->getURI(true), 'product');
|
||||
$this->session->set('productPlanList', $this->app->getURI(true), 'product');
|
||||
|
||||
$this->app->loadLang('productplan');
|
||||
$this->view->plans = $this->dao->select('t1.*,t2.name as productName')->from(TABLE_PRODUCTPLAN)->alias('t1')
|
||||
->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product=t2.id')
|
||||
@@ -727,13 +741,15 @@ class block extends control
|
||||
*/
|
||||
public function printReleaseBlock()
|
||||
{
|
||||
$this->session->set('releaseList', $this->app->getURI(true));
|
||||
$this->session->set('releaseList', $this->app->getURI(true), 'product');
|
||||
$this->session->set('buildList', $this->app->getURI(true), 'execution');
|
||||
|
||||
$this->app->loadLang('release');
|
||||
$this->view->releases = $this->dao->select('t1.*,t2.name as productName,t3.name as buildName')->from(TABLE_RELEASE)->alias('t1')
|
||||
->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product=t2.id')
|
||||
->leftJoin(TABLE_BUILD)->alias('t3')->on('t1.build=t3.id')
|
||||
->where('t1.deleted')->eq('0')
|
||||
->beginIF($this->view->block->module != 'my' and $this->session->PRJ)->andWhere('t1.project')->eq((int)$this->session->PRJ)->fi()
|
||||
->beginIF($this->view->block->module != 'my' and $this->session->project)->andWhere('t1.project')->eq((int)$this->session->project)->fi()
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t1.product')->in($this->app->user->view->products)->fi()
|
||||
->orderBy('t1.id desc')
|
||||
->beginIF($this->viewType != 'json')->limit((int)$this->params->count)->fi()
|
||||
@@ -748,14 +764,14 @@ class block extends control
|
||||
*/
|
||||
public function printBuildBlock()
|
||||
{
|
||||
$this->session->set('buildList', $this->app->getURI(true));
|
||||
$this->session->set('buildList', $this->app->getURI(true), 'execution');
|
||||
$this->app->loadLang('build');
|
||||
|
||||
$builds = $this->dao->select('t1.*, t2.name as productName')->from(TABLE_BUILD)->alias('t1')
|
||||
->leftJoin(TABLE_PRODUCT)->alias('t2')->on('t1.product=t2.id')
|
||||
->where('t1.deleted')->eq('0')
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t1.project')->in($this->app->user->view->projects)->fi()
|
||||
->beginIF($this->view->block->module != 'my' and $this->session->PRJ)->andWhere('t1.project')->eq((int)$this->session->PRJ)->fi()
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t1.execution')->in($this->app->user->view->sprints)->fi()
|
||||
->beginIF($this->view->block->module != 'my' and $this->session->project)->andWhere('t1.project')->eq((int)$this->session->project)->fi()
|
||||
->orderBy('t1.id desc')
|
||||
->beginIF($this->viewType != 'json')->limit((int)$this->params->count)->fi()
|
||||
->fetchAll();
|
||||
@@ -837,6 +853,7 @@ class block extends control
|
||||
$this->loadModel('weekly');
|
||||
$this->app->loadLang('task');
|
||||
$this->app->loadLang('story');
|
||||
$this->app->loadLang('bug');
|
||||
|
||||
/* Set project status and count. */
|
||||
$status = isset($this->params->type) ? $this->params->type : 'all';
|
||||
@@ -869,7 +886,7 @@ class block extends control
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$pager = pager::init(0, 3, 1);
|
||||
$project->progress = $project->allStories == 0 ? 0 : round($project->doneStories / $project->allStories, 3) * 100;
|
||||
$project->executions = $this->project->getStats($projectID, 'all', 0, 0, 30, 'id_asc', $pager);
|
||||
$project->executions = $this->project->getStats($projectID, 'all', 0, 0, 30, 'id_desc', $pager);
|
||||
}
|
||||
elseif($project->model == 'waterfall' and isset($this->config->maxVersion))
|
||||
{
|
||||
@@ -959,34 +976,6 @@ class block extends control
|
||||
$plans[$product] = $plan;
|
||||
}
|
||||
|
||||
/* Get projects. */
|
||||
$projects = $this->dao->select('t1.product, t2.status, t2.end')->from(TABLE_PROJECTPRODUCT)->alias('t1')
|
||||
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project=t2.id')
|
||||
->where('t1.product')->in($productIdList)
|
||||
->andWhere('t2.deleted')->eq(0)
|
||||
->beginIF(!$this->app->user->admin)->andWhere('t2.id')->in($this->app->user->view->projects)->fi()
|
||||
->fetchGroup('product');
|
||||
foreach($projects as $product => $productProjects)
|
||||
{
|
||||
$undone= 0;
|
||||
$done = 0;
|
||||
$delay = 0;
|
||||
|
||||
foreach($productProjects as $project)
|
||||
{
|
||||
($project->status == 'done' or $project->status == 'closed') ? $done++ : $undone++;
|
||||
if($project->status != 'done' && $project->status != 'closed' && $project->status != 'suspended' && $project->end < helper::today()) $delay++;
|
||||
}
|
||||
|
||||
$project = array();
|
||||
$project['undone'] = $undone;
|
||||
$project['done'] = $done;
|
||||
$project['delay'] = $delay;
|
||||
$project['all'] = count($productProjects);
|
||||
|
||||
$projects[$product] = $project;
|
||||
}
|
||||
|
||||
/* Get releases. */
|
||||
$releases = $this->dao->select('product, status, COUNT(*) AS count')->from(TABLE_RELEASE)
|
||||
->where('deleted')->eq(0)
|
||||
@@ -1012,14 +1001,12 @@ class block extends control
|
||||
{
|
||||
$product->stories = isset($stories[$productID]) ? $stories[$productID] : 0;
|
||||
$product->plans = isset($plans[$productID]) ? $plans[$productID] : 0;
|
||||
$product->projects = isset($projects[$productID]) ? $projects[$productID] : 0;
|
||||
$product->releases = isset($releases[$productID]) ? $releases[$productID] : 0;
|
||||
$product->lastRelease = isset($lastReleases[$productID]) ? $lastReleases[$productID] : 0;
|
||||
}
|
||||
|
||||
$this->app->loadLang('story');
|
||||
$this->app->loadLang('productplan');
|
||||
$this->app->loadLang('project');
|
||||
$this->app->loadLang('release');
|
||||
|
||||
$this->view->products = $products;
|
||||
@@ -1043,7 +1030,7 @@ class block extends control
|
||||
$count = isset($this->params->count) ? (int)$this->params->count : 0;
|
||||
|
||||
/* Get projects. */
|
||||
$projectID = $this->view->block->module == 'my' ? 0 : (int)$this->session->PRJ;
|
||||
$projectID = $this->view->block->module == 'my' ? 0 : (int)$this->session->project;
|
||||
$executions = $this->loadModel('execution')->getOrderedExecutions($projectID, $status, $count);
|
||||
if(empty($executions))
|
||||
{
|
||||
@@ -1107,7 +1094,7 @@ class block extends control
|
||||
}
|
||||
|
||||
/* Get bugs. */
|
||||
$bugs = $this->dao->select("project, status, count(status) as totalBugs, count(status = 'active' or null) as activeBugs, count(resolvedDate like '{$yesterday}%' or null) as yesterdayResolved")->from(TABLE_BUG)
|
||||
$bugs = $this->dao->select("project, count(status) as totalBugs, count(status = 'active' or null) as activeBugs, count(resolvedDate like '{$yesterday}%' or null) as yesterdayResolved")->from(TABLE_BUG)
|
||||
->where('project')->in($executionIdList)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->groupBy('project')
|
||||
@@ -1163,7 +1150,8 @@ class block extends control
|
||||
*/
|
||||
public function printWaterfallReportBlock()
|
||||
{
|
||||
$project = $this->loadModel('project')->getByID($this->session->PRJ);
|
||||
$this->app->loadLang('programplan');
|
||||
$project = $this->loadModel('project')->getByID($this->session->project);
|
||||
$today = helper::today();
|
||||
$date = date('Ymd', strtotime('this week Monday'));
|
||||
$begin = $project->begin;
|
||||
@@ -1173,19 +1161,19 @@ class block extends control
|
||||
$task = $this->dao->select("
|
||||
sum(consumed) as totalConsumed,
|
||||
sum(if(status != 'cancel' and status != 'closed', `left`, 0)) as totalLeft")
|
||||
->from(TABLE_TASK)->where('project')->eq($this->session->PRJ)
|
||||
->from(TABLE_TASK)->where('project')->eq($this->session->project)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->andWhere('parent')->lt(1)
|
||||
->fetch();
|
||||
|
||||
$this->view->pv = $this->weekly->getPV($this->session->PRJ, $today);
|
||||
$this->view->ev = $this->weekly->getEV($this->session->PRJ, $today);
|
||||
$this->view->ac = $this->weekly->getAC($this->session->PRJ, $today);
|
||||
$this->view->pv = $this->weekly->getPV($this->session->project, $today);
|
||||
$this->view->ev = $this->weekly->getEV($this->session->project, $today);
|
||||
$this->view->ac = $this->weekly->getAC($this->session->project, $today);
|
||||
$this->view->sv = $this->weekly->getSV($this->view->ev, $this->view->pv);
|
||||
$this->view->cv = $this->weekly->getCV($this->view->ev, $this->view->ac);
|
||||
|
||||
$this->view->current = $current;
|
||||
$this->view->progress = ($task->totalConsumed + $task->totalLeft) ? round($task->totalConsumed / ($task->totalConsumed + $task->totalLeft), 3) * 100 : 0;
|
||||
$this->view->progress = ($task->totalConsumed + $task->totalLeft) ? floor($task->totalConsumed / ($task->totalConsumed + $task->totalLeft) * 1000) / 1000 * 100 : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1196,11 +1184,11 @@ class block extends control
|
||||
*/
|
||||
public function printWaterfallGanttBlock()
|
||||
{
|
||||
$products = $this->loadModel('product')->getProductPairsByProject($this->session->PRJ);
|
||||
$products = $this->loadModel('product')->getProductPairsByProject($this->session->project);
|
||||
$productID = $this->session->product ? $this->session->product : 0;
|
||||
$productID = isset($products[$productID]) ? $productID : key($products);
|
||||
|
||||
$this->view->plans = $this->loadModel('programplan')->getDataForGantt($this->session->PRJ, $productID, 0, 'task', false);
|
||||
$this->view->plans = $this->loadModel('programplan')->getDataForGantt($this->session->project, $productID, 0, 'task', false);
|
||||
$this->view->products = $products;
|
||||
$this->view->productID = $productID;
|
||||
}
|
||||
@@ -1214,10 +1202,10 @@ class block extends control
|
||||
public function printWaterfallIssueBlock()
|
||||
{
|
||||
$uri = $this->app->getURI(true);
|
||||
$this->session->set('issueList', $uri);
|
||||
$this->session->set('issueList', $uri, 'project');
|
||||
if(preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die();
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter');
|
||||
$this->view->issues = $this->loadModel('issue')->getBlockIssues($this->session->PRJ, $this->params->type, $this->viewType == 'json' ? 0 : (int)$this->params->count, $this->params->orderBy);
|
||||
$this->view->issues = $this->loadModel('issue')->getBlockIssues($this->session->project, $this->params->type, $this->viewType == 'json' ? 0 : (int)$this->params->count, $this->params->orderBy);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1229,9 +1217,9 @@ class block extends control
|
||||
public function printWaterfallRiskBlock()
|
||||
{
|
||||
$uri = $this->app->getURI(true);
|
||||
$this->session->set('riskList', $uri);
|
||||
$this->session->set('riskList', $uri, 'project');
|
||||
$this->view->users = $this->loadModel('user')->getPairs('noletter');
|
||||
$this->view->risks = $this->loadModel('risk')->getBlockRisks($this->session->PRJ, $this->params->type, $this->viewType == 'json' ? 0 : (int)$this->params->count, $this->params->orderBy);
|
||||
$this->view->risks = $this->loadModel('risk')->getBlockRisks($this->session->project, $this->params->type, $this->viewType == 'json' ? 0 : (int)$this->params->count, $this->params->orderBy);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1243,15 +1231,19 @@ class block extends control
|
||||
public function printWaterfallEstimateBlock()
|
||||
{
|
||||
$this->app->loadLang('durationestimation');
|
||||
$projectID = $this->session->PRJ;
|
||||
$members = $this->loadModel('project')->getTeamMemberPairs($projectID);
|
||||
$this->loadModel('project');
|
||||
|
||||
$projectID = $this->session->project;
|
||||
$members = $this->loadModel('user')->getTeamMemberPairs($projectID, 'project');
|
||||
$budget = $this->loadModel('workestimation')->getBudget($projectID);
|
||||
$workhour = $this->loadModel('project')->getWorkhour($projectID);
|
||||
if(empty($budget)) $budget = new stdclass();
|
||||
|
||||
$this->view->people = $this->dao->select('sum(people) as people')->from(TABLE_DURATIONESTIMATION)->where('project')->eq($this->session->PRJ)->fetch('people');
|
||||
$this->view->members = count($members) ? count($members) - 1 : 0;
|
||||
$this->view->consumed = $this->dao->select('sum(cast(consumed as decimal(10,2))) as consumed')->from(TABLE_TASK)->where('project')->eq($projectID)->andWhere('deleted')->eq(0)->andWhere('parent')->lt(1)->fetch('consumed');
|
||||
$this->view->budget = $budget;
|
||||
$this->view->people = $this->dao->select('sum(people) as people')->from(TABLE_DURATIONESTIMATION)->where('project')->eq($this->session->project)->fetch('people');
|
||||
$this->view->members = count($members) ? count($members) - 1 : 0;
|
||||
$this->view->consumed = $this->dao->select('sum(cast(consumed as decimal(10,2))) as consumed')->from(TABLE_TASK)->where('project')->eq($projectID)->andWhere('deleted')->eq(0)->andWhere('parent')->lt(1)->fetch('consumed');
|
||||
$this->view->budget = $budget;
|
||||
$this->view->totalLeft = (float)$workhour->totalLeft;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1264,7 +1256,9 @@ class block extends control
|
||||
{
|
||||
$this->loadModel('milestone');
|
||||
$this->loadModel('weekly');
|
||||
$projectID = $this->session->PRJ;
|
||||
$this->app->loadLang('execution');
|
||||
|
||||
$projectID = $this->session->project;
|
||||
$project = $this->loadModel('project')->getByID($projectID);
|
||||
|
||||
$begin = $project->begin;
|
||||
@@ -1301,8 +1295,9 @@ class block extends control
|
||||
*/
|
||||
public function printScrumOverviewBlock()
|
||||
{
|
||||
$projectID = $this->session->PRJ;
|
||||
$projectID = $this->session->project;
|
||||
$this->app->loadLang('execution');
|
||||
$this->app->loadLang('bug');
|
||||
$totalData = $this->loadModel('project')->getOverviewList('byId', $projectID, 'id_desc', 1);
|
||||
|
||||
$this->view->totalData = $totalData;
|
||||
@@ -1319,12 +1314,12 @@ class block extends control
|
||||
{
|
||||
if(!empty($this->params->type) and preg_match('/[^a-zA-Z0-9_]/', $this->params->type)) die();
|
||||
$count = isset($this->params->count) ? (int)$this->params->count : 15;
|
||||
$type = isset($this->params->type) ? $this->params->type : 'all';
|
||||
$type = isset($this->params->type) ? $this->params->type : 'undone';
|
||||
|
||||
$this->app->loadClass('pager', $static = true);
|
||||
$pager = pager::init(0, $count, 1);
|
||||
$this->app->loadLang('execution');
|
||||
$this->view->executionStats = $this->loadModel('project')->getStats($this->session->PRJ, $type, 0, 0, 30, 'id_desc', $pager);
|
||||
$this->view->executionStats = $this->loadModel('project')->getStats($this->session->project, $type, 0, 0, 30, 'id_desc', $pager);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1367,7 +1362,7 @@ class block extends control
|
||||
$sprints = $this->dao->select('status, count(*) as sprints')->from(TABLE_EXECUTION)
|
||||
->where('deleted')->eq(0)
|
||||
->andWhere('type')->eq('sprint')
|
||||
->andWhere('parent')->eq($this->session->PRJ)
|
||||
->andWhere('parent')->eq($this->session->project)
|
||||
->groupBy('status')
|
||||
->fetchPairs();
|
||||
|
||||
@@ -1392,7 +1387,7 @@ class block extends control
|
||||
*/
|
||||
public function printProjectDynamicBlock()
|
||||
{
|
||||
$projectID = $this->session->PRJ;
|
||||
$projectID = $this->session->project;
|
||||
|
||||
$executions = $this->loadModel('execution')->getPairs($projectID);
|
||||
$products = $this->loadModel('product')->getProductPairsByProject($projectID);
|
||||
@@ -1421,10 +1416,10 @@ class block extends control
|
||||
*/
|
||||
public function printScrumRoadMapBlock($productID = 0, $roadMapID = 0)
|
||||
{
|
||||
$this->session->set('releaseList', $this->app->getURI(true));
|
||||
$this->session->set('productPlanList', $this->app->getURI(true));
|
||||
$this->session->set('releaseList', $this->app->getURI(true), 'product');
|
||||
$this->session->set('productPlanList', $this->app->getURI(true), 'product');
|
||||
|
||||
$products = $this->loadModel('product')->getPairs('', $this->session->PRJ);
|
||||
$products = $this->loadModel('product')->getPairs('', $this->session->project);
|
||||
if(!is_numeric($productID)) $productID = key($products);
|
||||
|
||||
$this->view->roadmaps = $this->product->getRoadmap($productID, 0, 6);
|
||||
@@ -1448,7 +1443,10 @@ class block extends control
|
||||
*/
|
||||
public function printScrumTestBlock()
|
||||
{
|
||||
$this->session->set('testtaskList', $this->app->getURI(true));
|
||||
$this->session->set('testtaskList', $this->app->getURI(true), 'qa');
|
||||
$this->session->set('productList', $this->app->getURI(true), 'product');
|
||||
$this->session->set('projectList', $this->app->getURI(true), 'project');
|
||||
$this->session->set('buildList', $this->app->getURI(true), 'execution');
|
||||
$this->app->loadLang('testtask');
|
||||
|
||||
$count = zget($this->params, 'count', 10);
|
||||
@@ -1461,7 +1459,7 @@ class block extends control
|
||||
->leftJoin(TABLE_PROJECT)->alias('t4')->on('t1.project=t4.id')
|
||||
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t5')->on('t1.project=t5.project')
|
||||
->where('t1.deleted')->eq('0')
|
||||
->andWhere('t1.project')->eq($this->session->PRJ)->fi()
|
||||
->andWhere('t1.project')->eq($this->session->project)->fi()
|
||||
->andWhere('t1.product = t5.product')
|
||||
->beginIF($status != 'all')->andWhere('t1.status')->eq($status)->fi()
|
||||
->orderBy('t1.id desc')
|
||||
@@ -1483,7 +1481,7 @@ class block extends control
|
||||
$status = isset($this->params->type) ? $this->params->type : '';
|
||||
$count = isset($this->params->count) ? (int)$this->params->count : 0;
|
||||
|
||||
$projectID = $this->lang->navGroup->qa == 'project' ? $this->session->PRJ : 0;
|
||||
$projectID = $this->lang->navGroup->qa == 'project' ? $this->session->project : 0;
|
||||
$products = $this->loadModel('product')->getOrderedProducts($status, $count, $projectID);
|
||||
if(empty($products))
|
||||
{
|
||||
@@ -1587,7 +1585,7 @@ class block extends control
|
||||
*/
|
||||
public function printExecutionOverviewBlock()
|
||||
{
|
||||
$projectID = $this->view->block->module == 'my' ? 0 : (int)$this->session->PRJ;
|
||||
$projectID = $this->view->block->module == 'my' ? 0 : (int)$this->session->project;
|
||||
$executions = $this->loadModel('execution')->getList($projectID);
|
||||
|
||||
$total = 0;
|
||||
@@ -1620,7 +1618,7 @@ class block extends control
|
||||
{
|
||||
$casePairs = $this->dao->select('lastRunResult, COUNT(*) AS count')->from(TABLE_CASE)
|
||||
->where('1=1')
|
||||
->beginIF($this->view->block->module != 'my' and $this->session->PRJ)->andWhere('project')->eq((int)$this->session->PRJ)->fi()
|
||||
->beginIF($this->view->block->module != 'my' and $this->session->project)->andWhere('project')->eq((int)$this->session->project)->fi()
|
||||
->groupBy('lastRunResult')
|
||||
->fetchPairs();
|
||||
|
||||
@@ -1657,7 +1655,7 @@ class block extends control
|
||||
$status = isset($this->params->type) ? $this->params->type : 'all';
|
||||
$pager = pager::init(0, $count, 1);
|
||||
|
||||
$projectID = $this->view->block->module == 'my' ? 0 : (int)$this->session->PRJ;
|
||||
$projectID = $this->view->block->module == 'my' ? 0 : (int)$this->session->project;
|
||||
$this->view->executionStats = $this->loadModel('project')->getStats($projectID, $status, 0, 0, 30, 'id_asc', $pager);
|
||||
}
|
||||
|
||||
@@ -1687,7 +1685,9 @@ class block extends control
|
||||
$stmt = $this->dao->select('*')->from(TABLE_TODO)
|
||||
->where("(assignedTo = '{$this->app->user->account}' or (account='{$this->app->user->account}'))")
|
||||
->andWhere('cycle')->eq(0)
|
||||
->orderBy('`date`');
|
||||
->andWhere('deleted')->eq(0)
|
||||
->andWhere('status')->eq('wait')
|
||||
->orderBy('`date` desc');
|
||||
if(isset($params->todoNum)) $stmt->limit($params->todoNum);
|
||||
$todos = $stmt->fetchAll();
|
||||
|
||||
|
||||
@@ -26,3 +26,8 @@ body {padding-bottom: 20px;}
|
||||
#dashboard .block-sm .hide-in-sm {display: none;}
|
||||
#dashboard .block-dynamic .panel-body {overflow-x: hidden;}
|
||||
.modal-body {padding: 10px 20px 20px 20px;}
|
||||
|
||||
#dashboard .block-scrumoverview .table {margin-bottom: 12px;}
|
||||
#dashboard .block-scrumoverview .table thead tr th {padding-left: 0; text-align: right; border-bottom: unset;}
|
||||
#dashboard .block-scrumoverview .table tbody tr td {padding-left: 0;}
|
||||
#dashboard .block-scrumoverview .table tbody tr th {text-align: right;}
|
||||
|
||||
@@ -9,17 +9,32 @@ $(function()
|
||||
var title = $titleInput.val();
|
||||
var value = $(this).find('option:selected').text();
|
||||
|
||||
var lang = config.clientLang;
|
||||
if(lang.indexOf('zh') >= 0)
|
||||
if($blocksList.find('#moduleBlock').val() == 'scrumtest' && $('#paramstype').val() != 'all')
|
||||
{
|
||||
blockTitle = blockTitle.replace(preValue, value);
|
||||
$titleInput.val(blockTitle);
|
||||
$titleInput.val(value);
|
||||
}
|
||||
else
|
||||
{
|
||||
var preIndex = blockTitle.indexOf(of + preValue);
|
||||
if(preIndex >= 0) blockTitle = blockTitle.substring(0, preIndex);
|
||||
$titleInput.val(blockTitle + of + value);
|
||||
var lang = config.clientLang;
|
||||
blockTitle = $blockParams.find('#title').val();
|
||||
if(lang.indexOf('zh') >= 0)
|
||||
{
|
||||
if(blockTitle.indexOf(preValue) >= 0)
|
||||
{
|
||||
blockTitle = blockTitle.replace(preValue, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(blockTitle.indexOf(preValue) < 0) blockTitle = value + of + title;;
|
||||
}
|
||||
$titleInput.val(blockTitle);
|
||||
}
|
||||
else
|
||||
{
|
||||
var preIndex = blockTitle.indexOf(of + preValue);
|
||||
if(preIndex >= 0) blockTitle = blockTitle.substring(0, preIndex);
|
||||
$titleInput.val(blockTitle + of + value);
|
||||
}
|
||||
}
|
||||
|
||||
preValue = value;
|
||||
@@ -51,8 +66,15 @@ $(function()
|
||||
var preIndex = blockTitle.indexOf(' - ' + preValue);
|
||||
if(preIndex >= 0) blockTitle = blockTitle.substring(0, preIndex);
|
||||
|
||||
var lang = config.clientLang;
|
||||
if(blockTitle.indexOf(of) < 0) lang.indexOf('zh') >= 0 ? $titleInput.val(preValue + of + blockTitle) : $titleInput.val(blockTitle + of + preValue);
|
||||
if($blocksList.find('#moduleBlock').val() == 'scrumtest')
|
||||
{
|
||||
$titleInput.val(preValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
var lang = config.clientLang;
|
||||
if(!title && blockTitle.indexOf(of) < 0) lang.indexOf('zh') >= 0 ? $titleInput.val(preValue + of + blockTitle) : $titleInput.val(blockTitle + of + preValue);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -88,6 +88,7 @@ function refreshBlock($panel, afterRefresh)
|
||||
}
|
||||
$panel.find('.tablesorter').sortTable();
|
||||
$panel.find('.chosen').chosen();
|
||||
$panel.children('.table-header-fixed').remove();
|
||||
initTableHeader($panel);
|
||||
$(".sparkline").sparkline();
|
||||
}).fail(function()
|
||||
|
||||
+44
-27
@@ -9,13 +9,18 @@
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
global $config;
|
||||
$lang->block = new stdclass();
|
||||
$lang->block->common = 'InfoBlock';
|
||||
$lang->block->name = 'Name';
|
||||
$lang->block->style = 'Style';
|
||||
$lang->block->grid = 'Gitter';
|
||||
$lang->block->color = 'Farbe';
|
||||
$lang->block->reset = 'Zurücksetzen';
|
||||
$lang->block->common = 'InfoBlock';
|
||||
$lang->block->name = 'Name';
|
||||
$lang->block->style = 'Style';
|
||||
$lang->block->grid = 'Gitter';
|
||||
$lang->block->color = 'Farbe';
|
||||
$lang->block->reset = 'Zurücksetzen';
|
||||
$lang->block->story = 'Story';
|
||||
$lang->block->investment = 'Investment';
|
||||
$lang->block->estimate = 'Estimate';
|
||||
$lang->block->last = 'Last';
|
||||
|
||||
$lang->block->account = 'Konto';
|
||||
$lang->block->module = 'Modul';
|
||||
@@ -31,7 +36,7 @@ $lang->block->lblBlock = 'InfoBlock';
|
||||
$lang->block->lblNum = 'Nummer';
|
||||
$lang->block->lblHtml = 'HTML';
|
||||
$lang->block->dynamic = 'Verlauf';
|
||||
$lang->block->assignToMe = 'Mir zugewiesen';
|
||||
$lang->block->assignToMe = 'Todo';
|
||||
$lang->block->done = 'Done';
|
||||
$lang->block->lblFlowchart = 'Workflow';
|
||||
$lang->block->welcome = 'Willkommen';
|
||||
@@ -46,7 +51,7 @@ $lang->block->myExecution = 'Unclosed ' . $lang->executionCommon . 's';
|
||||
$lang->block->myProduct = 'Unclosed ' . $lang->productCommon . 's';
|
||||
$lang->block->delayed = 'Verspätet';
|
||||
$lang->block->noData = 'Keine Daten für diesen Bericht.';
|
||||
$lang->block->emptyTip = 'Keine Information';
|
||||
$lang->block->emptyTip = 'No Data.';
|
||||
$lang->block->createdTodos = 'Todos Created';
|
||||
$lang->block->createdRequirements = 'UR/Epics Created';
|
||||
$lang->block->createdStories = 'SR/Stories Created';
|
||||
@@ -68,6 +73,7 @@ $lang->block->time = 'No';
|
||||
$lang->block->week = 'Week';
|
||||
$lang->block->selectProduct = 'Product selection';
|
||||
$lang->block->of = ' von ';
|
||||
$lang->block->remain = 'Left';
|
||||
|
||||
$lang->block->params = new stdclass();
|
||||
$lang->block->params->name = 'Name';
|
||||
@@ -148,6 +154,10 @@ $lang->block->default['scrum']['project']['2']['title'] = $lang->executionCommon
|
||||
$lang->block->default['scrum']['project']['2']['block'] = 'scrumlist';
|
||||
$lang->block->default['scrum']['project']['2']['grid'] = 8;
|
||||
|
||||
$lang->block->default['scrum']['project']['2']['params']['type'] = 'undone';
|
||||
$lang->block->default['scrum']['project']['2']['params']['count'] = '20';
|
||||
$lang->block->default['scrum']['project']['2']['params']['orderBy'] = 'id_desc';
|
||||
|
||||
$lang->block->default['scrum']['project']['3']['title'] = 'Test Version';
|
||||
$lang->block->default['scrum']['project']['3']['block'] = 'scrumtest';
|
||||
$lang->block->default['scrum']['project']['3']['grid'] = 8;
|
||||
@@ -275,10 +285,14 @@ $lang->block->default['full']['my']['3']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['3']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['3']['params']['count'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['4']['title'] = 'Project Statistic';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['4']['title'] = 'Project Statistic';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['4']['params']['count'] = '20';
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['5']['title'] = 'Personal Contribution';
|
||||
$lang->block->default['full']['my']['5']['block'] = 'contribute';
|
||||
@@ -290,7 +304,7 @@ $lang->block->default['full']['my']['6']['block'] = 'recentproject';
|
||||
$lang->block->default['full']['my']['6']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['6']['grid'] = 8;
|
||||
|
||||
$lang->block->default['full']['my']['7']['title'] = 'AssignedToMe';
|
||||
$lang->block->default['full']['my']['7']['title'] = 'Todo';
|
||||
$lang->block->default['full']['my']['7']['block'] = 'assigntome';
|
||||
$lang->block->default['full']['my']['7']['source'] = '';
|
||||
$lang->block->default['full']['my']['7']['grid'] = 8;
|
||||
@@ -302,10 +316,13 @@ $lang->block->default['full']['my']['7']['params']['riskNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['issueNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['storyNum'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['8']['title'] = 'Human Input';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['8']['title'] = 'Human Input';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['9']['title'] = 'Project List';
|
||||
$lang->block->default['full']['my']['9']['block'] = 'project';
|
||||
@@ -320,7 +337,7 @@ $lang->block->type = 'Type';
|
||||
$lang->block->orderBy = 'Order by';
|
||||
|
||||
$lang->block->availableBlocks = new stdclass();
|
||||
$lang->block->availableBlocks->todo = 'Meine Todos';
|
||||
$lang->block->availableBlocks->todo = 'Meine Zeitplan';
|
||||
$lang->block->availableBlocks->task = 'Meine Aufgaben';
|
||||
$lang->block->availableBlocks->bug = 'Meine Bugs';
|
||||
$lang->block->availableBlocks->case = 'Meine Fälle';
|
||||
@@ -334,9 +351,9 @@ $lang->block->availableBlocks->testtask = 'Testaufgaben';
|
||||
$lang->block->availableBlocks->risk = 'My Risks';
|
||||
$lang->block->availableBlocks->issue = 'My Issues';
|
||||
|
||||
$lang->block->moduleList['project'] = 'Project';
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->executionCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->execution->common;
|
||||
$lang->block->moduleList['qa'] = 'QA';
|
||||
$lang->block->moduleList['todo'] = 'Todos';
|
||||
|
||||
@@ -376,9 +393,9 @@ $lang->block->modules['product']->availableBlocks->release = 'Release';
|
||||
|
||||
$lang->block->modules['execution'] = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->executionCommon . ' Statistik';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->executionCommon . ' Übersicht';
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->executionCommon . ' Liste';
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->execution->common . ' Statistik';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->execution->common . ' Übersicht';
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->execution->common . ' Liste';
|
||||
$lang->block->modules['execution']->availableBlocks->task = 'Aufgaben';
|
||||
$lang->block->modules['execution']->availableBlocks->build = 'Build';
|
||||
|
||||
@@ -494,7 +511,7 @@ $lang->block->typeList->execution['all'] = 'All';
|
||||
$lang->block->typeList->execution['involved'] = 'Involved';
|
||||
|
||||
$lang->block->typeList->scrum['undone'] = 'Unfinished';
|
||||
$lang->block->typeList->scrum['doing'] = 'Ongoing中';
|
||||
$lang->block->typeList->scrum['doing'] = 'Ongoing';
|
||||
$lang->block->typeList->scrum['all'] = 'All';
|
||||
$lang->block->typeList->scrum['involved'] = 'Involved';
|
||||
|
||||
@@ -512,11 +529,11 @@ $lang->block->modules['project']->moreLinkList->cmmireport = 'weekly|index|'
|
||||
$lang->block->modules['project']->moreLinkList->cmmiestimate = 'workestimation|index|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmiissue = 'issue|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmirisk = 'risk|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumtest = 'testtask|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumproduct = 'product|all|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'company|dynamic|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'project|dynamic|';
|
||||
|
||||
$lang->block->modules['product']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['product']->moreLinkList->list = 'product|all|';
|
||||
|
||||
+48
-26
@@ -9,13 +9,18 @@
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
global $config;
|
||||
$lang->block = new stdclass();
|
||||
$lang->block->common = 'Block';
|
||||
$lang->block->name = 'Name';
|
||||
$lang->block->style = 'Style';
|
||||
$lang->block->grid = 'Position';
|
||||
$lang->block->color = 'Color';
|
||||
$lang->block->reset = 'Reset Layout';
|
||||
$lang->block->common = 'Block';
|
||||
$lang->block->name = 'Name';
|
||||
$lang->block->style = 'Style';
|
||||
$lang->block->grid = 'Position';
|
||||
$lang->block->color = 'Color';
|
||||
$lang->block->reset = 'Reset Layout';
|
||||
$lang->block->story = 'Story';
|
||||
$lang->block->investment = 'Investment';
|
||||
$lang->block->estimate = 'Estimate';
|
||||
$lang->block->last = 'Last';
|
||||
|
||||
$lang->block->account = 'Account';
|
||||
$lang->block->module = 'Module';
|
||||
@@ -31,7 +36,7 @@ $lang->block->lblBlock = 'Block';
|
||||
$lang->block->lblNum = 'Number';
|
||||
$lang->block->lblHtml = 'HTML';
|
||||
$lang->block->dynamic = 'Dynamics';
|
||||
$lang->block->assignToMe = 'Assigned To Me';
|
||||
$lang->block->assignToMe = 'Todo';
|
||||
$lang->block->done = 'Done';
|
||||
$lang->block->lblFlowchart = 'Flowchart';
|
||||
$lang->block->welcome = 'Welcome';
|
||||
@@ -68,6 +73,7 @@ $lang->block->time = 'No';
|
||||
$lang->block->week = 'Week';
|
||||
$lang->block->selectProduct = 'Product selection';
|
||||
$lang->block->of = ' of ';
|
||||
$lang->block->remain = 'Left';
|
||||
|
||||
$lang->block->params = new stdclass();
|
||||
$lang->block->params->name = 'Name';
|
||||
@@ -148,6 +154,10 @@ $lang->block->default['scrum']['project']['2']['title'] = $lang->executionCommon
|
||||
$lang->block->default['scrum']['project']['2']['block'] = 'scrumlist';
|
||||
$lang->block->default['scrum']['project']['2']['grid'] = 8;
|
||||
|
||||
$lang->block->default['scrum']['project']['2']['params']['type'] = 'undone';
|
||||
$lang->block->default['scrum']['project']['2']['params']['count'] = '20';
|
||||
$lang->block->default['scrum']['project']['2']['params']['orderBy'] = 'id_desc';
|
||||
|
||||
$lang->block->default['scrum']['project']['3']['title'] = 'Test Version';
|
||||
$lang->block->default['scrum']['project']['3']['block'] = 'scrumtest';
|
||||
$lang->block->default['scrum']['project']['3']['grid'] = 8;
|
||||
@@ -275,10 +285,14 @@ $lang->block->default['full']['my']['3']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['3']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['3']['params']['count'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['4']['title'] = 'Project Statistic';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['4']['title'] = 'Project Statistic';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['4']['params']['count'] = '20';
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['5']['title'] = 'Personal Contribution';
|
||||
$lang->block->default['full']['my']['5']['block'] = 'contribute';
|
||||
@@ -290,7 +304,7 @@ $lang->block->default['full']['my']['6']['block'] = 'recentproject';
|
||||
$lang->block->default['full']['my']['6']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['6']['grid'] = 8;
|
||||
|
||||
$lang->block->default['full']['my']['7']['title'] = 'Assigned To Me';
|
||||
$lang->block->default['full']['my']['7']['title'] = 'Todo';
|
||||
$lang->block->default['full']['my']['7']['block'] = 'assigntome';
|
||||
$lang->block->default['full']['my']['7']['source'] = '';
|
||||
$lang->block->default['full']['my']['7']['grid'] = 8;
|
||||
@@ -302,15 +316,23 @@ $lang->block->default['full']['my']['7']['params']['riskNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['issueNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['storyNum'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['8']['title'] = 'Human Input';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['8']['title'] = 'Human Input';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['9']['title'] = 'Project List';
|
||||
$lang->block->default['full']['my']['9']['block'] = 'project';
|
||||
$lang->block->default['full']['my']['9']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['9']['grid'] = 8;
|
||||
if($config->systemMode == 'classic')
|
||||
{
|
||||
$lang->block->default['full']['my']['9']['block'] = 'execution';
|
||||
$lang->block->default['full']['my']['9']['source'] = 'execution';
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['9']['params']['orderBy'] = 'id_desc';
|
||||
$lang->block->default['full']['my']['9']['params']['count'] = '15';
|
||||
@@ -320,7 +342,7 @@ $lang->block->type = 'Type';
|
||||
$lang->block->orderBy = 'Order by';
|
||||
|
||||
$lang->block->availableBlocks = new stdclass();
|
||||
$lang->block->availableBlocks->todo = 'My Todos';
|
||||
$lang->block->availableBlocks->todo = 'My schedule';
|
||||
$lang->block->availableBlocks->task = 'My Tasks';
|
||||
$lang->block->availableBlocks->bug = 'My Bugs';
|
||||
$lang->block->availableBlocks->case = 'My Cases';
|
||||
@@ -334,9 +356,9 @@ $lang->block->availableBlocks->testtask = 'Requests';
|
||||
$lang->block->availableBlocks->risk = 'My Risks';
|
||||
$lang->block->availableBlocks->issue = 'My Issues';
|
||||
|
||||
$lang->block->moduleList['project'] = 'Project';
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->executionCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->execution->common;
|
||||
$lang->block->moduleList['qa'] = 'Test';
|
||||
$lang->block->moduleList['todo'] = 'Todo';
|
||||
|
||||
@@ -376,9 +398,9 @@ $lang->block->modules['product']->availableBlocks->release = 'Release';
|
||||
|
||||
$lang->block->modules['execution'] = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->executionCommon . ' Statistics';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->executionCommon . ' Overview';
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->executionCommon . ' List';
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->execution->common . ' Statistics';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->execution->common . ' Overview';
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->execution->common . ' List';
|
||||
$lang->block->modules['execution']->availableBlocks->task = 'Task';
|
||||
$lang->block->modules['execution']->availableBlocks->build = 'Build';
|
||||
|
||||
@@ -494,7 +516,7 @@ $lang->block->typeList->execution['all'] = 'All';
|
||||
$lang->block->typeList->execution['involved'] = 'Involved';
|
||||
|
||||
$lang->block->typeList->scrum['undone'] = 'Unfinished';
|
||||
$lang->block->typeList->scrum['doing'] = 'Ongoing中';
|
||||
$lang->block->typeList->scrum['doing'] = 'Ongoing';
|
||||
$lang->block->typeList->scrum['all'] = 'All';
|
||||
$lang->block->typeList->scrum['involved'] = 'Involved';
|
||||
|
||||
@@ -512,11 +534,11 @@ $lang->block->modules['project']->moreLinkList->cmmireport = 'weekly|index|'
|
||||
$lang->block->modules['project']->moreLinkList->cmmiestimate = 'workestimation|index|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmiissue = 'issue|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmirisk = 'risk|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumtest = 'testtask|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumproduct = 'product|all|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'company|dynamic|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'project|dynamic|';
|
||||
|
||||
$lang->block->modules['product']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['product']->moreLinkList->list = 'product|all|';
|
||||
|
||||
+43
-26
@@ -9,13 +9,18 @@
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
global $config;
|
||||
$lang->block = new stdclass();
|
||||
$lang->block->common = 'Bloc';
|
||||
$lang->block->name = 'Nom';
|
||||
$lang->block->style = 'Style';
|
||||
$lang->block->grid = 'Position';
|
||||
$lang->block->color = 'Couleur';
|
||||
$lang->block->reset = 'Réinit';
|
||||
$lang->block->common = 'Bloc';
|
||||
$lang->block->name = 'Nom';
|
||||
$lang->block->style = 'Style';
|
||||
$lang->block->grid = 'Position';
|
||||
$lang->block->color = 'Couleur';
|
||||
$lang->block->reset = 'Réinit';
|
||||
$lang->block->story = 'Story';
|
||||
$lang->block->investment = 'Investment';
|
||||
$lang->block->estimate = 'Estimate';
|
||||
$lang->block->last = 'Last';
|
||||
|
||||
$lang->block->account = 'Compte';
|
||||
$lang->block->module = 'Module';
|
||||
@@ -31,7 +36,7 @@ $lang->block->lblBlock = 'Bloc';
|
||||
$lang->block->lblNum = 'Numéro';
|
||||
$lang->block->lblHtml = 'HTML';
|
||||
$lang->block->dynamic = 'Historique';
|
||||
$lang->block->assignToMe = 'Assigné à moi';
|
||||
$lang->block->assignToMe = 'Todo';
|
||||
$lang->block->done = 'Done';
|
||||
$lang->block->lblFlowchart = 'Organigramme';
|
||||
$lang->block->welcome = 'Bienvenue';
|
||||
@@ -68,6 +73,7 @@ $lang->block->time = 'No';
|
||||
$lang->block->week = 'Week';
|
||||
$lang->block->selectProduct = 'Product selection';
|
||||
$lang->block->of = ' di ';
|
||||
$lang->block->remain = 'Left';
|
||||
|
||||
$lang->block->params = new stdclass();
|
||||
$lang->block->params->name = 'Nom';
|
||||
@@ -148,6 +154,10 @@ $lang->block->default['scrum']['project']['2']['title'] = $lang->executionCommon
|
||||
$lang->block->default['scrum']['project']['2']['block'] = 'scrumlist';
|
||||
$lang->block->default['scrum']['project']['2']['grid'] = 8;
|
||||
|
||||
$lang->block->default['scrum']['project']['2']['params']['type'] = 'undone';
|
||||
$lang->block->default['scrum']['project']['2']['params']['count'] = '20';
|
||||
$lang->block->default['scrum']['project']['2']['params']['orderBy'] = 'id_desc';
|
||||
|
||||
$lang->block->default['scrum']['project']['3']['title'] = 'Test Version';
|
||||
$lang->block->default['scrum']['project']['3']['block'] = 'scrumtest';
|
||||
$lang->block->default['scrum']['project']['3']['grid'] = 8;
|
||||
@@ -275,10 +285,14 @@ $lang->block->default['full']['my']['3']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['3']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['3']['params']['count'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['4']['title'] = 'Project Statistic';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['4']['title'] = 'Project Statistic';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['4']['params']['count'] = '20';
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['5']['title'] = 'Personal Contribution';
|
||||
$lang->block->default['full']['my']['5']['block'] = 'contribute';
|
||||
@@ -290,7 +304,7 @@ $lang->block->default['full']['my']['6']['block'] = 'recentproject';
|
||||
$lang->block->default['full']['my']['6']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['6']['grid'] = 8;
|
||||
|
||||
$lang->block->default['full']['my']['7']['title'] = 'AssignedToMe';
|
||||
$lang->block->default['full']['my']['7']['title'] = 'Todo';
|
||||
$lang->block->default['full']['my']['7']['block'] = 'assigntome';
|
||||
$lang->block->default['full']['my']['7']['source'] = '';
|
||||
$lang->block->default['full']['my']['7']['grid'] = 8;
|
||||
@@ -302,10 +316,13 @@ $lang->block->default['full']['my']['7']['params']['riskNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['issueNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['storyNum'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['8']['title'] = 'Human Input';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['8']['title'] = 'Human Input';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['9']['title'] = 'Project List';
|
||||
$lang->block->default['full']['my']['9']['block'] = 'project';
|
||||
@@ -320,7 +337,7 @@ $lang->block->type = 'Type';
|
||||
$lang->block->orderBy = 'Trié par';
|
||||
|
||||
$lang->block->availableBlocks = new stdclass();
|
||||
$lang->block->availableBlocks->todo = 'Ma Todo List';
|
||||
$lang->block->availableBlocks->todo = 'Mon emploi du temps';
|
||||
$lang->block->availableBlocks->task = 'Mes Tâches';
|
||||
$lang->block->availableBlocks->bug = 'Mes Bugs';
|
||||
$lang->block->availableBlocks->case = 'Mes CasTests';
|
||||
@@ -334,9 +351,9 @@ $lang->block->availableBlocks->testtask = 'Recettes';
|
||||
$lang->block->availableBlocks->risk = 'My Risks';
|
||||
$lang->block->availableBlocks->issue = 'My Issues';
|
||||
|
||||
$lang->block->moduleList['project'] = 'Project';
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->executionCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->execution->common;
|
||||
$lang->block->moduleList['qa'] = 'Test';
|
||||
$lang->block->moduleList['todo'] = 'Todo';
|
||||
|
||||
@@ -376,9 +393,9 @@ $lang->block->modules['product']->availableBlocks->release = 'Release';
|
||||
|
||||
$lang->block->modules['execution'] = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->executionCommon . ' Statistiques';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->executionCommon . " Vue d'ensemble";
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->executionCommon . ' Liste';
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->execution->common . ' Statistiques';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->execution->common . " Vue d'ensemble";
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->execution->common . ' Liste';
|
||||
$lang->block->modules['execution']->availableBlocks->task = 'Tâches';
|
||||
$lang->block->modules['execution']->availableBlocks->build = 'Build';
|
||||
|
||||
@@ -494,7 +511,7 @@ $lang->block->typeList->execution['all'] = 'All';
|
||||
$lang->block->typeList->execution['involved'] = 'Involved';
|
||||
|
||||
$lang->block->typeList->scrum['undone'] = 'Unfinished';
|
||||
$lang->block->typeList->scrum['doing'] = 'Ongoing中';
|
||||
$lang->block->typeList->scrum['doing'] = 'Ongoing';
|
||||
$lang->block->typeList->scrum['all'] = 'All';
|
||||
$lang->block->typeList->scrum['involved'] = 'Involved';
|
||||
|
||||
@@ -512,11 +529,11 @@ $lang->block->modules['project']->moreLinkList->cmmireport = 'weekly|index|'
|
||||
$lang->block->modules['project']->moreLinkList->cmmiestimate = 'workestimation|index|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmiissue = 'issue|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmirisk = 'risk|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumtest = 'testtask|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumproduct = 'product|all|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'company|dynamic|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'project|dynamic|';
|
||||
|
||||
$lang->block->modules['product']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['product']->moreLinkList->list = 'product|all|';
|
||||
|
||||
+44
-27
@@ -9,13 +9,18 @@
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
global $config;
|
||||
$lang->block = new stdclass();
|
||||
$lang->block->common = 'Block';
|
||||
$lang->block->name = 'Tên';
|
||||
$lang->block->style = 'Kiểu';
|
||||
$lang->block->grid = 'Vị trí';
|
||||
$lang->block->color = 'Màu';
|
||||
$lang->block->reset = 'Thiết lập lại giao diện';
|
||||
$lang->block->common = 'Block';
|
||||
$lang->block->name = 'Tên';
|
||||
$lang->block->style = 'Kiểu';
|
||||
$lang->block->grid = 'Vị trí';
|
||||
$lang->block->color = 'Màu';
|
||||
$lang->block->reset = 'Thiết lập lại giao diện';
|
||||
$lang->block->story = 'Story';
|
||||
$lang->block->investment = 'Investment';
|
||||
$lang->block->estimate = 'Estimate';
|
||||
$lang->block->last = 'Last';
|
||||
|
||||
$lang->block->account = 'Tài khoản';
|
||||
$lang->block->module = 'Module';
|
||||
@@ -31,7 +36,7 @@ $lang->block->lblBlock = 'Block';
|
||||
$lang->block->lblNum = 'Số';
|
||||
$lang->block->lblHtml = 'HTML';
|
||||
$lang->block->dynamic = 'Lịch sử';
|
||||
$lang->block->assignToMe = 'Giao cho bạn';
|
||||
$lang->block->assignToMe = 'Todo';
|
||||
$lang->block->done = 'Done';
|
||||
$lang->block->lblFlowchart = 'Biểu đồ';
|
||||
$lang->block->welcome = 'Welcome';
|
||||
@@ -46,7 +51,7 @@ $lang->block->myExecution = 'Unclosed ' . $lang->executionCommon . 's';
|
||||
$lang->block->myProduct = 'Unclosed ' . $lang->productCommon . 's';
|
||||
$lang->block->delayed = 'Tạm ngưng';
|
||||
$lang->block->noData = 'Không có dữ liệu trên loại báo cáo này.';
|
||||
$lang->block->emptyTip = 'Không có dữ liệu.';
|
||||
$lang->block->emptyTip = 'No Data.';
|
||||
$lang->block->createdTodos = 'Todos Created';
|
||||
$lang->block->createdRequirements = 'UR/Epics Created';
|
||||
$lang->block->createdStories = 'SR/Stories Created';
|
||||
@@ -68,6 +73,7 @@ $lang->block->time = 'No';
|
||||
$lang->block->week = 'Week';
|
||||
$lang->block->selectProduct = 'Product selection';
|
||||
$lang->block->of = ' thực ';
|
||||
$lang->block->remain = 'Left';
|
||||
|
||||
$lang->block->params = new stdclass();
|
||||
$lang->block->params->name = 'Tên';
|
||||
@@ -148,6 +154,10 @@ $lang->block->default['scrum']['project']['2']['title'] = 'Project List';
|
||||
$lang->block->default['scrum']['project']['2']['block'] = 'scrumlist';
|
||||
$lang->block->default['scrum']['project']['2']['grid'] = 8;
|
||||
|
||||
$lang->block->default['scrum']['project']['2']['params']['type'] = 'undone';
|
||||
$lang->block->default['scrum']['project']['2']['params']['count'] = '20';
|
||||
$lang->block->default['scrum']['project']['2']['params']['orderBy'] = 'id_desc';
|
||||
|
||||
$lang->block->default['scrum']['project']['3']['title'] = 'Test Version';
|
||||
$lang->block->default['scrum']['project']['3']['block'] = 'scrumtest';
|
||||
$lang->block->default['scrum']['project']['3']['grid'] = 8;
|
||||
@@ -275,10 +285,14 @@ $lang->block->default['full']['my']['3']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['3']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['3']['params']['count'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['4']['title'] = 'Project Statistic';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['4']['title'] = 'Project Statistic';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['4']['params']['count'] = '20';
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['5']['title'] = 'Personal Contribution';
|
||||
$lang->block->default['full']['my']['5']['block'] = 'contribute';
|
||||
@@ -290,7 +304,7 @@ $lang->block->default['full']['my']['6']['block'] = 'recentproject';
|
||||
$lang->block->default['full']['my']['6']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['6']['grid'] = 8;
|
||||
|
||||
$lang->block->default['full']['my']['7']['title'] = 'AssignedToMe';
|
||||
$lang->block->default['full']['my']['7']['title'] = 'Todo';
|
||||
$lang->block->default['full']['my']['7']['block'] = 'assigntome';
|
||||
$lang->block->default['full']['my']['7']['source'] = '';
|
||||
$lang->block->default['full']['my']['7']['grid'] = 8;
|
||||
@@ -302,10 +316,13 @@ $lang->block->default['full']['my']['7']['params']['riskNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['issueNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['storyNum'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['8']['title'] = 'Human Input';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['8']['title'] = 'Human Input';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['9']['title'] = 'Project List';
|
||||
$lang->block->default['full']['my']['9']['block'] = 'project';
|
||||
@@ -320,7 +337,7 @@ $lang->block->type = 'Loại';
|
||||
$lang->block->orderBy = 'Order by';
|
||||
|
||||
$lang->block->availableBlocks = new stdclass();
|
||||
$lang->block->availableBlocks->todo = 'Việc của bạn';
|
||||
$lang->block->availableBlocks->todo = 'Lịch của tôi';
|
||||
$lang->block->availableBlocks->task = 'Nhiệm vụ';
|
||||
$lang->block->availableBlocks->bug = 'Bugs của bạn';
|
||||
$lang->block->availableBlocks->case = 'Tình huống của bạn';
|
||||
@@ -334,9 +351,9 @@ $lang->block->availableBlocks->testtask = 'Yêu cầu';
|
||||
$lang->block->availableBlocks->risk = 'My Risks';
|
||||
$lang->block->availableBlocks->issue = 'My Issues';
|
||||
|
||||
$lang->block->moduleList['project'] = 'Project';
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = 'Project';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->executionCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->execution->common;
|
||||
$lang->block->moduleList['qa'] = 'QA';
|
||||
$lang->block->moduleList['todo'] = 'Việc làm';
|
||||
|
||||
@@ -376,9 +393,9 @@ $lang->block->modules['product']->availableBlocks->release = 'Phát hành';
|
||||
|
||||
$lang->block->modules['execution'] = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->executionCommon . ' thống';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->executionCommon . ' xem';
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->executionCommon . ' danh sách';
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->execution->common . ' thống';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->execution->common . ' xem';
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->execution->common . ' danh sách';
|
||||
$lang->block->modules['execution']->availableBlocks->task = 'Nhiệm vụ';
|
||||
$lang->block->modules['execution']->availableBlocks->build = 'Bản dựng';
|
||||
|
||||
@@ -494,7 +511,7 @@ $lang->block->typeList->execution['all'] = 'Tất cả';
|
||||
$lang->block->typeList->execution['involved'] = 'Liên đới';
|
||||
|
||||
$lang->block->typeList->scrum['undone'] = 'Unfinished';
|
||||
$lang->block->typeList->scrum['doing'] = 'Ongoing中';
|
||||
$lang->block->typeList->scrum['doing'] = 'Ongoing';
|
||||
$lang->block->typeList->scrum['all'] = 'All';
|
||||
$lang->block->typeList->scrum['involved'] = 'Involved';
|
||||
|
||||
@@ -512,11 +529,11 @@ $lang->block->modules['project']->moreLinkList->cmmireport = 'weekly|index|'
|
||||
$lang->block->modules['project']->moreLinkList->cmmiestimate = 'workestimation|index|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmiissue = 'issue|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmirisk = 'risk|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumtest = 'testtask|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumproduct = 'product|all|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'company|dynamic|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'project|dynamic|';
|
||||
|
||||
$lang->block->modules['product']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['product']->moreLinkList->list = 'product|all|';
|
||||
|
||||
+52
-30
@@ -9,13 +9,18 @@
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
global $config;
|
||||
$lang->block = new stdclass();
|
||||
$lang->block->common = '区块';
|
||||
$lang->block->name = '区块名称';
|
||||
$lang->block->style = '外观';
|
||||
$lang->block->grid = '位置';
|
||||
$lang->block->color = '颜色';
|
||||
$lang->block->reset = '恢复默认';
|
||||
$lang->block->common = '区块';
|
||||
$lang->block->name = '区块名称';
|
||||
$lang->block->style = '外观';
|
||||
$lang->block->grid = '位置';
|
||||
$lang->block->color = '颜色';
|
||||
$lang->block->reset = '恢复默认';
|
||||
$lang->block->story = '需求';
|
||||
$lang->block->investment = '投入';
|
||||
$lang->block->estimate = '预计工时';
|
||||
$lang->block->last = '近期';
|
||||
|
||||
$lang->block->account = '所属用户';
|
||||
$lang->block->module = '所属模块';
|
||||
@@ -31,7 +36,7 @@ $lang->block->lblBlock = '区块';
|
||||
$lang->block->lblNum = '条数';
|
||||
$lang->block->lblHtml = 'HTML内容';
|
||||
$lang->block->dynamic = '最新动态';
|
||||
$lang->block->assignToMe = '指派给我';
|
||||
$lang->block->assignToMe = '待处理';
|
||||
$lang->block->done = '已完成';
|
||||
$lang->block->lblFlowchart = '流程图';
|
||||
$lang->block->welcome = '欢迎总览';
|
||||
@@ -46,7 +51,7 @@ $lang->block->myExecution = '未关闭的' . $lang->executionCommon;
|
||||
$lang->block->myProduct = '未关闭的' . $lang->productCommon;
|
||||
$lang->block->delayed = '已延期';
|
||||
$lang->block->noData = '当前统计类型下暂无数据';
|
||||
$lang->block->emptyTip = '暂无信息';
|
||||
$lang->block->emptyTip = '暂无数据';
|
||||
$lang->block->createdTodos = '创建的待办数';
|
||||
$lang->block->createdRequirements = '创建的' . $lang->URCommon . '数';
|
||||
$lang->block->createdStories = '创建的' . $lang->SRCommon . '数';
|
||||
@@ -68,6 +73,7 @@ $lang->block->time = '第';
|
||||
$lang->block->week = '周';
|
||||
$lang->block->selectProduct = '选择产品';
|
||||
$lang->block->of = '的';
|
||||
$lang->block->remain = '剩余工时';
|
||||
|
||||
$lang->block->params = new stdclass();
|
||||
$lang->block->params->name = '参数名称';
|
||||
@@ -140,7 +146,7 @@ $lang->block->default['waterfall']['project']['7']['params']['type'] = 'all';
|
||||
$lang->block->default['waterfall']['project']['7']['params']['count'] = '15';
|
||||
$lang->block->default['waterfall']['project']['7']['params']['orderBy'] = 'id_desc';
|
||||
|
||||
$lang->block->default['scrum']['project']['1']['title'] = '项目整体情况';
|
||||
$lang->block->default['scrum']['project']['1']['title'] = '项目概况';
|
||||
$lang->block->default['scrum']['project']['1']['block'] = 'scrumoverview';
|
||||
$lang->block->default['scrum']['project']['1']['grid'] = 8;
|
||||
|
||||
@@ -148,6 +154,10 @@ $lang->block->default['scrum']['project']['2']['title'] = $lang->executionCommon
|
||||
$lang->block->default['scrum']['project']['2']['block'] = 'scrumlist';
|
||||
$lang->block->default['scrum']['project']['2']['grid'] = 8;
|
||||
|
||||
$lang->block->default['scrum']['project']['2']['params']['type'] = 'undone';
|
||||
$lang->block->default['scrum']['project']['2']['params']['count'] = '20';
|
||||
$lang->block->default['scrum']['project']['2']['params']['orderBy'] = 'id_desc';
|
||||
|
||||
$lang->block->default['scrum']['project']['3']['title'] = '待测版本';
|
||||
$lang->block->default['scrum']['project']['3']['block'] = 'scrumtest';
|
||||
$lang->block->default['scrum']['project']['3']['grid'] = 8;
|
||||
@@ -275,10 +285,14 @@ $lang->block->default['full']['my']['3']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['3']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['3']['params']['count'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['4']['title'] = '项目统计';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['4']['title'] = '项目统计';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['4']['params']['count'] = '20';
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['5']['title'] = '我的贡献';
|
||||
$lang->block->default['full']['my']['5']['block'] = 'contribute';
|
||||
@@ -290,7 +304,7 @@ $lang->block->default['full']['my']['6']['block'] = 'recentproject';
|
||||
$lang->block->default['full']['my']['6']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['6']['grid'] = 8;
|
||||
|
||||
$lang->block->default['full']['my']['7']['title'] = '指派给我';
|
||||
$lang->block->default['full']['my']['7']['title'] = '待处理';
|
||||
$lang->block->default['full']['my']['7']['block'] = 'assigntome';
|
||||
$lang->block->default['full']['my']['7']['source'] = '';
|
||||
$lang->block->default['full']['my']['7']['grid'] = 8;
|
||||
@@ -302,15 +316,23 @@ $lang->block->default['full']['my']['7']['params']['riskNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['issueNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['storyNum'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['8']['title'] = '项目人力投入';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['8']['title'] = '项目人力投入';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['9']['title'] = '项目列表';
|
||||
$lang->block->default['full']['my']['9']['block'] = 'project';
|
||||
$lang->block->default['full']['my']['9']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['9']['grid'] = 8;
|
||||
if($config->systemMode == 'classic')
|
||||
{
|
||||
$lang->block->default['full']['my']['9']['block'] = 'execution';
|
||||
$lang->block->default['full']['my']['9']['source'] = 'execution';
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['9']['params']['orderBy'] = 'id_desc';
|
||||
$lang->block->default['full']['my']['9']['params']['count'] = '15';
|
||||
@@ -320,7 +342,7 @@ $lang->block->type = '类型';
|
||||
$lang->block->orderBy = '排序';
|
||||
|
||||
$lang->block->availableBlocks = new stdclass();
|
||||
$lang->block->availableBlocks->todo = '我的待办';
|
||||
$lang->block->availableBlocks->todo = '我的日程';
|
||||
$lang->block->availableBlocks->task = '我的任务';
|
||||
$lang->block->availableBlocks->bug = '我的Bug';
|
||||
$lang->block->availableBlocks->case = '我的用例';
|
||||
@@ -334,9 +356,9 @@ $lang->block->availableBlocks->testtask = '测试版本列表';
|
||||
$lang->block->availableBlocks->risk = '我的风险';
|
||||
$lang->block->availableBlocks->issue = '我的问题';
|
||||
|
||||
$lang->block->moduleList['project'] = '项目';
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = '项目';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->executionCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->execution->common;
|
||||
$lang->block->moduleList['qa'] = '测试';
|
||||
$lang->block->moduleList['todo'] = '待办';
|
||||
|
||||
@@ -345,11 +367,11 @@ $lang->block->modules['project']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['project']->availableBlocks->project = '项目列表';
|
||||
$lang->block->modules['project']->availableBlocks->recentproject = '近期项目';
|
||||
$lang->block->modules['project']->availableBlocks->statistic = '项目统计';
|
||||
$lang->block->modules['project']->availableBlocks->projectteam = '项目人力投入';
|
||||
if($config->systemMode == 'new') $lang->block->modules['project']->availableBlocks->projectteam = '项目人力投入';
|
||||
|
||||
$lang->block->modules['scrum']['index'] = new stdclass();
|
||||
$lang->block->modules['scrum']['index']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['scrum']['index']->availableBlocks->scrumoverview = '项目整体情况';
|
||||
$lang->block->modules['scrum']['index']->availableBlocks->scrumoverview = '项目概况';
|
||||
$lang->block->modules['scrum']['index']->availableBlocks->scrumlist = $lang->executionCommon . '列表';
|
||||
$lang->block->modules['scrum']['index']->availableBlocks->sprint = $lang->executionCommon . '总览';
|
||||
$lang->block->modules['scrum']['index']->availableBlocks->scrumtest = '待测版本';
|
||||
@@ -376,9 +398,9 @@ $lang->block->modules['product']->availableBlocks->release = '发布列表';
|
||||
|
||||
$lang->block->modules['execution'] = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->executionCommon . '统计';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->executionCommon . '总览';
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->executionCommon . '列表';
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->execution->common . '统计';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->execution->common . '总览';
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->execution->common . '列表';
|
||||
$lang->block->modules['execution']->availableBlocks->task = '任务列表';
|
||||
$lang->block->modules['execution']->availableBlocks->build = '版本列表';
|
||||
|
||||
@@ -512,11 +534,11 @@ $lang->block->modules['project']->moreLinkList->cmmireport = 'weekly|index|'
|
||||
$lang->block->modules['project']->moreLinkList->cmmiestimate = 'workestimation|index|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmiissue = 'issue|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmirisk = 'risk|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumtest = 'testtask|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumtest = 'project|testtask|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumproduct = 'product|all|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'company|dynamic|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'project|dynamic|';
|
||||
|
||||
$lang->block->modules['product']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['product']->moreLinkList->list = 'product|all|';
|
||||
|
||||
+52
-30
@@ -9,13 +9,18 @@
|
||||
* @version $Id$
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
global $config;
|
||||
$lang->block = new stdclass();
|
||||
$lang->block->common = '區塊';
|
||||
$lang->block->name = '區塊名稱';
|
||||
$lang->block->style = '外觀';
|
||||
$lang->block->grid = '位置';
|
||||
$lang->block->color = '顏色';
|
||||
$lang->block->reset = '恢復預設';
|
||||
$lang->block->common = '區塊';
|
||||
$lang->block->name = '區塊名稱';
|
||||
$lang->block->style = '外觀';
|
||||
$lang->block->grid = '位置';
|
||||
$lang->block->color = '顏色';
|
||||
$lang->block->reset = '恢復預設';
|
||||
$lang->block->story = '需求';
|
||||
$lang->block->investment = '投入';
|
||||
$lang->block->estimate = '預計工時';
|
||||
$lang->block->last = '近期';
|
||||
|
||||
$lang->block->account = '所屬用戶';
|
||||
$lang->block->module = '所屬模組';
|
||||
@@ -31,7 +36,7 @@ $lang->block->lblBlock = '區塊';
|
||||
$lang->block->lblNum = '條數';
|
||||
$lang->block->lblHtml = 'HTML內容';
|
||||
$lang->block->dynamic = '最新動態';
|
||||
$lang->block->assignToMe = '指派給我';
|
||||
$lang->block->assignToMe = '待處理';
|
||||
$lang->block->done = '已完成';
|
||||
$lang->block->lblFlowchart = '流程圖';
|
||||
$lang->block->welcome = '歡迎總覽';
|
||||
@@ -46,7 +51,7 @@ $lang->block->myExecution = '未關閉的' . $lang->executionCommon;
|
||||
$lang->block->myProduct = '未關閉的' . $lang->productCommon;
|
||||
$lang->block->delayed = '已延期';
|
||||
$lang->block->noData = '當前統計類型下暫無數據';
|
||||
$lang->block->emptyTip = '暫無信息';
|
||||
$lang->block->emptyTip = '暫無數據';
|
||||
$lang->block->createdTodos = '創建的待辦數';
|
||||
$lang->block->createdRequirements = '創建的' . $lang->URCommon . '數';
|
||||
$lang->block->createdStories = '創建的' . $lang->SRCommon . '數';
|
||||
@@ -68,6 +73,7 @@ $lang->block->time = '第';
|
||||
$lang->block->week = '周';
|
||||
$lang->block->selectProduct = '選擇產品';
|
||||
$lang->block->of = '的';
|
||||
$lang->block->remain = '剩餘工時';
|
||||
|
||||
$lang->block->params = new stdclass();
|
||||
$lang->block->params->name = '參數名稱';
|
||||
@@ -140,7 +146,7 @@ $lang->block->default['waterfall']['project']['7']['params']['type'] = 'all';
|
||||
$lang->block->default['waterfall']['project']['7']['params']['count'] = '15';
|
||||
$lang->block->default['waterfall']['project']['7']['params']['orderBy'] = 'id_desc';
|
||||
|
||||
$lang->block->default['scrum']['project']['1']['title'] = '項目整體情況';
|
||||
$lang->block->default['scrum']['project']['1']['title'] = '項目概況';
|
||||
$lang->block->default['scrum']['project']['1']['block'] = 'scrumoverview';
|
||||
$lang->block->default['scrum']['project']['1']['grid'] = 8;
|
||||
|
||||
@@ -148,6 +154,10 @@ $lang->block->default['scrum']['project']['2']['title'] = $lang->executionCommon
|
||||
$lang->block->default['scrum']['project']['2']['block'] = 'scrumlist';
|
||||
$lang->block->default['scrum']['project']['2']['grid'] = 8;
|
||||
|
||||
$lang->block->default['scrum']['project']['2']['params']['type'] = 'undone';
|
||||
$lang->block->default['scrum']['project']['2']['params']['count'] = '20';
|
||||
$lang->block->default['scrum']['project']['2']['params']['orderBy'] = 'id_desc';
|
||||
|
||||
$lang->block->default['scrum']['project']['3']['title'] = '待測版本';
|
||||
$lang->block->default['scrum']['project']['3']['block'] = 'scrumtest';
|
||||
$lang->block->default['scrum']['project']['3']['grid'] = 8;
|
||||
@@ -275,10 +285,14 @@ $lang->block->default['full']['my']['3']['grid'] = 4;
|
||||
$lang->block->default['full']['my']['3']['source'] = 'todo';
|
||||
$lang->block->default['full']['my']['3']['params']['count'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['4']['title'] = '項目統計';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['4']['title'] = '項目統計';
|
||||
$lang->block->default['full']['my']['4']['block'] = 'statistic';
|
||||
$lang->block->default['full']['my']['4']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['4']['grid'] = 8;
|
||||
$lang->block->default['full']['my']['4']['params']['count'] = '20';
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['5']['title'] = '我的貢獻';
|
||||
$lang->block->default['full']['my']['5']['block'] = 'contribute';
|
||||
@@ -290,7 +304,7 @@ $lang->block->default['full']['my']['6']['block'] = 'recentproject';
|
||||
$lang->block->default['full']['my']['6']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['6']['grid'] = 8;
|
||||
|
||||
$lang->block->default['full']['my']['7']['title'] = '指派給我';
|
||||
$lang->block->default['full']['my']['7']['title'] = '待處理';
|
||||
$lang->block->default['full']['my']['7']['block'] = 'assigntome';
|
||||
$lang->block->default['full']['my']['7']['source'] = '';
|
||||
$lang->block->default['full']['my']['7']['grid'] = 8;
|
||||
@@ -302,15 +316,23 @@ $lang->block->default['full']['my']['7']['params']['riskNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['issueNum'] = '20';
|
||||
$lang->block->default['full']['my']['7']['params']['storyNum'] = '20';
|
||||
|
||||
$lang->block->default['full']['my']['8']['title'] = '項目人力投入';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
if($config->systemMode == 'new')
|
||||
{
|
||||
$lang->block->default['full']['my']['8']['title'] = '項目人力投入';
|
||||
$lang->block->default['full']['my']['8']['block'] = 'projectteam';
|
||||
$lang->block->default['full']['my']['8']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['8']['grid'] = 8;
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['9']['title'] = '項目列表';
|
||||
$lang->block->default['full']['my']['9']['block'] = 'project';
|
||||
$lang->block->default['full']['my']['9']['source'] = 'project';
|
||||
$lang->block->default['full']['my']['9']['grid'] = 8;
|
||||
if($config->systemMode == 'classic')
|
||||
{
|
||||
$lang->block->default['full']['my']['9']['block'] = 'execution';
|
||||
$lang->block->default['full']['my']['9']['source'] = 'execution';
|
||||
}
|
||||
|
||||
$lang->block->default['full']['my']['9']['params']['orderBy'] = 'id_desc';
|
||||
$lang->block->default['full']['my']['9']['params']['count'] = '15';
|
||||
@@ -320,7 +342,7 @@ $lang->block->type = '類型';
|
||||
$lang->block->orderBy = '排序';
|
||||
|
||||
$lang->block->availableBlocks = new stdclass();
|
||||
$lang->block->availableBlocks->todo = '我的待辦';
|
||||
$lang->block->availableBlocks->todo = '我的日程';
|
||||
$lang->block->availableBlocks->task = '我的任務';
|
||||
$lang->block->availableBlocks->bug = '我的Bug';
|
||||
$lang->block->availableBlocks->case = '我的用例';
|
||||
@@ -334,9 +356,9 @@ $lang->block->availableBlocks->testtask = '測試版本列表';
|
||||
$lang->block->availableBlocks->risk = '我的風險';
|
||||
$lang->block->availableBlocks->issue = '我的問題';
|
||||
|
||||
$lang->block->moduleList['project'] = '項目';
|
||||
if($config->systemMode == 'new') $lang->block->moduleList['project'] = '項目';
|
||||
$lang->block->moduleList['product'] = $lang->productCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->executionCommon;
|
||||
$lang->block->moduleList['execution'] = $lang->execution->common;
|
||||
$lang->block->moduleList['qa'] = '測試';
|
||||
$lang->block->moduleList['todo'] = '待辦';
|
||||
|
||||
@@ -345,11 +367,11 @@ $lang->block->modules['project']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['project']->availableBlocks->project = '項目列表';
|
||||
$lang->block->modules['project']->availableBlocks->recentproject = '近期項目';
|
||||
$lang->block->modules['project']->availableBlocks->statistic = '項目統計';
|
||||
$lang->block->modules['project']->availableBlocks->projectteam = '項目人力投入';
|
||||
if($config->systemMode == 'new') $lang->block->modules['project']->availableBlocks->projectteam = '項目人力投入';
|
||||
|
||||
$lang->block->modules['scrum']['index'] = new stdclass();
|
||||
$lang->block->modules['scrum']['index']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['scrum']['index']->availableBlocks->scrumoverview = '項目整體情況';
|
||||
$lang->block->modules['scrum']['index']->availableBlocks->scrumoverview = '項目概況';
|
||||
$lang->block->modules['scrum']['index']->availableBlocks->scrumlist = $lang->executionCommon . '列表';
|
||||
$lang->block->modules['scrum']['index']->availableBlocks->sprint = $lang->executionCommon . '總覽';
|
||||
$lang->block->modules['scrum']['index']->availableBlocks->scrumtest = '待測版本';
|
||||
@@ -376,9 +398,9 @@ $lang->block->modules['product']->availableBlocks->release = '發佈列表';
|
||||
|
||||
$lang->block->modules['execution'] = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks = new stdclass();
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->executionCommon . '統計';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->executionCommon . '總覽';
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->executionCommon . '列表';
|
||||
$lang->block->modules['execution']->availableBlocks->statistic = $lang->execution->common . '統計';
|
||||
$lang->block->modules['execution']->availableBlocks->overview = $lang->execution->common . '總覽';
|
||||
$lang->block->modules['execution']->availableBlocks->list = $lang->execution->common . '列表';
|
||||
$lang->block->modules['execution']->availableBlocks->task = '任務列表';
|
||||
$lang->block->modules['execution']->availableBlocks->build = '版本列表';
|
||||
|
||||
@@ -512,11 +534,11 @@ $lang->block->modules['project']->moreLinkList->cmmireport = 'weekly|index|'
|
||||
$lang->block->modules['project']->moreLinkList->cmmiestimate = 'workestimation|index|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmiissue = 'issue|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->cmmirisk = 'risk|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumtest = 'testtask|browse|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumlist = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumtest = 'project|testtask|';
|
||||
$lang->block->modules['project']->moreLinkList->scrumproduct = 'product|all|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|all|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'company|dynamic|';
|
||||
$lang->block->modules['project']->moreLinkList->sprint = 'project|execution|';
|
||||
$lang->block->modules['project']->moreLinkList->projectdynamic = 'project|dynamic|';
|
||||
|
||||
$lang->block->modules['product']->moreLinkList = new stdclass();
|
||||
$lang->block->modules['product']->moreLinkList->list = 'product|all|';
|
||||
|
||||
@@ -173,9 +173,9 @@ class blockModel extends model
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetch('count');
|
||||
$data['stories'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_STORY)->where('assignedTo')->eq($this->app->user->account)->andWhere('deleted')->eq(0)->andWhere('type')->eq('story')->fetch('count');
|
||||
$data['executions'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_PROJECT)
|
||||
$data['executions'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_EXECUTION)
|
||||
->where('status')->notIN('done,closed')
|
||||
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi()
|
||||
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->sprints)->fi()
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetch('count');
|
||||
$data['products'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_PRODUCT)
|
||||
@@ -201,7 +201,7 @@ class blockModel extends model
|
||||
->fetch('count');
|
||||
$data['delayProject'] = (int)$this->dao->select('count(*) AS count')->from(TABLE_PROJECT)
|
||||
->where('status')->in('wait,doing')
|
||||
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi()
|
||||
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->sprints)->fi()
|
||||
->andWhere('end')->lt($today)
|
||||
->andWhere('deleted')->eq(0)
|
||||
->fetch('count');
|
||||
|
||||
@@ -42,5 +42,6 @@ include '../../common/view/chosen.html.php';
|
||||
</form>
|
||||
<?php js::set('blockID', $blockID);?>
|
||||
<?php js::set('of', $lang->block->of);?>
|
||||
<?php js::set('title', isset($block->title) ? $block->title : '');?>
|
||||
<?php if(!empty($module)) js::set('module', $module);?>
|
||||
<?php if(isset($pageJS)) js::execute($pageJS);?>
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-level'><?php echo $lang->bug->severityAB?></th>
|
||||
<th class='c-pri'><?php echo $lang->priAB?></th>
|
||||
<th class='c-date'><?php echo $lang->bug->openedDate;?></th>
|
||||
<th class='c-date'><?php echo $lang->bug->deadline;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->bug->statusAB;?></th>
|
||||
</tr>
|
||||
@@ -53,7 +53,7 @@
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $bug->id);?></td>
|
||||
<td class='c-name' style='color: <?php echo $bug->color?>' title='<?php echo $bug->title?>'><?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id", '', '', $bug->project), $bug->title)?></td>
|
||||
<td class='c-name' title='<?php echo $bug->title?>'><?php echo html::a($this->createLink('bug', 'view', "bugID=$bug->id"), $bug->title, '', "style='color: $bug->color'")?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-severity'>
|
||||
<?php if($hasCustomSeverity):?>
|
||||
@@ -63,7 +63,7 @@
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<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>
|
||||
<td class='c-date'><?php echo $bug->openedDate;?></td>
|
||||
<td class='c-date'><?php echo helper::isZeroDate($bug->deadline) ? '' : $bug->deadline;?></td>
|
||||
<?php endif;?>
|
||||
<?php $status = $this->processStatus('bug', $bug);?>
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
|
||||
@@ -28,15 +28,16 @@
|
||||
<tbody>
|
||||
<?php foreach($builds as $build):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('build', 'view', "buildID={$build->id}");
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$buildViewLink = $this->createLink('build', 'view', "buildID={$build->id}");
|
||||
$productViewLink = $this->createLink('product', 'browse', "productID={$build->product}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<tr <?php echo $appid?>>
|
||||
<td class='text-center'><?php echo sprintf('%03d', $build->id);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td title='<?php echo $build->productName?>'><?php echo $build->productName?></td>
|
||||
<td title='<?php echo $build->productName?>'><?php echo html::a($productViewLink, $build->productName);?></td>
|
||||
<?php endif;?>
|
||||
<td title='<?php echo $build->name?>'><?php echo $build->name?></td>
|
||||
<td title='<?php echo $build->name?>'><?php echo html::a($buildViewLink, $build->name);?></td>
|
||||
<td><?php echo $build->date?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
|
||||
@@ -25,16 +25,14 @@
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-cases <?php if(!$longBlock) echo 'block-sm';?>'>
|
||||
<thead>
|
||||
<tr class='text-center'>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-id-xs'><?php echo $lang->idAB?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-pri'><?php echo $lang->priAB?></th>
|
||||
<th class='c-title text-left'><?php echo $lang->case->title;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-runtime'><?php echo $lang->testtask->lastRunTime;?></th>
|
||||
<th class='c-result'><?php echo $lang->testtask->lastRunResult;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->statusAB;?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -43,22 +41,20 @@
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('testcase', 'view', "caseID={$case->id}");
|
||||
?>
|
||||
<tr class='text-center' data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<?php if($longBlock):?>
|
||||
<tr class='text-center' <?php echo $appid?>>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $case->id);?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-pri'><span class='label-pri label-pri-<?php echo $case->pri?>' title='<?php echo zget($lang->case->priList, $case->pri, $case->pri);?>'><?php echo zget($lang->case->priList, $case->pri, $case->pri)?></span></td>
|
||||
<td class='c-title text-left' style='color: <?php echo $case->color?>' title='<?php echo $case->title?>'><?php echo $case->title?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-runtime'><?php if(!helper::isZeroDate($case->lastRunDate)) echo date(DT_MONTHTIME1, strtotime($case->lastRunDate));?></td>
|
||||
<td class='c-result'><?php if($case->lastRunResult) echo $lang->testcase->resultList[$case->lastRunResult];?></td>
|
||||
<?php endif;?>
|
||||
<?php $status = $this->processStatus('testcase', $case);?>
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
<span class="case-status-<?php echo $case->status?>">
|
||||
<span class='status-text'><?php echo $status;?></span>
|
||||
</span>
|
||||
</td>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
</tbody>
|
||||
|
||||
@@ -6,10 +6,12 @@
|
||||
<div class="tile-title"><?php echo $lang->block->createdTodos;?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdTodos']) ? 0 : html::a($this->createLink('my', 'todo', 'type=all'), (int)$data['createdTodos']);?></div>
|
||||
</div>
|
||||
<?php if($config->URAndSR):?>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->createdRequirements;?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdRequirements']) ? 0 : (int)$data['createdRequirements'];?></div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="col-xs-4 tile">
|
||||
<div class="tile-title"><?php echo $lang->block->createdStories;?></div>
|
||||
<div class="tile-amount"><?php echo empty($data['createdStories']) ? 0 : (int)$data['createdStories'];?></div>
|
||||
|
||||
@@ -22,7 +22,7 @@ $useGuest = $this->app->user->account == 'guest';
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
<span class="text-muted"><?php echo $lang->block->noData;?></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", "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>
|
||||
</div>
|
||||
@@ -105,21 +105,6 @@ config.ordersSaved = '<?php echo $lang->block->ordersSaved; ?>';
|
||||
config.confirmRemoveBlock = '<?php echo $lang->block->confirmRemoveBlock; ?>';
|
||||
var module = '<?php echo $module?>';
|
||||
var useGuest = <?php echo $useGuest ? 'true' : 'false';?>;
|
||||
<?php if(!$useGuest):?>
|
||||
<?php if(!isset($config->$module->block->initVersion) or $config->$module->block->initVersion < '2'):?>
|
||||
$(function()
|
||||
{
|
||||
if(confirm('<?php echo $lang->block->noticeNewBlock;?>'))
|
||||
{
|
||||
$('#hiddenwin').attr('src', '<?php echo $this->createLink('block', 'ajaxUseNew', "module=$module&confirm=yes");?>');
|
||||
}
|
||||
else
|
||||
{
|
||||
$('#hiddenwin').attr('src', '<?php echo $this->createLink('block', 'ajaxUseNew', "module=$module&confirm=no");?>');
|
||||
}
|
||||
})
|
||||
<?php endif;?>
|
||||
<?php endif;?>
|
||||
<?php $remind = $this->loadModel('misc')->getRemind();?>
|
||||
<?php if(!empty($remind)):?>
|
||||
var myModalTrigger = new $.zui.ModalTrigger({title:'<?php echo $lang->misc->remind;?>', custom: function(){return <?php echo json_encode($remind);?>}, width:'600px'});
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-dynamic .timeline > li .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; max-height: 20px; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; }
|
||||
.block-dynamic .timeline > li .timeline-text {display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-height: 20px;}
|
||||
.block-dynamic .panel-body {padding-top: 0;}
|
||||
</style>
|
||||
<div class='panel-body scrollbar-hover'>
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>.table .c-progress {width: 60px;}</style>
|
||||
<?php if(empty($executionStats)): ?>
|
||||
<div class='empty-tip'><?php common::printLink('execution', 'create', '', "<i class='icon-plus'></i> " . $lang->execution->create, '', "class='btn btn-primary'")?></div>
|
||||
<?php else:?>
|
||||
@@ -39,8 +40,8 @@
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn text-center' data-id='{$this->get->entry}'" : "class='text-center'";
|
||||
$viewLink = $this->createLink('execution', 'task', 'executionID=' . $execution->id);
|
||||
?>
|
||||
<tr 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 $execution->name;?>'><nobr><?php echo html::a($this->createLink('execution', 'task', 'executionID=' . $execution->id), $execution->name, '', "title='$execution->name'");?></nobr></td>
|
||||
<tr <?php echo $appid?>>
|
||||
<td class='c-name text-left' title='<?php echo $execution->name;?>'><nobr><?php echo html::a($viewLink, $execution->name, '', "title='$execution->name'");?></nobr></td>
|
||||
<td class="c-date"><?php echo $execution->end;?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class="w-70px">
|
||||
@@ -51,15 +52,13 @@
|
||||
<span class="status-project status-<?php echo $execution->status?>" title='<?php echo $statusName;?>'><?php echo $statusName;?></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalEstimate . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalEstimate . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalConsumed . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalConsumed . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalLeft . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalLeft . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalEstimate . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalEstimate . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalConsumed . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalConsumed . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalLeft . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalLeft . $lang->execution->workHourUnit;?></td>
|
||||
<?php endif;?>
|
||||
<td class="c-progress">
|
||||
<div class="progress progress-text-left">
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $execution->hours->progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $execution->hours->progress;?>%">
|
||||
<span class="progress-text"><?php echo $execution->hours->progress;?>%</span>
|
||||
</div>
|
||||
<div class='progress-pie' data-doughnut-size='90' data-color='#00da88' data-value='<?php echo $execution->hours->progress;?>' data-width='24' data-height='24' data-back-color='#e8edf3'>
|
||||
<div class='progress-info'><?php echo $execution->hours->progress;?></div>
|
||||
</div>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<style>
|
||||
.block-issues .c-id {width: 50px;}
|
||||
.block-issues .c-pri {width: 50px;text-align: center;}
|
||||
.block-issues .c-createdDate {width: 95px;}
|
||||
.block-issues .c-deadline {width: 95px;}
|
||||
.block-issues .c-severity {width: 80px;}
|
||||
.block-issues .c-status {width: 80px;}
|
||||
.block-issues.block-sm .c-status {text-align: center;}
|
||||
@@ -18,7 +18,7 @@
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-pri'><?php echo $lang->priAB?></th>
|
||||
<th class='c-category'><?php echo $lang->issue->severity;?></th>
|
||||
<th class='c-identifiedDate'><?php echo $lang->issue->createdDate;?></th>
|
||||
<th class='c-identifiedDate'><?php echo $lang->issue->deadline;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->issue->status;?></th>
|
||||
</tr>
|
||||
@@ -30,11 +30,11 @@
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $issue->id);?></td>
|
||||
<td class='c-name' title='<?php echo $issue->title?>'><?php echo html::a($this->createLink('issue', 'view', "issueID=$issue->id", '', '', $issue->PRJ), $issue->title)?></td>
|
||||
<td class='c-name' title='<?php echo $issue->title?>'><?php echo html::a($this->createLink('issue', 'view', "issueID=$issue->id", '', '', $issue->project), $issue->title)?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-pri'><?php echo zget($lang->issue->priList, $issue->pri)?></td>
|
||||
<td class='c-severity'><?php echo zget($lang->issue->severityList, $issue->severity)?></td>
|
||||
<td class='c-createdDate'><?php echo $issue->createdDate == '0000-00-00' ? '' : $issue->createdDate;?></td>
|
||||
<td class='c-deadline'><?php echo $issue->deadline == '0000-00-00' ? '' : $issue->deadline;?></td>
|
||||
<?php endif;?>
|
||||
<?php $status = $this->processStatus('issue', $issue);?>
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
|
||||
@@ -30,14 +30,15 @@
|
||||
<?php foreach($plans as $plan):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('productplan', 'view', "planID={$plan->id}");
|
||||
$planViewLink = $this->createLink('productplan', 'view', "planID={$plan->id}");
|
||||
$productViewLink = $this->createLink('product', 'view', "productID={$plan->product}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<tr <?php echo $appid?>>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-center'><?php echo $plan->id;?></td>
|
||||
<td title='<?php echo $plan->productName?>'><?php echo $plan->productName?></td>
|
||||
<td title='<?php echo $plan->productName?>'><?php echo html::a($productViewLink, $plan->productName);?></td>
|
||||
<?php endif;?>
|
||||
<td title='<?php echo $plan->title?>'><?php echo $plan->title?></td>
|
||||
<td title='<?php echo $plan->title?>'><?php echo html::a($planViewLink, $plan->title);?></td>
|
||||
<td class='text-center'><?php echo $plan->begin?></td>
|
||||
<td class='text-center'><?php echo $plan->end?></td>
|
||||
</tr>
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<div class='empty-tip'><?php common::printLink('product', 'create', '', "<i class='icon-plus'></i> " . $lang->product->create, '', "class='btn btn-primary'") ?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.block-products.block-sm .c-project {display: none;}
|
||||
.block-products.block-sm .c-execution {display: none;}
|
||||
</style>
|
||||
<div class="panel-body has-table scrollbar-hover block-products">
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter table-fixed'>
|
||||
@@ -22,7 +22,7 @@
|
||||
<tr>
|
||||
<th class='c-name'><?php echo $lang->product->name;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-name c-project'><?php echo $lang->product->currentExecution;?></th>
|
||||
<th class='c-name c-execution'><?php echo $lang->product->currentExecution;?></th>
|
||||
<?php endif;?>
|
||||
<th title='<?php echo $lang->product->plans?>' class='c-num w-120px'><?php echo $lang->product->plans;?></th>
|
||||
<th title='<?php echo $lang->product->releases?>' class='c-num w-100px'><?php echo $lang->product->releases;?></th>
|
||||
@@ -36,11 +36,11 @@
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : "";
|
||||
$viewLink = $this->createLink('product', 'browse', 'productID=' . $product->id);
|
||||
?>
|
||||
<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>
|
||||
<tr class='text-center' <?php echo $appid?>>
|
||||
<td class='c-name text-left' title='<?php echo $product->name?>'><?php echo html::a($viewLink, $product->name);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<?php $projectName = zget($executions, $product->id, '');?>
|
||||
<td class='c-name c-project text-left' title='<?php echo $projectName;?>'><?php echo $projectName;?></td>
|
||||
<?php $executionName = zget($executions, $product->id, '');?>
|
||||
<td class='c-name c-execution text-left' title='<?php echo $executionName;?>'><?php echo $executionName;?></td>
|
||||
<?php endif;?>
|
||||
<td class="c-num"><?php echo $product->plans?></td>
|
||||
<td class="c-num"><?php echo $product->releases?></td>
|
||||
|
||||
@@ -175,10 +175,6 @@ $(function()
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php $totalProject = $product->projects ? zget($product->projects, 'all', 0) : 0;?>
|
||||
<?php $undoneProject = $product->projects ? zget($product->projects, 'undone', 0) : 0;?>
|
||||
<?php $delayProject = $product->projects ? zget($product->projects, 'delay', 0) : 0;?>
|
||||
<?php $undoneRate = $totalProject ? round($undoneProject / $totalProject * 100, 2) : 0;?>
|
||||
<div class="product-info">
|
||||
<?php $totalRelease = $product->releases ? array_sum($product->releases) : 0;?>
|
||||
<?php $normalRelease = $product->releases ? zget($product->releases, 'normal', 0) : 0;?>
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th class='c-name w-100px'><?php echo $lang->project->name;?></th>
|
||||
<th class='w-100px'><?php echo $lang->program->PM;?></th>
|
||||
<th class='w-80px'><?php echo $lang->program->status;?></th>
|
||||
<th class='w-80px'><?php echo $lang->project->PM;?></th>
|
||||
<th class='w-60px'><?php echo $lang->project->status;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='w-60px'><?php echo $lang->program->teamCount;?></th>
|
||||
<th class='w-60px'><?php echo $lang->project->teamCount;?></th>
|
||||
<th class='w-90px text-right'><?php echo $lang->task->consumed;?></th>
|
||||
<th class='w-80px text-right'><?php echo $lang->program->budget;?></th>
|
||||
<th class='w-80px text-right'><?php echo $lang->project->budget;?></th>
|
||||
<th class='w-80px'><?php echo $lang->project->leftStories;?></th>
|
||||
<th class='w-80px'><?php echo $lang->project->leftTasks;?></th>
|
||||
<th class='w-80px'><?php echo $lang->project->leftBugs;?></th>
|
||||
@@ -24,9 +24,7 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach($projects as $project):?>
|
||||
<?php
|
||||
$viewLink = $this->createLink('program', 'index', "programID={$project->id}");
|
||||
?>
|
||||
<?php $viewLink = $this->createLink('project', 'index', "programID={$project->id}");?>
|
||||
<tr>
|
||||
<td title='<?php echo $project->name?>'><?php echo html::a($viewLink, $project->name);?></td>
|
||||
<td><?php echo zget($users, $project->PM, $project->PM)?></td>
|
||||
@@ -35,8 +33,8 @@
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-center'><?php echo $project->teamCount;?></td>
|
||||
<td class='text-right' title="<?php echo $project->consumed . ' ' . $lang->execution->workHour;?>"><?php echo $project->consumed . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<?php $programBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) && $project->budget >= 10000 ? number_format($project->budget / 10000, 1) . $this->lang->program->tenThousand : number_format((float)$project->budget, 1);?>
|
||||
<td class='text-right' title="<?php echo $project->consumed . ' ' . $lang->execution->workHour;?>"><?php echo $project->consumed . $lang->execution->workHourUnit;?></td>
|
||||
<?php $programBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) ? round((float)$project->budget / 10000, 2) . $this->lang->project->tenThousand : round((float)$project->budget, 2);?>
|
||||
<td class='text-right'><?php echo $project->budget != 0 ? zget($lang->project->currencySymbol, $project->budgetUnit) . ' ' . $programBudget : $lang->project->future;?></td>
|
||||
<td class='text-center'><?php echo $project->leftStories;?></td>
|
||||
<td class='text-center'><?php echo $project->leftTasks;?></td>
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
<?php if(empty($actions)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
.timeline > li .timeline-text {display: block; overflow: hidden; text-overflow: ellipsis; max-height: 20px; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; }
|
||||
.panel-body {padding-top: 0;}
|
||||
</style>
|
||||
<div class='panel-body scrollbar-hover'>
|
||||
<ul class="timeline timeline-tag-left no-margin">
|
||||
<?php
|
||||
|
||||
@@ -22,7 +22,7 @@ html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; po
|
||||
.block-statistic .tile {margin-bottom: 30px;}
|
||||
.block-statistic .tile-title {font-size: 18px; color: #A6AAB8;}
|
||||
.block-statistic .tile-amount {font-size: 48px; margin-bottom: 10px;}
|
||||
.block-statistic .col-nav {border-right: 1px solid #EBF2FB; width: 260px; padding: 0;}
|
||||
.block-statistic .col-nav {border-right: 1px solid #EBF2FB; width: 210px; padding: 0;}
|
||||
.block-statistic .nav-secondary > li {position: relative;}
|
||||
.block-statistic .nav-secondary > li > a {font-size: 14px; color: #838A9D; position: relative; box-shadow: none; padding-left: 20px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; transition: all .2s;}
|
||||
.block-statistic .nav-secondary > li > a:first-child {padding-right: 36px;}
|
||||
@@ -60,16 +60,32 @@ html[lang="en"] .product-info .type-info {color: #A6AAB8; text-align: center; po
|
||||
.block-statistic .project-info .col-xs-5, .block-statistic .project-info .col-xs-7 {margin-top: 8px;}
|
||||
.block-statistic .project-info .col-xs-5 {padding-left: 0;}
|
||||
|
||||
.block-statistic .data {width: 40%; text-align: left; padding: 10px 0px; font-size: 14px; font-weight: 700;}
|
||||
.block-statistic .dataTitle {width: 60%; text-align: right; padding: 10px 0px; font-size: 14px;}
|
||||
.block-statistic .executionName {padding: 2px 10px; font-size: 14px; text-overflow: ellipsis; overflow: hidden;}
|
||||
.block-statistic .lastIteration {padding-top: 6px;}
|
||||
.block-statistic .progress-text-left {margin-right: 90px}
|
||||
.block-statistic .progress-text-left .progress-text {padding-top: 2px; font-size: 14px; padding-right:5px; left: -45px;}
|
||||
|
||||
.status-count {margin: auto;}
|
||||
.status-count tr:first-child td:last-child {color: #000; font-weight: bold;}
|
||||
|
||||
.block-statistic .progress-group {margin-top: 20px; margin-bottom: 10px; height: 65px;}
|
||||
.block-statistic .weekly-title {font-weight: bold; font-size:14px; color: #3C4253;}
|
||||
.block-statistic .project-info {margin-left: 3px;}
|
||||
.block-statistic .project-budget {white-space: nowrap;}
|
||||
.block-statistic .progress-group {margin-top: 10px;}
|
||||
.block-statistic .progress-group .col {padding-left: 0;}
|
||||
.block-statistic .progress-percent {margin-top: 4px;}
|
||||
.block-statistic .weekly-title {font-weight: bold; color: #3C4253;}
|
||||
.block-statistic .weekly-small {font-size:12px; color: #838A9D;}
|
||||
.block-statistic .weekly-progress {font-weight: bold; font-size:24px;}
|
||||
.block-statistic .weekly-name {font-size: 14px; color: #838A9D;}
|
||||
.block-statistic .weekly-value {font-size: 14px;}
|
||||
.block-statistic .col-6 .stage {margin-left: 10px;}
|
||||
.block-statistic .col-12 .stage {margin-left: 10px;}
|
||||
.block-statistic .col-12 .waterfall-title {padding-top: 3px;}
|
||||
.block-statistic .col-12 .waterfall-value {padding-top: 10px; font-size: 18px; font-weight: 600;}
|
||||
.block-statistic .col-12 .waterfall-title .col {padding-right: 0px; padding-left: 0px;}
|
||||
|
||||
.forty-percent {width: 40%;}
|
||||
</style>
|
||||
<script>
|
||||
<?php $blockNavId = 'nav-' . uniqid(); ?>
|
||||
@@ -98,7 +114,7 @@ $(function()
|
||||
<div class="table-row">
|
||||
<?php if(empty($projects)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p><span class="text-muted"><?php echo $lang->block->noData;?></span></p>
|
||||
<p><span class="text-muted"><?php echo $lang->block->emptyTip;?></span></p>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="col col-nav">
|
||||
@@ -118,124 +134,116 @@ $(function()
|
||||
<?php foreach($projects as $project):?>
|
||||
<div class="tab-pane fade<?php if($project->id == $selected) echo ' active in';?>" id="tab3Content<?php echo $project->id;?>">
|
||||
<div class="table-row">
|
||||
<?php if($project->model == 'scrum'):?>
|
||||
<div class="col-5 text-middle text-center">
|
||||
<div class="progress-pie inline-block space" data-value="<?php echo $project->progress;?>" data-doughnut-size="84">
|
||||
<canvas width="120" height="120"></canvas>
|
||||
<div class="progress-info">
|
||||
<small><?php echo $lang->story->common . $lang->project->doneStories;?></small>
|
||||
<strong><?php echo $project->doneStories;?></strong>
|
||||
<?php if($project->model == 'scrum'):?>
|
||||
<div class='table-row'>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->block->story;?></h4></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->project->allStories . ":";?></div>
|
||||
<div class="col data"><?php echo $project->allStories;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->project->doneStories . ":";?></div>
|
||||
<div class="col data"><?php echo $project->doneStories;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->project->surplus . ":";?></div>
|
||||
<div class="col data"><?php echo $project->leftStories;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-row text-center small text-muted with-padding">
|
||||
<div class="col-4 text-bottom">
|
||||
<div><?php echo $lang->project->allStories;?></div>
|
||||
<div><?php echo $project->allStories;?></div>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->block->investment;?></h4></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->totalPeople . ":";?></div>
|
||||
<div class="col data"><?php echo $project->teamCount;?></div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<span class="label label-dot label-primary"></span>
|
||||
<div><?php echo $lang->project->doneStories;?></div>
|
||||
<div><?php echo $project->doneStories;?></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->estimate . ":";?></div>
|
||||
<div class="col data"><?php echo $project->estimate;?></div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<span class="label label-dot label-pale"></span>
|
||||
<div><?php echo $lang->project->leftStories;?></div>
|
||||
<div><?php echo $project->leftStories;?></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->consumedHours . ":";?></div>
|
||||
<div class="col data"><?php echo $project->consumed;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-center">
|
||||
<div><h4><?php echo $lang->bug->common;?></h4></div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->block->totalBug . ":";?></div>
|
||||
<div class="col data"><?php echo $project->allBugs;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->bug->statusList['resolved'] . ":";?></div>
|
||||
<div class="col data"><?php echo $project->doneBugs;?></div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="col dataTitle"><?php echo $lang->bug->unResolved . ":";?></div>
|
||||
<div class="col data"><?php echo $project->leftBugs;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-7">
|
||||
<div class="project-info">
|
||||
<h4><?php echo $lang->project->allInput;?></h4>
|
||||
<div class='info'>
|
||||
<span><i class='icon icon-group'></i> <?php echo sprintf($lang->project->membersUnit, $project->teamCount);?></span>
|
||||
<span><i class='icon icon-clock'></i> <?php echo sprintf($lang->project->hoursUnit, $project->estimate);?></span>
|
||||
<span><i class='icon icon-cost'></i> <?php echo $project->budget . ' ' . zget($lang->project->unitList, $project->budgetUnit);?></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="project-info">
|
||||
<?php $i = 0;?>
|
||||
<h4><?php echo $lang->project->lastIteration;?></h4>
|
||||
<?php foreach($project->executions as $execution):?>
|
||||
<?php $i ++;?>
|
||||
<?php if($i > 3) break;?>
|
||||
<div class='col-xs-5'><?php echo $execution->name;?></div>
|
||||
<div class='col-xs-7'>
|
||||
<?php if(!empty($project->executions)):?>
|
||||
<div class="table-row project-info">
|
||||
<div class="col-2 text-right"><h4><?php echo $lang->block->last;?></h4></div>
|
||||
<div class="table-row lastIteration">
|
||||
<div class='col-5 text-center executionName'><?php echo html::a($this->createLink('execution', 'task', "executionID={$project->executions[0]->id}"), $project->executions[0]->name);?></div>
|
||||
<div class='col-7'>
|
||||
<div class='progress progress-text-left'>
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $execution->hours->progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $execution->hours->progress;?>%">
|
||||
<span class='progress-text'><?php echo $execution->hours->progress . '%';?></span>
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $project->executions[0]->hours->progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $project->executions[0]->hours->progress;?>%">
|
||||
<span class='progress-text'><?php echo $project->executions[0]->hours->progress . '%';?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
</div>
|
||||
<?php else:?>
|
||||
<div class="col-6">
|
||||
<?php endif;?>
|
||||
<?php else:?>
|
||||
<div class="col-12">
|
||||
<div class='table-row text-left weekly-row with-padding'>
|
||||
<span class='weekly-title'><?php echo $lang->project->weekly;?></span>
|
||||
<span class='stage text-muted'><?php echo $project->current;?></span>
|
||||
</div>
|
||||
<div class='progress-group col-10 center-block'>
|
||||
<div class='progress-num text-center'>
|
||||
<div class='weekly-title'><?php echo $lang->project->progress;?></div>
|
||||
<div class='weekly-progress'><?php echo $project->progress . '%';?></div>
|
||||
<div class='table-row text-center progress-group col-12 with-padding center-block'>
|
||||
<div class='forty-percent col'>
|
||||
<div class='progress-num col'>
|
||||
<span><?php echo $lang->project->progress . ':';?></span>
|
||||
<span class='project-info'><?php echo $project->progress . '%';?></span>
|
||||
</div>
|
||||
<div class='progress progress-percent col-1-8'>
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="82" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $project->progress;?>%"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='progress'>
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="82" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $project->progress;?>%"></div>
|
||||
<div class="col-1-5">
|
||||
<span><?php echo $lang->project->teamCount . ':';?></span>
|
||||
<span class='project-info'><?php echo $project->teamCount;?></span>
|
||||
</div>
|
||||
<div class="col-1-5 project-budget">
|
||||
<span><?php echo $lang->project->budget . ':';?></span>
|
||||
<span class='project-info'>
|
||||
<?php
|
||||
$projectBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) ? round((float)$project->budget / 10000, 2) . $this->lang->project->tenThousand : round((float)$project->budget, 2);
|
||||
echo $project->budget != 0 ? $projectBudget : $this->lang->project->future;
|
||||
?>
|
||||
</span>
|
||||
</div>
|
||||
<div class="col-1-5"></div>
|
||||
</div>
|
||||
<div class="table-row text-center small with-padding col-10 center-block">
|
||||
<div class="col-4 text-bottom">
|
||||
<div class='weekly-name'><?php echo $lang->project->pv;?></div>
|
||||
<div class='weekly-value'><?php echo $project->pv;?></div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<div class='weekly-name'><?php echo $lang->project->ev;?></div>
|
||||
<div class='weekly-value'><?php echo $project->ev;?></div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<div class='weekly-name'><?php echo $lang->project->sv;?></div>
|
||||
<div class='weekly-value'><?php echo $project->sv;?></div>
|
||||
</div>
|
||||
<div class="table-row text-center waterfall-title small col-12 center-block">
|
||||
<?php $isChineseLang = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']);?>
|
||||
<div class="col-1-5"><?php echo $isChineseLang ? $lang->project->pv . '(' . $lang->project->pvTitle . ')' : $lang->project->pv; ?></div>
|
||||
<div class="col-1-5"><?php echo $isChineseLang ? $lang->project->ev . '(' . $lang->project->evTitle . ')' : $lang->project->ev;?></div>
|
||||
<div class="col-1-5"><?php echo $isChineseLang ? $lang->project->ac . '(' . $lang->project->acTitle . ')' : $lang->project->ac;?></div>
|
||||
<div class="col-1-5"><?php echo $isChineseLang ? $lang->project->sv . '(' . $lang->project->svTitle . ')' : $lang->project->sv;?></div>
|
||||
<div class="col-1-5"><?php echo $isChineseLang ? $lang->project->cv . '(' . $lang->project->cvTitle . ')' : $lang->project->cv;?></div>
|
||||
</div>
|
||||
<div class="table-row text-center waterfall-value small col-12 center-block">
|
||||
<div class="col-1-5"><?php echo $project->pv;?></div>
|
||||
<div class="col-1-5"><?php echo $project->ev;?></div>
|
||||
<div class="col-1-5"><?php echo $project->ac;?></div>
|
||||
<div class="col-1-5"><?php echo $project->sv;?></div>
|
||||
<div class="col-1-5"><?php echo $project->cv;?></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class='col-6'>
|
||||
<div class='table-row weekly-row with-padding'>
|
||||
<div class='col-4 text-center'>
|
||||
<span class='weekly-title'><?php echo $lang->project->allInput;?></span>
|
||||
</div>
|
||||
<div class='col-8'></div>
|
||||
</div>
|
||||
<div class='progress-group'>
|
||||
<div class="table-row text-center small with-padding">
|
||||
<div class="col-4 text-bottom">
|
||||
<div class='weekly-name'><?php echo $lang->project->PM;?></div>
|
||||
<div class='weekly-value'><?php echo $project->PM ? zget($users, $project->PM) : $lang->project->emptyPM;?></div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<div class='weekly-name'><?php echo $lang->project->teamCount;?></div>
|
||||
<div class='weekly-value'><?php echo $project->teamCount;?></div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<div class='weekly-name'><?php echo $lang->project->budget;?></div>
|
||||
<div class='weekly-value'><?php echo $project->budget;?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table-row text-center small with-padding">
|
||||
<div class="col-4 text-bottom">
|
||||
<div class='weekly-name'><?php echo $lang->project->ac;?></div>
|
||||
<div class='weekly-value'><?php echo $project->ac;?></div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<div class='weekly-name'><?php echo $lang->project->cv;?></div>
|
||||
<div class='weekly-value'><?php echo $project->cv;?></div>
|
||||
</div>
|
||||
<div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -8,7 +8,6 @@ $maxConsumed = 0;
|
||||
<div class='panel-body'>
|
||||
<div class='table-row'>
|
||||
<div class='table-col chart-titles'>
|
||||
<div class='chart-col-title strong'><span><?php echo $lang->project->name;?></span></div>
|
||||
<?php foreach($projects as $project):?>
|
||||
<?php
|
||||
$maxTeamCount = max($maxTeamCount, $project->teamCount);
|
||||
@@ -48,24 +47,22 @@ $maxConsumed = 0;
|
||||
</div>
|
||||
<style>
|
||||
.block-projectteam .panel-body {margin-top: -10px}
|
||||
.chart-titles {width: 110px; padding-right: 10px; position: relative; z-index: 1}
|
||||
.chart-titles {top: 30px; width: 150px; padding-right: 10px; position: relative; z-index: 1}
|
||||
.chart-rows {position: relative; z-index: 0}
|
||||
.chart-title {width: 100px; line-height: 20px; padding: 5px 0; height: 30px}
|
||||
.chart-title > span {background: #fff}
|
||||
.chart-col-title {line-height: 20px; margin-bottom: 10px; padding: 0 10px}
|
||||
.project-team, .project-consumed {padding: 0}
|
||||
.project-team {border-right: 1px solid #e5e8ec}
|
||||
.project-team > .chart-col-title {text-align: right}
|
||||
.project-team, .project-consumed {padding: 0; border-left: 1px solid #e5e8ec}
|
||||
.chart-col-item {height: 30px; padding: 5px 0}
|
||||
.chart-col-text {width: 50px; position: absolute; top: 5px; line-height: 20px; left: 0}
|
||||
.project-team .chart-col-item {padding-left: 50px}
|
||||
.project-team .chart-col-item {padding-right: 50px}
|
||||
.project-team .chart-col-item:before {content: ' '; z-index: 0; left: -100px; top: 14px; right: 0; border-top: 1px dotted #e5e8ec}
|
||||
.project-consumed .chart-col-item {padding-right: 50px}
|
||||
.chart-col-item .progress {background: none; border-radius: 0; overflow: visible; margin: 6px 0 0 0; position: relative; z-index: 1}
|
||||
.chart-col-item .progress > .progress-bar {border-radius: 0; position: relative; min-width: 1px}
|
||||
.project-team .chart-col-item .progress > .progress-bar {float: right; background-color: #39cfff}
|
||||
.project-team .chart-col-item .progress > .progress-bar {background-color: #39cfff}
|
||||
.chart-col-item .progress .progress-text {position: absolute; top: -6px; color: #333; width: 50px; line-height: 20px; white-space: nowrap; overflow: visible}
|
||||
.project-team .progress .progress-text {text-align: right; left: -50px; padding-right: 5px}
|
||||
.project-team .progress .progress-text {text-align: left; right: -55px; padding-right: 5px}
|
||||
.project-consumed .progress .progress-text {text-align: left; right: -50px; padding-left: 5px}
|
||||
</style>
|
||||
</div>
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
#cards {margin: 0; padding: 0 10px 10px 10px;}
|
||||
#cards > .col {width: 33.33%;}
|
||||
.col-side #cards > .col {width: 100%;}
|
||||
#cards .panel {margin: 10px 0; border: 1px solid #DCDCDC; border-radius: 2px; box-shadow: none; height: 146px; cursor: pointer;}
|
||||
#cards .panel:hover {border-color: #006AF1; box-shadow: 0 0 10px 0 rgba(0,0,100,.25);}
|
||||
#cards .panel-content {margin: 10px 0; border: 1px solid #DCDCDC; border-radius: 2px; box-shadow: none; height: 146px; cursor: pointer;}
|
||||
#cards .panel-content:hover {border-color: #006AF1; box-shadow: 0 0 10px 0 rgba(0,0,100,.25);}
|
||||
#cards .panel-heading {padding: 12px 24px 10px 16px;}
|
||||
#cards .panel-body {padding: 0 16px 16px;}
|
||||
#cards .panel-actions {padding: 7px 0; z-index: 0}
|
||||
@@ -22,7 +22,7 @@
|
||||
#cards .project-detail .progress {height: 4px;}
|
||||
#cards .project-detail .progress-text-left .progress-text {width: 50px; left: -50px;}
|
||||
#cards .panel-heading {cursor: pointer;}
|
||||
#cards .project-stages-container {margin: 0 -16px -16px -16px; padding: 0 4px; height: 46px; overflow-x: auto; position: relative;}
|
||||
#cards .project-stages-container {margin: 0 0 -16px 0; padding: 0 4px; height: 46px; overflow-x: auto; position: relative;}
|
||||
#cards .project-stages:after {content: ' '; width: 30px; display: block; right: -16px; top: 16px; bottom: -6px; z-index: 1; background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%); position: absolute;}
|
||||
#cards .project-stages-row {position: relative; height: 30px; z-index: 0;}
|
||||
#cards .project-stage-item {white-space: nowrap; position: absolute; top: 0; min-width: 48px; padding-top: 13px; color: #838A9D;}
|
||||
@@ -32,31 +32,37 @@
|
||||
#cards .project-stage-item.is-going {color: #333;}
|
||||
#cards .project-stage-item.is-going::before {background-color: #0C64EB;}
|
||||
#dashboard .block-recentproject .panel-body {padding: 0;}
|
||||
.execution-name {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
|
||||
</style>
|
||||
<div class="panel-body">
|
||||
<?php if(empty($projects)):?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
<div class='row' id='cards'>
|
||||
<?php foreach ($projects as $projectID => $project):?>
|
||||
<div class='col' data-id='<?php echo $projectID?>'>
|
||||
<div class='panel' data-url='<?php echo $this->createLink('project', 'index', "projectID=$project->id");?>'>
|
||||
<?php $viewLink = $config->systemMode == 'new' ? $this->createLink('project', 'index', "projectID=$project->id") : $this->createLink('execution', 'task', "projectID=$project->id");?>
|
||||
<div class='col'>
|
||||
<div class='panel-content'>
|
||||
<div class='panel-heading not-move-handler'>
|
||||
<strong class='project-name' title='<?php echo $project->name;?>'> <?php echo html::a($this->createLink('project', 'index', "projectID=$project->id", '', '', $project->id), $project->name);?> </strong>
|
||||
<?php if(isset($config->maxVersion)):?>
|
||||
<?php if($project->model === 'waterfall'): ?>
|
||||
<span class='project-type-label label label-warning label-outline'><?php echo $lang->project->waterfall; ?></span>
|
||||
<?php else: ?>
|
||||
<span class='project-type-label label label-info label-outline'><?php echo $lang->project->scrum; ?></span>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
<strong class='project-name' title='<?php echo $project->name;?>'> <?php echo html::a($viewLink, $project->name);?> </strong>
|
||||
<nav class='panel-actions nav nav-default'>
|
||||
<li class='dropdown'>
|
||||
<a href='javascript:;' data-toggle='context-dropdown' class='panel-action'><i class='icon icon-ellipsis-v'></i></a>
|
||||
<ul class='dropdown-menu pull-right cards-menu'>
|
||||
<li><?php common::printIcon('program', 'PRJGroup', "projectID=$project->id", $project, 'button', 'group', '', '', '', '', '', $project->id);?></li>
|
||||
<li><?php common::printIcon('program', 'PRJManageMembers', "projectID=$project->id", $project, 'button', 'persons', '', '', '', '', '', $project->id);?></li>
|
||||
<li><?php common::printicon('program', 'PRJActivate', "projectid=$project->id", $project, 'button', '', '', 'iframe', true);?></li>
|
||||
<li><?php common::printIcon('program', 'PRJEdit', "projectID=$project->id", $project, 'button', ' icon-edit', '', '', '', '', '', $project->id);?></li>
|
||||
<li><?php common::printIcon('program', 'PRJStart', "projectID=$project->id", $project, 'button', ' icon-play', '', 'iframe', true);?></li>
|
||||
<li><?php common::printIcon('program', 'PRJSuspend', "projectID=$project->id", $project, 'button', ' icon-pause', '', 'iframe', true);?></li>
|
||||
<li><?php common::printIcon('program', 'PRJClose', "projectID=$project->id", $project, 'button', ' icon-off', '', 'iframe', true);?></li>
|
||||
<li><?php common::printIcon('program', 'PRJDelete', "projectID=$project->id", $project, 'button', ' icon-trash', 'hiddenwin');?></li>
|
||||
<li><?php common::printIcon('project', 'group', "projectID=$project->id", $project, 'button', 'group', '', '', '', '', '', $project->id);?></li>
|
||||
<li><?php common::printIcon('project', 'manageMembers', "projectID=$project->id", $project, 'button', 'persons', '', '', '', '', '', $project->id);?></li>
|
||||
<li><?php common::printicon('project', 'activate', "projectID=$project->id", $project, 'button', '', '', 'iframe', true);?></li>
|
||||
<li><?php if(common::hasPriv('project', 'edit')) echo html::a($this->createLink('project', 'edit', "projectID=$project->id"), "<i class='icon-edit'></i> " . $lang->project->edit, '', "data-app='{$app->openApp}'");?></li>
|
||||
<li><?php common::printIcon('project', 'start', "projectID=$project->id", $project, 'button', ' icon-play', '', 'iframe', true);?></li>
|
||||
<li><?php common::printIcon('project', 'suspend', "projectID=$project->id", $project, 'button', ' icon-pause', '', 'iframe', true);?></li>
|
||||
<li><?php common::printIcon('project', 'close', "projectID=$project->id", $project, 'button', ' icon-off', '', 'iframe', true);?></li>
|
||||
<li><?php if(common::hasPriv('project', 'delete')) echo html::a($this->createLink('project', 'delete', "projectID=$project->id"), "<i class='icon-trash'></i> " . $lang->project->delete, 'hiddenwin', "data-app='{$app->openApp}'");?></li>
|
||||
</ul>
|
||||
</li>
|
||||
</nav>
|
||||
@@ -66,9 +72,9 @@
|
||||
<span><i class='icon icon-group'></i> <?php printf($lang->project->membersUnit, $project->teamCount); ?></span>
|
||||
<span><i class='icon icon-clock'></i> <?php printf($lang->project->hoursUnit, $project->estimate); ?></span>
|
||||
</div>
|
||||
<?php if($config->systemMode == 'new'):?>
|
||||
<?php if($project->model === 'waterfall'): ?>
|
||||
<div class='project-detail project-stages'>
|
||||
<p class='text-muted'><?php echo $lang->project->ongoingStage;?></p>
|
||||
<?php
|
||||
$projectProjects = array();
|
||||
foreach($project->executions as $project)
|
||||
@@ -79,6 +85,7 @@
|
||||
<?php if(empty($projectProjects)): ?>
|
||||
<div class='label label-outline'><?php echo zget($lang->project->statusList, $project->status);?></div>
|
||||
<?php else: ?>
|
||||
<p class='text-muted'><?php echo $lang->project->ongoingStage;?></p>
|
||||
<div class='project-stages-container scrollbar-hover'>
|
||||
<div class='project-stages-row'>
|
||||
<?php foreach ($projectProjects as $project): ?>
|
||||
@@ -96,11 +103,11 @@
|
||||
<p class='text-muted'><?php echo $lang->project->lastIteration; ?></p>
|
||||
<?php if($project):?>
|
||||
<div class='row'>
|
||||
<div class='col-xs-5'><?php echo $project->name;?></div>
|
||||
<div class='col-xs-5 execution-name' title="<?php echo $project->name;?>"><?php echo html::a($this->createLink('execution', 'task', "executionID={$project->id}"), $project->name);?></div>
|
||||
<div class='col-xs-7'>
|
||||
<div class="progress progress-text-left">
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $project->hours->progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $project->hours->progress;?>%">
|
||||
<span class="progress-text"><?php echo $project->hours->progress;?>%</span>
|
||||
<div class="progress progress-text-left">
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $project->hours->progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $project->hours->progress;?>%">
|
||||
<span class="progress-text"><?php echo $project->hours->progress;?>%</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -108,11 +115,13 @@
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php endforeach;?>
|
||||
</div>
|
||||
<?php endif;?>
|
||||
</div>
|
||||
<script>
|
||||
/* Auto resize stages */
|
||||
|
||||
@@ -32,17 +32,19 @@
|
||||
<tbody>
|
||||
<?php foreach($releases as $release):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('release', 'view', "releaseID={$release->id}");
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$productViewLink = $this->createLink('product', 'browse', "productID={$release->product}");
|
||||
$buildViewLink = $this->createLink('build', 'view', "buildID={$release->build}");
|
||||
$releaseViewLink = $this->createLink('release', 'view', "releaseID={$release->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<tr <?php echo $appid?>>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-center'><?php echo sprintf('%03d', $release->id);?></td>
|
||||
<td title='<?php echo $release->productName?>'><?php echo $release->productName?></td>
|
||||
<td title='<?php echo $release->productName?>'><?php echo html::a($productViewLink, $release->productName);?></td>
|
||||
<?php endif;?>
|
||||
<td title='<?php echo $release->name?>'><?php echo $release->name?></td>
|
||||
<td title='<?php echo $release->name?>'><?php echo html::a($releaseViewLink, $release->name);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td title='<?php echo $release->buildName?>'><?php echo $release->buildName?></td>
|
||||
<td title='<?php echo $release->buildName?>'><?php echo html::a($buildViewLink, $release->buildName);?></td>
|
||||
<?php endif;?>
|
||||
<td class='text-center'><?php echo $release->date?></td>
|
||||
<td class='c-status' title='<?php echo zget($lang->release->statusList, $release->status);?>'>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<style>
|
||||
.block-risks .c-id {width: 50px;}
|
||||
.block-risks .c-pri {width: 50px;text-align: center;}
|
||||
.block-risks .c-identifiedDate {width: 95px;}
|
||||
.block-risks .c-plannedClosedDate {width: 100px;}
|
||||
.block-risks .c-category {width: 80px;}
|
||||
.block-risks .c-status {width: 80px;}
|
||||
.block-risks.block-sm .c-status {text-align: center;}
|
||||
@@ -21,7 +21,7 @@
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-pri'><?php echo $lang->priAB?></th>
|
||||
<th class='c-category'><?php echo $lang->risk->category;?></th>
|
||||
<th class='c-identifiedDate'><?php echo $lang->risk->identifiedDate;?></th>
|
||||
<th class='c-plannedClosedDate'><?php echo $lang->risk->plannedClosedDate;?></th>
|
||||
<?php endif;?>
|
||||
<th class='c-status'><?php echo $lang->risk->status;?></th>
|
||||
</tr>
|
||||
@@ -33,11 +33,11 @@
|
||||
?>
|
||||
<tr>
|
||||
<td class='c-id-xs'><?php echo sprintf('%03d', $risk->id);?></td>
|
||||
<td class='c-name' title='<?php echo $risk->name?>'><?php echo html::a($this->createLink('risk', 'view', "riskID=$risk->id", '', '', $risk->PRJ), $risk->name)?></td>
|
||||
<td class='c-name' title='<?php echo $risk->name?>'><?php echo html::a($this->createLink('risk', 'view', "riskID=$risk->id", '', '', $risk->project), $risk->name)?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-pri'><?php echo "<span class='pri-{$risk->pri}'>" . zget($lang->risk->priList, $risk->pri) . "</span>";?></td>
|
||||
<td class='c-category'><?php echo zget($lang->risk->categoryList, $risk->category)?></td>
|
||||
<td class='c-identifiedDate'><?php echo $risk->identifiedDate == '0000-00-00' ? '' : $risk->identifiedDate;?></td>
|
||||
<td class='c-plannedClosedDate'><?php echo $risk->plannedClosedDate == '0000-00-00' ? '' : $risk->plannedClosedDate;?></td>
|
||||
<?php endif;?>
|
||||
<?php $status = $this->processStatus('risk', $risk);?>
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
* @link http://www.zentao.net
|
||||
*/
|
||||
?>
|
||||
<style>.table .c-progress {width: 60px;}</style>
|
||||
<?php if(empty($executionStats)): ?>
|
||||
<div class='empty-tip'><?php echo $lang->block->emptyTip;?></div>
|
||||
<?php else:?>
|
||||
@@ -39,7 +40,7 @@
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn text-center' data-id='{$this->get->entry}'" : "class='text-center'";
|
||||
$viewLink = $this->createLink('execution', 'task', 'executionID=' . $execution->id);
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<tr <?php echo $appid?>>
|
||||
<td class='c-name text-left' title='<?php echo $execution->name;?>'><nobr><?php echo html::a($viewLink, $execution->name, '', "title='$execution->name'");?></nobr></td>
|
||||
<td class="c-date"><?php echo $execution->end;?></td>
|
||||
<?php if($longBlock):?>
|
||||
@@ -51,15 +52,13 @@
|
||||
<span class="status-project status-<?php echo $execution->status?>" title='<?php echo $statusName;?>'><?php echo $statusName;?></span>
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalEstimate . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalEstimate . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalConsumed . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalConsumed . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalLeft . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalLeft . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalEstimate . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalEstimate . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalConsumed . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalConsumed . $lang->execution->workHourUnit;?></td>
|
||||
<td class="c-hours" title="<?php echo $execution->hours->totalLeft . ' ' . $lang->execution->workHour;?>"><?php echo $execution->hours->totalLeft . $lang->execution->workHourUnit;?></td>
|
||||
<?php endif;?>
|
||||
<td class="c-progress">
|
||||
<div class="progress progress-text-left">
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="<?php echo $execution->hours->progress;?>" aria-valuemin="0" aria-valuemax="100" style="width: <?php echo $execution->hours->progress;?>%">
|
||||
<span class="progress-text"><?php echo $execution->hours->progress;?>%</span>
|
||||
</div>
|
||||
<div class='progress-pie' data-doughnut-size='90' data-color='#00da88' data-value='<?php echo $execution->hours->progress;?>' data-width='24' data-height='24' data-back-color='#e8edf3'>
|
||||
<div class='progress-info'><?php echo $execution->hours->progress;?></div>
|
||||
</div>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
|
||||
@@ -13,81 +13,52 @@
|
||||
<?php if(empty($totalData)): ?>
|
||||
<div class='empty-tip'><?php common::printLink('project', 'create', '', "<i class='icon-plus'></i> " . $lang->project->create, '', "class='btn btn-primary'")?></div>
|
||||
<?php else:?>
|
||||
<style>
|
||||
#totalInvestment {padding-bottom: 5px;}
|
||||
.overview-title {font-size: 14px; color: #838a9d;}
|
||||
.extra-tips {font-size: 12px; color: #a1a7b7;}
|
||||
.progress {margin-bottom: 8px;}
|
||||
.total-block {padding: 0px 25px;}
|
||||
.hours-statistics {position: relative; padding: 0px 5px 5px; display: table-cell;text-align: center;}
|
||||
.hours-statistics > small {display: block; color: #A6AAB8;}
|
||||
.hours-statistics > span {display: block; color: #3c4353; font-weight: bold;}
|
||||
.tile-amount {font-size: 20px;}
|
||||
</style>
|
||||
<div class="panel-body conatiner-fluid">
|
||||
<div class="table-row">
|
||||
<div class="col-6 tile">
|
||||
<div class="text-left" id="totalInvestment"><strong><?php echo $lang->block->totalInvestment;?></strong></div>
|
||||
<div class="table-row">
|
||||
<div class="col-4 tile">
|
||||
<div class="overview-title"><i class="icon-program-group icon-group"></i> <?php echo $lang->block->totalPeople;?></div>
|
||||
<div class="tile-amount">
|
||||
<?php echo $totalData[$projectID]->teamCount ? html::a($this->createLink('program', 'prjmanageMembers', 'projectID=' . $projectID), $totalData[$projectID]->teamCount) : 0;?>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 tile">
|
||||
<div class="overview-title"><i class="icon icon-clock"></i> <?php echo $lang->block->consumedHours;?></div>
|
||||
<div class="tile-amount" title="<?php echo $totalData[$projectID]->consumed . $lang->execution->workHour;?>">
|
||||
<?php echo $totalData[$projectID]->consumed ? html::a($this->createLink('project', 'index', 'locate=no'), $totalData[$projectID]->consumed . $lang->execution->workHourUnit) : 0;?>
|
||||
</div>
|
||||
<div class="tile-info">
|
||||
<span class="extra-tips"><?php echo $lang->block->estimatedHours . ' ' . $totalData[$projectID]->estimate . $lang->execution->workHour;?></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 tile">
|
||||
<div class="overview-title"><i class="icon icon-cost"></i> <?php echo $lang->block->spent;?></div>
|
||||
<div class="tile-amount">¥0</div>
|
||||
<div class="tile-info">
|
||||
<?php $budget = $totalData[$projectID]->budget != 0 ? zget($lang->project->currencySymbol, $totalData[$projectID]->budgetUnit) . number_format($totalData[$projectID]->budget, 2) : $lang->project->future;?>
|
||||
<span class="extra-tips"><?php echo $lang->block->budget . ' ' . $budget;?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3 total-block hide-in-sm">
|
||||
<div><strong><?php echo $lang->block->totalStory;?></strong></div>
|
||||
<div class="tile-amount">
|
||||
<?php echo $totalData[$projectID]->allStories;?>
|
||||
</div>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $totalData[$projectID]->doneStories;?>" aria-valuemin="0" aria-valuemax="<?php echo $totalData[$projectID]->allStories;?>" style="width: <?php echo floor(($totalData[$projectID]->doneStories/$totalData[$projectID]->allStories)*100).'%';?>"></div>
|
||||
</div>
|
||||
<div class="hours-statistics">
|
||||
<small><?php echo $lang->block->done;?></small>
|
||||
<span><?php echo $totalData[$projectID]->doneStories;?></span>
|
||||
</div>
|
||||
<div class="hours-statistics">
|
||||
<small><?php echo $lang->block->left;?></small>
|
||||
<span><?php echo $totalData[$projectID]->leftStories;?></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-3 total-block hide-in-sm">
|
||||
<div><strong><?php echo $lang->block->totalBug;?></strong></div>
|
||||
<div class="tile-amount">
|
||||
<?php echo $totalData[$projectID]->allBugs;?>
|
||||
</div>
|
||||
<div class="progress">
|
||||
<div class="progress-bar" role="progressbar" aria-valuenow="<?php echo $totalData[$projectID]->doneBugs;?>" aria-valuemin="0" aria-valuemax="<?php echo $totalData[$projectID]->allBugs;?>" style="width: <?php echo floor(($totalData[$projectID]->doneBugs/$totalData[$projectID]->allBugs)*100).'%';?>"></div>
|
||||
</div>
|
||||
<div class="hours-statistics">
|
||||
<small><?php echo $lang->block->done;?></small>
|
||||
<span><?php echo $totalData[$projectID]->doneBugs;?></span>
|
||||
</div>
|
||||
<div class="hours-statistics">
|
||||
<small><?php echo $lang->block->left;?></small>
|
||||
<span><?php echo $totalData[$projectID]->leftBugs;?></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<table class="table table-data">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><?php echo $lang->block->storyNum;?></th>
|
||||
<th></th>
|
||||
<th><?php echo $lang->personnel->invest;?></th>
|
||||
<th></th>
|
||||
<th><?php echo $lang->workingHour;?></th>
|
||||
<th></th>
|
||||
<th><?php echo $lang->block->bugNum;?></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th><?php echo $lang->block->totalStory . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->allStories;?></td>
|
||||
<th><?php echo $lang->block->totalPeople . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->teamCount ? html::a($this->createLink('project', 'manageMembers', 'projectID=' . $projectID), $totalData[$projectID]->teamCount) : 0;?></td>
|
||||
<th><?php echo $lang->block->estimatedHours . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->estimate . $lang->execution->workHour;?></td>
|
||||
<th><?php echo $lang->block->totalBug. ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->allBugs;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->block->done . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->doneStories;?></td>
|
||||
<th></th>
|
||||
<td></td>
|
||||
<th><?php echo $lang->block->consumedHours . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->consumed . $lang->execution->workHour;?></td>
|
||||
<th><?php echo $lang->bug->statusList['resolved'] . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->doneBugs;?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th><?php echo $lang->block->left . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->leftStories;?></td>
|
||||
<th></th>
|
||||
<td></td>
|
||||
<th></th>
|
||||
<td></td>
|
||||
<th><?php echo $lang->bug->unResolved . ':';?></th>
|
||||
<td><?php echo $totalData[$projectID]->leftBugs;?></td>
|
||||
</tr>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<?php endif;?>
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : "";
|
||||
$viewLink = $this->createLink('product', 'browse', 'productID=' . $id);
|
||||
?>
|
||||
<tr class='text-center' data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class="c-num text-ellipsis" title="<?php echo $name;?>"><?php echo $name;?></td>
|
||||
<tr class='text-center' <?php echo $appid?>>
|
||||
<td class="c-num text-ellipsis" title="<?php echo $name;?>"><?php echo html::a($viewLink, $name);?></td>
|
||||
<td class="c-num"><?php echo empty($stories[$id]) ? 0: $stories[$id];?></td>
|
||||
<td class="c-num"><?php echo empty($bugs[$id]) ? 0: $bugs[$id];?></td>
|
||||
<td class="c-num"><?php echo empty($releases[$id]) ? 0: $releases[$id];?></td>
|
||||
|
||||
@@ -31,18 +31,21 @@
|
||||
<tbody>
|
||||
<?php foreach($testtasks as $testtask):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('testtask', 'view', "testtaskID={$testtask->id}");
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$productViewLink = $this->createLink('product', 'browse', "productID={$testtask->product}");
|
||||
$projectViewLink = $this->createLink('project', 'view', "projectID={$testtask->project}");
|
||||
$testtaskViewLink = $this->createLink('testtask', 'view', "testtaskID={$testtask->id}");
|
||||
$buildViewLink = $this->createLink('build', 'view', "buildID={$testtask->build}");
|
||||
?>
|
||||
<tr class='text-center' data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->name?>'><?php echo $testtask->name?></td>
|
||||
<tr class='text-center' <?php echo $appid?>>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->name?>'><?php echo html::a($testtaskViewLink, $testtask->name);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->productName?>'><?php echo $testtask->productName?></td>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->productName?>'><?php echo html::a($productViewLink, $testtask->productName);?></td>
|
||||
<?php endif;?>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->projectName?>'><?php echo $testtask->projectName?></td>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->projectName?>'><?php echo html::a($projectViewLink, $testtask->projectName);?></td>
|
||||
<?php endif;?>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->buildName?>'><?php echo $testtask->buildName?></td>
|
||||
<td class='text-left text-ellipsis' title='<?php echo $testtask->buildName?>'><?php echo html::a($buildViewLink, $testtask->buildName);?></td>
|
||||
<td><?php echo zget($lang->testtask->statusList, $testtask->status)?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="col-4 text-middle text-center">
|
||||
<div class="tile">
|
||||
<div class="tile-title"><?php echo $lang->block->allExecutions;?></div>
|
||||
<?php $projectLink = $this->createLink('project', 'all', 'status=all')?>
|
||||
<?php $projectLink = $this->createLink('project', 'execution')?>
|
||||
<div class="tile-amount"><?php echo $summary->total ? html::a($projectLink, $summary->total) : 0;?></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -27,16 +27,12 @@
|
||||
<table class='table table-borderless table-hover table-fixed table-fixed-head tablesorter block-stories <?php if(!$longBlock) echo 'block-sm'?>'>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php if($longBlock):?>
|
||||
<th class="c-id"><?php echo $lang->idAB?></th>
|
||||
<?php endif;?>
|
||||
<th class="c-pri"><?php echo $lang->priAB?></th>
|
||||
<th class="c-name"><?php echo $lang->SRCommon;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-estimate'><?php echo $lang->story->estimateAB;?></th>
|
||||
<?php endif;?>
|
||||
<th class="c-status"><?php echo $lang->statusAB;?></th>
|
||||
<?php if($longBlock):?>
|
||||
<th class='c-stage'><?php echo $lang->story->stageAB;?></th>
|
||||
<?php endif;?>
|
||||
</tr>
|
||||
@@ -47,20 +43,16 @@
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('story', 'view', "storyID={$story->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<?php if($longBlock):?>
|
||||
<tr <?php echo $appid?>>
|
||||
<td class="c-id-xs"><?php echo sprintf('%03d', $story->id);?></td>
|
||||
<?php endif;?>
|
||||
<td class="c-pri"><span class="label-pri label-pri-<?php echo $story->pri?>" title="<?php echo zget($lang->story->priList, $story->pri, $story->pri);?>"><?php echo zget($lang->story->priList, $story->pri, $story->pri)?></span></td>
|
||||
<td class="c-name" style='color: <?php echo $story->color?>' title='<?php echo $story->title?>'><?php echo $story->title?></td>
|
||||
<td class="c-name" style='color: <?php echo $story->color?>' title='<?php echo $story->title?>'><?php echo html::a($viewLink, $story->title);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-estimate text-center' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . ' ' . $config->hourUnit?></td>
|
||||
<?php endif;?>
|
||||
<td class='c-estimate text-center' title="<?php echo $story->estimate . ' ' . $lang->hourCommon;?>"><?php echo $story->estimate . $config->hourUnit?></td>
|
||||
<?php $status = $this->processStatus('story', $story);?>
|
||||
<td class='c-status' title='<?php echo $status;?>'>
|
||||
<span class="status-story status-<?php echo $story->status?>"><?php echo $status;?></span>
|
||||
</td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-stage'>
|
||||
<span class='story-stage-<?php echo $story->stage?>'>
|
||||
<?php echo zget($lang->story->stageList, $story->stage, $story->stage);?>
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
<td class='c-pri <?php if($longBlock) echo "c-pri-long"?>'><span class='label-pri label-pri-<?php echo $task->pri;?>' title='<?php echo zget($lang->task->priList, $task->pri, $task->pri)?>'><?php echo zget($lang->task->priList, $task->pri, $task->pri)?></span></td>
|
||||
<td class='c-name' style='color: <?php echo $task->color?>' title='<?php echo $task->name?>'><?php echo html::a($this->createLink('task', 'view', "taskID=$task->id", '', '', $task->project), $task->name)?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='c-estimate text-center' title="<?php echo $task->estimate . ' ' . $lang->execution->workHour;?>"><?php echo $task->estimate . ' ' . $lang->execution->workHourUnit;?></td>
|
||||
<td class='c-estimate text-center' title="<?php echo $task->estimate . ' ' . $lang->execution->workHour;?>"><?php echo $task->estimate . $lang->execution->workHourUnit;?></td>
|
||||
<td class='c-deadline'><?php if(substr($task->deadline, 0, 4) > 0) echo $task->deadline;?></td>
|
||||
<?php endif;?>
|
||||
<?php $status = $this->processStatus('task', $task);?>
|
||||
|
||||
@@ -32,17 +32,19 @@
|
||||
<tbody>
|
||||
<?php foreach($testtasks as $testtask):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('testtask', 'view', "testtaskID={$testtask->id}");
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$productViewLink = $this->createLink('product', 'browse', "productID={$testtask->product}");
|
||||
$buildViewLink = $this->createLink('build', 'view', "buildID={$testtask->build}");
|
||||
$testtaskViewLink = $this->createLink('testtask', 'view', "testtaskID={$testtask->id}");
|
||||
?>
|
||||
<tr class='text-center' data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<tr class='text-center' <?php echo $appid?>>
|
||||
<?php if($longBlock):?>
|
||||
<td><?php echo sprintf('%03d', $testtask->id);?></td>
|
||||
<td class='text-left' title='<?php echo $testtask->productName?>'><?php echo $testtask->productName?></td>
|
||||
<td class='text-left' title='<?php echo $testtask->productName?>'><?php echo html::a($productViewLink, $testtask->productName);?></td>
|
||||
<?php endif;?>
|
||||
<td class='text-left' title='<?php echo $testtask->name?>'><?php echo $testtask->name?></td>
|
||||
<td class='text-left' title='<?php echo $testtask->name?>'><?php echo html::a($testtaskViewLink, $testtask->name);?></td>
|
||||
<?php if($longBlock):?>
|
||||
<td class='text-left' title='<?php echo $testtask->projectName . '/' . $testtask->buildName?>'><?php echo $testtask->projectName . '/' . $testtask->buildName?></td>
|
||||
<td class='text-left' title='<?php echo $testtask->projectName . '/' . $testtask->buildName?>'><?php echo html::a($buildViewLink, $testtask->projectName . '/' . $testtask->buildName);?></td>
|
||||
<?php endif;?>
|
||||
<td><?php echo $testtask->begin?></td>
|
||||
<td><?php echo $testtask->end?></td>
|
||||
|
||||
@@ -19,7 +19,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
|
||||
.block-todoes .todoes-input .form-control:-ms-input-placeholder {font-size: 12px; line-height: 20px;color: #a4a8b6;}
|
||||
.block-todoes .todoes-input .form-control::placeholder {font-size: 12px; line-height: 20px; color: #a4a8b6;}
|
||||
.block-todoes .todoes {padding: 0 10px 10px 10px; margin: 0 -20px; max-height: 350px; overflow: auto; overflow-x:hidden}
|
||||
.block-todoes .todoes > li {position: relative; padding: 5px 10px 5px 35px; list-style: none; white-space:nowrap; overflow: auto; overflow-x:hidden; width: 410px;}
|
||||
.block-todoes .todoes > li {position: relative; padding: 5px 10px 5px 35px; list-style: none; white-space:nowrap; overflow: auto; overflow-x:hidden;}
|
||||
.block-todoes .todoes > li:hover {background-color: #e9f2fb;}
|
||||
.block-todoes .todo-title {padding: 5px 15px 5px 5px;}
|
||||
.block-todoes .todo-pri {margin: 0 5px;}
|
||||
@@ -96,7 +96,7 @@ if(!$selfCall) die(include('./todolist.html.php'));
|
||||
?>
|
||||
<li data-id='<?php echo $todo->id?>'>
|
||||
<span class="todo-check icon icon-check-circle"></span>
|
||||
<a href="<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink);?>" class='iframe' <?php echo $appid?>>
|
||||
<a href="<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink);?>" class='iframe' data-toggle='modal' <?php echo $appid?>>
|
||||
<?php if ($todo->date == '2030-01-01') :?>
|
||||
<span class="todo-time"><?php echo $lang->todo->periods['future'] ?></span>
|
||||
<?php else:?>
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
<tbody>
|
||||
<?php foreach($todos as $todo):?>
|
||||
<?php
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$appid = isset($_GET['entry']) ? "class='app-btn' data-id='{$this->get->entry}'" : '';
|
||||
$viewLink = $this->createLink('todo', 'view', "todo={$todo->id}");
|
||||
?>
|
||||
<tr data-url='<?php echo empty($sso) ? $viewLink : $sso . $sign . 'referer=' . base64_encode($viewLink); ?>' <?php echo $appid?>>
|
||||
<tr <?php echo $appid?>>
|
||||
<td class='c-date'>
|
||||
<?php if ($todo->date == '2030-01-01') :?>
|
||||
<?php echo $lang->todo->periods['future'];?>
|
||||
@@ -40,7 +40,7 @@
|
||||
<?php endif;?>
|
||||
</td>
|
||||
<td class="c-pri"><span class="todo-pri label-pri label-pri-<?php echo $todo->pri?>" title="<?php echo zget($lang->todo->priList, $todo->pri);?>"><?php echo zget($lang->todo->priList, $todo->pri);?></span></td>
|
||||
<td class="c-name" title='<?php echo $todo->name;?>'><?php echo $todo->name;?></td>
|
||||
<td class="c-name" title='<?php echo $todo->name;?>'><?php echo html::a($viewLink, $todo->name);?></td>
|
||||
<td class='c-status'><?php echo zget($lang->todo->statusList, $todo->status);?></td>
|
||||
</tr>
|
||||
<?php endforeach;?>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user