Merge branch '15.0.beta3' of https://gitlab.zcorp.cc/easycorp/zentaopms into 15.0.beta3
This commit is contained in:
@@ -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
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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';
|
||||
|
||||
|
||||
@@ -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 = '版本列表';
|
||||
|
||||
|
||||
@@ -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 = '版本列表';
|
||||
|
||||
|
||||
@@ -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);?>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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();
|
||||
|
||||
@@ -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'>
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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');
|
||||
|
||||
@@ -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 = '版本';
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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 = '所有';
|
||||
|
||||
@@ -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, '') . "'");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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'");?>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
?>
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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;}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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}";
|
||||
|
||||
@@ -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}";
|
||||
|
||||
@@ -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}";
|
||||
|
||||
@@ -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}";
|
||||
|
||||
@@ -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}下的任务信息";
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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> " . $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> " . $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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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 : ''?>
|
||||
|
||||
@@ -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=¶m=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=¶m=0&$vars", $story, 'list', 'sitemap', '', 'iframe', true, "data-width='95%'");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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}¶m=$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}¶m=$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>
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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';
|
||||
}
|
||||
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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" : ''));
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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] . ' ';
|
||||
?>
|
||||
</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>
|
||||
|
||||
@@ -24,7 +24,7 @@ $(function()
|
||||
{
|
||||
var projectID = $('#project').val();
|
||||
var planID = $('#planID').val();
|
||||
parent.location.href = createLink('execution', 'create', 'productID=' + productID + '&executionID=©ExecutionID=&planID=' + planID + '&confirm=&projectID=' + projectID);
|
||||
parent.location.href = createLink('execution', 'create', 'projectID=' + projectID + '&executionID=©ExecutionID=&planID=' + planID + '&confirm=&productID=' + productID);
|
||||
});
|
||||
});
|
||||
$(document).on('click', 'td.content .more', function(e)
|
||||
|
||||
@@ -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©ExecutionID=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');
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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'] = '全部公开';
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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¶m=$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);
|
||||
|
||||
|
||||
@@ -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;}
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
/**
|
||||
|
||||
@@ -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'] = '公开';
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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'>
|
||||
|
||||
@@ -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'>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
<?php $vars = "releaseID={$release->id}&type=story&link=$link¶m=$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
@@ -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');
|
||||
}
|
||||
|
||||
@@ -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';?>
|
||||
|
||||
@@ -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
@@ -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;
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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ã';
|
||||
|
||||
@@ -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 = '关闭';
|
||||
|
||||
@@ -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 = '拆分';
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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¶ms=' . 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¶ms=' . 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§ion=custom&key=batchCreateFields')?>
|
||||
<?php include '../../common/view/customfield.html.php';?>
|
||||
|
||||
@@ -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=¶m=0&$vars", $story, 'list', 'sitemap');
|
||||
|
||||
+11
-4
@@ -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*/
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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')
|
||||
{
|
||||
|
||||
@@ -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%'");
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user