Merge branch '15.0.beta3' of https://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3

This commit is contained in:
wangyidong
2021-03-30 16:53:37 +08:00
122 changed files with 746 additions and 689 deletions
+13 -224
View File
@@ -1,226 +1,15 @@
VERSION = $(shell head -n 1 VERSION)
XUANPATH = $(shell head -n 1 XUANPATH)
XUANVERSION = $(shell head -n 1 XUANVERSION)
XVERSION = $(shell head -n 1 XVERSION)
all: pms
all: flow
clean:
rm -fr zentaopms
rm -fr zentaostory
rm -fr zentaotask
rm -fr zentaotest
rm -fr *.tar.gz
rm -fr max
rm -fr *.zip
rm -fr api*
rm -fr build/linux/lampp
rm -fr lampp
common:
mkdir zentaopms
cp -fr bin zentaopms/
cp -fr config zentaopms/ && rm -fr zentaopms/config/my.php
cp -fr db zentaopms/
cp -fr doc zentaopms/ && rm -fr zentaopms/doc/phpdoc && rm -fr zentaopms/doc/doxygen
cp -fr framework zentaopms/
cp -fr lib zentaopms/
cp -fr module zentaopms/
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/extension/
mkdir zentaopms/tmp/log/
mkdir zentaopms/tmp/model/
mv zentaopms/www/install.php.tmp zentaopms/www/install.php
mv zentaopms/www/upgrade.php.tmp zentaopms/www/upgrade.php
cp VERSION zentaopms/
# create index.html of each folder.
for path in `find zentaopms/ -type d`; do touch "$$path/index.html"; done
rm zentaopms/www/index.html
# combine js and css files.
cp -fr tools zentaopms/tools && cd zentaopms/tools/ && php ./minifyfront.php
rm -fr zentaopms/tools
# create the restart file for svn.
# touch zentaopms/module/svn/restart
# delee the unused files.
find zentaopms -name .gitkeep |xargs rm -fr
find zentaopms -name tests |xargs rm -fr
# notify.zip.
mkdir zentaopms/www/data/notify/
zentaoxx:
#xuanxuan
mkdir -p zentaoxx/config/ext
mkdir -p zentaoxx/lib
mkdir -p zentaoxx/module
mkdir -p zentaoxx/framework
mkdir -p zentaoxx/db
mkdir -p zentaoxx/www
mkdir -p zentaoxx/module/common/ext/model/
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 -r xuan/xxb/lib/phpaes zentaoxx/lib/
cp -r xuan/xxb/framework/xuanxuan.class.php zentaoxx/framework/
cp -r xuan/xxb/db/*.sql zentaoxx/db/
cp -r xuan/xxb/module/im zentaoxx/module/
cp -r xuan/xxb/module/client zentaoxx/module/
cp -r xuan/xxb/module/license zentaoxx/module/
cp -r xuan/xxb/module/owt zentaoxx/module/
mkdir -p zentaoxx/module/common/view
cp -r xuan/xxb/module/common/view/header.modal.html.php zentaoxx/module/common/view
cp -r xuan/xxb/module/common/view/marked.html.php zentaoxx/module/common/view
cp -r xuan/xxb/module/common/view/footer.modal.html.php zentaoxx/module/common/view
cp -r xuan/xxb/module/common/view/version.html.php zentaoxx/module/common/view
cp -r xuan/xxb/module/license zentaoxx/module/
mkdir -p zentaoxx/www/js/
cp -r xuan/xxb/www/js/markedjs zentaoxx/www/js/
cp -r xuan/xxb/www/js/version.js zentaoxx/www/js/
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 xuanxuan/config/* zentaoxx/config/
cp -r xuanxuan/module/* zentaoxx/module/
cp -r xuanxuan/www/* zentaoxx/www/
mv zentaoxx/db/ zentaoxx/db_bak
mkdir zentaoxx/db/
cp zentaoxx/db_bak/upgradexuanxuan*.sql zentaoxx/db_bak/xuanxuan.sql zentaoxx/db/
rm -rf zentaoxx/db_bak/
sed -i 's/XXBVERSION/$(XVERSION)/g' zentaoxx/config/ext/xuanxuan.php
sed -i "/\$$config->xuanxuan->backend /c\\\$$config->xuanxuan->backend = 'zentao';" zentaoxx/config/ext/xuanxuan.php
sed -i 's/site,//' zentaoxx/module/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
sed -i 's/md5(\$$user->password.*$$/\$$user->password;/g' zentaoxx/module/im/model/user.php
sed -i '/getSignedTime/d' zentaoxx/module/im/control.php
sed -i "/loadModel('push')/d" zentaoxx/module/im/control.php
sed -i "/this->push/d" zentaoxx/module/im/control.php
sed -i "s/'yahoo', //g" zentaoxx/module/im/config.php
sed -i "s/'gtalk', //g" zentaoxx/module/im/config.php
sed -i "s/'wangwang', //g" zentaoxx/module/im/config.php
sed -i "s/'site', //g" zentaoxx/module/im/config.php
sed -i "s/'reload'/inlink('browse')/g" zentaoxx/module/client/control.php
sed -i 's/tree/dept/' zentaoxx/module/im/model.php
sed -i 's/tree/dept/' zentaoxx/module/im/control.php
sed -i 's/im_/zt_im_/g' zentaoxx/db/*.sql
sed -i 's/xxb_user/zt_user/g' zentaoxx/db/*.sql
sed -i 's/xxb_file/zt_file/g' zentaoxx/db/*.sql
sed -i '/xxb_entry/d' zentaoxx/db/*.sql
sed -i '/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 '/var serverVersions/d' zentaoxx/module/client/js/checkupgrade.js
sed -i '/var currentVersion/d' zentaoxx/module/client/js/checkupgrade.js
sed -i '/setRequiredFields(/d' zentaoxx/module/common/view/header.modal.html.php
sed -i 's/header.html.php/header.lite.html.php/g' zentaoxx/module/common/view/header.modal.html.php
sed -i 's/footer.html.php/footer.lite.html.php/g' zentaoxx/module/common/view/footer.modal.html.php
sed -i 's/v\.//g' zentaoxx/module/im/js/debug.js
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/xxb_/zt_/g' zentaoxx/db/*.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
zip -rqm -9 zentaoxx.$(VERSION).zip zentaoxx/*
rm -rf xuan.zip xuan zentaoxx
package:
# change mode.
chmod -R 777 zentaopms/tmp/
chmod -R 777 zentaopms/www/data
chmod -R 777 zentaopms/config
chmod 777 zentaopms/module
chmod 777 zentaopms/www
chmod a+rx zentaopms/bin/*
if [ ! -d "zentaopms/config/ext" ]; then mkdir zentaopms/config/ext; fi
for module in `ls zentaopms/module/`; do if [ ! -d "zentaopms/module/$$module/ext" ]; then mkdir zentaopms/module/$$module/ext; fi done
find zentaopms/ -name ext |xargs chmod -R 777
mkdir zentaopms/tools; cp tools/cn2tw.php zentaopms/tools; cd zentaopms/tools; php cn2tw.php
#rm -r zentaopms/module/misc/ext
rm -rf zentaopms/tools
pms:
make common
make zentaoxx
unzip zentaoxx.*.zip
cp zentaoxx/* zentaopms/ -r
cat zentaoxx/db/xuanxuan.sql >> zentaopms/db/zentao.sql
make package
zip -rq -9 ZenTaoPMS.$(VERSION).zip zentaopms
rm -fr zentaopms zentaoxx zentaoxx.*.zip
deb:
mkdir buildroot
cp -r build/debian/DEBIAN buildroot
sed -i '/^Version/cVersion: ${VERSION}' buildroot/DEBIAN/control
mkdir buildroot/opt
mkdir buildroot/etc/apache2/sites-enabled/ -p
cp build/debian/zentaopms.conf buildroot/etc/apache2/sites-enabled/
cp ZenTaoPMS.${VERSION}.zip buildroot/opt
cd buildroot/opt; unzip ZenTaoPMS.${VERSION}.zip; mv zentaopms zentao; rm ZenTaoPMS.${VERSION}.zip
sed -i 's/index.php/\/zentao\/index.php/' buildroot/opt/zentao/www/.htaccess
sudo dpkg -b buildroot/ ZenTaoPMS_${VERSION}_1_all.deb
rm -rf buildroot
rpm:
mkdir ~/rpmbuild/SPECS -p
cp build/rpm/zentaopms.spec ~/rpmbuild/SPECS
sed -i '/^Version/cVersion:${VERSION}' ~/rpmbuild/SPECS/zentaopms.spec
mkdir ~/rpmbuild/SOURCES
cp ZenTaoPMS.${VERSION}.zip ~/rpmbuild/SOURCES
mkdir ~/rpmbuild/SOURCES/etc/httpd/conf.d/ -p
cp build/debian/zentaopms.conf ~/rpmbuild/SOURCES/etc/httpd/conf.d/
mkdir ~/rpmbuild/SOURCES/opt/ -p
cd ~/rpmbuild/SOURCES; unzip ZenTaoPMS.${VERSION}.zip; mv zentaopms opt/zentao;
sed -i 's/index.php/\/zentao\/index.php/' ~/rpmbuild/SOURCES/opt/zentao/www/.htaccess
cd ~/rpmbuild/SOURCES; tar -czvf zentaopms-${VERSION}.tar.gz etc opt; rm -rf ZenTaoPMS.${VERSION}.zip etc opt;
rpmbuild -ba ~/rpmbuild/SPECS/zentaopms.spec
cp ~/rpmbuild/RPMS/noarch/zentaopms-${VERSION}-1.noarch.rpm ./
rm -rf ~/rpmbuild
en:
make common
cd zentaopms/; grep -rl 'zentao.net'|xargs sed -i 's/zentao.net/zentao.pm/g';
cd zentaopms/; grep -rl 'http://www.zentao.pm'|xargs sed -i 's/http:\/\/www.zentao.pm/https:\/\/www.zentao.pm/g';
cd zentaopms/config/; echo >> config.php; echo '$$config->isINT = true;' >> config.php
make package
mv zentaopms zentaoalm
zip -r -9 ZenTaoALM.$(VERSION).int.zip zentaoalm
rm -fr zentaoalm
echo $(VERSION).int > VERSION
make endeb
make enrpm
echo $(VERSION) > VERSION
endeb:
mkdir buildroot
cp -r build/debian/DEBIAN buildroot
sed -i '/^Version/cVersion: ${VERSION}' buildroot/DEBIAN/control
mkdir buildroot/opt
mkdir buildroot/etc/apache2/sites-enabled/ -p
cp build/debian/zentaopms.conf buildroot/etc/apache2/sites-enabled/
cp ZenTaoALM.${VERSION}.zip buildroot/opt
cd buildroot/opt; unzip ZenTaoALM.${VERSION}.zip; mv zentaoalm zentao; rm ZenTaoALM.${VERSION}.zip
sed -i 's/index.php/\/zentao\/index.php/' buildroot/opt/zentao/www/.htaccess
sudo dpkg -b buildroot/ ZenTaoALM_${VERSION}_1_all.deb
rm -rf buildroot
enrpm:
mkdir ~/rpmbuild/SPECS -p
cp build/rpm/zentaopms.spec ~/rpmbuild/SPECS
sed -i '/^Version/cVersion:${VERSION}' ~/rpmbuild/SPECS/zentaopms.spec
sed -i '/^Name:/cName:zentaoalm' ~/rpmbuild/SPECS/zentaopms.spec
mkdir ~/rpmbuild/SOURCES
cp ZenTaoALM.${VERSION}.zip ~/rpmbuild/SOURCES
mkdir ~/rpmbuild/SOURCES/etc/httpd/conf.d/ -p
cp build/debian/zentaopms.conf ~/rpmbuild/SOURCES/etc/httpd/conf.d/zentaoalm.conf
mkdir ~/rpmbuild/SOURCES/opt/ -p
cd ~/rpmbuild/SOURCES; unzip ZenTaoALM.${VERSION}.zip; mv zentaoalm opt/zentao;
sed -i 's/index.php/\/zentao\/index.php/' ~/rpmbuild/SOURCES/opt/zentao/www/.htaccess
cd ~/rpmbuild/SOURCES; tar -czvf zentaoalm-${VERSION}.tar.gz etc opt; rm -rf ZenTaoALM.${VERSION}.zip etc opt;
rpmbuild -ba ~/rpmbuild/SPECS/zentaopms.spec
cp ~/rpmbuild/RPMS/noarch/zentaoalm-${VERSION}-1.noarch.rpm ./
rm -rf ~/rpmbuild
patchphpdoc:
sudo cp misc/doc/phpdoc/*.tpl /usr/share/php/data/PhpDocumentor/phpDocumentor/Converters/HTML/frames/templates/phphtmllib/templates/
phpdoc:
phpdoc -d bin,framework,config,lib,module,www -t api -o HTML:frames:phphtmllib -ti ZenTaoPMSAPI参考手册 -s on -pp on -i *test*
phpdoc -d bin,framework,config,lib,module,www -t api.chm -o chm:default:default -ti ZenTaoPMSAPI参考手册 -s on -pp on -i *test*
doxygen:
doxygen doc/doxygen/doxygen.conf
flow:
ifneq ($(wildcard ranzhi),)
rm ranzhi -r
endif
mkdir -p max/www
# move max extension to max.
cp -fr config max
cp -fr db max
cp -fr module max
cp -fr www/* max/www
cp www/favicon.ico max/www
+1 -1
View File
@@ -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.rc1'; // 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.
-1
View File
@@ -30,7 +30,6 @@ ALTER TABLE `zt_burn` CHANGE `project` `execution` mediumint(8) unsigned NOT NUL
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_case` CHANGE `project` `execution` 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;
+8 -3
View File
@@ -171,7 +171,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 +179,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,12 +191,16 @@ 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 system score.*/
$config->systemScore = $score;
/* Record hour unit. */
$config->hourUnit = 'H';
if($hourKey == STORYPOINT_KEY) $config->hourUnit = 'SP';
+1
View File
@@ -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);
+1 -1
View File
@@ -1330,7 +1330,7 @@ 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);
+33 -9
View File
@@ -9,17 +9,34 @@ $(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);
console.log($('#paramstype').val());
$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;
if(lang.indexOf('zh') >= 0)
{
console.log(preValue, blockTitle);
console.log(blockTitle.indexOf(preValue));
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 +68,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);
}
}
};
+14 -9
View File
@@ -148,6 +148,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 +279,11 @@ $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;
$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';
@@ -336,7 +341,7 @@ $lang->block->availableBlocks->issue = 'My Issues';
$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 +381,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 +499,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';
+14 -9
View File
@@ -148,6 +148,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 +279,11 @@ $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;
$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';
@@ -336,7 +341,7 @@ $lang->block->availableBlocks->issue = 'My Issues';
$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 +381,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 +499,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';
+14 -9
View File
@@ -148,6 +148,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 +279,11 @@ $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;
$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';
@@ -336,7 +341,7 @@ $lang->block->availableBlocks->issue = 'My Issues';
$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 +381,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 +499,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';
+14 -9
View File
@@ -148,6 +148,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 +279,11 @@ $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;
$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';
@@ -336,7 +341,7 @@ $lang->block->availableBlocks->issue = 'My Issues';
$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 +381,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 +499,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';
+13 -8
View File
@@ -148,6 +148,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 +279,11 @@ $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;
$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';
@@ -336,7 +341,7 @@ $lang->block->availableBlocks->issue = '我的问题';
$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'] = '待办';
@@ -376,9 +381,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 = '版本列表';
+13 -8
View File
@@ -148,6 +148,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 +279,11 @@ $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;
$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';
@@ -336,7 +341,7 @@ $lang->block->availableBlocks->issue = '我的問題';
$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'] = '待辦';
@@ -376,9 +381,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 = '版本列表';
+1
View File
@@ -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);?>
+1 -1
View File
@@ -34,7 +34,7 @@
<?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->project->tenThousand : number_format((float)$project->budget, 1);?>
<?php $programBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) ? number_format((float)$project->budget / 10000, 2) . $this->lang->project->tenThousand : number_format((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
+1 -1
View File
@@ -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>
+14 -5
View File
@@ -288,8 +288,6 @@ class bug extends control
{
if(empty($this->products)) $this->locate($this->createLink('product', 'create'));
$this->qa->setMenu($this->products, $productID);
/* Unset discarded types. */
foreach($this->config->bug->discardedTypes as $type) unset($this->lang->bug->typeList[$type]);
@@ -297,7 +295,18 @@ class bug extends control
$extras = str_replace(array(',', ' '), array('&', ''), $extras);
parse_str($extras, $output);
if(isset($output['executionID'])) $this->loadModel('execution')->setMenu($output['executionID']);
if($this->app->openApp == 'execution')
{
$this->loadModel('execution')->setMenu($output['executionID']);
}
else if($this->app->openApp == 'project')
{
$this->loadModel('project')->setMenu($output['projectID']);
}
else
{
$this->qa->setMenu($this->products, $productID);
}
foreach($output as $paramKey => $paramValue)
{
@@ -376,7 +385,7 @@ class bug extends control
{
$location = $this->createLink('execution', 'bug', "executionID={$output['executionID']}");
}
if(isset($output['projectID']))
elseif(isset($output['projectID']))
{
$location = $this->createLink('project', 'bug', "projectID={$output['projectID']}");
}
@@ -496,7 +505,7 @@ class bug extends control
/* Get products and projects. */
$products = $this->products;
$projects = array('' => '');
$projects = array(0 => '');
if($projectID)
{
$products = array();
+2 -2
View File
@@ -31,7 +31,7 @@
<?php if(!isonlybody()):?>
<div class="btn-toolbar pull-right">
<?php if(common::canModify('product', $product)):?>
<?php common::printLink('bug', 'create', "productID={$bug->product}&branch={$bug->branch}&extra=moduleID={$bug->module}", "<i class='icon icon-plus'></i>" . $lang->bug->create, '', "class='btn btn-primary'"); ?>
<?php common::printLink('bug', 'create', "productID={$bug->product}&branch={$bug->branch}&extra=moduleID={$bug->module},projectID={$bug->project},executionID={$bug->execution}", "<i class='icon icon-plus'></i>" . $lang->bug->create, '', "class='btn btn-primary'"); ?>
<?php endif;?>
</div>
<?php endif;?>
@@ -67,7 +67,7 @@
<div class='cell'><?php include '../../common/view/action.html.php';?></div>
<?php
$params = "bugID=$bug->id";
$copyParams = "productID=$productID&branch=$bug->branch&extras=bugID=$bug->id";
$copyParams = "productID=$productID&branch=$bug->branch&extras=bugID=$bug->id,projectID={$bug->project},executionID={$bug->execution}";
$convertParams = "productID=$productID&branch=$bug->branch&moduleID=0&from=bug&bugID=$bug->id";
?>
<div class='main-actions'>
+5
View File
@@ -56,6 +56,11 @@ class build extends control
$this->execution->setMenu($executionID);
$this->session->set('project', $execution->project);
}
elseif($this->app->openApp == 'qa')
{
$execution = $this->execution->getByID($executionID);
$executions = $this->execution->getPairs($execution->project);
}
$productGroups = $this->execution->getProducts($executionID);
$productID = $productID ? $productID : key($productGroups);
+1
View File
@@ -60,6 +60,7 @@ js::set('flow', $config->global->flow);
<?php common::printLink('caselib', 'exportTemplet', "libID=$libID", "<i class='icon icon-export muted'> </i>" . $lang->caselib->exportTemplet, '', "class='btn btn-link export' data-width='35%'");?>
<?php common::printLink('caselib', 'import', "libID=$libID", "<i class='icon muted icon-import'> </i>" . $lang->testcase->fileImport, '', "class='btn btn-link export'");?>
</div>
<?php echo html::a($this->createLink('caselib', 'create'), $lang->caselib->create, '', 'class="btn btn-secondary"');?>
<div class='btn-group dropdown'>
<?php
$params = "libID=$libID&moduleID=" . (isset($moduleID) ? $moduleID : 0);
+27 -79
View File
@@ -37,7 +37,7 @@ $lang->dividerMenu = ',devops,system,';
$lang->mainNav->menuOrder[5] = 'my';
if($config->systemMode == 'new') $lang->mainNav->menuOrder[10] = 'program';
$lang->mainNav->menuOrder[15] = 'product';
$lang->mainNav->menuOrder[20] = 'project';
if($config->systemMode == 'new') $lang->mainNav->menuOrder[20] = 'project';
$lang->mainNav->menuOrder[21] = 'execution';
$lang->mainNav->menuOrder[23] = 'qa';
$lang->mainNav->menuOrder[25] = 'devops';
@@ -50,12 +50,12 @@ $lang->mainNav->menuOrder[50] = 'admin';
$lang->my->menu = new stdclass();
$lang->my->menu->index = array('link' => "$lang->dashboard|my|index");
$lang->my->menu->calendar = array('link' => "$lang->calendar|my|calendar|", 'subModule' => 'todo', 'alias' => 'todo');
$lang->my->menu->work = array('link' => "{$lang->my->work}|my|work|mode=task");
$lang->my->menu->work = array('link' => "{$lang->my->work}|my|work|mode=task", 'subModule' => 'task');
if($config->systemMode == 'new') $lang->my->menu->project = array('link' => "{$lang->project->common}|my|project|");
$lang->my->menu->execution = array('link' => "{$lang->execution->common}|my|execution|type=undone");
$lang->my->menu->contribute = array('link' => "$lang->contribute|my|contribute|mode=task");
$lang->my->menu->dynamic = array('link' => "$lang->dynamic|my|dynamic|");
$lang->my->menu->score = array('link' => "{$lang->score->shortCommon}|my|score|", 'subModule' => 'score');
if($config->systemScore) $lang->my->menu->score = array('link' => "{$lang->score->shortCommon}|my|score|", 'subModule' => 'score');
$lang->my->menu->contacts = array('link' => "$lang->contact|my|managecontacts|");
/* My menu order. */
@@ -71,7 +71,7 @@ $lang->my->menuOrder[45] = 'score';
$lang->my->menuOrder[50] = 'contacts';
$lang->my->menu->work['subMenu'] = new stdclass();
$lang->my->menu->work['subMenu']->task = "{$lang->task->common}|my|work|mode=task";
$lang->my->menu->work['subMenu']->task = array('link' => "{$lang->task->common}|my|work|mode=task", 'subModule' => 'task');
if($config->URAndSR) $lang->my->menu->work['subMenu']->requirement = "$lang->URCommon|my|work|mode=requirement";
$lang->my->menu->work['subMenu']->story = "$lang->SRCommon|my|work|mode=story";
$lang->my->menu->work['subMenu']->bug = "{$lang->bug->common}|my|work|mode=bug";
@@ -168,7 +168,7 @@ $lang->product->dividerMenu = $config->URAndSR ? ',requirement,set,' : ',track,s
/* Project menu. */
$lang->project->homeMenu = new stdclass();
$lang->project->homeMenu->browse = array('link' => ($config->systemMode == 'new' ? $lang->project->list : $lang->executionCommon) . '|project|browse|', 'alias' => 'batchedit');
$lang->project->homeMenu->browse = array('link' => ($config->systemMode == 'new' ? $lang->project->list : $lang->executionCommon) . '|project|browse|', 'alias' => 'batchedit,create');
$lang->project->dividerMenu = ',execution,programplan,doc,dynamic,';
@@ -178,12 +178,11 @@ $lang->scrum->menu->index = array('link' => "{$lang->dashboard}|project|inde
$lang->scrum->menu->execution = array('link' => "$lang->executionCommon|project|execution|projectID=%s");
$lang->scrum->menu->story = array('link' => "$lang->SRCommon|projectstory|story|projectID=%s", 'subModule' => 'projectstory', 'alias' => 'story,track');
$lang->scrum->menu->doc = array('link' => "{$lang->doc->common}|doc|objectLibs|type=project&objectID=%s", 'subModule' => 'doc');
$lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|qa|projectID=%s", 'subModule' => 'testcase,testtask,bug', 'alias' => 'bug,testtask,testcase');
$lang->scrum->menu->qa = array('link' => "{$lang->qa->common}|project|bug|projectID=%s", 'subModule' => 'testcase,testtask,bug,testreport', 'alias' => 'bug,testtask,testcase,testreport');
$lang->scrum->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo');
$lang->scrum->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s");
$lang->scrum->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease');
$lang->scrum->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s");
$lang->scrum->menu->other = array('link' => "$lang->other|issue|browse|project=%s", 'class' => 'dropdown dropdown-hover');
$lang->scrum->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'subModule' => 'stakeholder', 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist');
/* Scrum menu order. */
@@ -195,15 +194,15 @@ $lang->scrum->menuOrder[25] = 'devops';
$lang->scrum->menuOrder[30] = 'doc';
$lang->scrum->menuOrder[35] = 'build';
$lang->scrum->menuOrder[40] = 'release';
$lang->scrum->menuOrder[45] = 'other';
$lang->scrum->menuOrder[48] = 'dynamic';
$lang->scrum->menuOrder[50] = 'settings';
$lang->scrum->menu->qa['subMenu'] = new stdclass();
$lang->scrum->menu->qa['subMenu']->index = array('link' => "$lang->dashboard|project|qa|projectID=%s");
$lang->scrum->menu->qa['subMenu']->bug = array('link' => "{$lang->bug->common}|project|bug|projectID=%s", 'subModule' => 'bug');
$lang->scrum->menu->qa['subMenu']->testcase = array('link' => "{$lang->testcase->shortCommon}|project|testcase|projectID=%s", 'subModule' => 'testsuite,testcase,caselib,tree');
$lang->scrum->menu->qa['subMenu']->testtask = array('link' => "{$lang->testtask->common}|project|testtask|projectID=%s", 'subModule' => 'testtask', 'class' => 'dropdown dropdown-hover');
//$lang->scrum->menu->qa['subMenu']->index = array('link' => "$lang->dashboard|project|qa|projectID=%s");
$lang->scrum->menu->qa['subMenu']->bug = array('link' => "{$lang->bug->common}|project|bug|projectID=%s", 'subModule' => 'bug');
$lang->scrum->menu->qa['subMenu']->testcase = array('link' => "{$lang->testcase->shortCommon}|project|testcase|projectID=%s", 'subModule' => 'testsuite,testcase,caselib,tree');
$lang->scrum->menu->qa['subMenu']->testtask = array('link' => "{$lang->testtask->common}|project|testtask|projectID=%s", 'subModule' => 'testtask', 'class' => 'dropdown dropdown-hover');
$lang->scrum->menu->qa['subMenu']->testreport = array('link' => "{$lang->testreport->common}|project|testreport|projectID=%s", 'subModule' => 'testreport');
$lang->scrum->menu->settings['subMenu'] = new stdclass();
$lang->scrum->menu->settings['subMenu']->view = array('link' => "$lang->overview|project|view|project=%s", 'alias' => 'edit');
@@ -213,54 +212,6 @@ $lang->scrum->menu->settings['subMenu']->whitelist = array('link' => "{$lang->
$lang->scrum->menu->settings['subMenu']->stakeholder = array('link' => "{$lang->stakeholder->common}|stakeholder|browse|project=%s", 'subModule' => 'stakeholder');
$lang->scrum->menu->settings['subMenu']->group = array('link' => "{$lang->priv}|project|group|project=%s", 'alias' => 'group,manageview,managepriv');
/* Waterfall menu. */
$lang->waterfall->menu = new stdclass();
$lang->waterfall->menu->index = array('link' => "$lang->dashboard|project|index|project=%s");
$lang->waterfall->menu->programplan = array('link' => "{$lang->productplan->shortCommon}|programplan|browse|project=%s", 'subModule' => 'programplan');
$lang->waterfall->menu->doc = array('link' => "{$lang->doc->common}|doc|objectLibs|type=project&objectID=%s");
$lang->waterfall->menu->story = array('link' => "$lang->SRCommon|projectstory|story|project=%s", 'subModule' => 'projectstory');
$lang->waterfall->menu->design = array('link' => "$lang->design|design|browse|project=%s");
$lang->waterfall->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo');
$lang->waterfall->menu->track = array('link' => "$lang->track|projectstory|track", 'alias' => 'track');
$lang->waterfall->menu->qa = array('link' => "{$lang->qa->common}|project|qa|projectID=%s", 'subModule' => 'testcase,testtask,bug', 'alias' => 'bug,testtask,testcase');
$lang->waterfall->menu->release = array('link' => "{$lang->release->common}|projectrelease|browse|project=%s", 'subModule' => 'projectrelease');
$lang->waterfall->menu->build = array('link' => "{$lang->build->common}|project|build|project=%s");
$lang->waterfall->menu->dynamic = array('link' => "$lang->dynamic|project|dynamic|project=%s");
$lang->waterfall->menu->other = array('link' => "$lang->other|workestimation|index|project=%s", 'class' => 'dropdown dropdown-hover');
$lang->waterfall->menu->settings = array('link' => "$lang->settings|project|view|project=%s", 'alias' => 'edit,manageproducts,group,managemembers,manageview,managepriv,whitelist,addwhitelist');
/* Waterfall menu order. */
$lang->waterfall->menuOrder[5] = 'index';
$lang->waterfall->menuOrder[15] = 'programplan';
$lang->waterfall->menuOrder[20] = 'projectstory';
$lang->waterfall->menuOrder[25] = 'design';
$lang->waterfall->menuOrder[30] = 'ci';
$lang->waterfall->menuOrder[35] = 'track';
$lang->waterfall->menuOrder[38] = 'review';
$lang->waterfall->menuOrder[39] = 'cm';
$lang->waterfall->menuOrder[40] = 'qa';
$lang->waterfall->menuOrder[45] = 'doc';
$lang->waterfall->menuOrder[50] = 'build';
$lang->waterfall->menuOrder[55] = 'projectrelease';
$lang->waterfall->menuOrder[60] = 'weekly';
$lang->waterfall->menuOrder[65] = 'other';
$lang->waterfall->menuOrder[68] = 'dynamic';
$lang->waterfall->menuOrder[70] = 'projectsetting';
$lang->waterfall->menu->qa['subMenu'] = new stdclass();
$lang->waterfall->menu->qa['subMenu']->index = array('link' => "$lang->dashboard|project|qa|projectID=%s");
$lang->waterfall->menu->qa['subMenu']->bug = array('link' => "{$lang->bug->common}|project|bug|projectID=%s", 'subModule' => 'bug');
$lang->waterfall->menu->qa['subMenu']->testcase = array('link' => "{$lang->testcase->shortCommon}|project|testcase|projectID=%s", 'subModule' => 'testsuite,testcase,caselib');
$lang->waterfall->menu->qa['subMenu']->testtask = array('link' => "{$lang->testtask->common}|project|testtask|projectID=%s", 'subModule' => 'testtask', 'class' => 'dropdown dropdown-hover');
$lang->waterfall->menu->other['dropMenu'] = new stdclass();
$lang->waterfall->menu->other['dropMenu']->estimation = array('link' => "$lang->estimation|workestimation|index|projectID=%s", 'subModule' => 'workestimation,durationestimation,budget');
$lang->waterfall->menu->other['dropMenu']->issue = array('link' => "$lang->issue|issue|browse|projectID=%s", 'subModule' => 'issue');
$lang->waterfall->menu->other['dropMenu']->risk = array('link' => "$lang->risk|risk|browse|projectID=%s", 'subModule' => 'risk');
$lang->waterfall->menu->devops = $lang->scrum->menu->devops;
$lang->waterfall->menu->settings = $lang->scrum->menu->settings;
/* Execution menu. */
$lang->execution->homeMenu = new stdclass();
$lang->execution->homeMenu->index = "$lang->dashboard|execution|index|";
@@ -272,7 +223,7 @@ $lang->execution->menu->kanban = array('link' => "$lang->kanban|execution|kanb
$lang->execution->menu->burn = array('link' => "$lang->burn|execution|burn|executionID=%s");
$lang->execution->menu->view = array('link' => "$lang->view|execution|grouptask|executionID=%s", 'alias' => 'grouptask,tree', 'class' => 'dropdown dropdown-hover');
$lang->execution->menu->story = array('link' => "$lang->SRCommon|execution|story|executionID=%s", 'subModule' => 'story', 'alias' => 'batchcreate,linkstory,storykanban');
$lang->execution->menu->qa = array('link' => "{$lang->qa->common}|execution|qa|executionID=%s", 'subModule' => 'bug,testcase,testtask,testreport', 'alias' => 'qa,bug,testcase,testtask,testreport');
$lang->execution->menu->qa = array('link' => "{$lang->qa->common}|execution|bug|executionID=%s", 'subModule' => 'bug,testcase,testtask,testreport', 'alias' => 'qa,bug,testcase,testtask,testreport');
$lang->execution->menu->devops = array('link' => "{$lang->repo->common}|repo|browse|repoID=0&branchID=&objectID=%s", 'subModule' => 'repo');
$lang->execution->menu->doc = array('link' => "{$lang->doc->common}|doc|objectLibs|type=execution&objectID=%s", 'subModule' => 'doc');
$lang->execution->menu->build = array('link' => "{$lang->build->common}|execution|build|executionID=%s", 'subModule' => 'build');
@@ -299,11 +250,11 @@ $lang->execution->menu->view['subMenu']->groupTask = "$lang->groupView|execution
$lang->execution->menu->view['subMenu']->tree = "$lang->treeView|execution|tree|executionID=%s";
$lang->execution->menu->qa['subMenu'] = new stdclass();
$lang->execution->menu->qa['subMenu']->qa = array('link' => "$lang->dashboard|execution|qa|executionID=%s");
//$lang->execution->menu->qa['subMenu']->qa = array('link' => "$lang->dashboard|execution|qa|executionID=%s");
$lang->execution->menu->qa['subMenu']->bug = array('link' => "{$lang->bug->common}|execution|bug|executionID=%s", 'subModule' => 'bug');
$lang->execution->menu->qa['subMenu']->testcase = array('link' => "{$lang->testcase->shortCommon}|execution|testcase|executionID=%s", 'alias' => 'create');
$lang->execution->menu->qa['subMenu']->testtask = array('link' => "{$lang->testtask->common}|execution|testtask|executionID=%s", 'subModule' => 'testtask');
$lang->execution->menu->qa['subMenu']->testreport = array('link' => "{$lang->testreport->common}|execution|testreport|browse|exeutionID=%s", 'subModule' => 'testreport');
$lang->execution->menu->qa['subMenu']->testreport = array('link' => "{$lang->testreport->common}|execution|testreport|exeutionID=%s", 'subModule' => 'testreport');
$lang->execution->menu->qa['menuOrder'][5] = 'qa';
$lang->execution->menu->qa['menuOrder'][10] = 'bug';
@@ -321,29 +272,24 @@ $lang->execution->dividerMenu = ',story,build,settings,';
/* QA menu.*/
$lang->qa->menu = new stdclass();
$lang->qa->menu->index = array('link' => "$lang->dashboard|qa|index");
$lang->qa->menu->bug = array('link' => "{$lang->bug->common}|bug|browse|productID=%s", 'alias' => 'view,create,batchcreate,edit,resolve,close,activate,report,batchedit,batchactivate,confirmbug,assignto');
$lang->qa->menu->testcase = array('link' => "{$lang->testcase->shortCommon}|testcase|browse|productID=%s", 'subModule' => 'testsuite,caselib');
$lang->qa->menu->testtask = array('link' => "{$lang->testtask->common}|testtask|browse|productID=%s", 'subModule' => 'testreport', 'alias' => 'view,edit,linkcase,cases,start,close,batchrun,groupcase,report,importunitresult');
$lang->qa->menu->automation = array('link' => "{$lang->automation->common}|automation|browse|productID=%s", 'alias' => '');
$lang->qa->menu->bug = array('link' => "{$lang->bug->common}|bug|browse|productID=%s", 'subModule' => 'bug');
$lang->qa->menu->testcase = array('link' => "{$lang->testcase->shortCommon}|testcase|browse|productID=%s", 'subModule' => 'testcase,story');
$lang->qa->menu->testsuite = array('link' => "{$lang->testcase->testsuite}|testsuite|browse|productID=%s", 'subModule' => 'testsuite');
$lang->qa->menu->testtask = array('link' => "{$lang->testtask->common}|testtask|browse|productID=%s", 'subModule' => 'testtask', 'alias' => 'view,edit,linkcase,cases,start,close,batchrun,groupcase,report,importunitresult');
$lang->qa->menu->report = array('link' => "{$lang->testreport->common}|testreport|browse|productID=%s", 'subModule' => 'testreport');
$lang->qa->menu->caselib = array('link' => "{$lang->testcase->caselib}|caselib|browse|libID=0", 'subModule' => 'caselib');
$lang->qa->menu->automation = array('link' => "{$lang->automation->common}|automation|browse|productID=%s", 'subModule' => 'automation', 'alias' => '');
/* QA menu order. */
$lang->qa->menuOrder[5] = 'product';
$lang->qa->menuOrder[10] = 'index';
$lang->qa->menuOrder[15] = 'bug';
$lang->qa->menuOrder[20] = 'testcase';
$lang->qa->menuOrder[25] = 'testtask';
$lang->qa->menuOrder[30] = 'report';
$lang->qa->menuOrder[35] = 'testsuite';
$lang->qa->menuOrder[25] = 'testsuite';
$lang->qa->menuOrder[30] = 'testtask';
$lang->qa->menuOrder[35] = 'report';
$lang->qa->menuOrder[40] = 'caselib';
$lang->qa->menu->testcase['subMenu'] = new stdclass();
$lang->qa->menu->testcase['subMenu']->case = array('link' => "{$lang->testcase->case}|testcase|browse|productID=%s", 'subModule' => 'testcase,story');
$lang->qa->menu->testcase['subMenu']->caselib = array('link' => "{$lang->testcase->caselib}|caselib|browse|libID=0", 'subModule' => 'caselib');
$lang->qa->menu->testcase['subMenu']->testsuite = array('link' => "{$lang->testcase->testsuite}|testsuite|browse|productID=%s", 'subModule' => 'testsuite');
$lang->qa->menu->testtask['subMenu'] = new stdclass();
$lang->qa->menu->testtask['subMenu']->testtask = array('link' => "{$lang->testtask->common}|testtask|browse|productID=%s", 'subModule' => 'testtask', 'alias' => 'linkcase,cases,start,close,batchrun,groupcase,report,importunitresult');
$lang->qa->menu->testtask['subMenu']->report = array('link' => "{$lang->testreport->common}|testreport|browse|productID=%s", 'subModule' => 'testreport');
$lang->qa->menuOrder[45] = 'automation';
// $lang->qa->menu->automation['subMenu'] = new stdclass();
// $lang->qa->menu->automation['subMenu']->browse = array('link' => "{$lang->intro}|automation|browse|productID=%s", 'alias' => '');
@@ -352,6 +298,8 @@ $lang->qa->menu->testtask['subMenu']->report = array('link' => "{$lang->testre
// $lang->qa->menu->automation['subMenu']->interface = array('link' => '接口|automation|interface|productID=%s', 'alias' => '');
// $lang->qa->menu->automation['subMenu']->environment = array('link' => '环境|automation|environment|productID=%s', 'alias' => '');
$lang->qa->dividerMenu = ',bug,testtask,caselib,';
/* DevOps menu. */
$lang->devops->menu = new stdclass();
$lang->devops->menu->code = array('link' => "{$lang->repo->common}|repo|browse|repoID=%s", 'alias' => 'diff,view,revision,log,blame,showsynccomment');
+1 -1
View File
@@ -140,7 +140,7 @@ $lang->system->common = '组织';
$lang->admin->common = '后台';
$lang->task->common = '任务';
$lang->bug->common = 'Bug';
$lang->testcase->common = '测试用例';
$lang->testcase->common = '用例';
$lang->testtask->common = '测试单';
$lang->score->common = '我的积分';
$lang->build->common = '版本';
+12
View File
@@ -689,7 +689,18 @@ class commonModel extends model
$subLink = helper::createLink($subModule, $subMethod, $subParams);
$subActive = '';
$activeMainMenu = false;
if($currentModule == strtolower($subModule) && $currentMethod == strtolower($subMethod))
{
$activeMainMenu = true;
}
else
{
$subModule = isset($dropMenuItem['subModule']) ? explode(',', $dropMenuItem['subModule']) : array();
if($subModule and in_array($currentModule, $subModule) and strpos(",$exclude,", ",$currentModule-$currentMethod,") === false) $activeMainMenu = true;
}
if($activeMainMenu)
{
$activeMenu = $dropMenuName;
$active = 'active';
@@ -1761,6 +1772,7 @@ EOD;
if(!commonModel::hasDBPriv($object, $module, $method)) return false;
if(empty($acls['views'])) return true;
$menu = isset($lang->navGroup->$module) ? $lang->navGroup->$module : $module;
$menu = strtolower($menu);
if($menu != 'qa' and !isset($lang->$menu->menu)) return true;
if($menu == 'my' or $menu == 'index' or $module == 'tree') return true;
+1
View File
@@ -35,6 +35,7 @@ class cronModel extends model
return $this->dao->select('*')->from(TABLE_CRON)
->where('1=1')
->beginIF(strpos($params, 'nostop') !== false)->andWhere('status')->ne('stop')->fi()
->beginIF(!isset($this->config->maxVersion))->andWhere('command')->notlike("%moduleName=weekly&%")->fi()
->fetchAll('id');
}
+2 -2
View File
@@ -284,8 +284,8 @@ class custom extends control
if($moduleName == 'doc')
{
unset($requiredFields['createLib']);
unset($requiredFields['editLib']);
unset($requiredFields['createlib']);
unset($requiredFields['editlib']);
}
$this->view->title = $this->lang->custom->required;
+30 -12
View File
@@ -947,10 +947,11 @@ class execution extends control
}
/**
* Execution case list.
* List of test reports for the execution.
*
* @param int $executionID
* @param string $type
* @param string $objectType project|execution|product
* @param string $extra
* @param string $orderBy
* @param int $recTotal
* @param int $recPerPage
@@ -958,9 +959,9 @@ class execution extends control
* @access public
* @return void
*/
public function testreport($executionID = 0, $objectID = 0, $objectType = 'product', $extra = '', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
public function testreport($executionID = 0, $objectType = 'execution', $extra = '', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
echo $this->fetch('testreport', 'browse', "objectID=$executionID&objectType=$objectType&extra=$extra&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
}
/**
@@ -1038,9 +1039,11 @@ class execution extends control
public function testtask($executionID = 0, $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
$this->loadModel('testtask');
$this->app->loadLang('testreport');
/* Save session. */
$this->session->set('testtaskList', $this->app->getURI(true), 'execution');
$this->session->set('buildList', $this->app->getURI(true), 'execution');
$execution = $this->commonAction($executionID);
$executionID = $execution->id;
@@ -1191,6 +1194,7 @@ class execution extends control
{
if($this->app->openApp == 'project')
{
if(!empty($copyExecutionID)) $projectID = $this->dao->select('project')->from(TABLE_EXECUTION)->where('id')->eq($copyExecutionID)->fetch('project');
$project = $this->project->getByID($projectID);
$model = $project->model;
@@ -2570,7 +2574,7 @@ class execution extends control
$executionGroups = $this->dao->select('*')->from(TABLE_EXECUTION)
->where('id')->in($this->app->user->view->sprints)
->andWhere('deleted')->eq(0)
->andWhere('project')->in(array_keys($projects))
->beginIF($this->config->systemMode == 'new')->andWhere('project')->in(array_keys($projects))->fi()
->orderBy('id_desc')
->fetchGroup('project', 'id');
@@ -2579,15 +2583,29 @@ class execution extends control
->andWhere('type')->eq('execution')
->fetchGroup('root', 'account');
foreach($projects as $project)
if($this->config->systemMode == 'new')
{
$executions = zget($executionGroups, $project->id, array());
foreach($executions as $execution)
foreach($projects as $project)
{
if(isset($orderedExecutions[$execution->parent])) unset($orderedExecutions[$execution->parent]);
$execution->teams = zget($teams, $execution->id, array());
$orderedExecutions[$execution->id] = $execution;
$executions = zget($executionGroups, $project->id, array());
foreach($executions as $execution)
{
if(isset($orderedExecutions[$execution->parent])) unset($orderedExecutions[$execution->parent]);
$execution->teams = zget($teams, $execution->id, array());
$orderedExecutions[$execution->id] = $execution;
}
}
}
else
{
foreach($executionGroups as $projectID => $executions)
{
foreach($executions as $execution)
{
$execution->teams = zget($teams, $execution->id, array());
$orderedExecutions[$execution->id] = $execution;
}
}
}
+3 -2
View File
@@ -198,9 +198,9 @@ $lang->execution->deleteAB = "删除执行";
$lang->execution->browse = "浏览执行";
$lang->execution->list = "{$lang->executionCommon}列表";
$lang->execution->edit = "编辑{$lang->executionCommon}";
$lang->execution->editAB = "编辑执行";
$lang->execution->editAction = "编辑执行";
$lang->execution->batchEdit = "编辑";
$lang->execution->batchEditAB = "批量编辑";
$lang->execution->batchEditAction = "批量编辑";
$lang->execution->manageMembers = '团队管理';
$lang->execution->unlinkMember = '移除成员';
$lang->execution->unlinkStory = "移除{$lang->SRCommon}";
@@ -220,6 +220,7 @@ $lang->execution->importPlanStory = '创建' . $lang->executionCommon . '成
$lang->execution->iteration = '版本迭代';
$lang->execution->iterationInfo = '迭代%s次';
$lang->execution->viewAll = '查看所有';
$lang->execution->testreport = '测试报告';
/* 分组浏览。*/
$lang->execution->allTasks = '所有';
+11 -9
View File
@@ -305,7 +305,7 @@ class executionModel extends model
->setDefault('openedVersion', $this->config->version)
->setDefault('lastEditedBy', $this->app->user->account)
->setDefault('lastEditedDate', helper::now())
->setDefault('team', substr($this->post->name,0, 30))
->setDefault('team', substr($this->post->name, 0, 30))
->setIF($this->config->systemMode == 'new', 'parent', $this->post->project)
->setIF($this->post->acl == 'open', 'whitelist', '')
->join('whitelist', ',')
@@ -1810,7 +1810,6 @@ class executionModel extends model
$bugToTasks = fixer::input('post')->get();
$bugs = $this->bug->getByList(array_keys($bugToTasks->import));
$projectID = $this->loadModel('task')->getProjectID($executionID);
foreach($bugToTasks->import as $key => $value)
{
$bug = zget($bugs, $key, '');
@@ -1818,7 +1817,7 @@ class executionModel extends model
$task = new stdClass();
$task->bug = $bug;
$task->project = $projectID;
$task->project = $execution->project;
$task->execution = $executionID;
$task->story = $bug->story;
$task->storyVersion = $bug->storyVersion;
@@ -2236,7 +2235,8 @@ class executionModel extends model
->leftJoin(TABLE_EXECUTION)->alias('t2')->on('t1.root = t2.id')
->where('t1.account')->eq($account)
->andWhere('t1.root')->ne($currentExecution)
->andWhere('t1.type')->eq($execution->type)
->andWhere('t1.type')->eq('execution')
->andWhere('t2.project')->eq($execution->project)
->andWhere('t2.deleted')->eq('0')
->groupBy('t1.root')
->orderBy('t1.root DESC')
@@ -2273,7 +2273,7 @@ class executionModel extends model
public function manageMembers($executionID)
{
$execution = $this->getByID($executionID);
$data = (array)fixer::input('post')->get();
$data = (array)fixer::input('post')->get();
extract($data);
$executionType = strpos('sprint|stage', $execution->type) !== false ? 'execution' : $execution->type;
@@ -2372,7 +2372,9 @@ class executionModel extends model
public function unlinkMember($sprintID, $account)
{
$sprint = $this->getByID($sprintID);
$this->dao->delete()->from(TABLE_TEAM)->where('root')->eq((int)$sprintID)->andWhere('type')->eq($sprint->type)->andWhere('account')->eq($account)->exec();
$type = ($sprint->type == 'stage' || $sprint->type == 'sprint') ? 'execution' : $sprint->type;
$this->dao->delete()->from(TABLE_TEAM)->where('root')->eq((int)$sprintID)->andWhere('type')->eq($type)->andWhere('account')->eq($account)->exec();
$this->updateUserView($sprintID, 'sprint', array($account));
/* Remove team members from the sprint or stage, and determine whether to remove team members from the execution. */
@@ -2386,9 +2388,9 @@ class executionModel extends model
->fetch();
if(empty($teamMember))
{
$this->dao->delete()->from(TABLE_TEAM)->where('root')->eq($sprint->execution)->andWhere('type')->eq('execution')->andWhere('account')->eq($account)->exec();
$this->loadModel('user')->updateUserView($sprint->execution, 'execution', array($account));
$linkedProducts = $this->loadModel('product')->getProductPairsByProject($sprint->execution);
$this->dao->delete()->from(TABLE_TEAM)->where('root')->eq($sprint->project)->andWhere('type')->eq('project')->andWhere('account')->eq($account)->exec();
$this->loadModel('user')->updateUserView($sprint->project, 'project', array($account));
$linkedProducts = $this->loadModel('product')->getProductPairsByProject($sprint->project);
if(!empty($linkedProducts)) $this->user->updateUserView(array_keys($linkedProducts), 'product', array($account));
}
}
@@ -21,7 +21,7 @@ $executionsPinYin = common::convert2Pinyin($executionNames);
foreach($executions as $execution)
{
$selected = $execution->id == $executionID ? 'selected' : '';
$executionName = zget($projects, $execution->project) . '/' . $execution->name;
$executionName = $config->systemMode == 'new' ? zget($projects, $execution->project) . '/' . $execution->name : $execution->name;
if($execution->status != 'done' and $execution->status != 'closed' and ($execution->PM == $this->app->user->account or isset($execution->teams[$this->app->user->account])))
{
$myProjectsHtml .= html::a(sprintf($link, $execution->id), "<i class='icon icon-{$lang->icons[$execution->type]}'></i> " . $executionName, '', "class='text-important $selected' title='{$executionName}' data-key='" . zget($executionsPinYin, $execution->name, '') . "'");
+1 -1
View File
@@ -104,7 +104,7 @@
<?php
if($canBeChanged)
{
$params = "bugID=$bug->id";
$params = "bugID=$bug->id,executionID={$execution->id}";
common::printIcon('bug', 'confirmBug', $params, $bug, 'list', 'ok', '', 'iframe', true);
common::printIcon('bug', 'resolve', $params, $bug, 'list', 'checked', '', 'iframe', true);
common::printIcon('bug', 'close', $params, $bug, 'list', '', '', 'iframe', true);
+2
View File
@@ -28,9 +28,11 @@
if(common::canModify('execution', $execution)) common::printLink('execution', 'fixFirst', "execution=$execution->id", $lang->execution->fixFirst, '', "class='btn btn-link iframe' data-width='700'");
echo $lang->execution->howToUpdateBurn;
?>
<?php if($config->systemMode == 'new'):?>
<div class='input-control w-150px'>
<?php echo html::select('burnBy', $lang->execution->burnByList, $burnBy, "class='form-control chosen'");?>
</div>
<?php endif;?>
<?php if($interval):?>
<div class='input-control thWidth'>
<?php echo html::select('interval', $dayList, $interval, "class='form-control chosen'");?>
+1 -1
View File
@@ -18,7 +18,7 @@
<div id="mainMenu" class="clearfix">
<div class="btn-toolbar pull-left">
<span class='btn btn-link btn-active-text'><span class='text'><?php echo $lang->execution->linkStory;?></span></span>
<?php if($this->app->rawModule == 'execution'):?>
<?php if($this->app->rawModule == 'execution' and $config->systemMode == 'new'):?>
<span class='btn btn-link'><span class='text'><?php echo $lang->execution->linkAllStoryTip;?></span></span>
<?php endif;?>
</div>
+9 -11
View File
@@ -29,8 +29,7 @@
</div>
<div class="btn-toolbar pull-right">
<?php if(common::canModify('execution', $execution)):?>
<?php common::printIcon('testreport', 'browse', "objectID=$executionID&objectType=execution", '', 'button','flag muted');?>
<?php common::printLink('testtask', 'create', "product=0&executionID=$executionID&build=&projectID=$execution->project", "<i class='icon icon-plus'></i> " . $lang->testtask->create, '', "class='btn btn-primary'");?>
<?php common::printLink('testtask', 'create', "product=0&executionID=$executionID&build=0&projectID=$execution->project", "<i class='icon icon-plus'></i> " . $lang->testtask->create, '', "class='btn btn-primary'");?>
<?php endif;?>
</div>
</div>
@@ -40,7 +39,7 @@
<p>
<span class="text-muted"><?php echo $lang->testtask->noTesttask;?></span>
<?php if(common::canModify('execution', $execution) and common::hasPriv('testtask', 'create')):?>
<?php echo html::a($this->createLink('testtask', 'create', "product=0&execution=$executionID"), "<i class='icon icon-plus'></i> " . $lang->testtask->create, '', "class='btn btn-info'");?>
<?php echo html::a($this->createLink('testtask', 'create', "product=0&execution=$executionID"), "<i class='icon icon-plus'></i> " . $lang->testtask->create, '', "class='btn btn-info' data-app='execution'");?>
<?php endif;?>
</p>
</div>
@@ -100,15 +99,14 @@
<?php
if($canBeChanged)
{
common::printIcon('testtask', 'cases', "taskID=$task->id", $task, 'list', 'sitemap');
common::printIcon('testtask', 'linkCase', "taskID=$task->id", $task, 'list', 'link');
common::printIcon('testreport', 'browse', "objectID=$task->product&objectType=product&extra=$task->id", $task, 'list','flag');
common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list');
if(common::hasPriv('testtask', 'delete', $task))
common::printIcon('testtask', 'cases', "taskID=$task->id", $task, 'list', 'sitemap');
common::printIcon('testtask', 'linkCase', "taskID=$task->id", $task, 'list', 'link');
if(common::hasPriv('execution', 'testreport'))
{
$deleteURL = $this->createLink('testtask', 'delete', "taskID=$task->id&confirm=yes");
echo html::a("javascript:ajaxDelete(\"$deleteURL\", \"taskList\", confirmDelete)", '<i class="icon-trash"></i>', '', "class='btn' title='{$lang->testtask->delete}'");
echo html::a($this->createLink('testreport', 'browse', "objectID=$task->product&objectType=product&extra=$task->id"), '<i class="icon-testreport-browse icon-flag"></i>', '', 'class="btn " title="' . $lang->testreport->browse . '" data-app="qa"');
}
common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list');
common::printIcon('testtask', 'delete', "taskID=$task->id", $task, 'list', 'trash', 'hiddenwin');
}
?>
</td>
@@ -132,7 +130,7 @@
<div class="checkbox-primary check-all"><label><?php echo $lang->selectAll?></label></div>
<div class="table-actions btn-toolbar">
<?php
$actionLink = $this->createLink('testreport', 'browse', "objectID=$executionID&objctType=execution");
$actionLink = $this->createLink('execution', 'testreport', "objectID=$executionID&objctType=execution");
$misc = common::hasPriv('testreport', 'browse') ? "onclick=\"setFormAction('$actionLink', '', '#testtaskForm')\"" : "disabled='disabled'";
echo html::commonButton($lang->testreport->common, $misc);
?>
+9 -9
View File
@@ -211,7 +211,6 @@ if($config->systemMode == 'new')
$lang->resource->project->addWhitelist = 'addWhitelist';
$lang->resource->project->unbindWhitelist = 'unbindWhitelist';
$lang->resource->project->manageProducts = 'manageProducts';
$lang->resource->project->view = 'view';
$lang->resource->project->dynamic = 'dynamic';
$lang->resource->project->build = 'build';
$lang->resource->project->qa = 'qa';
@@ -255,7 +254,8 @@ if($config->systemMode == 'new')
$lang->project->methodOrder[150] = 'testcase';
$lang->project->methodOrder[155] = 'testtask';
$lang->project->methodOrder[160] = 'execution';
$lang->project->methodOrder[165] = 'export';
$lang->project->methodOrder[165] = 'testreport';
$lang->project->methodOrder[170] = 'export';
$lang->project->methodOrder[175] = 'createGuide';
$lang->resource->projectbuild = new stdclass();
@@ -442,7 +442,7 @@ $lang->resource->story->batchChangeStage = 'batchChangeStage';
$lang->resource->story->batchAssignTo = 'batchAssignTo';
$lang->resource->story->batchChangeModule = 'batchChangeModule';
$lang->resource->story->batchToTask = 'batchToTask';
$lang->resource->story->track = 'track';
$lang->resource->story->track = 'trackAB';
$lang->resource->story->processStoryChange = 'processStoryChange';
$lang->story->methodOrder[5] = 'create';
@@ -537,8 +537,8 @@ $lang->resource->execution->index = 'index';
$lang->resource->execution->view = 'view';
$lang->resource->execution->browse = 'browse';
$lang->resource->execution->create = 'createExec';
$lang->resource->execution->edit = 'editAB';
$lang->resource->execution->batchedit = 'batchEditAB';
$lang->resource->execution->edit = 'editAction';
$lang->resource->execution->batchedit = 'batchEditAction';
$lang->resource->execution->start = 'startAction';
$lang->resource->execution->activate = 'activateAction';
$lang->resource->execution->putoff = 'delayAction';
@@ -552,11 +552,11 @@ $lang->resource->execution->importplanstories = 'importPlanStories';
$lang->resource->execution->importBug = 'importBug';
$lang->resource->execution->story = 'story';
$lang->resource->execution->build = 'build';
$lang->resource->execution->qa = 'qa';
$lang->resource->execution->testtask = 'testtaskAction';
//$lang->resource->execution->qa = 'qa';
$lang->resource->execution->testtask = 'testtask';
$lang->resource->execution->testcase = 'testcase';
$lang->resource->execution->bug = 'bug';
//$lang->resource->execution->testreport = 'testreport';
$lang->resource->execution->testreport = 'testreport';
$lang->resource->execution->burn = 'burn';
$lang->resource->execution->computeBurn = 'computeBurnAction';
$lang->resource->execution->fixFirst = 'fixFirst';
@@ -585,7 +585,7 @@ $lang->resource->execution->storyKanban = 'storyKanban';
$lang->resource->execution->storySort = 'storySort';
$lang->resource->execution->whitelist = 'whitelist';
$lang->resource->execution->addWhitelist = 'addWhitelist';
$lang->resource->execution->unbindWhitelist = 'unbindWhitelist';
$lang->resource->execution->unbindWhitelist = 'unbindWhitelist';
//if($config->systemMode == 'classic') $lang->resource->project->list = 'list';
//$lang->execution->methodOrder[0] = 'index';
+3 -2
View File
@@ -53,8 +53,9 @@ body.menu-hide {padding-left: 0;}
#bars {position: absolute; left: 0; top: 0; bottom: 0; padding: 0 5px;}
#bars > li {padding: 8px 2px;}
#bars > li > a {height: 24px; color: #000; padding: 2px 8px; line-height: 20px; border-radius: 2px;}
#bars > li > a:hover, #bars > li > a:active, #bars > li > a:focus {background: #16a8f8;}
#bars > li.active > a, #bars > li.active > a:active, #bars > li.active > a:focus {font-weight: 600; border-bottom: 2px solid #16a8f8;}
#bars > li.active > a {background: #fff!important;}
#bars > li > a:hover, #bars > li > a:active, #bars > li > a:focus {background: #16a8f8!important; color: #fff;}
#bars > li.active > a > span, #bars > li.active > a:active > span, #bars > li.active > a:focus > span {padding-bottom: 2px; font-weight: 600; border-bottom: 2px solid #16a8f8;}
#bars > li.active:after {content: ' '; display: block; position: absolute; height: 3px; left: 5px; right: 5px; bottom: 0; border-radius: 2px;}
#bars > li.divider{margin-right: 5px; margin-top: 10px; height: 20px; border-right: 1px solid #d9d9d9;}
+1 -1
View File
@@ -229,7 +229,7 @@
var $link= $('<a data-pos="bar"></a>')
.attr('data-app', appCode)
.attr('class', 'show-in-app')
.html(app.text);
.html('<span>' + app.text + '</span>');
var barCount = $('#bars li').length;
if(barCount) $bar = $('<li class="divider"></li>').appendTo($bars);
+6 -1
View File
@@ -79,7 +79,8 @@ $lang->my->form->lblAccount = 'Account Info';
$lang->my->programLink = 'Program Default Page';
$lang->my->productLink = 'Product Default Page';
$lang->my->projectLink = 'Project Default Page';
$lang->my->executionLink = 'Execution Default Page';
if($config->systemMode == 'classic') $lang->my->executionLink = $lang->executionCommon . ' Default Page';
if($config->systemMode == 'new') $lang->my->executionLink = 'Execution Default Page';
$lang->my->programLinkList = array();
$lang->my->programLinkList['program-browse'] = 'By default, you go to the program list, where you can view all of the programs';
@@ -98,6 +99,10 @@ $lang->my->projectLinkList['project-execution'] = 'Go to Project-Exection by def
$lang->my->projectLinkList['project-index'] = 'By default, go to the most recent project dashboard to see the current project overview';
$lang->my->executionLinkList = array();
if($config->systemMode == 'new')
{
$lang->my->executionLinkList['execution-index'] = 'Enter the execution dashboard by default, you can understand all the execution statistics and overview';
$lang->my->executionLinkList['execution-all'] = 'Enter the execution list by default, you can view all executions';
$lang->my->executionLinkList['execution-task'] = 'By default, enter the list of the most recently executed task, and you can view the task information under the current iteration';
}
if($config->systemMode == 'classic') $lang->my->executionLinkList['execution-task'] = "By default, enter the list of the most recently {$lang->executionCommon} task, and you can view the task information under the current {$lang->executionCommon}";
+6 -1
View File
@@ -79,7 +79,8 @@ $lang->my->form->lblAccount = 'Account Info';
$lang->my->programLink = 'Program Default Page';
$lang->my->productLink = 'Product Default Page';
$lang->my->projectLink = 'Project Default Page';
$lang->my->executionLink = 'Execution Default Page';
if($config->systemMode == 'classic') $lang->my->executionLink = $lang->executionCommon . ' Default Page';
if($config->systemMode == 'new') $lang->my->executionLink = 'Execution Default Page';
$lang->my->programLinkList = array();
$lang->my->programLinkList['program-browse'] = 'By default, you go to the program list, where you can view all of the programs';
@@ -98,6 +99,10 @@ $lang->my->projectLinkList['project-execution'] = 'Go to Project-Exection by def
$lang->my->projectLinkList['project-index'] = 'By default, go to the most recent project dashboard to see the current project overview';
$lang->my->executionLinkList = array();
if($config->systemMode == 'new')
{
$lang->my->executionLinkList['execution-index'] = 'Enter the execution dashboard by default, you can understand all the execution statistics and overview';
$lang->my->executionLinkList['execution-all'] = 'Enter the execution list by default, you can view all executions';
$lang->my->executionLinkList['execution-task'] = 'By default, enter the list of the most recently executed task, and you can view the task information under the current iteration';
}
if($config->systemMode == 'classic') $lang->my->executionLinkList['execution-task'] = "By default, enter the list of the most recently {$lang->executionCommon} task, and you can view the task information under the current {$lang->executionCommon}";
+6 -1
View File
@@ -79,7 +79,8 @@ $lang->my->form->lblAccount = 'Account Info';
$lang->my->programLink = 'Program Default Page';
$lang->my->productLink = 'Product Default Page';
$lang->my->projectLink = 'Project Default Page';
$lang->my->executionLink = 'Execution Default Page';
if($config->systemMode == 'classic') $lang->my->executionLink = $lang->executionCommon . ' Default Page';
if($config->systemMode == 'new') $lang->my->executionLink = 'Execution Default Page';
$lang->my->programLinkList = array();
$lang->my->programLinkList['program-browse'] = 'By default, you go to the program list, where you can view all of the programs';
@@ -98,6 +99,10 @@ $lang->my->projectLinkList['project-execution'] = 'Go to Project-Exection by def
$lang->my->projectLinkList['project-index'] = 'By default, go to the most recent project dashboard to see the current project overview';
$lang->my->executionLinkList = array();
if($config->systemMode == 'new')
{
$lang->my->executionLinkList['execution-index'] = 'Enter the execution dashboard by default, you can understand all the execution statistics and overview';
$lang->my->executionLinkList['execution-all'] = 'Enter the execution list by default, you can view all executions';
$lang->my->executionLinkList['execution-task'] = 'By default, enter the list of the most recently executed task, and you can view the task information under the current iteration';
}
if($config->systemMode == 'classic') $lang->my->executionLinkList['execution-task'] = "By default, enter the list of the most recently {$lang->executionCommon} task, and you can view the task information under the current {$lang->executionCommon}";
+6 -1
View File
@@ -79,7 +79,8 @@ $lang->my->form->lblAccount = 'Account Info';
$lang->my->programLink = 'Program Default Page';
$lang->my->productLink = 'Product Default Page';
$lang->my->projectLink = 'Project Default Page';
$lang->my->executionLink = 'Execution Default Page';
if($config->systemMode == 'classic') $lang->my->executionLink = $lang->executionCommon . ' Default Page';
if($config->systemMode == 'new') $lang->my->executionLink = 'Execution Default Page';
$lang->my->programLinkList = array();
$lang->my->programLinkList['program-browse'] = 'By default, you go to the program list, where you can view all of the programs';
@@ -98,6 +99,10 @@ $lang->my->projectLinkList['project-execution'] = 'Go to Project-Exection by def
$lang->my->projectLinkList['project-index'] = 'By default, go to the most recent project dashboard to see the current project overview';
$lang->my->executionLinkList = array();
if($config->systemMode == 'new')
{
$lang->my->executionLinkList['execution-index'] = 'Enter the execution dashboard by default, you can understand all the execution statistics and overview';
$lang->my->executionLinkList['execution-all'] = 'Enter the execution list by default, you can view all executions';
$lang->my->executionLinkList['execution-task'] = 'By default, enter the list of the most recently executed task, and you can view the task information under the current iteration';
}
if($config->systemMode == 'classic') $lang->my->executionLinkList['execution-task'] = "By default, enter the list of the most recently {$lang->executionCommon} task, and you can view the task information under the current {$lang->executionCommon}";
+9 -4
View File
@@ -86,7 +86,8 @@ $lang->my->form->lblAccount = '帐号信息';
$lang->my->programLink = '项目集默认着陆页';
$lang->my->productLink = '产品默认着陆页';
$lang->my->projectLink = '项目默认着陆页';
$lang->my->executionLink = '执行默认着陆页';
if($config->systemMode == 'classic') $lang->my->executionLink = $lang->executionCommon . '默认着陆页';
if($config->systemMode == 'new') $lang->my->executionLink = '执行默认着陆页';
$lang->my->programLinkList = array();
$lang->my->programLinkList['program-browse'] = '默认进入项目集列表,可以查看所有的项目集';
@@ -105,6 +106,10 @@ $lang->my->projectLinkList['project-execution'] = '默认进入项目下所有
$lang->my->projectLinkList['project-index'] = '默认进入最近一个项目仪表盘,可以查看当前项目概况';
$lang->my->executionLinkList = array();
$lang->my->executionLinkList['execution-index'] = '默认进入执行仪表盘,可以了解所有执行的统计数据和概况';
$lang->my->executionLinkList['execution-all'] = '默认进入执行列表,可以查看所有的执行';
$lang->my->executionLinkList['execution-task'] = '默认进入最近一个执行的任务列表,可以查看当前迭代下的任务信息';
if($config->systemMode == 'new')
{
$lang->my->executionLinkList['execution-task'] = '默认进入最近一个执行的任务列表,可以查看当前迭代下的任务信息';
$lang->my->executionLinkList['execution-index'] = '默认进入执行仪表盘,可以了解所有执行的统计数据和概况';
$lang->my->executionLinkList['execution-all'] = '默认进入执行列表,可以查看所有的执行';
}
if($config->systemMode == 'classic') $lang->my->executionLinkList['execution-task'] = "默认进入最近一个{$lang->executionCommon}的任务列表,可以查看当前{$lang->executionCommon}下的任务信息";
+2 -2
View File
@@ -124,8 +124,8 @@
common::printIcon('bug', 'confirmBug', $params, $bug, 'list', 'ok', '', 'iframe', true, '', '', $bug->project);
common::printIcon('bug', 'resolve', $params, $bug, 'list', 'checked', '', 'iframe', true, '', '', $bug->project);
common::printIcon('bug', 'close', $params, $bug, 'list', '', '', 'iframe', true, '', '', $bug->project);
common::printIcon('bug', 'edit', $params, $bug, 'list', '', '', '', '', '', '', $bug->project);
common::printIcon('bug', 'create', "product=$bug->product&branch=$bug->branch&extra=$params", $bug, 'list', 'copy', '', '', '', '', '', $bug->project);
common::printIcon('bug', 'edit', $params, $bug, 'list', '', '', 'iframe', true, "data-width='95%'", '', $bug->project);
common::printIcon('bug', 'create', "product=$bug->product&branch=$bug->branch&extra=$params", $bug, 'list', 'copy', '', 'iframe', true, "data-width='95%'", '', $bug->project);
}
?>
</td>
+3 -3
View File
@@ -16,7 +16,7 @@
<div class="btn-toolbar pull-left">
<?php
$recTotalLabel = " <span class='label label-light label-badge'>{$pager->recTotal}</span>";
echo html::a(inlink($app->rawMethod, "mode=doc&type=openedbyme"), "<span class='text'>{$lang->doc->openedByMe}</span>" . ($type == 'openedbyme' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'openedbyme' ? ' btn-active-text' : '') . "'");
echo html::a(inlink($app->rawMethod, "mode=doc&type=openedbyme"), "<span class='text'>{$lang->doc->openedByMe}</span>" . ($type == 'openedbyme' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'openedbyme' ? ' btn-active-text' : '') . "'");
echo html::a(inlink($app->rawMethod, "mode=doc&type=editedbyme"), "<span class='text'>{$lang->doc->editedByMe}</span>" . ($type == 'editedbyme' ? $recTotalLabel : ''), '', "class='btn btn-link" . ($type == 'editedbyme' ? ' btn-active-text' : '') . "'");
?>
</div>
@@ -48,7 +48,7 @@
<?php $star = strpos($doc->collector, ',' . $this->app->user->account . ',') !== false ? 'icon-star text-yellow' : 'icon-star-empty';?>
<?php $collectTitle = strpos($doc->collector, ',' . $this->app->user->account . ',') !== false ? $lang->doc->cancelCollection : $lang->doc->collect;?>
<tr>
<td class="c-name"><?php echo html::a($this->createLink('doc', 'view', "docID=$doc->id&version=0&from={$lang->navGroup->doc}"), "<i class='icon icon-file-text text-muted'></i> &nbsp;" . $doc->title, '', "title={$doc->title}");?></td>
<td class="c-name"><?php echo html::a($this->createLink('doc', 'view', "docID=$doc->id&version=0&from={$lang->navGroup->doc}", '', true), "<i class='icon icon-file-text text-muted'></i> &nbsp;" . $doc->title, '', "title={$doc->title} class='iframe' data-width='90%'");?></td>
<td class="c-num"><?php echo $doc->fileSize ? $doc->fileSize : '-';?></td>
<?php if($type != 'openedbyme'):?>
<td class="c-user"><?php echo zget($users, $doc->addedBy);?></td>
@@ -60,7 +60,7 @@
<?php if(common::hasPriv('doc', 'collect')):?>
<a data-url="<?php echo $this->createLink('doc', 'collect', "objectID=$doc->id&objectType=doc");?>" title="<?php echo $collectTitle;?>" class='btn btn-link ajaxCollect'><i class='icon <?php echo $star;?>'></i></a>
<?php endif;?>
<?php common::printLink('doc', 'edit', "docID=$doc->id&comment=false&from={$lang->navGroup->doc}", "<i class='icon icon-edit'></i>", '', "title='{$lang->edit}' class='btn btn-link'")?>
<?php common::printLink('doc', 'edit', "docID=$doc->id&comment=false&from={$lang->navGroup->doc}", "<i class='icon icon-edit'></i>", '', "title='{$lang->edit}' class='btn btn-link iframe'", true, true)?>
<?php common::printLink('doc', 'delete', "docID=$doc->id&confirm=no&from={$lang->navGroup->doc}", "<i class='icon icon-trash'></i>", 'hiddenwin', "title='{$lang->delete}' class='btn btn-link'")?>
<?php endif;?>
</td>
+5
View File
@@ -54,6 +54,11 @@ html,body {height: 100%;}
<th><?php echo $lang->my->projectLink;?></th>
<td><?php echo html::select('projectLink', $lang->my->projectLinkList, $projectLink, "class='form-control chosen'");?></td>
</tr>
<?php else:?>
<tr>
<th><?php echo $lang->my->executionLink;?></th>
<td><?php echo html::select('executionLink', $lang->my->executionLinkList, 'execution-task', "class='form-control chosen'");?></td>
</tr>
<?php endif;?>
<!--
<tr>
+3 -3
View File
@@ -29,7 +29,7 @@
<?php if(isset($this->config->maxVersion) and common::hasPriv('project', 'createGuide')):?>
<?php echo html::a($this->createLink('project', 'createGuide'), "<i class='icon icon-plus'></i> " . $lang->my->createProgram, '', "class='btn btn-info' data-toggle=modal");?>
<?php elseif($this->config->systemMode == 'new' and common::hasPriv('project', 'create')):?>
<?php echo html::a($this->createLink('project', 'create'), '<i class="icon icon-plus"></i>' . $lang->project->create, '', 'class="btn btn-info" data-toggle="modal" data-target="#guideDialog"');?>
<?php echo html::a($this->createLink('project', 'create', 'mode=scrum'), '<i class="icon icon-plus"></i>' . $lang->project->create, '', 'class="btn btn-info"');?>
<?php elseif($this->config->systemMode == 'classic' and common::hasPriv('execution', 'create')):?>
<?php echo html::a($this->createLink('execution', 'create'), '<i class="icon icon-plus"></i>' . $lang->execution->create, '', 'class="btn btn-info"');?>
<?php endif;?>
@@ -63,8 +63,8 @@
<td class='c-status'><span class="status-project status-<?php echo $project->status?>"><?php echo zget($lang->project->statusList, $project->status, '');?></span></td>
<?php endif;?>
<td class='text-left'><?php echo $project->begin;?></td>
<td class='text-left'><?php echo $project->end == '0000-00-00' ? '' : $project->end;?></td>
<?php $projectBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) && $project->budget >= 10000 ? number_format($project->budget / 10000, 1) . $this->lang->project->tenThousand : number_format((float)$project->budget, 1);?>
<td class='text-left'><?php echo $project->end == LONG_TIME ? $this->lang->project->longTime : $project->end;?></td>
<?php $projectBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) ? number_format((float)$project->budget / 10000, 2) . $this->lang->project->tenThousand : number_format((float)$project->budget, 2);?>
<td class='text-right'><?php echo $project->budget != 0 ? zget($lang->project->currencySymbol, $project->budgetUnit) . ' ' . $projectBudget : $lang->project->future;?></td>
<td>
<?php $userID = isset($PMList[$project->PM]) ? $PMList[$project->PM]->id : ''?>
+3 -3
View File
@@ -96,11 +96,11 @@
if($canBeChanged)
{
$vars = "story={$story->id}";
common::printIcon('story', 'change', $vars, $story, 'list', 'alter');
common::printIcon('story', 'change', $vars, $story, 'list', 'alter', '', 'iframe', true);
common::printIcon('story', 'review', $vars, $story, 'list', 'search');
common::printIcon('story', 'close', $vars, $story, 'list', '', '', 'iframe', true);
common::printIcon('story', 'edit', $vars, $story, 'list');
common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=&param=0&$vars", $story, 'list', 'sitemap');
common::printIcon('story', 'edit', $vars, $story, 'list', '', '', 'iframe', true, "data-width='95%'");
common::printIcon('story', 'createCase', "productID=$story->product&branch=$story->branch&module=0&from=&param=0&$vars", $story, 'list', 'sitemap', '', 'iframe', true, "data-width='95%'");
}
?>
</td>
+3 -3
View File
@@ -123,8 +123,8 @@
common::printIcon('task', 'finish', "taskID=$task->id", $task, 'list', '', '', 'iframe', true, '', '', $task->project);
common::printIcon('task', 'recordEstimate', "taskID=$task->id", $task, 'list', 'time', '', 'iframe', true, '', '', $task->project);
common::printIcon('task', 'edit', "taskID=$task->id", $task, 'list', '', '', '', '', 'data-group="execution"', '', $task->project);
common::printIcon('task', 'batchCreate', "project=$task->project&storyID=$task->story&moduleID=$task->module&taskID=$task->id&ifame=0", $task, 'list', 'split', '', '', '', 'data-group="project"', $this->lang->task->children, $task->project);
common::printIcon('task', 'edit', "taskID=$task->id", $task, 'list', '', '', 'iframe', true, "data-width='95%'", '', $task->project);
common::printIcon('task', 'batchCreate', "executionID=$task->execution&storyID=$task->story&moduleID=$task->module&taskID=$task->id&ifame=0", $task, 'list', 'split', '', 'iframe', true, "data-width='95%'", $this->lang->task->children, $task->project);
}
}
?>
@@ -186,7 +186,7 @@
common::printIcon('task', 'recordEstimate', "taskID=$child->id", $child, 'list', 'time', '', 'iframe', true, '', '', $child->project);
common::printIcon('task', 'edit', "taskID=$child->id", $child, 'list', '', '', '', '', 'data-group="execution"', '', $child->project);
common::printIcon('task', 'batchCreate', "project=$child->project&storyID=$child->story&moduleID=$child->module&taskID=$child->id&ifame=0", $child, 'list', 'split', '', '', '', 'data-group="project"', $this->lang->task->children, $child->project);
common::printIcon('task', 'batchCreate', "executionID=$child->execution&storyID=$child->story&moduleID=$child->module&taskID=$child->id&iframe=0", $child, 'list', 'split', '', 'iframe', true, 'data-group="execution"', $this->lang->task->children, $child->project);
}
}
?>
+5 -5
View File
@@ -87,7 +87,7 @@
<?php if($type == 'assigntome') $params .= "&from=testtask&taskID=$case->task";?>
<td class='text-left'><?php echo html::a($this->createLink('testcase', 'view', $params), $case->title, null, "style='color: $case->color'");?></td>
<?php if($type == 'assigntome'):?>
<td><?php echo $case->taskName;?></td>
<td class='c-name'><?php echo $case->taskName;?></td>
<?php endif;?>
<td><?php echo zget($lang->testcase->typeList, $case->type);?></td>
<td><?php echo zget($users, $case->openedBy);?></td>
@@ -100,10 +100,10 @@
if($canBeChanged)
{
common::printIcon('testcase', 'createBug', "product=$case->product&branch=$case->branch&extra=caseID=$caseID,version=$case->version,runID=$runID", $case, 'list', 'bug', '', '', '', "data-app='qa'");
common::printIcon('testcase', 'create', "productID=$case->product&branch=$case->branch&moduleID=$case->module&from={$app->rawMethod}&param=$caseID", $case, 'list', 'copy', '', '', '', "data-app='qa'");
common::printIcon('testtask', 'runCase', "runID=$runID&caseID=$caseID&version=$case->version", '', 'list', 'play', '', 'iframe', true, "data-width='95%' data-app='qa'", '', $case->project);
common::printIcon('testtask', 'results', "runID=$runID&caseID=$caseID", '', 'list', 'list-alt', '', 'iframe', true, "data-width='95%' data-app='qa'", '', $case->project);
common::printIcon('testcase', 'edit', "caseID=$caseID", $case, 'list', 'edit', '', 'iframe', "data-app='qa'", '', '', $case->project);
common::printIcon('testcase', 'create', "productID=$case->product&branch=$case->branch&moduleID=$case->module&from={$app->rawMethod}&param=$caseID", $case, 'list', 'copy', '', 'iframe', true, "data-width='95%'");
common::printIcon('testtask', 'runCase', "runID=$runID&caseID=$caseID&version=$case->version", '', 'list', 'play', '', 'iframe', true, "data-width='95%'", '', $case->project);
common::printIcon('testtask', 'results', "runID=$runID&caseID=$caseID", '', 'list', 'list-alt', '', 'iframe', true, "data-width='95%'", '', $case->project);
common::printIcon('testcase', 'edit', "caseID=$caseID", $case, 'list', 'edit', '', 'iframe', true, "data-width='95%'", '', $case->project);
}
?>
</td>
+5 -5
View File
@@ -55,11 +55,11 @@
<td title='<?php echo $task->status?>'><span class="status-task status-<?php echo $task->status?>"><?php echo $this->processStatus('testtask', $task);?></span></td>
<td class='c-actions'>
<?php
common::printIcon('testtask', 'cases', "taskID=$task->id", $task, 'list', 'sitemap');
common::printIcon('testtask', 'view', "taskID=$task->id", '', 'list', 'list-alt','','iframe',true, 'data-width=800px');
common::printIcon('testtask', 'linkCase', "taskID=$task->id", $task, 'list', 'link');
common::printIcon('testreport', 'browse', "objectID=$task->product&objectType=product&extra=$task->id", $task, 'list', 'flag');
common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list', '', '', '', true);
common::printIcon('testtask', 'cases', "taskID=$task->id", $task, 'list', 'sitemap', '', '', '', "data-app='qa'");
common::printIcon('testtask', 'view', "taskID=$task->id", '', 'list', 'list-alt', '', 'iframe', true, "data-width='90%'");
common::printIcon('testtask', 'linkCase', "taskID=$task->id", $task, 'list', 'link', '', '', false, "data-app='qa'");
common::printIcon('testreport', 'browse', "objectID=$task->product&objectType=product&extra=$task->id", $task, 'list', 'flag', '', '', false, "data-app='qa'");
common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list', '', '', 'iframe', true, "data-width='90%'");
if(common::hasPriv('testtask', 'delete', $task))
{
$deleteURL = $this->createLink('testtask', 'delete', "taskID=$task->id&confirm=yes");
-2
View File
@@ -24,7 +24,6 @@ $config->product->search['fields']['pri'] = $lang->story->pri;
$config->product->search['fields']['product'] = $lang->story->product;
$config->product->search['fields']['branch'] = '';
$config->product->search['fields']['module'] = $lang->story->module;
$config->product->search['fields']['plan'] = $lang->story->plan;
$config->product->search['fields']['estimate'] = $lang->story->estimate;
$config->product->search['fields']['source'] = $lang->story->source;
@@ -57,7 +56,6 @@ $config->product->search['params']['pri'] = array('operator' => '=',
$config->product->search['params']['product'] = array('operator' => '=', 'control' => 'select', 'values' => '');
$config->product->search['params']['branch'] = array('operator' => '=', 'control' => 'select', 'values' => '');
$config->product->search['params']['module'] = array('operator' => 'belong', 'control' => 'select', 'values' => '');
$config->product->search['params']['plan'] = array('operator' => '=', 'control' => 'select', 'values' => '');
$config->product->search['params']['estimate'] = array('operator' => '=', 'control' => 'input', 'values' => '');
$config->product->search['params']['source'] = array('operator' => '=', 'control' => 'select', 'values' => $lang->story->sourceList);
+1 -1
View File
@@ -1002,7 +1002,7 @@ class product extends control
elseif($moduleName == 'execution')
{
$this->loadModel('execution')->setMenu($objectID);
if($testreport == '') $this->app->rawModule = $activeMenu;
$this->app->rawModule = $activeMenu;
if($activeMenu == 'testreport') $this->lang->execution->menu->qa['subMenu']->testtask['subMenu']->testtask['subModule'] = 'product';
}
+1
View File
@@ -2,4 +2,5 @@
.branch-list > li {float: left; list-style: none; width: 50%; margin: 5px 0;}
.data-basic.table-data tbody > tr > th {width: 100px;}
.col-12 .cell table td {word-wrap: break-word; word-break: normal;}
td.normal {color: #00da88;}
.row > .col-sm-12:first-child {padding-bottom: 20px;}
+7 -3
View File
@@ -312,7 +312,7 @@ class productModel extends model
->beginIF(!empty($projectID))->andWhere('t1.project')->eq($projectID)->fi()
->beginIF(!$this->app->user->admin)->andWhere('t2.id')->in($this->app->user->view->products)->fi()
->beginIF(strpos($status, 'noclosed') !== false)->andWhere('status')->ne('closed')->fi()
->orderBy($orderBy . 't2.order desc')
->orderBy($orderBy . 't2.order asc')
->fetchAll('id');
}
@@ -425,7 +425,7 @@ class productModel extends model
/* init currentModule and currentMethod for report and story. */
if($currentModule == 'story')
{
$storyMethods = ",track,create,batchcreate,batchclose,";
$storyMethods = ",track,create,batchcreate,batchclose,zerocase,";
if(strpos($storyMethods, "," . $currentMethod . ",") === false) $currentModule = 'product';
if($currentMethod == 'view' || $currentMethod == 'change' || $currentMethod == 'review') $currentMethod = 'browse';
}
@@ -832,7 +832,7 @@ class productModel extends model
$projectList = $this->dao->select('t2.*')->from(TABLE_PROJECTPRODUCT)->alias('t1')
->leftJoin(TABLE_PROJECT)->alias('t2')->on('t1.project = t2.id')
->where('t1.product')->eq($productID)
->andWhere('t2.type')->eq('project')
->beginIF($this->config->systemMode == 'new')->andWhere('t2.type')->eq('project')->fi()
->beginIF($browseType != 'all')->andWhere('t2.status')->eq($browseType)->fi()
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi()
->beginIF($this->cookie->involved or $involved)
@@ -1560,6 +1560,10 @@ class productModel extends model
{
$link = helper::createLink($module, 'report', "productID=%s" . ($branch ? "&branch=%s" : '&branch=0') . "&extra=$extra");
}
elseif($module == 'bug' && $method == 'view')
{
$link = helper::createLink('bug', 'browse', "productID=%s" . ($branch ? "&branch=%s" : '&branch=0') . "&extra=$extra");
}
else
{
$link = helper::createLink($module, $method, "productID=%s" . ($branch ? "&branch=%s" : ''));
+17 -2
View File
@@ -33,7 +33,9 @@
<tr>
<th class='c-id w-50px'><?php echo $lang->idAB;?></th>
<th><?php echo $lang->project->name;?></th>
<?php if($config->systemMode == 'new'):?>
<th class='w-150px'><?php echo $lang->project->common;?></th>
<?php endif;?>
<th class='w-100px'><?php echo $lang->project->PM;?></th>
<th class='w-80px'><?php echo $lang->project->begin;?></th>
<th class='w-80px'><?php echo $lang->project->end;?></th>
@@ -49,8 +51,21 @@
<?php foreach($projectStats as $project):?>
<tr>
<td><?php printf('%03d', $project->id);?></td>
<td class='text-left'><?php echo html::a($this->createLink('project', explode('-', $config->projectLink)[1], 'project=' . $project->id, '', false, $project->id), $project->name, '_parent');?></td>
<td class='text-left'>
<?php
if($config->systemMode == 'new')
{
echo html::a($this->createLink('project', explode('-', $config->projectLink)[1], 'project=' . $project->id, '', false, $project->id), $project->name, '_parent');
}
else
{
echo html::a($this->createLink('execution', 'task', 'project=' . $project->id, '', false, $project->id), $project->name, '_parent');
}
?>
</td>
<?php if($config->systemMode == 'new'):?>
<td title='<?php echo $project->programName;?>' class='text-ellipsis'><?php echo $project->programName;?></td>
<?php endif;?>
<td>
<?php $userID = isset($PMList[$project->PM]) ? $PMList[$project->PM]->id : ''?>
<?php if(!empty($project->PM)) echo html::a($this->createLink('user', 'profile', "userID=$userID", '', true), zget($users, $project->PM), '', "data-toggle='modal' data-type='iframe' data-width='800'");?>
@@ -61,7 +76,7 @@
<td class='c-status' title='<?php echo $status;?>'>
<span class="status-project status-<?php echo $project->status?>"><?php echo $status;?></span>
</td>
<?php $projectBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) && $project->budget >= 10000 ? number_format($project->budget / 10000, 1) . $this->lang->project->tenThousand : number_format((float)$project->budget, 1);?>
<?php $projectBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) ? number_format((float)$project->budget / 10000, 2) . $this->lang->project->tenThousand : number_format((float)$project->budget, 2);?>
<?php $budgetTitle = $project->budget != 0 ? zget($this->lang->project->currencySymbol, $project->budgetUnit) . ' ' . $projectBudget : $this->lang->project->future;?>
<td title='<?php echo $budgetTitle;?>' class='text-ellipsis'><?php echo $budgetTitle;?></td>
<td class="text-right" title="<?php echo $project->hours->totalEstimate . ' ' . $lang->project->workHour;?>"><?php echo $project->hours->totalEstimate . ' ' . $lang->execution->workHourUnit;?></td>
+27 -23
View File
@@ -21,7 +21,7 @@
<div class="detail">
<h2 class="detail-title"><span class="label-id"><?php echo $product->id;?></span> <span class="label label-light label-outline"><?php echo $product->code;?></span> <?php echo $product->name;?></h2>
<div class="detail-content article-content">
<p><span class="text-limit" data-limit-size="40"><?php echo $product->desc;?></span><a class="text-primary text-limit-toggle small" data-text-expand="<?php echo $lang->expand;?>" data-text-collapse="<?php echo $lang->collapse;?>"></a></p>
<p><?php echo $product->desc;?></p>
<p>
<span class="label label-primary label-outline"><?php echo $lang->product->typeAB . ':' . zget($lang->product->typeList, $product->type);?></span>
<span class="label label-success label-outline"><?php echo $lang->product->status . ':' . $this->processStatus('product', $product);?></span>
@@ -51,15 +51,13 @@
<tbody>
<tr>
<th class='w-65px'><i class="icon icon-person icon-sm"></i> <?php echo $lang->productCommon;?></th>
<td><em><?php echo zget($users, $product->PO);?></em></td>
<td><strong><?php echo zget($users, $product->PO);?></strong></td>
<th><i class="icon icon-person icon-sm"></i> <?php echo $lang->product->release;?></th>
<td><strong><?php echo zget($users, $product->RD);?></strong></td>
</tr>
<tr>
<th><i class="icon icon-person icon-sm"></i> <?php echo $lang->product->qa;?></th>
<td><em><?php echo zget($users, $product->QD);?></em></td>
</tr>
<tr>
<th><i class="icon icon-person icon-sm"></i> <?php echo $lang->product->release;?></th>
<td><em><?php echo zget($users, $product->RD);?></em></td>
<td><strong><?php echo zget($users, $product->QD);?></strong></td>
</tr>
</tbody>
</table>
@@ -71,27 +69,33 @@
<table class="table table-data data-basic">
<tbody>
<tr>
<th class="w-80px"><?php echo $lang->product->code;?></th>
<td><strong><?php echo $product->code;?></strong></td>
<th class="w-80px"><?php echo $lang->story->openedBy?></th>
<td><em><?php echo zget($users, $product->createdBy);?></em></td>
<td><strong><?php echo zget($users, $product->createdBy);?></strong></td>
</tr>
<tr>
<th class="w-80px"><?php echo $lang->product->type;?></th>
<td><strong><?php echo zget($lang->product->typeList, $product->type);?></strong></td>
<th><?php echo $lang->story->openedDate?></th>
<td><em><?php echo formatTime($product->createdDate, DT_DATE1);?></em></td>
<td><strong><?php echo formatTime($product->createdDate, DT_DATE1);?></strong></td>
</tr>
<tr>
<th class="w-80px"><?php echo $lang->product->status;?></th>
<td class="<?php echo $product->status;?>"><strong><?php echo zget($lang->product->statusList, $product->status);?></strong></td>
<th><?php echo $lang->product->acl;?></th>
<td><em><?php echo $lang->product->aclList[$product->acl];?></em></td>
<td><strong><?php echo $lang->product->aclList[$product->acl];?></strong></td>
</tr>
<?php if($product->acl == 'custom'):?>
<tr>
<th><?php echo $lang->product->whitelist;?></th>
<td>
<em>
<strong>
<?php
$whitelist = explode(',', $product->whitelist);
foreach($whitelist as $groupID) if(isset($groups[$groupID])) echo $groups[$groupID] . '&nbsp;';
?>
</em>
</strong>
</td>
</tr>
<?php endif;?>
@@ -107,33 +111,33 @@
<?php $space = common::checkNotCN() ? ' ' : '';?>
<tr>
<th><?php echo $lang->story->statusList['active'] . $space . $lang->story->common;?></th>
<td><em><?php echo $product->stories['active']?></em></td>
<td><strong><?php echo $product->stories['active']?></strong></td>
<th><?php echo $lang->product->plans?></th>
<td><em><?php echo $product->plans?></em></td>
<td><strong><?php echo $product->plans?></strong></td>
<th class='w-80px'><?php echo $lang->product->bugs?></th>
<td><em><?php echo $product->bugs?></em></td>
<td><strong><?php echo $product->bugs?></strong></td>
</tr>
<tr>
<th><?php echo $lang->story->statusList['changed'] . $space . $lang->story->common;?></th>
<td><em><?php echo $product->stories['changed']?></em></td>
<td><strong><?php echo $product->stories['changed']?></strong></td>
<th><?php echo $lang->product->projects?></th>
<td><em><?php echo $product->projects?></em></td>
<td><strong><?php echo $product->projects?></strong></td>
<th><?php echo $lang->product->cases?></th>
<td><em><?php echo $product->cases?></em></td>
<td><strong><?php echo $product->cases?></strong></td>
</tr>
<tr>
<th><?php echo $lang->story->statusList['draft'] . $space . $lang->story->common;?></th>
<td><em><?php echo $product->stories['draft']?></em></td>
<td><strong><?php echo $product->stories['draft']?></strong></td>
<th><?php echo $lang->product->builds?></th>
<td><em><?php echo $product->builds?></em></td>
<td><strong><?php echo $product->builds?></strong></td>
<th><?php echo $lang->product->docs?></th>
<td><em><?php echo $product->docs?></em></td>
<td><strong><?php echo $product->docs?></strong></td>
</tr>
<tr>
<th><?php echo $lang->story->statusList['closed'] . $space . $lang->story->common;?></th>
<td><em><?php echo $product->stories['closed']?></em></td>
<td><strong><?php echo $product->stories['closed']?></strong></td>
<th><?php echo $lang->product->releases?></th>
<td><em><?php echo $product->releases?></em></td>
<td><strong><?php echo $product->releases?></strong></td>
</tr>
</tbody>
</table>
+1 -1
View File
@@ -24,7 +24,7 @@ $(function()
{
var projectID = $('#project').val();
var planID = $('#planID').val();
parent.location.href = createLink('execution', 'create', 'productID=' + productID + '&executionID=&copyExecutionID=&planID=' + planID + '&confirm=&projectID=' + projectID);
parent.location.href = createLink('execution', 'create', 'projectID=' + projectID + '&executionID=&copyExecutionID=&planID=' + planID + '&confirm=&productID=' + productID);
});
});
$(document).on('click', 'td.content .more', function(e)
+12 -1
View File
@@ -128,7 +128,18 @@
<?php foreach($extendFields as $extendField) echo "<td>" . $this->loadModel('flow')->getFieldValue($extendField, $plan) . "</td>";?>
<td class='c-actions'>
<?php
if(common::hasPriv('execution', 'create', $plan)) echo html::a('#projects', '<i class="icon-plus"></i>', '', "data-toggle='modal' data-id='$plan->id' onclick='getPlanID(this)' class='btn' title='{$lang->productplan->createExecution}'");
if(common::hasPriv('execution', 'create', $plan))
{
$executionLink = $config->systemMode == 'new' ? '#projects' : $this->createLink('execution', 'create', "projectID=0&executionID=0&copyExecutionID=0&plan=$plan->id");
if($config->systemMode == 'new')
{
echo html::a($executionLink, '<i class="icon-plus"></i>', '', "data-toggle='modal' data-id='$plan->id' onclick='getPlanID(this)' class='btn' title='{$lang->productplan->createExecution}'");
}
else
{
echo html::a($executionLink, '<i class="icon-plus"></i>', '', "class='btn' title='{$lang->productplan->createExecution}'");
}
}
if(common::hasPriv('productplan', 'linkStory', $plan) and $plan->parent >= 0) echo html::a(inlink('view', "planID=$plan->id&type=story&orderBy=id_desc&link=true"), '<i class="icon-link"></i>', '', "class='btn' title='{$lang->productplan->linkStory}'");
if(common::hasPriv('productplan', 'linkBug', $plan)) echo html::a(inlink('view', "planID=$plan->id&type=bug&orderBy=id_desc&link=true"), '<i class="icon-bug"></i>', '', "class='btn' title='{$lang->productplan->linkBug}'");
common::printIcon('productplan', 'edit', "planID=$plan->id", $plan, 'list');
+1 -1
View File
@@ -72,7 +72,7 @@ $lang->program->aclList['private'] = "Private (accessible to project portfolio h
$lang->program->aclList['open'] = "Default(user who can visit the program can access it)";
$lang->program->subAclList['private'] = "Private (accessible to this program set leader and stakeholders, stakeholders can follow up maintenance)";
$lang->program->subAclList['open'] = "Default(user who can visit the program can access it)";
$lang->program->subAclList['open'] = "Default (user who can visit the program can access it)";
$lang->program->subAclList['program'] = "Open within the program (accessible to all higher-level program directors and affiliates, as well as to this program director and affiliates)";
$lang->program->subAcls['private'] = 'Private';
+1 -1
View File
@@ -72,7 +72,7 @@ $lang->program->aclList['private'] = "Private (accessible to project portfolio h
$lang->program->aclList['open'] = "Default(user who can visit the program can access it)";
$lang->program->subAclList['private'] = "Private (accessible to this program set leader and stakeholders, stakeholders can follow up maintenance)";
$lang->program->subAclList['open'] = "Default(user who can visit the program can access it)";
$lang->program->subAclList['open'] = "Default (user who can visit the program can access it)";
$lang->program->subAclList['program'] = "Open within the program (accessible to all higher-level program directors and affiliates, as well as to this program director and affiliates)";
$lang->program->subAcls['private'] = 'Private';
+1 -1
View File
@@ -72,7 +72,7 @@ $lang->program->aclList['private'] = "Private (accessible to project portfolio h
$lang->program->aclList['open'] = "Default(user who can visit the program can access it)";
$lang->program->subAclList['private'] = "Private (accessible to this program set leader and stakeholders, stakeholders can follow up maintenance)";
$lang->program->subAclList['open'] = "Default(user who can visit the program can access it)";
$lang->program->subAclList['open'] = "Default (user who can visit the program can access it)";
$lang->program->subAclList['program'] = "Open within the program (accessible to all higher-level program directors and affiliates, as well as to this program director and affiliates)";
$lang->program->subAcls['private'] = 'Private';
+1 -1
View File
@@ -72,7 +72,7 @@ $lang->program->aclList['private'] = "Private (accessible to project portfolio h
$lang->program->aclList['open'] = "Default(user who can visit the program can access it)";
$lang->program->subAclList['private'] = "Private (accessible to this program set leader and stakeholders, stakeholders can follow up maintenance)";
$lang->program->subAclList['open'] = "Default(user who can visit the program can access it)";
$lang->program->subAclList['open'] = "Default (user who can visit the program can access it)";
$lang->program->subAclList['program'] = "Open within the program (accessible to all higher-level program directors and affiliates, as well as to this program director and affiliates)";
$lang->program->subAcls['private'] = 'Private';
+2 -2
View File
@@ -13,7 +13,7 @@ $lang->program->children = '子项目集';
$lang->program->parent = '父项目集';
$lang->program->allInput = '项目集总投入';
$lang->program->teamCount = '项目集成员';
$lang->program->longTime = '长期项目集';
$lang->program->longTime = '长期';
$lang->program->view = '项目集详情';
/* Actions. */
@@ -75,7 +75,7 @@ $lang->program->aclList['open'] = "公开(有项目集视图权限,即可
$lang->program->subAclList['private'] = "私有(本项目集负责人和干系人可访问,干系人可后续维护)";
$lang->program->subAclList['open'] = "全部公开(有项目集视图权限,即可访问)";
$lang->program->subAclList['program'] = "项目集内公开 (所有上级项目集负责人和干系人、本项目集负责人和干系人可访问)";
$lang->program->subAclList['program'] = "项目集内公开(所有上级项目集负责人和干系人、本项目集负责人和干系人可访问)";
$lang->program->subAcls['private'] = '私有';
$lang->program->subAcls['open'] = '全部公开';
+1
View File
@@ -316,6 +316,7 @@ class programModel extends model
if($minChildBegin and $program->begin > $minChildBegin) dao::$errors['begin'] = sprintf($this->lang->program->beginGreateChild, $minChildBegin);
if($maxChildEnd and $program->end < $maxChildEnd and $this->post->delta != 999) dao::$errors['end'] = sprintf($this->lang->program->endLetterChild, $maxChildEnd);
if(dao::isError()) return false;
}
if($program->parent)
+1 -1
View File
@@ -57,7 +57,7 @@
<?php $userID = isset($PMList[$program->PM]) ? $PMList[$program->PM]->id : ''?>
<?php if(!empty($program->PM)) echo html::a($this->createLink('user', 'profile', "userID=$userID", '', true), zget($users, $program->PM), '', "data-toggle='modal' data-type='iframe' data-width='600'");?>
</td>
<?php $programBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) && $program->budget >= 10000 ? number_format($program->budget / 10000, 1) . $lang->project->tenThousand : number_format((float)$program->budget, 1);?>
<?php $programBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) ? number_format((float)$program->budget / 10000, 2) . $lang->project->tenThousand : number_format((float)$program->budget, 2);?>
<td class='text-right'><?php echo $program->budget != 0 ? zget($lang->project->currencySymbol, $program->budgetUnit) . ' ' . $programBudget : $lang->project->future;?></td>
<td class='c-status'><span class="status-program status-<?php echo $program->status?>"><?php echo zget($lang->project->statusList, $program->status, '');?></span></td>
<td><?php echo $program->begin;?></td>
+21 -1
View File
@@ -281,7 +281,7 @@ class project extends control
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('programplan', 'create', "projectID=$projectID", '', '', $projectID)));
}
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('project', 'create', '', '', '', $projectID)));
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('project', 'browse', "programID=0&browseType=all", '', '', $projectID)));
}
}
@@ -769,6 +769,24 @@ class project extends control
echo $this->fetch('testcase', 'browse', "productID=$productID&branch=$branch&browseType=$browseType&param=$param&orderBy=$orderBy&recTotal=$orderBy&recPerPage=$recPerPage&pageID=$pageID&projectID=$projectID");
}
/**
* List of test reports for the project.
*
* @param int $projectID
* @param string $objectType project|execution|product
* @param string $extra
* @param string $orderBy
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
public function testreport($projectID = 0, $objectType = 'project', $extra = '', $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
echo $this->fetch('testreport', 'browse', "objectID=$projectID&objectType=$objectType&extra=$extra&orderBy=$orderBy&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
}
/**
* Project test task list.
*
@@ -783,9 +801,11 @@ class project extends control
public function testtask($projectID = 0, $orderBy = 'id_desc', $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
$this->loadModel('testtask');
$this->app->loadLang('testreport');
/* Save session. */
$this->session->set('testtaskList', $this->app->getURI(true), 'qa');
$this->session->set('buildList', $this->app->getURI(true), 'execution');
$this->project->setMenu($projectID);
+7
View File
@@ -0,0 +1,7 @@
.table-group-btns {width: 200px;}
.table-footer,
.table-grouped {box-shadow: none !important;}
.table-footer {margin-left: 205px; margin-top: 10px;}
.table-grouped > thead>tr>th.c-id,
.table-grouped > tbody>tr>td.c-id {padding-left: 15px;}
.table-grouped > tbody>tr>td {overflow: hidden; text-overflow: ellipsis; white-space: nowrap;}
+10 -6
View File
@@ -105,10 +105,14 @@ function computeEndDate(delta)
{
$('#end').val(longTime);
$('#end').attr('disabled', 'disabled');
$('#days').attr('disabled', 'disabled');
$('#daysDiv').addClass('hidden');
return false;
}
else
{
$('#days').removeAttr('disabled');
$('#daysDiv').removeClass('hidden');
$('#end').removeAttr('disabled');
}
@@ -246,19 +250,19 @@ function adjustPlanBoxMargin()
$(function()
{
$('#privList > tbody > tr > th input[type=checkbox]').change(function()
{
{
var id = $(this).attr('id');
var checked = $(this).prop('checked');
if(id == 'allChecker')
{
{
$('input[type=checkbox]').prop('checked', checked);
}
}
else
{
{
$(this).parents('tr').find('input[type=checkbox]').prop('checked', checked);
}
});
}
});
})
/**
+3 -2
View File
@@ -49,6 +49,7 @@ $lang->project->searchByName = '输入项目名称进行检索';
$lang->project->deleted = '已删除';
$lang->project->linkedProducts = '已关联';
$lang->project->unlinkedProducts = '未关联';
$lang->project->testreport = '测试报告';
/* Fields. */
$lang->project->common = '项目';
@@ -158,8 +159,8 @@ $lang->project->featureBar['wait'] = '未开始';
$lang->project->featureBar['suspended'] = '已挂起';
$lang->project->featureBar['closed'] = '已关闭';
$lang->project->aclList['private'] = "私有(只有项目团队成员和干系人可访问)";
$lang->project->aclList['open'] = "公开(有项目视图权限即可访问)";
$lang->project->aclList['private'] = "私有 (只有项目团队成员和干系人可访问)";
$lang->project->aclList['open'] = "公开 (有项目视图权限即可访问)";
$lang->project->acls['private'] = '私有';
$lang->project->acls['open'] = '公开';
+14 -3
View File
@@ -248,7 +248,8 @@ class projectModel extends model
->where('type')->eq('project')
->andWhere('deleted')->eq(0)
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi()
->beginIF($queryType == 'bystatus' and $param != 'all')->andWhere('status')->eq($param)->fi()
->beginIF($queryType == 'bystatus' and $param == 'undone')->andWhere('status')->notIN('done,closed')->fi()
->beginIF($queryType == 'bystatus' and $param != 'all' and $param != 'undone')->andWhere('status')->eq($param)->fi()
->beginIF($queryType == 'byid')->andWhere('id')->eq($param)->fi()
->orderBy($orderBy)
->limit($limit)
@@ -1257,7 +1258,7 @@ class projectModel extends model
if($id == 'budget')
{
$projectBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) && $project->budget >= 10000 ? number_format($project->budget / 10000, 1) . $this->lang->project->tenThousand : number_format((float)$project->budget, 1);
$projectBudget = in_array($this->app->getClientLang(), ['zh-cn','zh-tw']) ? number_format((float)$project->budget / 10000, 2) . $this->lang->project->tenThousand : number_format((float)$project->budget, 2);
$budgetTitle = $project->budget != 0 ? zget($this->lang->project->currencySymbol, $project->budgetUnit) . ' ' . $projectBudget : $this->lang->project->future;
$title = "title='$budgetTitle'";
@@ -1452,11 +1453,21 @@ class projectModel extends model
{
if(empty($productID))
{
$myExecutionIDList = array();
if($status == 'involved')
{
$myExecutionIDList = $this->dao->select('root')->from(TABLE_TEAM)
->where('account')->eq($this->app->user->account)
->andWhere('type')->eq('execution')
->fetchPairs();
}
$executions = $this->dao->select('*')->from(TABLE_EXECUTION)
->where('type')->in('sprint,stage')
->beginIF($projectID != 0)->andWhere('project')->eq($projectID)->fi()
->beginIF(!empty($myExecutionIDList))->andWhere('id')->in(array_keys($myExecutionIDList))->fi()
->beginIF($status == 'undone')->andWhere('status')->notIN('done,closed')->fi()
->beginIF($status != 'all' and $status != 'undone')->andWhere('status')->eq($status)->fi()
->beginIF($status != 'all' and $status != 'undone' and $status != 'involved')->andWhere('status')->eq($status)->fi()
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->sprints)->fi()
->andWhere('deleted')->eq('0')
->orderBy($orderBy)
+1 -1
View File
@@ -104,7 +104,7 @@
<?php
if($canBeChanged)
{
$params = "bugID=$bug->id";
$params = "bugID=$bug->id,projectID={$project->id}";
common::printIcon('bug', 'confirmBug', $params, $bug, 'list', 'ok', '', 'iframe', true);
common::printIcon('bug', 'resolve', $params, $bug, 'list', 'checked', '', 'iframe', true);
common::printIcon('bug', 'close', $params, $bug, 'list', '', '', 'iframe', true);
+1 -1
View File
@@ -80,7 +80,7 @@
<td colspan='2'><?php echo html::radio('delta', $lang->project->endList , '', "onclick='computeEndDate(this.value)'");?></td>
</tr>
<?php if($model == 'scrum'):?>
<tr>
<tr id='daysDiv'>
<th><?php echo $lang->execution->days;?></th>
<td>
<div class='input-group'>
+1 -1
View File
@@ -83,7 +83,7 @@
<td colspan='2'><?php echo html::radio('delta', $lang->project->endList , $deltaValue, "onclick='computeEndDate(this.value)'");?></td>
</tr>
<?php if($project->model == 'scrum'):?>
<tr>
<tr id='daysDiv' <?php if($project->end == LONG_TIME) echo "class='hidden'";?>>
<th><?php echo $lang->project->days;?></th>
<td>
<div class='input-group'>
+6 -8
View File
@@ -29,7 +29,6 @@
</div>
<div class="btn-toolbar pull-right">
<?php if(common::canModify('project', $project)):?>
<?php //common::printIcon('testreport', 'browse', "objectID=$projectID&objectType=project", '', 'button','flag muted');?>
<?php common::printLink('testtask', 'create', "product=0&executionID=0&build=0&projectID=$projectID", "<i class='icon icon-plus'></i> " . $lang->testtask->create, '', "class='btn btn-primary'");?>
<?php endif;?>
</div>
@@ -91,15 +90,14 @@
<?php
if($canBeChanged)
{
common::printIcon('testtask', 'cases', "taskID=$task->id", $task, 'list', 'sitemap');
common::printIcon('testtask', 'linkCase', "taskID=$task->id", $task, 'list', 'link');
common::printIcon('testreport', 'browse', "objectID=$task->product&objectType=product&extra=$task->id", $task, 'list','flag');
common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list');
if(common::hasPriv('testtask', 'delete', $task))
common::printIcon('testtask', 'cases', "taskID=$task->id", $task, 'list', 'sitemap');
common::printIcon('testtask', 'linkCase', "taskID=$task->id", $task, 'list', 'link');
if(common::hasPriv('execution', 'testreport'))
{
$deleteURL = $this->createLink('testtask', 'delete', "taskID=$task->id&confirm=yes");
echo html::a("javascript:ajaxDelete(\"$deleteURL\", \"taskList\", confirmDelete)", '<i class="icon-trash"></i>', '', "class='btn' title='{$lang->testtask->delete}'");
echo html::a($this->createLink('testreport', 'browse', "objectID=$task->product&objectType=product&extra=$task->id"), '<i class="icon-testreport-browse icon-flag"></i>', '', 'class="btn " title="' . $lang->testreport->browse . '" data-app="qa"');
}
common::printIcon('testtask', 'edit', "taskID=$task->id", $task, 'list');
common::printIcon('testtask', 'delete', "taskID=$task->id", $task, 'list', 'trash', 'hiddenwin');
}
?>
</td>
+1 -1
View File
@@ -80,7 +80,7 @@ class projectrelease extends control
$this->view->position[] = $this->lang->release->browse;
$this->view->execution = $execution;
$this->view->project = $project;
$this->view->products = $this->loadModel('product')->getProducts($this->session->PRJ);
$this->view->products = $this->loadModel('product')->getProducts($this->session->project);
$this->view->releases = $this->projectrelease->getList($projectID, $type);
$this->view->projectID = $projectID;
$this->view->executionID = $executionID;
+1 -16
View File
@@ -23,22 +23,7 @@ class qaModel extends model
*/
public function setMenu($products, $productID, $branch = 0, $extra = '')
{
$selectHtml = $this->loadModel('product')->select($products, $productID, 'qa', 'index', $extra, $branch);
$productIndex = '';
$isMobile = $this->app->viewType == 'mhtml';
if($isMobile)
{
$productIndex = html::a(helper::createLink('qa', 'index'), $this->lang->qa->index) . $this->lang->colon;
$productIndex .= $selectHtml;
}
else
{
$currentMethod = $this->app->getMethodName();
$productIndex .= $selectHtml;
}
if(!in_array($this->app->rawModule, $this->config->qa->noDropMenuModule)) $this->lang->switcherMenu = $this->product->getSwitcher($productID, $extra, $branch);
if(!in_array($this->app->rawModule, $this->config->qa->noDropMenuModule)) $this->lang->switcherMenu = $this->loadModel('product')->getSwitcher($productID, $extra, $branch);
common::setMenuVars('qa', $productID);
}
+1 -1
View File
@@ -77,7 +77,7 @@
<?php $vars = "releaseID={$release->id}&type=story&link=$link&param=$param&orderBy=%s";?>
<thead>
<tr>
<th class='c-id text-left'>
<th class='c-id text-left w-110px'>
<?php if(($canBatchUnlink or $canBatchClose) and $canBeChanged):?>
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
<label></label>
+10 -5
View File
@@ -138,12 +138,15 @@ class reportModel extends model
*/
public function getProducts($conditions, $storyType = 'story')
{
$products = $this->dao->select('id, code, name, PO')->from(TABLE_PRODUCT)
->where('deleted')->eq(0)
->beginIF(strpos($conditions, 'closedProduct') === false)->andWhere('status')->ne('closed')->fi()
->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->products)->fi()
$products = $this->dao->select('t1.id as id, t1.code, t1.name, t1.PO')->from(TABLE_PRODUCT)->alias('t1')
->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id')
->where('t1.deleted')->eq(0)
->beginIF(strpos($conditions, 'closedProduct') === false)->andWhere('t1.status')->ne('closed')->fi()
->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->products)->fi()
->orderBy('t2.order_asc, t1.line_desc, t1.order_asc')
->fetchAll('id');
$plans = $this->dao->select('*')->from(TABLE_PRODUCTPLAN)->where('deleted')->eq(0)->andWhere('product')->in(array_keys($products))
$plans = $this->dao->select('*')->from(TABLE_PRODUCTPLAN)->where('deleted')->eq(0)->andWhere('product')->in(array_keys($products))
->beginIF(strpos($conditions, 'overduePlan') === false)->andWhere('end')->gt(date('Y-m-d'))->fi()
->orderBy('product,parent_desc,begin')
->fetchAll('id');
@@ -749,6 +752,7 @@ class reportModel extends model
{
/* Get changed executions in this year. */
$executions = $this->dao->select('id,name')->from(TABLE_EXECUTION)->where('deleted')->eq(0)
->andwhere('type')->eq('sprint')
->andWhere('LEFT(begin, 4)', true)->eq($year)
->orWhere('LEFT(end, 4)')->eq($year)
->markRight(1)
@@ -778,6 +782,7 @@ class reportModel extends model
$executions += $this->dao->select('id,name')->from(TABLE_EXECUTION)
->where('id')->in($teamExecutions + $taskExecutions)
->andWhere('deleted')->eq(0)
->andWhere('type')->eq('sprint')
->orderBy('`order` desc')
->fetchAll('id');
}
+4
View File
@@ -1,4 +1,8 @@
<?php include '../../common/view/header.html.php';?>
<?php if(isset($config->maxVersion)):?>
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
<?php endif;?>
<div id='mainContent' class='main-row'>
<div class='side-col col-lg' id='sidebar'>
<?php include 'blockreportlist.html.php';?>
+4
View File
@@ -1,5 +1,9 @@
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/datepicker.html.php';?>
<?php if(isset($config->maxVersion)):?>
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
<?php endif;?>
<div id='mainContent' class='main-row'>
<div class='side-col col-lg' id='sidebar'>
<?php include 'blockreportlist.html.php';?>
@@ -2,6 +2,10 @@
<?php if(common::checkNotCN()):?>
<style>#conditions .col-xs { width: 126px; }</style>
<?php endif;?>
<?php if(isset($config->maxVersion)):?>
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
<?php endif;?>
<div id='mainContent' class='main-row'>
<div class='side-col col-lg' id='sidebar'>
<?php include 'blockreportlist.html.php';?>
@@ -1,6 +1,10 @@
<?php include '../../common/view/header.html.php';?>
<?php include '../../common/view/datepicker.html.php';?>
<?php include '../../common/view/chart.html.php';?>
<?php if(isset($config->maxVersion)):?>
<style>#mainContent > .side-col.col-lg{width: 235px}</style>
<style>.hide-sidebar #sidebar{width: 0 !important}</style>
<?php endif;?>
<?php $chartData = array('labels' => array(), 'data' => array());?>
<div id='mainContent' class='main-row'>
<div class='side-col col-lg' id='sidebar'>
+32 -13
View File
@@ -55,10 +55,12 @@ class story extends control
}
else if($this->app->openApp == 'project')
{
$objectID = empty($objectID) ? $this->session->project : $objectID;
$this->project->setMenu($objectID);
}
else if($this->app->openApp == 'execution')
{
$objectID = empty($objectID) ? $this->session->execution : $objectID;
$this->execution->setMenu($objectID);
}
@@ -523,7 +525,18 @@ class story extends control
/* Set menu. */
$this->lang->product->switcherMenu = $this->product->getSwitcher($product->id);
$this->product->setMenu($product->id, $story->branch);
if($this->app->openApp == 'project')
{
$this->loadModel('project')->setMenu($this->session->project);
}
elseif($this->app->openApp == 'product')
{
$this->product->setMenu($product->id, $story->branch);
}
elseif($this->app->openApp == 'execution')
{
$this->loadModel('execution')->setMenu($this->session->execution);
}
$this->story->replaceURLang($story->type);
@@ -642,7 +655,6 @@ class story extends control
$productPlans = $this->productplan->getPairs($productID, $branch, '', true);
$productPlans = array('' => '', 'ditto' => $this->lang->story->ditto) + $productPlans;
$this->view->modules = $modules;
$this->view->branches = $product->type == 'normal' ? array() : $this->loadModel('branch')->getPairs($product->id);
$this->view->productPlans = $productPlans;
@@ -670,9 +682,9 @@ class story extends control
$this->view->title = $execution->name . $this->lang->colon . $this->lang->story->batchEdit;
$this->view->resetActive = true;
}
/* The stories of my. */
else
{
/* The stories of my. */
$this->lang->story->menu = $this->lang->my->menu;
$this->lang->story->menuOrder = $this->lang->my->menuOrder;
$this->loadModel('my')->setMenu();
@@ -695,7 +707,7 @@ class story extends control
}
/* Set ditto option for users. */
$users = $this->loadModel('user')->getPairs('nodeleted');
$users = $this->loadModel('user')->getPairs('nodeleted');
$users = array('' => '', 'ditto' => $this->lang->story->ditto) + $users;
/* Set Custom*/
@@ -957,15 +969,19 @@ class story extends control
$this->story->replaceURLang($story->type);
/* Set menu. */
if($from == 'project')
if($this->app->openApp == 'project')
{
$this->app->rawModule = 'projectstory';
$this->lang->navGroup->story = 'project';
$this->loadModel('project')->setMenu($this->session->project);
}
else
elseif($this->app->openApp == 'product')
{
$this->product->setMenu($product->id, $story->branch);
}
elseif($this->app->openApp == 'execution')
{
$this->loadModel('execution')->setMenu($this->session->execution);
}
/* Set the review result options. */
if($story->status == 'draft' and $story->version == 1) unset($this->lang->story->reviewResultList['revert']);
@@ -1451,16 +1467,14 @@ class story extends control
* Show zero case story.
*
* @param int $productID
* @param int $branchID
* @param string $orderBy
* @param string $from qa|project
* @access public
* @return void
*/
public function zeroCase($productID, $orderBy = 'id_desc', $from = 'project')
public function zeroCase($productID = 0, $branchID = 0, $orderBy = 'id_desc')
{
$this->session->set('storyList', $this->app->getURI(true), 'product');
$products = $this->product->getPairs();
if(empty($productID)) $productID = key($products);
$this->loadModel('testcase');
if($this->app->openApp == 'project')
@@ -1468,13 +1482,18 @@ class story extends control
$this->loadModel('project')->setMenu($this->session->project);
$this->app->rawModule = 'qa';
$this->lang->project->menu->qa['subMenu']->testcase['subModule'] = 'story';
$products = $this->project->getProducts($this->session->project, false);
$products = $this->project->getProducts($this->session->project, false);
$productID = $this->product->saveState($productID, $products);
$this->lang->modulePageNav = $this->product->select($products, $productID, 'story', 'zeroCase');
}
else
{
$products = $this->product->getPairs();
$productID = $this->product->saveState($productID, $products);
$this->loadModel('qa');
$this->app->rawModule = 'testcase';
foreach($this->config->qa->menuList as $module) $this->lang->navGroup->$module = 'qa';
$this->qa->setMenu($products, $productID, $branchID);
}
/* Append id for secend sort. */
@@ -1484,7 +1503,7 @@ class story extends control
$this->view->position[] = html::a($this->createLink('testcase', 'browse', "productID=$productID"), $products[$productID]);
$this->view->position[] = $this->lang->story->zeroCase;
$this->view->stories = $this->story->getZeroCase($productID, $sort);
$this->view->stories = $this->story->getZeroCase($productID, $branchID, $sort);
$this->view->users = $this->user->getPairs('noletter');
$this->view->productID = $productID;
$this->view->orderBy = $orderBy;
+2
View File
@@ -31,11 +31,13 @@ $lang->story->reviewAction = 'Review Story';
$lang->story->needReview = 'Need Review';
$lang->story->batchReview = 'Mehere prüfen';
$lang->story->edit = "Bearbeiten";
$lang->story->editAB = "Bearbeiten";
$lang->story->batchEdit = "Mehere bearbeiten";
$lang->story->subdivide = 'Aufteilen';
$lang->story->link = 'Link';
$lang->story->unlink = 'Unlink';
$lang->story->track = 'Track';
$lang->story->trackAB = 'Track';
$lang->story->processStoryChange= 'Process Story Change';
$lang->story->subdivideAction = 'Decompose Story';
$lang->story->splitRequirent = 'Decompose';
+2
View File
@@ -31,11 +31,13 @@ $lang->story->reviewAction = 'Review Story';
$lang->story->needReview = 'Need Review';
$lang->story->batchReview = 'Batch Review';
$lang->story->edit = "Edit Story";
$lang->story->editAB = "Edit Story";
$lang->story->batchEdit = "Batch Edit";
$lang->story->subdivide = 'Decompose';
$lang->story->link = 'Link';
$lang->story->unlink = 'Unlink';
$lang->story->track = 'Track';
$lang->story->trackAB = 'Track';
$lang->story->processStoryChange= 'Process Story Change';
$lang->story->subdivideAction = 'Decompose Story';
$lang->story->splitRequirent = 'Decompose';
+2
View File
@@ -31,11 +31,13 @@ $lang->story->reviewAction = 'Valider Story';
$lang->story->needReview = 'Validation requise';
$lang->story->batchReview = 'Validation par lot';
$lang->story->edit = "Editer Story";
$lang->story->editAB = "Editer Story";
$lang->story->batchEdit = "Editer par Lot";
$lang->story->subdivide = 'Décomposer';
$lang->story->link = 'Link';
$lang->story->unlink = 'Unlink';
$lang->story->track = 'Track';
$lang->story->trackAB = 'Track';
$lang->story->processStoryChange= 'Process Story Change';
$lang->story->subdivideAction = 'Décomposer Story';
$lang->story->splitRequirent = 'Décompose';
+2
View File
@@ -31,11 +31,13 @@ $lang->story->reviewAction = 'Duyệt câu chuyện';
$lang->story->needReview = 'Duyệt nhu cầu';
$lang->story->batchReview = 'Duyệt hàng loạt';
$lang->story->edit = "Sửa câu chuyện";
$lang->story->editAB = "Sửa câu chuyện";
$lang->story->batchEdit = "Sửa hàng loạt";
$lang->story->subdivide = 'Phân rã';
$lang->story->link = 'Link';
$lang->story->unlink = 'Unlink';
$lang->story->track = 'Track';
$lang->story->trackAB = 'Track';
$lang->story->processStoryChange= 'Process Story Change';
$lang->story->subdivideAction = 'Phân rã câu chuyện';
$lang->story->splitRequirent = 'Phân rã';
+1
View File
@@ -33,6 +33,7 @@ $lang->story->subdivide = '细分';
$lang->story->link = '关联';
$lang->story->unlink = '移除';
$lang->story->track = '跟踪矩阵';
$lang->story->trackAB = '矩阵';
$lang->story->processStoryChange = '处理需求变更';
$lang->story->splitRequirent = '拆分';
$lang->story->close = '关闭';
+2
View File
@@ -31,11 +31,13 @@ $lang->story->reviewAction = "評審{$lang->SRCommon}";
$lang->story->needReview = '需要評審';
$lang->story->batchReview = '批量評審';
$lang->story->edit = "編輯";
$lang->story->editAB = "編輯{$lang->SRCommon}";
$lang->story->batchEdit = "批量編輯";
$lang->story->subdivide = '細分';
$lang->story->link = '關聯';
$lang->story->unlink = '移除';
$lang->story->track = '跟蹤矩陣';
$lang->story->trackAB = '矩陣';
$lang->story->processStoryChange = '處理需求變更';
$lang->story->subdivideAction = "細分{$lang->SRCommon}";
$lang->story->splitRequirent = '拆分';
+5 -3
View File
@@ -2600,13 +2600,15 @@ class storyModel extends model
/**
* Get zero case.
*
* @param int $productID
* @param int $productID
* @param int $branchID
* @param string $orderBy
* @access public
* @return array
*/
public function getZeroCase($productID, $orderBy = 'id_desc')
public function getZeroCase($productID, $branchID = 0, $orderBy = 'id_desc')
{
$allStories = $this->getProductStories($productID, 0, 0, 'all', 'story', $orderBy, $hasParent = false, '', null);
$allStories = $this->getProductStories($productID, $branchID, 0, 'all', 'story', $orderBy, $hasParent = false, '', null);
$casedStories = $this->dao->select('DISTINCT story')->from(TABLE_CASE)->where('product')->eq($productID)->andWhere('story')->ne(0)->andWhere('deleted')->eq(0)->fetchAll('story');
foreach($allStories as $key => $story)
+1 -1
View File
@@ -15,7 +15,7 @@
<div class="main-header">
<h2><?php echo $storyID ? $storyTitle . ' - ' . $this->lang->story->subdivide : $this->lang->story->batchCreate;?></h2>
<div class="pull-right btn-toolbar">
<?php if(common::hasPriv('file', 'uploadImages')) echo html::a($this->createLink('file', 'uploadImages', 'module=story&params=' . helper::safe64Encode("productID=$productID&branch=$branch&moduleID=$moduleID&storyID=$storyID")), $lang->uploadImages, '', "data-toggle='modal' data-type='iframe' class='btn btn-primary' data-width='70%'")?>
<?php if(common::hasPriv('file', 'uploadImages')) echo html::a($this->createLink('file', 'uploadImages', 'module=story&params=' . helper::safe64Encode("productID=$productID&branch=$branch&moduleID=$moduleID&storyID=$storyID&executionID=&plan=&type=$type")), $lang->uploadImages, '', "data-toggle='modal' data-type='iframe' class='btn btn-primary' data-width='70%'")?>
<button type='button' data-toggle='modal' data-target="#importLinesModal" class="btn btn-primary"><?php echo $lang->pasteText;?></button>
<?php $customLink = $this->createLink('custom', 'ajaxSaveCustomFields', 'module=story&section=custom&key=batchCreateFields')?>
<?php include '../../common/view/customfield.html.php';?>
+1 -1
View File
@@ -71,7 +71,7 @@
$this->app->openApp = 'product';
common::printIcon('story', 'change', $vars, $story, 'list', 'fork');
common::printIcon('story', 'review', $vars, $story, 'list', 'glasses');
common::printIcon('story', 'close', $vars, $story, 'list', 'off');
common::printIcon('story', 'close', $vars, $story, 'list', 'off', '', 'iframe', 'yes');
common::printIcon('story', 'edit', $vars, $story, 'list', 'pencil');
$this->app->openApp = 'qa';
common::printIcon('story', 'createCase', "productID=$story->product&branch=0&module=0&from=&param=0&$vars", $story, 'list', 'sitemap');
+11 -4
View File
@@ -251,14 +251,21 @@ class task extends control
die(js::locate($this->createLink('execution', 'task', "executionID=$executionID")));
}
$execution = $this->execution->getById($executionID);
if($this->config->systemMode == 'new')
{
$project = $this->project->getByID($this->session->project);
$project = $this->project->getByID($execution->project);
if($project->model == 'waterfall') $this->config->task->create->requiredFields .= ',estStarted,deadline';
}
$execution = $this->execution->getById($executionID);
$taskLink = $this->createLink('execution', 'browse', "executionID=$executionID&tab=task");
if($this->app->openApp == 'my')
{
$taskLink = $this->createLink('my', 'work', 'mode=task');
}
else
{
$taskLink = $this->createLink('execution', 'browse', "executionID=$executionID");
}
$storyLink = $this->session->storyList ? $this->session->storyList : $this->createLink('execution', 'story', "executionID=$executionID");
/* Set menu. */
@@ -279,7 +286,7 @@ class task extends control
/* Locate the browser. */
if(!empty($iframe)) $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => 'parent'));
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $storyLink));
$this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $taskLink));
}
/* Set Custom*/
+1 -1
View File
@@ -3030,7 +3030,7 @@ class taskModel extends model
{
if(common::hasPriv('story', 'view'))
{
echo html::a(helper::createLink('story', 'view', "storyid=$task->storyID", 'html', true), "<i class='icon icon-{$this->lang->icons['story']}'></i>", '', "class='iframe' title='{$task->storyTitle}'");
echo html::a(helper::createLink('story', 'view', "storyid=$task->storyID", 'html', true), "<i class='icon icon-{$this->lang->icons['story']}'></i>", '', "class='iframe' data-width='1050' title='{$task->storyTitle}'");
}
else
{
+4 -7
View File
@@ -49,7 +49,7 @@ class testcase extends control
$products = $this->loadModel('project')->getProducts($projectID, false);
}
if($this->app->openApp == 'execution') $products = $this->loadModel('execution')->getProducts($this->session->execution, false);
if($this->app->openApp == 'qa' or $this->app->openApp == 'my') $products = $this->product->getPairs();
if($this->app->openApp == 'qa' or $this->app->openApp == 'my' or $this->app->openApp == 'product') $products = $this->product->getPairs();
$this->view->products = $this->products = $products;
if(empty($this->products)) die($this->locate($this->createLink('product', 'showErrorNone', "moduleName={$this->app->openApp}&activeMenu=testcase&projectID=$projectID")));
}
@@ -302,7 +302,7 @@ class testcase extends control
$this->loadModel('action');
$this->action->create('case', $caseID, 'Opened');
if($this->app->openApp == 'project') $this->action->create('case', $caseID, 'linked2project', '', $this->session->PRJ);
if($this->app->openApp == 'project') $this->action->create('case', $caseID, 'linked2project', '', $this->session->project);
if($this->app->openApp == 'execution') $this->action->create('case', $caseID, 'linked2execution', '', $this->session->execution);
$this->executeHooks($caseID);
@@ -329,12 +329,9 @@ class testcase extends control
{
$this->loadModel('project')->setMenu($this->session->project);
}
elseif($this->app->openApp == 'my')
elseif($this->app->openApp == 'execution')
{
$this->loadModel('my')->setMenu();
$this->lang->testcase->menu = $this->lang->my->menu->$from;
if($from == 'work') $this->lang->my->menu->work['subModule'] = 'testcase';
if($from == 'contribute') $this->lang->my->menu->contribute['subModule'] = 'testcase';
$this->loadModel('execution')->setMenu($this->session->execution);
}
else
{
+2 -3
View File
@@ -202,7 +202,7 @@ class testcaseModel extends model
$this->loadModel('score')->create('testcase', 'create', $caseID);
$actionID = $this->loadModel('action')->create('case', $caseID, 'Opened');
if($this->app->openApp == 'project') $this->action->create('case', $caseID, 'linked2project', '', $this->session->PRJ);
if($this->app->openApp == 'project') $this->action->create('case', $caseID, 'linked2project', '', $this->session->project);
if($this->app->openApp == 'execution') $this->action->create('case', $caseID, 'linked2execution', '', $this->session->execution);
}
if(!dao::isError()) $this->loadModel('score')->create('ajax', 'batchCreate');
@@ -1672,8 +1672,7 @@ class testcaseModel extends model
{
if(!empty($case->story))
{
$projects = $this->dao->select('project')->from(TABLE_PROJECTSTORY)->where('story')->eq($case->story)->fetchAll('project');
$projects = array_keys($projects);
$projects = $this->dao->select('project')->from(TABLE_PROJECTSTORY)->where('story')->eq($case->story)->fetchPairs();
}
elseif($this->app->openApp == 'project' and empty($case->story))
{
+1 -1
View File
@@ -93,7 +93,7 @@
}
elseif($hasZeroPriv and $menuType == 'zerocase')
{
echo html::a($this->createLink('story', 'zeroCase', "productID=$productID&orderBy=id_desc&from={$this->lang->navGroup->testcase}"), "<span class='text'>{$lang->story->zeroCase}</span>", '', "class='btn btn-link' id='zerocaseTab' data-app='{$this->app->openApp}'");
echo html::a($this->createLink('story', 'zeroCase', "productID=$productID&branch=$branch&orderBy=id_desc&from={$this->lang->navGroup->testcase}"), "<span class='text'>{$lang->story->zeroCase}</span>", '', "class='btn btn-link' id='zerocaseTab' data-app='{$this->app->openApp}'");
}
elseif($hasUnitPriv and $menuType == 'browseunits')
{
+1 -1
View File
@@ -117,7 +117,7 @@
if(!$isLibCase)
{
if(!isonlybody()) echo "<div class='divider'></div>";
common::printIcon('testtask', 'runCase', "runID=$runID&caseID=$case->id&version=$case->currentVersion", $case, 'button', '', '', 'showinonlybody iframe', false, "data-width='95%'");
common::printIcon('testtask', 'runCase', "runID=$runID&caseID=$case->id&version=$case->currentVersion", $case, 'button', 'play', '', 'showinonlybody iframe', false, "data-width='95%'");
common::printIcon('testtask', 'results', "runID=$runID&caseID=$case->id&version=$case->version", $case, 'button', '', '', 'showinonlybody iframe', false, "data-width='95%'");
if($caseFails > 0) common::printIcon('testcase', 'createBug', "product=$case->product&branch=$case->branch&extra=caseID=$case->id,version=$case->version,runID=$runID", $case, 'button', 'bug', '', 'iframe', '', "data-width='90%'");
+47 -38
View File
@@ -94,7 +94,7 @@ class testreport extends control
$reports = $this->testreport->getList($objectID, $objectType, $extra, $orderBy, $pager);
if($objectType == 'execution' and isset($_POST['taskIdList']))
if(strpos('project|execution', $objectType) !== false and isset($_POST['taskIdList']))
{
$taskIdList = $_POST['taskIdList'];
foreach($reports as $reportID => $report)
@@ -109,9 +109,9 @@ class testreport extends control
{
$param = '';
if($objectType == 'product' and $extra) $param = "objectID=$extra&objectType=testtask";
if($objectType == 'project')
if(($objectType == 'project' or $objectType == 'execution') and ($extra or !empty($_POST['taskIdList'])))
{
$param = "objectID=$objectID&objectType=project";
$param = "objectID=$objectID&objectType=$objectType";
if(isset($_POST['taskIdList'])) $param .= '&extra=' . join(',', $_POST['taskIdList']);
}
if($param) $this->locate($this->createLink('testreport', 'create', $param));
@@ -165,13 +165,6 @@ class testreport extends control
die(js::locate(inlink('view', "reportID=$reportID"), 'parent'));
}
/*
if($this->app->openApp == 'execution')
{
$this->loadModel('execution')->setMenu($);
}
*/
if($objectType == 'testtask')
{
if(empty($objectID) and $extra) $productID = $extra;
@@ -235,14 +228,14 @@ class testreport extends control
$this->view->position[] = $this->lang->testreport->create;
$this->view->reportTitle = date('Y-m-d') . " TESTTASK#{$task->id} {$task->name} {$this->lang->testreport->common}";
}
elseif($objectType == 'project')
elseif($objectType == 'execution')
{
$executionID = $this->commonAction($objectID, 'execution');
$executionID = $this->commonAction($objectID, $objectType);
if($executionID != $objectID) die(js::error($this->lang->error->accessDenied) . js::locate('back'));
$execution = $this->execution->getById($executionID);
$tasks = $this->testtask->getExecutionTasks($executionID);
$owners = array();
$execution = $this->execution->getById($executionID);
$tasks = $this->testtask->getExecutionTasks($executionID);
$owners = array();
$buildIdList = array();
$productIdList = array();
foreach($tasks as $i => $task)
@@ -275,9 +268,9 @@ class testreport extends control
$this->view->title = $execution->name . $this->lang->testreport->create;
$this->view->position[] = html::a(inlink('browse', "objectID=$executionID&objectType=execution"), $execution->name);
$this->view->position[] = $this->lang->testreport->create;
$this->view->reportTitle = date('Y-m-d') . " PROJECT#{$execution->id} {$execution->name} {$this->lang->testreport->common}";
$this->view->reportTitle = date('Y-m-d') . " EXECUTION#{$execution->id} {$execution->name} {$this->lang->testreport->common}";
}
$cases = $this->testreport->getTaskCases($tasks, $begin, $end);
$bugInfo = $this->testreport->getBugInfo($tasks, $productIdList, $begin, $end, $builds);
$this->view->begin = $begin;
@@ -316,12 +309,13 @@ class testreport extends control
/**
* Edit report
*
* @param int $reportID
* @param string $from
* @param int $reportID
* @param string $begin
* @param string $end
* @access public
* @return void
*/
public function edit($reportID, $from = 'product', $begin = '', $end ='')
public function edit($reportID, $begin = '', $end ='')
{
if($_POST)
{
@@ -333,14 +327,15 @@ class testreport extends control
$actionID = $this->loadModel('action')->create('testreport', $reportID, 'Edited', $fileAction);
if(!empty($changes)) $this->action->logHistory($actionID, $changes);
die(js::locate(inlink('view', "reportID=$reportID&from=$from"), 'parent'));
die(js::locate(inlink('view', "reportID=$reportID"), 'parent'));
}
$report = $this->testreport->getById($reportID);
$execution = $this->execution->getById($report->execution);
$begin = !empty($begin) ? date("Y-m-d", strtotime($begin)) : $report->begin;
$end = !empty($end) ? date("Y-m-d", strtotime($end)) : $report->end;
if($from == 'product' and is_numeric($report->product))
if($this->app->openApp == 'qa' and !empty($report->product))
{
$product = $this->product->getById($report->product);
$productID = $this->commonAction($report->product, 'product');
@@ -350,12 +345,20 @@ class testreport extends control
$this->view->position[] = html::a($browseLink, $product->name);
$this->view->position[] = $this->lang->testreport->edit;
}
else
elseif($this->app->openApp == 'execution' or $this->app->openApp == 'project')
{
$executionID = $this->commonAction($report->execution, 'execution');
if($executionID != $report->objectID) die(js::error($this->lang->error->accessDenied) . js::locate('back'));
if($this->app->openApp == 'execution')
{
$objectID = $this->commonAction($report->execution, 'execution');
if($objectID != $report->execution) die(js::error($this->lang->error->accessDenied) . js::locate('back'));
}
else
{
$objectID = $this->commonAction($report->project, 'project');
if($objectID != $report->project) die(js::error($this->lang->error->accessDenied) . js::locate('back'));
}
$browseLink = inlink('browse', "objectID=$executionID&objectType=project");
$browseLink = inlink('browse', "objectID=$objectID&objectType=execution");
$this->view->position[] = html::a($browseLink, $execution->name);
$this->view->position[] = $this->lang->testreport->edit;
}
@@ -384,7 +387,7 @@ class testreport extends control
$this->setChartDatas($report->objectID);
}
else
elseif($report->objectType == 'execution')
{
$tasks = $this->testtask->getByList($report->tasks);
$productIdList[$report->product] = $report->product;
@@ -402,7 +405,6 @@ class testreport extends control
$this->view->title = $report->title . $this->lang->testreport->edit;
$this->view->report = $report;
$this->view->from = $from;
$this->view->begin = $begin;
$this->view->end = $end;
$this->view->stories = $stories;
@@ -412,8 +414,8 @@ class testreport extends control
$this->view->tasks = join(',', array_keys($tasks));
$this->view->storySummary = $this->product->summary($stories);
$this->view->builds = $builds;
$this->view->users = $this->user->getPairs('noletter|noclosed|nodeleted');
$this->view->builds = $builds;
$this->view->users = $this->user->getPairs('noletter|noclosed|nodeleted');
$this->view->cases = $cases;
$this->view->caseSummary = $this->testreport->getResultSummary($tasks, $cases, $begin, $end);
@@ -434,7 +436,6 @@ class testreport extends control
* View report.
*
* @param int $reportID
* @param string $from
* @param string $tab
* @param int $recTotal
* @param int $recPerPage
@@ -442,14 +443,14 @@ class testreport extends control
* @access public
* @return void
*/
public function view($reportID, $from = 'product', $tab = 'basic', $recTotal = 0, $recPerPage = 100, $pageID = 1)
public function view($reportID, $tab = 'basic', $recTotal = 0, $recPerPage = 100, $pageID = 1)
{
$report = $this->testreport->getById($reportID);
$report = $this->testreport->getById($reportID);
if(!$report) die(js::error($this->lang->notFound) . js::locate('back'));
$this->session->project = $report->project;
$execution = $this->execution->getById($report->execution);
if($from == 'product' and is_numeric($report->product))
if($this->app->openApp == 'qa' and !empty($report->product))
{
$product = $this->product->getById($report->product);
$productID = $this->commonAction($report->product, 'product');
@@ -458,12 +459,20 @@ class testreport extends control
$browseLink = inlink('browse', "objectID=$productID&objectType=product");
$this->view->position[] = html::a($browseLink, $product->name);
}
else
elseif($this->app->openApp == 'execution' or $this->app->openApp == 'project')
{
$executionID = $this->commonAction($report->execution, 'execution');
if($executionID != $report->execution) die(js::error($this->lang->error->accessDenied) . js::locate('back'));
if($this->app->openApp == 'execution')
{
$objectID = $this->commonAction($report->execution, 'execution');
if($objectID != $report->execution) die(js::error($this->lang->error->accessDenied) . js::locate('back'));
}
else
{
$objectID = $this->commonAction($report->project, 'project');
if($objectID != $report->project) die(js::error($this->lang->error->accessDenied) . js::locate('back'));
}
$browseLink = inlink('browse', "objectID=$executionID&objectType=project");
$browseLink = inlink('browse', "objectID=$objectID&objectType=execution");
$this->view->position[] = html::a($browseLink, $execution->name);
}
+1 -1
View File
@@ -52,6 +52,6 @@ function refreshPage()
}
else if(method == 'edit')
{
location.href = createLink('testreport', 'edit', "reportID=" + reportID + "&from=" + from + "&begin=" + begin + "&end=" + end);
location.href = createLink('testreport', 'edit', "reportID=" + reportID + "&begin=" + begin + "&end=" + end);
}
}

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