Merge branch 'sprint/228_tianshujie_64976' into 'master'
Sprint/228 tianshujie 64976 See merge request easycorp/zentaopms!5017
This commit is contained in:
@@ -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
@@ -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'),
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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';
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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}";
|
||||
|
||||
@@ -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}";
|
||||
|
||||
@@ -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}";
|
||||
|
||||
@@ -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}仪表盘";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;?>
|
||||
Reference in New Issue
Block a user