Merge branch 'sprint/228_tianshujie_64976' into 'master'

Sprint/228 tianshujie 64976

See merge request easycorp/zentaopms!5017
This commit is contained in:
李玉春
2022-08-18 09:57:34 +00:00
29 changed files with 238 additions and 207 deletions
+3
View File
@@ -247,3 +247,6 @@ INSERT IGNORE INTO `zt_lang` (`lang`, `module`, `section`, `key`, `value`, `syst
('de', 'bug', 'osList', 'freebsd', 'FreeBSD', '1', 'rnd'),
('de', 'bug', 'osList', 'unix', 'Unix', '1', 'rnd'),
('de', 'bug', 'osList', 'others', 'Andere', '1', 'rnd');
UPDATE `zt_grouppriv` SET `module` = 'testcase' WHERE `module` = 'story' and `method` = 'zeroCase';
UPDATE `zt_grouppriv` SET `module` = 'product' WHERE `module` = 'story' and `method` = 'track';
+20 -20
View File
@@ -2407,9 +2407,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(1,'story','report'),
(1,'story','review'),
(1,'story','tasks'),
(1,'story','track'),
(1,'product','track'),
(1,'story','view'),
(1,'story','zeroCase'),
(1,'testcase','zeroCase'),
(1,'svn','apiSync'),
(1,'svn','cat'),
(1,'svn','diff'),
@@ -2778,7 +2778,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(2,'story','cases'),
(2,'story','report'),
(2,'story','tasks'),
(2,'story','track'),
(2,'product','track'),
(2,'story','view'),
(2,'svn','apiSync'),
(2,'svn','cat'),
@@ -3074,9 +3074,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(3,'story','processStoryChange'),
(3,'story','report'),
(3,'story','tasks'),
(3,'story','track'),
(3,'product','track'),
(3,'story','view'),
(3,'story','zeroCase'),
(3,'testcase','zeroCase'),
(3,'svn','apiSync'),
(3,'svn','cat'),
(3,'svn','diff'),
@@ -3568,9 +3568,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(4,'story','report'),
(4,'story','review'),
(4,'story','tasks'),
(4,'story','track'),
(4,'product','track'),
(4,'story','view'),
(4,'story','zeroCase'),
(4,'testcase','zeroCase'),
(4,'svn','apiSync'),
(4,'svn','cat'),
(4,'svn','diff'),
@@ -4068,9 +4068,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(5,'story','report'),
(5,'story','review'),
(5,'story','tasks'),
(5,'story','track'),
(5,'product','track'),
(5,'story','view'),
(5,'story','zeroCase'),
(5,'testcase','zeroCase'),
(5,'svn','apiSync'),
(5,'svn','cat'),
(5,'svn','diff'),
@@ -4442,9 +4442,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(6,'story','processStoryChange'),
(6,'story','report'),
(6,'story','tasks'),
(6,'story','track'),
(6,'product','track'),
(6,'story','view'),
(6,'story','zeroCase'),
(6,'testcase','zeroCase'),
(6,'svn','apiSync'),
(6,'svn','cat'),
(6,'svn','diff'),
@@ -4847,9 +4847,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(7,'story','report'),
(7,'story','review'),
(7,'story','tasks'),
(7,'story','track'),
(7,'product','track'),
(7,'story','view'),
(7,'story','zeroCase'),
(7,'testcase','zeroCase'),
(7,'svn','apiSync'),
(7,'svn','cat'),
(7,'svn','diff'),
@@ -5192,9 +5192,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(8,'story','processStoryChange'),
(8,'story','report'),
(8,'story','tasks'),
(8,'story','track'),
(8,'product','track'),
(8,'story','view'),
(8,'story','zeroCase'),
(8,'testcase','zeroCase'),
(8,'svn','apiSync'),
(8,'svn','cat'),
(8,'svn','diff'),
@@ -5578,9 +5578,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(9,'story','report'),
(9,'story','review'),
(9,'story','tasks'),
(9,'story','track'),
(9,'product','track'),
(9,'story','view'),
(9,'story','zeroCase'),
(9,'testcase','zeroCase'),
(9,'svn','apiSync'),
(9,'svn','cat'),
(9,'svn','diff'),
@@ -5829,7 +5829,7 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(10,'story','processStoryChange'),
(10,'story','report'),
(10,'story','tasks'),
(10,'story','track'),
(10,'product','track'),
(10,'story','view'),
(10,'svn','apiSync'),
(10,'svn','cat'),
@@ -6079,9 +6079,9 @@ INSERT INTO `zt_grouppriv` (`group`, `module`, `method`) VALUES
(11,'story','export'),
(11,'story','report'),
(11,'story','tasks'),
(11,'story','track'),
(11,'product','track'),
(11,'story','view'),
(11,'story','zeroCase'),
(11,'testcase','zeroCase'),
(11,'svn','apiSync'),
(11,'svn','cat'),
(11,'svn','diff'),
+1 -1
View File
@@ -163,7 +163,7 @@ $lang->product->menu->release = array('link' => "{$lang->release->common}|relea
$lang->product->menu->roadmap = array('link' => "{$lang->roadmap}|product|roadmap|productID=%s");
if($config->systemMode == 'new') $lang->product->menu->project = array('link' => "{$lang->project->common}|product|project|status=all&productID=%s");
if($config->systemMode == 'classic') $lang->product->menu->project = array('link' => "{$lang->execution->common}|product|project|status=all&productID=%s");
$lang->product->menu->track = array('link' => "{$lang->track}|story|track|productID=%s");
$lang->product->menu->track = array('link' => "{$lang->track}|product|track|productID=%s");
$lang->product->menu->doc = array('link' => "{$lang->doc->common}|doc|tableContents|type=product&objectID=%s", 'subModule' => 'doc');
$lang->product->menu->dynamic = array('link' => "{$lang->dynamic}|product|dynamic|productID=%s");
$lang->product->menu->settings = array('link' => "{$lang->settings}|product|view|productID=%s", 'subModule' => 'tree,branch', 'alias' => 'edit,whitelist,addwhitelist');
+1 -1
View File
@@ -203,7 +203,7 @@ $lang->product->viewMenu->plan = array('link' => "Plan|productplan|browse
$lang->product->viewMenu->release = array('link' => "Release|release|browse|productID=%s", 'subModule' => 'release');
$lang->product->viewMenu->roadmap = 'Roadmap|product|roadmap|productID=%s';
$lang->product->viewMenu->project = "Project|product|project|status=all&productID=%s";
$lang->product->viewMenu->track = array('link' => "Track|story|track|productID=%s");
$lang->product->viewMenu->track = array('link' => "Track|product|track|productID=%s");
$lang->product->viewMenu->doc = array('link' => 'Doc|doc|objectLibs|type=product&objectID=%s&from=product', 'subModule' => 'doc');
$lang->product->viewMenu->dynamic = 'Dynamic|product|dynamic|productID=%s';
$lang->product->viewMenu->set = array('link' => 'Setting|product|view|productID=%s', 'subModule' => 'tree,branch', 'alias' => 'edit');
+66 -66
View File
@@ -417,26 +417,27 @@ if($config->systemMode == 'new')
/* Product. */
$lang->resource->product = new stdclass();
$lang->resource->product->index = 'indexAction';
$lang->resource->product->browse = 'browse';
$lang->resource->product->create = 'create';
$lang->resource->product->view = 'view';
$lang->resource->product->edit = 'edit';
$lang->resource->product->batchEdit = 'batchEdit';
$lang->resource->product->delete = 'delete';
$lang->resource->product->roadmap = 'roadmap';
$lang->resource->product->dynamic = 'dynamic';
$lang->resource->product->project = 'project';
$lang->resource->product->dashboard = 'dashboard';
$lang->resource->product->close = 'closeAction';
$lang->resource->product->updateOrder = 'orderAction';
$lang->resource->product->all = 'list';
$lang->resource->product->kanban = 'kanban';
$lang->resource->product->manageLine = 'manageLine';
$lang->resource->product->build = 'build';
$lang->resource->product->export = 'exportAction';
$lang->resource->product->whitelist = 'whitelist';
$lang->resource->product->addWhitelist = 'addWhitelist';
$lang->resource->product->index = 'indexAction';
$lang->resource->product->browse = 'browse';
$lang->resource->product->create = 'create';
$lang->resource->product->view = 'view';
$lang->resource->product->edit = 'edit';
$lang->resource->product->batchEdit = 'batchEdit';
$lang->resource->product->delete = 'delete';
$lang->resource->product->roadmap = 'roadmap';
$lang->resource->product->track = 'track';
$lang->resource->product->dynamic = 'dynamic';
$lang->resource->product->project = 'project';
$lang->resource->product->dashboard = 'dashboard';
$lang->resource->product->close = 'closeAction';
$lang->resource->product->updateOrder = 'orderAction';
$lang->resource->product->all = 'list';
$lang->resource->product->kanban = 'kanban';
$lang->resource->product->manageLine = 'manageLine';
$lang->resource->product->build = 'build';
$lang->resource->product->export = 'exportAction';
$lang->resource->product->whitelist = 'whitelist';
$lang->resource->product->addWhitelist = 'addWhitelist';
$lang->resource->product->unbindWhitelist = 'unbindWhitelist';
$lang->product->methodOrder[0] = 'index';
@@ -447,19 +448,20 @@ $lang->product->methodOrder[20] = 'edit';
$lang->product->methodOrder[25] = 'batchEdit';
$lang->product->methodOrder[35] = 'delete';
$lang->product->methodOrder[40] = 'roadmap';
$lang->product->methodOrder[45] = 'dynamic';
$lang->product->methodOrder[50] = 'project';
$lang->product->methodOrder[55] = 'dashboard';
$lang->product->methodOrder[60] = 'close';
$lang->product->methodOrder[65] = 'updateOrder';
$lang->product->methodOrder[70] = 'all';
$lang->product->methodOrder[75] = 'kanban';
$lang->product->methodOrder[80] = 'manageLine';
$lang->product->methodOrder[85] = 'build';
$lang->product->methodOrder[90] = 'export';
$lang->product->methodOrder[95] = 'whitelist';
$lang->product->methodOrder[100] = 'addWhitelist';
$lang->product->methodOrder[105] = 'unbindWhitelist';
$lang->product->methodOrder[45] = 'track';
$lang->product->methodOrder[50] = 'dynamic';
$lang->product->methodOrder[55] = 'project';
$lang->product->methodOrder[60] = 'dashboard';
$lang->product->methodOrder[65] = 'close';
$lang->product->methodOrder[70] = 'updateOrder';
$lang->product->methodOrder[75] = 'all';
$lang->product->methodOrder[80] = 'kanban';
$lang->product->methodOrder[85] = 'manageLine';
$lang->product->methodOrder[90] = 'build';
$lang->product->methodOrder[95] = 'export';
$lang->product->methodOrder[100] = 'whitelist';
$lang->product->methodOrder[105] = 'addWhitelist';
$lang->product->methodOrder[110] = 'unbindWhitelist';
/* Branch. */
$lang->resource->branch = new stdclass();
@@ -502,7 +504,6 @@ $lang->resource->story->activate = 'activateAction';
$lang->resource->story->tasks = 'tasks';
$lang->resource->story->bugs = 'bugs';
$lang->resource->story->cases = 'cases';
$lang->resource->story->zeroCase = 'zeroCase';
$lang->resource->story->report = 'reportAction';
$lang->resource->story->batchChangePlan = 'batchChangePlan';
$lang->resource->story->batchChangeBranch = 'batchChangeBranch';
@@ -510,7 +511,6 @@ $lang->resource->story->batchChangeStage = 'batchChangeStage';
$lang->resource->story->batchAssignTo = 'batchAssignTo';
$lang->resource->story->batchChangeModule = 'batchChangeModule';
$lang->resource->story->batchToTask = 'batchToTask';
$lang->resource->story->track = 'trackAB';
$lang->resource->story->processStoryChange = 'processStoryChange';
$lang->resource->story->linkStories = 'linkStoriesAB';
@@ -536,15 +536,13 @@ $lang->story->methodOrder[85] = 'activate';
$lang->story->methodOrder[90] = 'tasks';
$lang->story->methodOrder[95] = 'bugs';
$lang->story->methodOrder[100] = 'cases';
$lang->story->methodOrder[105] = 'zeroCase';
$lang->story->methodOrder[110] = 'report';
$lang->story->methodOrder[115] = 'linkStory';
$lang->story->methodOrder[120] = 'batchChangeBranch';
$lang->story->methodOrder[125] = 'batchChangeModule';
$lang->story->methodOrder[130] = 'batchToTask';
$lang->story->methodOrder[135] = 'track';
$lang->story->methodOrder[140] = 'processStoryChange';
$lang->story->methodOrder[145] = 'linkStories';
$lang->story->methodOrder[105] = 'report';
$lang->story->methodOrder[110] = 'linkStory';
$lang->story->methodOrder[115] = 'batchChangeBranch';
$lang->story->methodOrder[120] = 'batchChangeModule';
$lang->story->methodOrder[125] = 'batchToTask';
$lang->story->methodOrder[130] = 'processStoryChange';
$lang->story->methodOrder[135] = 'linkStories';
if($config->URAndSR) $lang->story->methodOrder[150] = 'linkRequirements';
@@ -971,6 +969,7 @@ $lang->bug->methodOrder[110] = 'batchChangeBranch';
$lang->resource->testcase = new stdclass();
$lang->resource->testcase->browse = 'browse';
$lang->resource->testcase->groupCase = 'groupCase';
$lang->resource->testcase->zeroCase = 'zeroCase';
$lang->resource->testcase->create = 'create';
$lang->resource->testcase->batchCreate = 'batchCreate';
$lang->resource->testcase->createBug = 'createBug';
@@ -1002,31 +1001,32 @@ $lang->resource->testcase->importToLib = 'importToLib';
$lang->testcase->methodOrder[0] = 'index';
$lang->testcase->methodOrder[5] = 'browse';
$lang->testcase->methodOrder[10] = 'groupCase';
$lang->testcase->methodOrder[15] = 'create';
$lang->testcase->methodOrder[20] = 'batchCreate';
$lang->testcase->methodOrder[25] = 'createBug';
$lang->testcase->methodOrder[30] = 'view';
$lang->testcase->methodOrder[35] = 'edit';
$lang->testcase->methodOrder[40] = 'delete';
$lang->testcase->methodOrder[45] = 'export';
$lang->testcase->methodOrder[50] = 'confirmChange';
$lang->testcase->methodOrder[55] = 'confirmStoryChange';
$lang->testcase->methodOrder[60] = 'batchEdit';
$lang->testcase->methodOrder[65] = 'batchDelete';
$lang->testcase->methodOrder[70] = 'batchChangeModule';
$lang->testcase->methodOrder[75] = 'batchChangeBranch';
$lang->testcase->methodOrder[80] = 'linkCases';
$lang->testcase->methodOrder[82] = 'linkBugs';
$lang->testcase->methodOrder[15] = 'zeroCase';
$lang->testcase->methodOrder[20] = 'create';
$lang->testcase->methodOrder[25] = 'batchCreate';
$lang->testcase->methodOrder[30] = 'createBug';
$lang->testcase->methodOrder[35] = 'view';
$lang->testcase->methodOrder[40] = 'edit';
$lang->testcase->methodOrder[45] = 'delete';
$lang->testcase->methodOrder[50] = 'export';
$lang->testcase->methodOrder[55] = 'confirmChange';
$lang->testcase->methodOrder[60] = 'confirmStoryChange';
$lang->testcase->methodOrder[65] = 'batchEdit';
$lang->testcase->methodOrder[70] = 'batchDelete';
$lang->testcase->methodOrder[75] = 'batchChangeModule';
$lang->testcase->methodOrder[80] = 'batchChangeBranch';
$lang->testcase->methodOrder[85] = 'linkCases';
$lang->testcase->methodOrder[87] = 'linkBugs';
$lang->testcase->methodOrder[90] = 'bugs';
$lang->testcase->methodOrder[95] = 'review';
$lang->testcase->methodOrder[100] = 'batchReview';
$lang->testcase->methodOrder[105] = 'batchConfirmStoryChange';
$lang->testcase->methodOrder[110] = 'importFromLib';
$lang->testcase->methodOrder[115] = 'batchCaseTypeChange';
$lang->testcase->methodOrder[120] = 'confirmLibcaseChange';
$lang->testcase->methodOrder[125] = 'ignoreLibcaseChange';
$lang->testcase->methodOrder[130] = 'batchConfirmStoryChange';
$lang->testcase->methodOrder[135] = 'importToLib';
$lang->testcase->methodOrder[110] = 'batchConfirmStoryChange';
$lang->testcase->methodOrder[115] = 'importFromLib';
$lang->testcase->methodOrder[120] = 'batchCaseTypeChange';
$lang->testcase->methodOrder[125] = 'confirmLibcaseChange';
$lang->testcase->methodOrder[130] = 'ignoreLibcaseChange';
$lang->testcase->methodOrder[135] = 'batchConfirmStoryChange';
$lang->testcase->methodOrder[140] = 'importToLib';
/* Test task. */
$lang->resource->testtask = new stdclass();
+1 -1
View File
@@ -122,7 +122,7 @@
}
}
if(moduleName === 'story' && vision === 'lite') return 'project'
if(moduleName === 'story' && methodLowerCase === 'zerocase')
if(moduleName === 'testcase' && methodLowerCase === 'zerocase')
{
return link.params.from == 'project' ? 'project' : 'qa';
}
+55
View File
@@ -1554,4 +1554,59 @@ class product extends control
$this->session->set('product', (int)$productID, $this->app->tab);
$this->send(array('result' => 'success', 'productID' => $this->session->product));
}
/**
* Story track.
*
* @param int $productID
* @param int|string $branch
* @param int $projectID
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
public function track($productID, $branch = '', $projectID = 0, $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
$branch = ($this->cookie->preBranch !== '' and $branch === '') ? $this->cookie->preBranch : $branch;
setcookie('preBranch', $branch, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true);
/* Set menu. The projectstory module does not execute. */
if(!$projectID)
{
$products = $this->product->getPairs();
$productID = $this->product->saveState($productID, $products);
$this->product->products = $this->product->saveState($productID, $products);
$this->product->setMenu($productID, $branch);
}
/* Save session. */
$this->session->set('storyList', $this->app->getURI(true), 'product');
$this->session->set('taskList', $this->app->getURI(true), 'execution');
$this->session->set('designList', $this->app->getURI(true), 'project');
$this->session->set('bugList', $this->app->getURI(true), 'qa');
$this->session->set('caseList', $this->app->getURI(true), 'qa');
$this->session->set('revisionList', $this->app->getURI(true), 'repo');
/* Load pager and get tracks. */
$this->app->loadClass('pager', $static = true);
$pager = new pager($recTotal, $recPerPage, $pageID);
$tracks = $this->story->getTracks($productID, $branch, $projectID, $pager);
if($projectID)
{
$this->loadModel('project')->setMenu($projectID);
$projectProducts = $this->product->getProducts($projectID);
}
$this->view->title = $this->lang->story->track;
$this->view->position[] = $this->lang->story->track;
$this->view->tracks = $tracks;
$this->view->pager = $pager;
$this->view->productID = $productID;
$this->view->projectProducts = isset($projectProducts) ? $projectProducts : array();
$this->display();
}
}
+2
View File
@@ -11,6 +11,7 @@
*/
$lang->product->index = $lang->productCommon . 'Home';
$lang->product->browse = 'Story Liste';
$lang->product->requirement = 'Requirement Liste';
$lang->product->dynamic = 'Verlauf';
$lang->product->view = 'Übersicht';
$lang->product->edit = "{$lang->productCommon} bearbeiten";
@@ -34,6 +35,7 @@ $lang->product->changeProgram = "{$lang->productCommon} confirmation of the s
$lang->product->changeProgramTip = "%s > Change Program";
$lang->product->addWhitelist = 'Add Whitelist';
$lang->product->unbindWhitelist = 'Remove Whitelist';
$lang->product->track = 'View Stories Matrix';
$lang->product->checkedProducts = '%s products selected';
$lang->product->indexAction = "All {$lang->productCommon}";
+2
View File
@@ -11,6 +11,7 @@
*/
$lang->product->index = $lang->productCommon . ' Home';
$lang->product->browse = 'Story List';
$lang->product->requirement = 'Requirement List';
$lang->product->dynamic = 'Dynamics';
$lang->product->view = "{$lang->productCommon} Detail";
$lang->product->edit = "Edit {$lang->productCommon}";
@@ -34,6 +35,7 @@ $lang->product->changeProgram = "{$lang->productCommon} confirmation of the s
$lang->product->changeProgramTip = "%s > Change Program";
$lang->product->addWhitelist = 'Add Whitelist';
$lang->product->unbindWhitelist = 'Unbind Whitelist';
$lang->product->track = 'View Stories Matrix';
$lang->product->checkedProducts = '%s products selected';
$lang->product->indexAction = "All {$lang->productCommon}";
+2
View File
@@ -11,6 +11,7 @@
*/
$lang->product->index = 'Accueil ' . $lang->productCommon;
$lang->product->browse = 'Liste Stories';
$lang->product->requirement = 'Liste Requirements';
$lang->product->dynamic = 'Historique';
$lang->product->view = "{$lang->productCommon} Détail";
$lang->product->edit = "Editer {$lang->productCommon}";
@@ -34,6 +35,7 @@ $lang->product->changeProgram = "{$lang->productCommon} confirmation of the s
$lang->product->changeProgramTip = "%s > Change Program";
$lang->product->addWhitelist = 'Add Whitelist';
$lang->product->unbindWhitelist = 'Remove Whitelist';
$lang->product->track = 'Consulter Stories Matrice';
$lang->product->checkedProducts = '%s produits s électionnés';
$lang->product->indexAction = "All {$lang->productCommon}";
+1
View File
@@ -34,6 +34,7 @@ $lang->product->changeProgram = "{$lang->productCommon}调整所属项目集
$lang->product->changeProgramTip = "%s > 修改项目集";
$lang->product->addWhitelist = '添加白名单';
$lang->product->unbindWhitelist = '移除白名单';
$lang->product->track = "查看需求矩阵";
$lang->product->checkedProducts = '已选择%s项产品';
$lang->product->indexAction = "所有{$lang->productCommon}仪表盘";
+3 -3
View File
@@ -601,7 +601,7 @@ class productModel extends model
/* Init currentModule and currentMethod for report and story. */
if($currentModule == 'story')
{
$storyMethods = ",track,create,batchcreate,batchclose,zerocase,";
$storyMethods = ",create,batchcreate,batchclose,";
if(strpos($storyMethods, "," . $currentMethod . ",") === false) $currentModule = 'product';
if($currentMethod == 'view' or $currentMethod == 'change' or $currentMethod == 'review') $currentMethod = 'browse';
}
@@ -630,7 +630,7 @@ class productModel extends model
if($notNormalProduct)
{
$isShowBranch = false;
if($currentModule == 'story' and $currentMethod == 'track') $isShowBranch = true;
if($currentModule == 'product' and $currentMethod == 'track') $isShowBranch = true;
if($currentModule == 'tree' and $currentMethod == 'browse') $isShowBranch = true;
if($currentModule == 'product' and strpos($this->config->product->showBranchMethod, $currentMethod) !== false) $isShowBranch = true;
if($this->app->tab == 'qa' and strpos(',testsuite,testreport,testtask,', ",$currentModule,") === false) $isShowBranch = true;
@@ -2229,7 +2229,7 @@ class productModel extends model
{
$link = helper::createLink('testsuite', 'browse', "productID=%s");
}
elseif(($module == 'testcase' and $method == 'groupCase') or ($module == 'story' and $method == 'zeroCase') and $this->app->tab == 'project')
elseif($module == 'testcase' and in_array($method, array('groupCase', 'zeroCase')) and $this->app->tab == 'project')
{
parse_str($extra, $output);
$projectID = isset($output['projectID']) ? $output['projectID'] : 0;
+1 -1
View File
@@ -57,7 +57,7 @@ class projectStory extends control
$products = $this->loadModel('product')->getProductPairsByProject($projectID);
if(empty($productID)) $productID = key($products);
echo $this->fetch('story', 'track', "productID=$productID&branch=$branch&projectID=$projectID&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
echo $this->fetch('product', 'track', "productID=$productID&branch=$branch&projectID=$projectID&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
}
/**
-109
View File
@@ -1988,61 +1988,6 @@ class story extends control
echo js::locate($this->session->storyList, 'parent');
}
/**
* Story track.
*
* @param int $productID
* @param int|string $branch
* @param int $projectID
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
public function track($productID, $branch = '', $projectID = 0, $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
$branch = ($this->cookie->preBranch !== '' and $branch === '') ? $this->cookie->preBranch : $branch;
setcookie('preBranch', $branch, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true);
/* Set menu. The projectstory module does not execute. */
if(!$projectID)
{
$products = $this->product->getPairs();
$productID = $this->product->saveState($productID, $products);
$this->product->products = $this->product->saveState($productID, $products);
$this->product->setMenu($productID, $branch);
}
/* Save session. */
$this->session->set('storyList', $this->app->getURI(true), 'product');
$this->session->set('taskList', $this->app->getURI(true), 'execution');
$this->session->set('designList', $this->app->getURI(true), 'project');
$this->session->set('bugList', $this->app->getURI(true), 'qa');
$this->session->set('caseList', $this->app->getURI(true), 'qa');
$this->session->set('revisionList', $this->app->getURI(true), 'repo');
/* Load pager and get tracks. */
$this->app->loadClass('pager', $static = true);
$pager = new pager($recTotal, $recPerPage, $pageID);
$tracks = $this->story->getTracks($productID, $branch, $projectID, $pager);
if($projectID)
{
$this->loadModel('project')->setMenu($projectID);
$projectProducts = $this->product->getProducts($projectID);
}
$this->view->title = $this->lang->story->track;
$this->view->position[] = $this->lang->story->track;
$this->view->tracks = $tracks;
$this->view->pager = $pager;
$this->view->productID = $productID;
$this->view->projectProducts = isset($projectProducts) ? $projectProducts : array();
$this->display();
}
/**
* Tasks of a story.
*
@@ -2093,60 +2038,6 @@ class story extends control
$this->display();
}
/**
* Show zero case story.
*
* @param int $productID
* @param int $branchID
* @param string $orderBy
* @access public
* @return void
*/
public function zeroCase($productID = 0, $branchID = 0, $orderBy = 'id_desc', $projectID = 0)
{
$orderBy = empty($orderBy) ? 'id_desc' : $orderBy;
$this->session->set('storyList', $this->app->getURI(true) . '#app=' . $this->app->tab, 'product');
$this->session->set('caseList', $this->app->getURI(true), $this->app->tab);
$this->loadModel('testcase');
if($this->app->tab == 'project')
{
$this->loadModel('project')->setMenu($this->session->project);
$this->app->rawModule = 'qa';
$this->lang->project->menu->qa['subMenu']->testcase['subModule'] = 'story';
$products = $this->product->getProducts($this->session->project, 'all', '', false);
$productID = $this->product->saveState($productID, $products);
$this->lang->modulePageNav = $this->product->select($products, $productID, 'story', 'zeroCase', "projectID=$projectID", $branchID);
}
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. */
$sort = common::appendOrder($orderBy);
$this->view->title = $this->lang->story->zeroCase;
$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, $branchID, $sort);
$this->view->users = $this->user->getPairs('noletter');
$this->view->projectID = $projectID;
$this->view->productID = $productID;
$this->view->branchID = $branchID;
$this->view->orderBy = $orderBy;
$this->view->suiteList = $this->loadModel('testsuite')->getSuites($productID);
$this->view->browseType = '';
$this->view->product = $this->product->getByID($productID);
$this->display();
}
/**
* If type is linkStories, link related stories else link child stories.
*
+66
View File
@@ -295,6 +295,72 @@ class testcase extends control
$this->display();
}
/**
* Show zero case story.
*
* @param int $productID
* @param int $branchID
* @param string $orderBy
* @param int $projectID
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
public function zeroCase($productID = 0, $branchID = 0, $orderBy = 'id_desc', $projectID = 0, $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
$orderBy = empty($orderBy) ? 'id_desc' : $orderBy;
$this->session->set('storyList', $this->app->getURI(true) . '#app=' . $this->app->tab, 'product');
$this->session->set('caseList', $this->app->getURI(true), $this->app->tab);
$this->loadModel('story');
if($this->app->tab == 'project')
{
$this->loadModel('project')->setMenu($this->session->project);
$this->app->rawModule = 'qa';
$this->lang->project->menu->qa['subMenu']->testcase['subModule'] = 'story';
$products = $this->product->getProducts($this->session->project, 'all', '', false);
$productID = $this->product->saveState($productID, $products);
$this->lang->modulePageNav = $this->product->select($products, $productID, 'testcase', 'zeroCase', "projectID=$projectID", $branchID);
}
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. */
$sort = common::appendOrder($orderBy);
$stories = $this->story->getZeroCase($productID, $branchID, $sort);
/* Pager. */
$this->app->loadClass('pager', $static = true);
$recTotal = count($stories);
$pager = new pager($recTotal, $recPerPage, $pageID);
$stories = array_chunk($stories, $pager->recPerPage);
$this->view->title = $this->lang->story->zeroCase;
$this->view->position[] = html::a($this->createLink('testcase', 'browse', "productID=$productID"), $products[$productID]);
$this->view->position[] = $this->lang->story->zeroCase;
$this->view->stories = empty($stories) ? $stories : $stories[$pageID - 1];
$this->view->users = $this->user->getPairs('noletter');
$this->view->projectID = $projectID;
$this->view->productID = $productID;
$this->view->branchID = $branchID;
$this->view->orderBy = $orderBy;
$this->view->suiteList = $this->loadModel('testsuite')->getSuites($productID);
$this->view->browseType = '';
$this->view->product = $this->product->getByID($productID);
$this->view->pager = $pager;
$this->display();
}
/**
* Create a test case.
* @param $productID
+1
View File
@@ -125,6 +125,7 @@ $lang->testcase->batchConfirmStoryChange = "Mehrere bestätigen";
$lang->testcase->batchCaseTypeChange = "Mehrere Typen änderen";
$lang->testcase->browse = "Fälle";
$lang->testcase->groupCase = "Nach Gruppe";
$lang->testcase->zeroCase = "Storys ohne Fälle";
$lang->testcase->import = "Importieren";
$lang->testcase->importAction = "Import Case";
$lang->testcase->fileImport = "Importiere CSV";
+1
View File
@@ -125,6 +125,7 @@ $lang->testcase->batchConfirmStoryChange = "Batch Confirm";
$lang->testcase->batchCaseTypeChange = "Batch Change Types";
$lang->testcase->browse = "Case List";
$lang->testcase->groupCase = "View By Group";
$lang->testcase->zeroCase = "Stories without cases";
$lang->testcase->import = "Import";
$lang->testcase->importAction = "Import Case";
$lang->testcase->fileImport = "Import CSV";
+1
View File
@@ -125,6 +125,7 @@ $lang->testcase->batchConfirmStoryChange = "Confirmer par Lot";
$lang->testcase->batchCaseTypeChange = "Changer Types par Lot";
$lang->testcase->browse = "Liste CasTests";
$lang->testcase->groupCase = "Vue par Groupe";
$lang->testcase->zeroCase = "Stories sans CasTests";
$lang->testcase->import = "Importer";
$lang->testcase->importAction = "Importer CasTest";
$lang->testcase->fileImport = "Importer CSV";
+1
View File
@@ -125,6 +125,7 @@ $lang->testcase->batchConfirmStoryChange = "批量确认变更";
$lang->testcase->batchCaseTypeChange = "批量修改类型";
$lang->testcase->browse = "用例列表";
$lang->testcase->groupCase = "分组浏览用例";
$lang->testcase->zeroCase = "零用例{$lang->SRCommon}";
$lang->testcase->import = "导入";
$lang->testcase->importAction = "导入用例";
$lang->testcase->fileImport = "导入CSV";
+2 -2
View File
@@ -40,7 +40,7 @@
<?php
$hasBrowsePriv = $isProjectApp ? common::hasPriv('project', 'testcase') : common::hasPriv('testcase', 'browse');
$hasGroupPriv = common::hasPriv('testcase', 'groupcase');
$hasZeroPriv = common::hasPriv('story', 'zerocase');
$hasZeroPriv = common::hasPriv('testcase', 'zerocase');
$hasUnitPriv = common::hasPriv('testtask', 'browseunits');
?>
<?php foreach(customModel::getFeatureMenu('testcase', 'browse') as $menuItem):?>
@@ -100,7 +100,7 @@
elseif($hasZeroPriv and $menuType == 'zerocase')
{
$projectID = $isProjectApp ? $this->session->project : 0;
echo html::a($this->createLink('story', 'zeroCase', "productID=$productID&branch=$branch&orderBy=id_desc&projectID=$projectID"), "<span class='text'>{$lang->story->zeroCase}</span>", '', "class='btn btn-link' id='zerocaseTab' data-app='{$this->app->tab}'");
echo html::a($this->createLink('testcase', 'zeroCase', "productID=$productID&branch=$branch&orderBy=id_desc&projectID=$projectID"), "<span class='text'>{$lang->testcase->zeroCase}</span>", '', "class='btn btn-link' id='zerocaseTab' data-app='{$this->app->tab}'");
}
elseif($hasUnitPriv and $menuType == 'browseunits')
{
@@ -24,8 +24,8 @@
<thead>
<tr>
<?php
$this->app->rawModule = 'story';
$vars = "productID=$productID&branchID=$branchID&orderBy=%s";
$this->app->rawModule = 'testcase';
$vars = "productID=$productID&branchID=$branchID&orderBy=%s&project=$projectID&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}&pageID={$pager->pageID}";
?>
<th class='c-id'>
<div class="checkbox-primary check-all" title="<?php echo $lang->selectAll?>">
@@ -63,7 +63,11 @@
<?php printf('%03d', $story->id);?>
</td>
<td><span class='label-pri <?php echo 'label-pri-' . $story->pri;?>' title='<?php echo zget($lang->story->priList, $story->pri);?>'><?php echo zget($lang->story->priList, $story->pri)?></span></td>
<td class='text-left' title="<?php echo $story->title?>"><nobr><?php echo html::a($viewLink, $story->title, '', "data-app='product'");?></nobr></td>
<td class='text-left' title="<?php echo $story->title?>">
<nobr>
<?php echo $canView ? html::a($viewLink, $story->title, '', "data-app='product'") : $story->title;?>
</nobr>
</td>
<td title="<?php echo $story->planTitle?>"><?php echo $story->planTitle;?></td>
<td><?php echo $lang->story->sourceList[$story->source];?></td>
<td><?php echo zget($users, $story->openedBy);?></td>
@@ -148,6 +152,7 @@
}
?>
</div>
<?php $pager->show('right', 'pagerjs');?>
</div>
</form>
<?php endif;?>