* Finish task#8956.

This commit is contained in:
hufangzhou
2021-01-15 16:41:41 +08:00
parent fe95537914
commit 2d14f0aec4
25 changed files with 326 additions and 91 deletions
+4 -5
View File
@@ -899,7 +899,7 @@ $lang->menu = new stdclass();
$lang->menu->scrum = new stdclass();
$lang->menu->scrum->programindex = 'Index|program|index|project={PROJECT}';
$lang->menu->scrum->project = "$lang->executionCommon|project|index|locate=no";
$lang->menu->scrum->projectstory = array('link' => 'Story|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->scrum->projectstory = array('link' => 'Story|projectstory|story', 'subModule' => 'story', 'alias' => 'story,track');
$lang->menu->scrum->doc = 'Doc|doc|index|';
$lang->menu->scrum->qa = 'QA|qa|index';
$lang->menu->scrum->ci = 'Code|repo|browse';
@@ -925,7 +925,7 @@ $lang->menu->waterfall->programplan = array('link' => 'Plan|programplan|brows
$lang->menu->waterfall->project = array('link' => $lang->executionCommon . '|project|task|projectID={PROJECT}', 'subModule' => ',project,task,');
$lang->menu->waterfall->doc = array('link' => 'Doc|doc|index|program={PROJECT}');
$lang->menu->waterfall->weekly = array('link' => 'Weekly|weekly|index|program={PROJECT}', 'subModule' => ',milestone,');
$lang->menu->waterfall->projectstory = array('link' => 'Story|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->waterfall->projectstory = array('link' => 'Story|projectstory|story', 'alias' => 'story,track');
$lang->menu->waterfall->design = 'Design|design|browse|product={PRODUCT}';
$lang->menu->waterfall->ci = 'Code|repo|browse|';
$lang->menu->waterfall->qa = 'Index|qa|index';
@@ -993,9 +993,8 @@ $lang->budget->menu = $lang->workestimation->menu;
$lang->programplan->menu->gantt = array('link' => 'Gantt|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=gantt');
$lang->programplan->menu->lists = array('link' => 'Stage|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=lists', 'alias' => 'create');
$lang->projectstory->menu->requirement = array('link' => "{$lang->URCommon}|projectstory|requirement", 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => '');
$lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => 'story,project', 'alias' => 'linkstory');
$lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => '');
$lang->nc->menu = $lang->auditplan->menu;
$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'projectrelease', 'story', 'job', 'jenkins', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search', 'stage');
+4 -5
View File
@@ -899,7 +899,7 @@ $lang->menu = new stdclass();
$lang->menu->scrum = new stdclass();
$lang->menu->scrum->programindex = 'Index|program|index|project={PROJECT}';
$lang->menu->scrum->project = "$lang->executionCommon|project|index|locate=no";
$lang->menu->scrum->projectstory = array('link' => 'Story|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->scrum->projectstory = array('link' => 'Story|projectstory|story', 'subModule' => 'story', 'alias' => 'story,track');
$lang->menu->scrum->doc = 'Doc|doc|index|';
$lang->menu->scrum->qa = 'QA|qa|index';
$lang->menu->scrum->ci = 'Code|repo|browse';
@@ -925,7 +925,7 @@ $lang->menu->waterfall->programplan = array('link' => 'Plan|programplan|brows
$lang->menu->waterfall->project = array('link' => $lang->executionCommon . '|project|task|projectID={PROJECT}', 'subModule' => ',project,task,');
$lang->menu->waterfall->doc = array('link' => 'Doc|doc|index|program={PROJECT}');
$lang->menu->waterfall->weekly = array('link' => 'Weekly|weekly|index|program={PROJECT}', 'subModule' => ',milestone,');
$lang->menu->waterfall->projectstory = array('link' => 'Story|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->waterfall->projectstory = array('link' => 'Story|projectstory|story', 'alias' => 'story,track');
$lang->menu->waterfall->design = 'Design|design|browse|product={PRODUCT}';
$lang->menu->waterfall->ci = 'Code|repo|browse|';
$lang->menu->waterfall->qa = 'Index|qa|index';
@@ -993,9 +993,8 @@ $lang->budget->menu = $lang->workestimation->menu;
$lang->programplan->menu->gantt = array('link' => 'Gantt|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=gantt');
$lang->programplan->menu->lists = array('link' => 'Stage|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=lists', 'alias' => 'create');
$lang->projectstory->menu->requirement = array('link' => "{$lang->URCommon}|projectstory|requirement", 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => '');
$lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => 'story,project', 'alias' => 'linkstory');
$lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => '');
$lang->nc->menu = $lang->auditplan->menu;
$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'projectrelease', 'story', 'job', 'jenkins', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search', 'stage');
+4 -5
View File
@@ -902,7 +902,7 @@ $lang->menu = new stdclass();
$lang->menu->scrum = new stdclass();
$lang->menu->scrum->programindex = 'Index|program|index|project={PROJECT}';
$lang->menu->scrum->project = "$lang->executionCommon|project|index|locate=no";
$lang->menu->scrum->projectstory = array('link' => 'Story|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->scrum->projectstory = array('link' => 'Story|projectstory|story', 'subModule' => 'story', 'alias' => 'story,track');
$lang->menu->scrum->doc = 'Doc|doc|index|';
$lang->menu->scrum->qa = 'QA|qa|index';
$lang->menu->scrum->ci = 'Code|repo|browse';
@@ -928,7 +928,7 @@ $lang->menu->waterfall->programplan = array('link' => 'Plan|programplan|brows
$lang->menu->waterfall->project = array('link' => $lang->executionCommon . '|project|task|projectID={PROJECT}', 'subModule' => ',project,task,');
$lang->menu->waterfall->doc = array('link' => 'Doc|doc|index|program={PROJECT}');
$lang->menu->waterfall->weekly = array('link' => 'Weekly|weekly|index|program={PROJECT}', 'subModule' => ',milestone,');
$lang->menu->waterfall->projectstory = array('link' => 'Story|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->waterfall->projectstory = array('link' => 'Story|projectstory|story', 'alias' => 'story,track');
$lang->menu->waterfall->design = 'Design|design|browse|product={PRODUCT}';
$lang->menu->waterfall->ci = 'Code|repo|browse|';
$lang->menu->waterfall->qa = 'Index|qa|index';
@@ -996,9 +996,8 @@ $lang->budget->menu = $lang->workestimation->menu;
$lang->programplan->menu->gantt = array('link' => 'Gantt|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=gantt');
$lang->programplan->menu->lists = array('link' => 'Stage|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=lists', 'alias' => 'create');
$lang->projectstory->menu->requirement = array('link' => "{$lang->URCommon}|projectstory|requirement", 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => '');
$lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => 'story,project', 'alias' => 'linkstory');
$lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => '');
$lang->nc->menu = $lang->auditplan->menu;
$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'projectrelease', 'story', 'job', 'jenkins', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search', 'stage');
+4 -5
View File
@@ -902,7 +902,7 @@ $lang->menu = new stdclass();
$lang->menu->scrum = new stdclass();
$lang->menu->scrum->programindex = 'Index|program|index|project={PROJECT}';
$lang->menu->scrum->project = "$lang->executionCommon|project|index|locate=no";
$lang->menu->scrum->projectstory = array('link' => 'Story|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->scrum->projectstory = array('link' => 'Story|projectstory|story', 'subModule' => 'story', 'alias' => 'story,track');
$lang->menu->scrum->doc = 'Doc|doc|index|';
$lang->menu->scrum->qa = 'QA|qa|index';
$lang->menu->scrum->ci = 'Code|repo|browse';
@@ -928,7 +928,7 @@ $lang->menu->waterfall->programplan = array('link' => 'Plan|programplan|brows
$lang->menu->waterfall->project = array('link' => $lang->executionCommon . '|project|task|projectID={PROJECT}', 'subModule' => ',project,task,');
$lang->menu->waterfall->doc = array('link' => 'Doc|doc|index|program={PROJECT}');
$lang->menu->waterfall->weekly = array('link' => 'Weekly|weekly|index|program={PROJECT}', 'subModule' => ',milestone,');
$lang->menu->waterfall->projectstory = array('link' => 'Story|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->waterfall->projectstory = array('link' => 'Story|projectstory|story', 'alias' => 'story,track');
$lang->menu->waterfall->design = 'Design|design|browse|product={PRODUCT}';
$lang->menu->waterfall->ci = 'Code|repo|browse|';
$lang->menu->waterfall->qa = 'Index|qa|index';
@@ -996,9 +996,8 @@ $lang->budget->menu = $lang->workestimation->menu;
$lang->programplan->menu->gantt = array('link' => 'Gantt|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=gantt');
$lang->programplan->menu->lists = array('link' => 'Stage|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=lists', 'alias' => 'create');
$lang->projectstory->menu->requirement = array('link' => "{$lang->URCommon}|projectstory|requirement", 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => '');
$lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => 'story,project', 'alias' => 'linkstory');
$lang->projectstory->menu->track = array('link' => 'Track|projectstory|track', 'subModule' => '');
$lang->nc->menu = $lang->auditplan->menu;
$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'projectrelease', 'story', 'job', 'jenkins', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search', 'stage');
+4 -5
View File
@@ -905,7 +905,7 @@ $lang->menu = new stdclass();
$lang->menu->scrum = new stdclass();
$lang->menu->scrum->programindex = '仪表盘|program|index|project={PROJECT}';
$lang->menu->scrum->project = "$lang->executionCommon|project|index|locate=no";
$lang->menu->scrum->projectstory = array('link' => '需求|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->scrum->projectstory = array('link' => '需求|projectstory|story', 'subModule' => 'story', 'alias' => 'story,track');
$lang->menu->scrum->doc = '文档|doc|index|';
$lang->menu->scrum->qa = '测试|qa|index';
$lang->menu->scrum->ci = '代码|repo|browse';
@@ -931,7 +931,7 @@ $lang->menu->waterfall->programplan = array('link' => '计划|programplan|bro
$lang->menu->waterfall->project = array('link' => $lang->executionCommon . '|project|task|executionID={EXECUTION}', 'subModule' => ',project,task,');
$lang->menu->waterfall->doc = array('link' => '文档|doc|index|project={PROJECT}');
$lang->menu->waterfall->weekly = array('link' => '报告|weekly|index|project={PROJECT}', 'subModule' => ',milestone,');
$lang->menu->waterfall->projectstory = array('link' => '需求|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->waterfall->projectstory = array('link' => '需求|projectstory|story', 'alias' => 'story,track');
$lang->menu->waterfall->design = '设计|design|browse|product={PRODUCT}';
$lang->menu->waterfall->ci = '代码|repo|browse|';
$lang->menu->waterfall->qa = '测试|qa|index';
@@ -999,9 +999,8 @@ $lang->budget->menu = $lang->workestimation->menu;
$lang->programplan->menu->gantt = array('link' => '甘特图|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=gantt');
$lang->programplan->menu->lists = array('link' => '阶段列表|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=lists', 'alias' => 'create');
$lang->projectstory->menu->requirement = array('link' => "{$lang->URCommon}|projectstory|requirement", 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => '');
$lang->projectstory->menu->track = array('link' => '跟踪矩阵|projectstory|track', 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => 'story,project', 'alias' => 'linkstory');
$lang->projectstory->menu->track = array('link' => '跟踪矩阵|projectstory|track', 'subModule' => '');
$lang->nc->menu = $lang->auditplan->menu;
$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'projectrelease', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search', 'score', 'stage');
+4 -5
View File
@@ -892,7 +892,7 @@ $lang->menu = new stdclass();
$lang->menu->scrum = new stdclass();
$lang->menu->scrum->programindex = '儀表盤|program|index|project={PROJECT}';
$lang->menu->scrum->project = "$lang->executionCommon|project|index|locate=no";
$lang->menu->scrum->projectstory = array('link' => '需求|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->scrum->projectstory = array('link' => '需求|projectstory|story', 'subModule' => 'story', 'alias' => 'story,track');
$lang->menu->scrum->doc = '文檔|doc|index|';
$lang->menu->scrum->qa = '測試|qa|index';
$lang->menu->scrum->ci = '代碼|repo|browse';
@@ -918,7 +918,7 @@ $lang->menu->waterfall->programplan = array('link' => '計劃|programplan|bro
$lang->menu->waterfall->project = array('link' => $lang->executionCommon . '|project|task|executionID={EXECUTION}', 'subModule' => ',project,task,');
$lang->menu->waterfall->doc = array('link' => '文檔|doc|index|project={PROJECT}');
$lang->menu->waterfall->weekly = array('link' => '報告|weekly|index|project={PROJECT}', 'subModule' => ',milestone,');
$lang->menu->waterfall->projectstory = array('link' => '需求|projectstory|requirement', 'alias' => 'requirement,story,track');
$lang->menu->waterfall->projectstory = array('link' => '需求|projectstory|story', 'alias' => 'story,track');
$lang->menu->waterfall->design = '設計|design|browse|product={PRODUCT}';
$lang->menu->waterfall->ci = '代碼|repo|browse|';
$lang->menu->waterfall->qa = '測試|qa|index';
@@ -986,9 +986,8 @@ $lang->budget->menu = $lang->workestimation->menu;
$lang->programplan->menu->gantt = array('link' => '甘特圖|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=gantt');
$lang->programplan->menu->lists = array('link' => '階段列表|programplan|browse|programID={PROJECT}&productID={PRODUCT}&type=lists', 'alias' => 'create');
$lang->projectstory->menu->requirement = array('link' => "{$lang->URCommon}|projectstory|requirement", 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => '');
$lang->projectstory->menu->track = array('link' => '跟蹤矩陣|projectstory|track', 'subModule' => '');
$lang->projectstory->menu->story = array('link' => "{$lang->SRCommon}|projectstory|story", 'subModule' => 'story,project', 'alias' => 'linkstory');
$lang->projectstory->menu->track = array('link' => '跟蹤矩陣|projectstory|track', 'subModule' => '');
$lang->nc->menu = $lang->auditplan->menu;
$lang->noMenuModule = array('my', 'todo', 'effort', 'program', 'product', 'productplan', 'projectbuild', 'projectrelease', 'story', 'branch', 'release', 'attend', 'leave', 'makeup', 'overtime', 'lieu', 'custom', 'admin', 'mail', 'extension', 'dev', 'backup', 'action', 'cron', 'issue', 'risk', 'pssp', 'sms', 'message', 'webhook', 'search', 'stage');
+4 -3
View File
@@ -1,4 +1,5 @@
<?php
$config->datatable->moduleAlias['product-browse'] = 'story';
$config->datatable->moduleAlias['project-task'] = 'task';
$config->datatable->moduleAlias['testtask-cases'] = 'testcase';
$config->datatable->moduleAlias['product-browse'] = 'story';
$config->datatable->moduleAlias['projectstory-story'] = 'story';
$config->datatable->moduleAlias['project-task'] = 'task';
$config->datatable->moduleAlias['testtask-cases'] = 'testcase';
+27 -1
View File
@@ -111,7 +111,8 @@ class product extends control
public function browse($productID = 0, $branch = '', $browseType = '', $param = 0, $storyType = 'story', $orderBy = '', $recTotal = 0, $recPerPage = 20, $pageID = 1)
{
/* Lower browse type. */
$browseType = strtolower($browseType);
$browseType = strtolower($browseType);
$projectStoryBrowseType = $browseType;
/* Load datatable. */
$this->loadModel('datatable');
@@ -182,6 +183,30 @@ class product extends control
/* Get stories. */
$stories = $this->product->getStories($productID, $branch, $browseType, $queryID, $moduleID, $storyType, $sort, $pager);
if($this->app->rawModule == 'projectstory')
{
$products = $this->product->getProductsByProject($this->session->PRJ);
$productPlans = $this->loadModel('project')->getPlans($products);
$projectPlanList = $this->dao->select('product,plan')->from(TABLE_PROJECTPRODUCT)->where('project')->eq($this->session->PRJ)->fetchPairs('product', 'plan');
$notLinkPlans = array();
foreach($projectPlanList as $productID => $planID)
{
if(isset($productPlans[$productID][$planID])) unset($productPlans[$productID][$planID]);
}
foreach($productPlans as $productPlans)
{
foreach($productPlans as $id => $plan) $notLinkPlans[$id] = $plan;
}
if(!empty($plans))
{
foreach($plans as $productID => $plan) $allPlans += $plan;
}
if($projectStoryBrowseType == 'bybranch') $param = $branch;
$stories = $this->story->getProjectStories($this->session->PRJ, $sort, $projectStoryBrowseType, $param, 'story', '', $pager, $productID);
}
/* Process the sql, get the conditon partion, save it to session. */
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'story', $browseType != 'bysearch');
@@ -227,6 +252,7 @@ class product extends control
$this->view->moduleID = $moduleID;
$this->view->stories = $stories;
$this->view->plans = $this->loadModel('productplan')->getPairs($productID, $branch, '', true);
$this->view->notLinkPlans = isset($notLinkPlans) ? $notLinkPlans : array();
$this->view->summary = $this->product->summary($stories, $storyType);
$this->view->moduleTree = $moduleTree;
$this->view->parentModules = $this->tree->getParents($moduleID);
+9
View File
@@ -22,6 +22,15 @@ $(function()
$td.find('a').eq(0).css('max-width', $td.width() - labelWidth - 60);
});
$('#toTaskButton').on('click', function()
{
var planID = $('#plan').val();
if(planID)
{
parent.location.href = createLink('project', 'importPlanStories', 'projectID=' + projectID + '&planID=' + planID);
}
})
$(document).on('click', '.story-toggle', function(e)
{
var $toggle = $(this);
+68 -41
View File
@@ -14,6 +14,7 @@
<?php include '../../common/view/datatable.fix.html.php';?>
<?php js::set('browseType', $browseType);?>
<?php js::set('productID', $productID);?>
<?php js::set('projectID', $this->session->PRJ);?>
<?php js::set('branch', $branch);?>
<?php js::set('rawModule', $this->app->rawModule);?>
<?php
@@ -23,7 +24,7 @@ js::set('unfoldStories', $unfoldStories);
js::set('unfoldAll', $lang->project->treeLevel['all']);
js::set('foldAll', $lang->project->treeLevel['root']);
js::set('storyType', $storyType);
$lang->story->create = $storyType == 'story' ? $lang->story->createStory : $lang->story->createRequirement;
$lang->story->createCommon = $storyType == 'story' ? $lang->story->createStory : $lang->story->createRequirement;
?>
<div id="mainMenu" class="clearfix">
<div id="sidebarHeader">
@@ -95,54 +96,64 @@ $lang->story->create = $storyType == 'story' ? $lang->story->createStory : $lang
?>
</ul>
</div>
<?php $isProjectStroy = $this->app->rawModule == 'projectstory';?>
<?php if(common::canModify('product', $product)):?>
<?php if(!common::checkNotCN()):?>
<?php if(common::hasPriv('story', 'batchCreate')) echo html::a($this->createLink('story', 'batchCreate', "productID=$productID&branch=$branch&moduleID=$moduleID&storyID=0&project=0&plan=0&type=$storyType"), "<i class='icon icon-plus'></i> {$lang->story->batchCreate}", '', "class='btn btn btn-secondary'");?>
<?php
if(commonModel::isTutorialMode())
{
$wizardParams = helper::safe64Encode("productID=$productID&branch=$branch&moduleID=$moduleID");
$link = $this->createLink('tutorial', 'wizard', "module=story&method=create&params=$wizardParams");
echo html::a($link, "<i class='icon icon-plus'></i> {$lang->story->create}", '', "class='btn btn-primary create-story-btn'");
}
else
{
$link = $this->createLink('story', 'create', "productID=$productID&branch=$branch&moduleID=$moduleID&storyID=0&projectID=0&bugID=0&planID=0&todoID=0&extra=&type=$storyType");
if(common::hasPriv('story', 'create')) echo html::a($link, "<i class='icon icon-plus'></i> {$lang->story->create}", '', "class='btn btn-primary'");
}
?>
<?php else:?>
<div class='btn-group dropdown-hover'>
<?php
if(commonModel::isTutorialMode())
{
$wizardParams = helper::safe64Encode("productID=$productID&branch=$branch&moduleID=$moduleID");
$link = $this->createLink('tutorial', 'wizard', "module=story&method=create&params=$wizardParams");
echo html::a($link, "<i class='icon icon-plus'></i> {$lang->story->create} </span><span class='caret'>", '', "class='btn btn-primary create-story-btn'");
}
else
{
$link = $this->createLink('story', 'create', "product=$productID&branch=$branch&moduleID=$moduleID&storyID=0&projectID=0&bugID=0&planID=0&todoID=0&extra=&type=$storyType");
$disabled = '';
if(!common::hasPriv('story', 'create'))
{
$link = '###';
$disabled = 'disabled';
}
echo html::a($link, "<i class='icon icon-plus'></i> {$lang->story->create} </span><span class='caret'>", '', "class='btn btn-primary $disabled'");
}
?>
<?php echo html::a('javascript:;', "<i class='icon icon-plus'></i> {$lang->story->create} </span><span class='caret'>", '', "class='btn btn-secondary'");?>
<ul class='dropdown-menu'>
<?php $disabled = common::hasPriv('story', 'batchCreate') ? '' : "class='disabled'";?>
<li <?php echo $disabled?>>
<li>
<?php
if(commonModel::isTutorialMode())
{
$wizardParams = helper::safe64Encode("productID=$productID&branch=$branch&moduleID=$moduleID");
if($isProjectStroy) $wizardParams = helper::safe64Encode("productID=$productID&branch=$branch&moduleID=$moduleID&storyID=&projectID={$this->session->PRJ} . '#open=project'");
$link = $this->createLink('tutorial', 'wizard', "module=story&method=create&params=$wizardParams");
echo html::a($link, $lang->story->createCommon);
}
else
{
$link = $this->createLink('story', 'create', "product=$productID&branch=$branch&moduleID=$moduleID&storyID=0&projectID=0&bugID=0&planID=0&todoID=0&extra=&type=$storyType");
if($isProjectStroy) $link = $this->createLink('story', 'create', "product=$productID&branch=$branch&moduleID=$moduleID&storyID=0&projectID={$this->session->PRJ}#open=project");
$disabled = '';
if(!common::hasPriv('story', 'create'))
{
$link = '###';
$disabled = 'disabled';
}
echo html::a($link, $lang->story->createCommon, '', "class='$disabled'");
}
?>
</li>
<?php $batchDisabled = common::hasPriv('story', 'batchCreate') ? '' : "class='disabled'";?>
<li <?php echo $batchDisabled;?>>
<?php
$batchLink = $this->createLink('story', 'batchCreate', "productID=$productID&branch=$branch&moduleID=$moduleID&storyID=0&project=0&plan=0&type=$storyType");
echo "<li>" . html::a($batchLink, "<i class='icon icon-plus'></i>" . $lang->story->batchCreate) . "</li>";
if($isProjectStroy) $batchLink = $this->createLink('story', 'batchCreate', "productID=$productID&branch=$branch&moduleID=$moduleID&storyID=0&project={$this->session->PRJ}#open=project");
echo html::a($batchLink, $lang->story->batchCreate);
?>
</li>
</ul>
</div>
<?php endif;?>
<?php $isShow = $isProjectStroy ? '' : "style='display: none;'";?>
<div class='btn-group dropdown-hover' <?php echo $isShow;?>>
<?php
if(commonModel::isTutorialMode())
{
$wizardParams = helper::safe64Encode("project=$project->id");
echo html::a($this->createLink('tutorial', 'wizard', "module=project&method=linkStory&params=$wizardParams"), "<i class='icon-link'></i> {$lang->project->linkStory}",'', "class='btn btn-link link-story-btn'");
}
else
{
echo "<button type='button' class='btn btn-primary' id='linkButton'>";
echo "<i class='icon-link'></i> {$lang->project->linkStory} <span class='caret'></span>";
echo '</button>';
echo "<ul class='dropdown-menu pull-right' id='linkActionMenu'>";
echo '<li>' . html::a($this->createLink('projectstory', 'linkStory', "project={$this->session->PRJ}"), $lang->project->linkStory). "</li>";
if(common::hasPriv('projectstory', 'importPlanStories')) echo '<li>' . html::a('#linkStoryByPlan', $lang->project->linkStoryByPlan, '', 'data-toggle="modal"') . "</li>";
echo '</ul>';
}
?>
</div>
<?php endif;?>
</div>
</div>
@@ -171,7 +182,7 @@ $lang->story->create = $storyType == 'story' ? $lang->story->createStory : $lang
<p>
<span class="text-muted"><?php echo $storyType == 'story' ? $lang->story->noStory : $lang->story->noRequirement;?></span>
<?php if(common::canModify('product', $product) and common::hasPriv('story', 'create')):?>
<?php echo html::a($this->createLink('story', 'create', "productID={$productID}&branch={$branch}&moduleID={$moduleID}&storyID=0&projectID=0&bugID=0&planID=0&todoID=0&extra=&type=$storyType"), "<i class='icon icon-plus'></i> " . $lang->story->create, '', "class='btn btn-info'");?>
<?php echo html::a($this->createLink('story', 'create', "productID={$productID}&branch={$branch}&moduleID={$moduleID}&storyID=0&projectID=0&bugID=0&planID=0&todoID=0&extra=&type=$storyType"), "<i class='icon icon-plus'></i> " . $lang->story->createCommon, '', "class='btn btn-info'");?>
<?php endif;?>
</p>
</div>
@@ -433,6 +444,22 @@ $lang->story->create = $storyType == 'story' ? $lang->story->createStory : $lang
<?php endif;?>
</div>
</div>
<div class="modal fade" id="linkStoryByPlan">
<div class="modal-dialog mw-500px">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="icon icon-close"></i></button>
<h4 class="modal-title"><?php echo $lang->project->linkStoryByPlan;?></h4><?php echo '(' . $lang->project->linkStoryByPlanTips . ')';?>
</div>
<div class="modal-body">
<div class='input-group'>
<?php echo html::select('plan', $notLinkPlans, '', "class='form-control chosen' id='plan'");?>
<span class='input-group-btn'><?php echo html::commonButton($lang->project->linkStory, "id='toTaskButton'", 'btn btn-primary');?></span>
</div>
</div>
</div>
</div>
</div>
<script>
var moduleID = <?php echo $moduleID?>;
var branchID = $.cookie('storyBranch');
+19 -4
View File
@@ -2107,9 +2107,14 @@ class project extends control
}
/**
* Link stories to a project.
* Link stories to an execution.
*
* @param int $projectID
* @param string $browseType
* @param int $param
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
@@ -2122,9 +2127,10 @@ class project extends control
$project = $this->project->getById($projectID);
$products = $this->project->getProducts($projectID);
$browseLink = $this->createLink('project', 'story', "projectID=$projectID");
if($project->type == 'project') $browseLink = $this->createLink('projectstory', 'story');
$this->session->set('storyList', $this->app->getURI(true)); // Save session.
$this->project->setMenu($this->projects, $project->id); // Set menu.
if($project->type != 'project') $this->project->setMenu($this->projects, $project->id); // Set menu.
if(empty($products))
{
@@ -2729,6 +2735,7 @@ class project extends control
{
$planStories = $planProducts = array();
$planStory = $this->loadModel('story')->getPlanStories($planID);
$project = $this->dao->findById($projectID)->from(TABLE_PROJECT)->fetch();
$count = 0;
if(!empty($planStory))
{
@@ -2745,8 +2752,16 @@ class project extends control
$planStories = array_keys($planStory);
$this->project->linkStory($projectID, $planStories, $planProducts);
}
if($count != 0) echo js::alert(sprintf($this->lang->project->haveDraft, $count)) . js::locate($this->createLink('project', 'story', "projectID=$projectID"));
die(js::locate(helper::createLink('project', 'story', 'projectID=' . $projectID), 'parent'));
$moduleName = 'project';
$param = "projectID=$projectID";
if($project->type == 'project')
{
$moduleName = 'projectstory';
$param = '';
}
if($count != 0) echo js::alert(sprintf($this->lang->project->haveDraft, $count)) . js::locate($this->createLink($moduleName, 'story', $param));
die(js::locate(helper::createLink($moduleName, 'story', $param), 'parent'));
}
/**
+1 -1
View File
@@ -2106,7 +2106,7 @@ class projectModel extends model
if($statusPairs[$storyID] == 'draft' || $statusPairs[$storyID] == 'closed') continue;
if(isset($linkedStories[$storyID])) continue;
$productID = (int)$products[$storyID];
$productID = (empty($products) and $this->app->rawMethod == 'batchcreate') ? $this->cookie->preProductID : (int)$products[$storyID];
$data = new stdclass();
$data->project = $projectID;
$data->product = $productID;
+2 -2
View File
@@ -59,8 +59,8 @@
echo '</button>';
echo "<ul class='dropdown-menu pull-right' id='createActionMenu'>";
$storyModuleID = (int)$this->cookie->storyModuleParam;
if(common::hasPriv('story', 'create')) echo '<li>' . html::a($this->createLink('story', 'create', "productID=$productID&branch=0&moduleID={$storyModuleID}&story=0&project=$project->id"), $lang->story->create) . '</li>';
if(common::hasPriv('story', 'batchCreate')) echo '<li>' . html::a($this->createLink('story', 'batchCreate', "productID=$productID&branch=0&moduleID={$storyModuleID}&story=0&project=$project->id"), $lang->story->batchCreate) . '</li>';
if(common::hasPriv('story', 'create')) echo '<li>' . html::a($this->createLink('story', 'create', "productID=$productID&branch=0&moduleID={$storyModuleID}&story=0&project=$project->id#open=project"), $lang->story->create) . '</li>';
if(common::hasPriv('story', 'batchCreate')) echo '<li>' . html::a($this->createLink('story', 'batchCreate', "productID=$productID&branch=0&moduleID={$storyModuleID}&story=0&project=$project->id#open=project"), $lang->story->batchCreate) . '</li>';
echo '</ul>';
echo '</div>';
}
+17
View File
@@ -113,5 +113,22 @@ class projectStory extends control
echo $this->fetch('story', 'track', "productID=$productID&branch=$branch&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
}
/**
* Link stories to a project.
*
* @param int $projectID
* @param string $browseType
* @param int $param
* @param int $recTotal
* @param int $recPerPage
* @param int $pageID
* @access public
* @return void
*/
public function linkStory($projectID = 0, $browseType = '', $param = 0, $recTotal = 0, $recPerPage = 50, $pageID = 1)
{
echo $this->fetch('project', 'linkStory', "projectID=$projectID&browseType=$browseType&param=$param&recTotal=$recTotal&recPerPage=$recPerPage&pageID=$pageID");
}
}
+14
View File
@@ -4,3 +4,17 @@ $lang->projectstory->index = 'Fordern Sie Homepage';
$lang->projectstory->requirement = $lang->generalUR;
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = 'Matrix der Verfolgung';
global $app;
$app->loadLang('product');
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
+14
View File
@@ -4,3 +4,17 @@ $lang->projectstory->index = 'Request Home';
$lang->projectstory->requirement = $lang->generalUR;
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = 'Tracking Matrix';
global $app;
$app->loadLang('product');
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
+14
View File
@@ -4,3 +4,17 @@ $lang->projectstory->index = 'Exigences Accueil';
$lang->projectstory->requirement = $lang->generalUR;
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = 'Matrice de suivi';
global $app;
$app->loadLang('product');
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
+14
View File
@@ -4,3 +4,17 @@ $lang->projectstory->index = 'Yêu cầu trang nhà';
$lang->projectstory->requirement = $lang->generalUR;
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = 'Theo dõi ma trận';
global $app;
$app->loadLang('product');
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
+14
View File
@@ -4,3 +4,17 @@ $lang->projectstory->index = '需求主页';
$lang->projectstory->requirement = $lang->generalUR;
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = '跟踪矩阵';
global $app;
$app->loadLang('product');
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
+14
View File
@@ -4,3 +4,17 @@ $lang->projectstory->index = '需求主頁';
$lang->projectstory->requirement = $lang->generalUR;
$lang->projectstory->story = $lang->generalSR;
$lang->projectstory->track = '跟蹤矩陣';
global $app;
$app->loadLang('product');
$lang->projectstory->featureBarList['allstory'] = $lang->product->allStory;
$lang->projectstory->featureBarList['unclosed'] = $lang->product->unclosed;
$lang->projectstory->featureBarList['willclose'] = $lang->product->willClose;
$lang->projectstory->featureBarList['status']['draftstory'] = $lang->product->draftStory;
$lang->projectstory->featureBarList['status']['activestory'] = $lang->product->activeStory;
$lang->projectstory->featureBarList['status']['changedstory'] = $lang->product->changedStory;
$lang->projectstory->featureBarList['status']['closedstory'] = $lang->product->closedStory;
$lang->projectstory->featureBarList['other']['openedbyme'] = $lang->product->openedByMe;
$lang->projectstory->featureBarList['other']['assignedtome'] = $lang->product->assignedToMe;
$lang->projectstory->featureBarList['other']['reviewedbyme'] = $lang->product->reviewedByMe;
$lang->projectstory->featureBarList['other']['closedbyme'] = $lang->product->closedByMe;
+46 -4
View File
@@ -50,6 +50,23 @@ class story extends control
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
if($projectID)
{
$project = $this->dao->findById((int)$projectID)->from(TABLE_PROJECT)->fetch();
if($project->type == 'project')
{
$this->app->rawModule = 'projectstory';
$this->lang->navGroup->story = 'project';
$this->lang->product->menu = $this->lang->menu->{$project->model};
}
else
{
$this->app->rawModule = 'project';
$this->lang->navGroup->story = 'project';
}
$this->view->project = $project;
}
/* Whether there is a object to transfer story, for example feedback. */
$extra = str_replace(array(',', ' '), array('&', ''), $extra);
parse_str($extra, $output);
@@ -99,7 +116,10 @@ class story extends control
}
else
{
$response['locate'] = $this->createLink('project', 'story', "projectID=$projectID");
$project = $this->dao->findById((int)$projectID)->from(TABLE_PROJECT)->fetch();
$moduleName = $project->type == 'project' ? 'projectstory' : 'project';
$param = $project->type == 'project' ? "PRJ=$projectID" : "projectID=$projectID";
$response['locate'] = $this->createLink($moduleName, 'story', $param);
}
$this->send($response);
}
@@ -147,7 +167,10 @@ class story extends control
else
{
setcookie('storyModuleParam', 0, 0, $this->config->webRoot, '', false, true);
$response['locate'] = $this->createLink('project', 'story', "projectID=$projectID&orderBy=id_desc&browseType=unclosed");
$project = $this->dao->findById((int)$projectID)->from(TABLE_PROJECT)->fetch();
$moduleName = $project->type == 'project' ? 'projectstory' : 'project';
$param = $project->type == 'project' ? "PRJ=$projectID" : "projectID=$projectID&orderBy=id_desc&browseType=unclosed";
$response['locate'] = $this->createLink($moduleName, 'story', $param);
}
if($this->app->getViewType() == 'xhtml') $response['locate'] = $this->createLink('story', 'view', "storyID=$storyID");
$this->send($response);
@@ -255,7 +278,7 @@ class story extends control
}
}
/* Set Custom*/
/* Set Custom. */
foreach(explode(',', $this->config->story->list->customCreateFields) as $field) $customFields[$field] = $this->lang->story->$field;
$this->view->customFields = $customFields;
$this->view->showFields = $this->config->story->custom->createFields;
@@ -311,6 +334,22 @@ class story extends control
$this->lang->product->switcherMenu = $this->product->getSwitcher($productID);
$this->lang->product->mainMenuAction = $this->product->getProductMainAction();
if($project)
{
$prj = $this->dao->findById((int)$project)->from(TABLE_PROJECT)->fetch();
if($prj->type == 'project')
{
$this->app->rawModule = 'projectstory';
$this->lang->navGroup->story = 'project';
$this->lang->product->menu = $this->lang->menu->{$prj->model};
}
else
{
}
$this->view->project = $prj;
}
/* Clear title when switching products and set the session for the current product. */
if($productID != $this->cookie->preProductID) unset($_SESSION['storyImagesFile']);
setcookie('preProductID', $productID, $this->config->cookieLife, $this->config->webRoot, '', false, true);
@@ -349,7 +388,10 @@ class story extends control
elseif($project)
{
setcookie('storyModuleParam', 0, 0, $this->config->webRoot, '', false, false);
die(js::locate($this->createLink('project', 'story', "projectID=$project&orderBy=id_desc&browseType=unclosed"), 'parent'));
$moduleName = $prj->type == 'project' ? 'projectstory' : 'project';
$param = $prj->type == 'project' ? "PRJ=$project#open=project" : "projectID=$project&orderBy=id_desc&browseType=unclosed";
$link = $this->createLink($moduleName, 'story', $param);
die(js::locate($link, 'parent'));
}
else
{
+1
View File
@@ -3,6 +3,7 @@ $(function()
if(typeof(resetActive) != 'undefined') return false;
if(typeof(storyType) == 'undefined') storyType = '';
if(typeof(rawModule) == 'undefined') rawModule = 'product';
if(typeof(project) != 'undefined') rawModule = 'projectstory';
if(rawModule != 'projectstory')
{
$('#navbar .nav li').removeClass('active');
+22 -5
View File
@@ -2296,15 +2296,18 @@ class storyModel extends model
* @param string $type
* @param int $param
* @param string $storyType
* @param string $excludeStories
* @param string $excludeStories
* @param object $pager
* @param int $productID
* @access public
* @return array
*/
public function getProjectStories($projectID = 0, $orderBy = 't1.`order`_desc', $type = 'byModule', $param = 0, $storyType = 'story', $excludeStories = '', $pager = null)
public function getProjectStories($projectID = 0, $orderBy = 't1.`order`_desc', $type = 'byModule', $param = 0, $storyType = 'story', $excludeStories = '', $pager = null, $productID = 0)
{
if(defined('TUTORIAL')) return $this->loadModel('tutorial')->getProjectStories();
$project = $this->dao->findById($projectID)->from(TABLE_PROJECT)->fetch();
$type = strtolower($type);
if($type == 'bysearch')
{
@@ -2346,13 +2349,18 @@ class storyModel extends model
else
{
$productParam = ($type == 'byproduct' and $param) ? $param : $this->cookie->storyProductParam;
$branchParam = ($type == 'bybranch' and $param) ? $param : $this->cookie->storyBranchParam;
$moduleParam = ($type == 'bymodule' and $param) ? $param : $this->cookie->storyModuleParam;
$branchParam = ($type == 'bybranch' and $param) ? $param : $this->cookie->storyBranchParam;
$moduleParam = ($type == 'bymodule' and $param) ? $param : $this->cookie->storyModuleParam;
$modules = empty($moduleParam) ? array() : $this->dao->select('*')->from(TABLE_MODULE)->where('path')->like("%,$moduleParam,%")->andWhere('type')->eq('story')->andWhere('deleted')->eq(0)->fetchPairs('id', 'id');
if(strpos($branchParam, ',') !== false) list($productParam, $branchParam) = explode(',', $branchParam);
$unclosedStatus = $this->lang->story->statusList;
unset($unclosedStatus['closed']);
if($project->type == 'project')
{
$statusFeatureList = $this->lang->projectstory->featureBarList['status'];
$otherFeatureList = $this->lang->projectstory->featureBarList['other'];
}
$stories = $this->dao->select('distinct t1.*, t2.*,t3.branch as productBranch,t4.type as productType,t2.version as version')->from(TABLE_PROJECTSTORY)->alias('t1')
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id')
@@ -2361,10 +2369,19 @@ class storyModel extends model
->where('t1.project')->eq((int)$projectID)
->andWhere('t2.type')->eq($storyType)
->beginIF($excludeStories)->andWhere('t2.id')->notIN($excludeStories)->fi()
->beginIF($project->type == 'project')
->andWhere('t1.product')->eq($productID)
->beginIF(isset($statusFeatureList) and in_array($type, array_keys($statusFeatureList)))->andWhere('t2.status')->eq($type)->fi()
->beginIF(isset($otherFeatureList) and in_array($type, array_keys($otherFeatureList)))->andWhere('t2.' . substr($type, 0, -2))->eq($this->app->user->account)->fi()
->beginIF($type == 'unclosed')->andWhere('t2.status')->in(array_keys($unclosedStatus))->fi()
->beginIF($type == 'willclose')->andWhere('t2.stage')->in('developed,released')->andWhere('t2.status')->ne('closed')->fi()
->fi()
->beginIF($project->type != 'project')
->beginIF(!empty($productParam))->andWhere('t1.product')->eq($productParam)->fi()
->beginIF($this->session->projectStoryBrowseType == 'unclosed')->andWhere('t2.status')->in(array_keys($unclosedStatus))->fi()
->fi()
->beginIF(!empty($branchParam))->andWhere('t2.branch')->eq($branchParam)->fi()
->beginIF($modules)->andWhere('t2.module')->in($modules)->fi()
->beginIF($this->session->projectStoryBrowseType == 'unclosed')->andWhere('t2.status')->in(array_keys($unclosedStatus))->fi()
->andWhere('t2.deleted')->eq(0)
->orderBy($orderBy)
->page($pager, 't2.id')
+1
View File
@@ -141,6 +141,7 @@ $(function()
});
});
</script>
<?php if(isset($project)) js::set('project', $project);?>
<?php js::set('storyType', $type);?>
<?php include '../../common/view/pastetext.html.php';?>
<?php include '../../common/view/footer.html.php';?>
+1
View File
@@ -247,6 +247,7 @@
</form>
</div>
</div>
<?php if(isset($project)) js::set('project', $project);?>
<?php js::set('projectID', $projectID);?>
<?php js::set('storyModule', $lang->story->module);?>
<?php js::set('storyType', $type);?>