190 lines
10 KiB
PHP
Executable File
190 lines
10 KiB
PHP
Executable File
<?php
|
|
class product extends control
|
|
{
|
|
public function browse($productID = 0, $branch = '', $browseType = '', $param = 0, $storyType = 'story', $orderBy = '', $recTotal = 0, $recPerPage = 20, $pageID = 1, $projectID = 0)
|
|
{
|
|
/* Load datatable and execution. */
|
|
$this->loadModel('datatable');
|
|
$this->loadModel('execution');
|
|
$this->loadModel('user');
|
|
|
|
$projectProducts = $this->loadModel('product')->getProducts($projectID);
|
|
$productPlans = $this->execution->getPlans($projectProducts);
|
|
|
|
$this->products = array();
|
|
foreach($projectProducts as $productID => $product) $this->products[$productID] = $product->name;
|
|
|
|
reset($projectProducts);
|
|
$productID = key($projectProducts);
|
|
$product = $projectProducts[$productID];
|
|
|
|
$showBranch = $this->loadModel('branch')->showBranch($productID, 0, $projectID);
|
|
if(!empty($product)) $this->session->set('currentProductType', $product->type);
|
|
|
|
/* Set menu. */
|
|
$this->session->set('storyList', $this->app->getURI(true), 'project');
|
|
$this->loadModel('project')->setMenu($projectID);
|
|
|
|
$branches = $this->loadModel('branch')->getList($productID, $projectID, 'all');
|
|
$branch = ($this->cookie->preBranch !== '' and $branch === '' and isset($branches[$this->cookie->preBranch])) ? $this->cookie->preBranch : $branch;
|
|
$branchID = $branch;
|
|
|
|
/* Lower browse type. */
|
|
$browseType = strtolower($browseType);
|
|
|
|
/* Set product, module and query. */
|
|
setcookie('preProductID', $productID, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true);
|
|
setcookie('preBranch', $branch, $this->config->cookieLife, $this->config->webRoot, '', $this->config->cookieSecure, true);
|
|
|
|
if($this->cookie->preProductID != $productID or $this->cookie->preBranch != $branch)
|
|
{
|
|
$_COOKIE['storyModule'] = 0;
|
|
setcookie('storyModule', 0, 0, $this->config->webRoot, '', $this->config->cookieSecure, false);
|
|
}
|
|
|
|
if($browseType == 'bymodule' or $browseType == '')
|
|
{
|
|
setcookie('storyModule', (int)$param, 0, $this->config->webRoot, '', $this->config->cookieSecure, false);
|
|
if($this->app->tab == 'project') setcookie('storyModuleParam', (int)$param, 0, $this->config->webRoot, '', $this->config->cookieSecure, false);
|
|
$_COOKIE['storyBranch'] = 'all';
|
|
setcookie('storyBranch', 'all', 0, $this->config->webRoot, '', $this->config->cookieSecure, false);
|
|
if($browseType == '') setcookie('treeBranch', $branch, 0, $this->config->webRoot, '', $this->config->cookieSecure, false);
|
|
}
|
|
|
|
$cookieModule = $this->app->tab == 'project' ? $this->cookie->storyModuleParam : $this->cookie->storyModule;
|
|
$moduleID = ($browseType == 'bymodule') ? (int)$param : (($browseType == 'bysearch') ? 0 : ($cookieModule ? $cookieModule : 0));
|
|
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
|
|
|
|
/* Set moduleTree. */
|
|
$createModuleLink = $storyType == 'story' ? 'createStoryLink' : 'createRequirementLink';
|
|
if($browseType == '')
|
|
{
|
|
setcookie('treeBranch', $branch, 0, $this->config->webRoot, '', $this->config->cookieSecure, false);
|
|
$browseType = 'unclosed';
|
|
}
|
|
else
|
|
{
|
|
$branch = $this->cookie->treeBranch;
|
|
}
|
|
|
|
/* If in project story and not chose product, get project story mdoules. */
|
|
$moduleTree = $this->loadModel('tree')->getTreeMenu($productID, 'story', $startModuleID = 0, array('treeModel', $createModuleLink), array('projectID' => $projectID, 'productID' => $productID), 'all', "¶m=$param&storyType=$storyType");
|
|
|
|
if($browseType != 'bymodule') $this->session->set('storyBrowseType', $browseType);
|
|
|
|
/* Process the order by field. */
|
|
if(!$orderBy) $orderBy = $this->cookie->productStoryOrder ? $this->cookie->productStoryOrder : 'id_desc';
|
|
setcookie('productStoryOrder', $orderBy, 0, $this->config->webRoot, '', $this->config->cookieSecure, true);
|
|
|
|
/* Append id for secend sort. */
|
|
$sort = common::appendOrder($orderBy);
|
|
|
|
/* Load pager. */
|
|
$this->app->loadClass('pager', $static = true);
|
|
if($this->app->getViewType() == 'xhtml') $recPerPage = 10;
|
|
$pager = new pager($recTotal, $recPerPage, $pageID);
|
|
|
|
/* Display of branch label. */
|
|
$showBranch = $this->loadModel('branch')->showBranch($productID);
|
|
|
|
$product = $this->product->getById($productID);
|
|
|
|
/* Get stories. */
|
|
if(in_array($browseType, array('reviewing', 'draft', 'changing'))) $browseType .= 'story';
|
|
$stories = $this->product->getStories($productID, $branchID, $browseType, $queryID, $moduleID, $storyType, $sort, $pager);
|
|
|
|
/* Display status of branch. */
|
|
$branchOption = array();
|
|
$branchTagOption = array();
|
|
foreach($branches as $branchInfo)
|
|
{
|
|
$branchOption[$branchInfo->id] = $branchInfo->name;
|
|
$branchTagOption[$branchInfo->id] = $branchInfo->name . ($branchInfo->status == 'closed' ? ' (' . $this->lang->branch->statusList['closed'] . ')' : '');
|
|
}
|
|
|
|
/* Process the sql, get the conditon partion, save it to session. */
|
|
$this->loadModel('common')->saveQueryCondition($this->dao->get(), 'story', ($browseType != 'bysearch' and $browseType != 'reviewbyme' and $this->app->rawModule != 'projectstory'));
|
|
|
|
if(!empty($stories)) $stories = $this->loadModel('story')->mergeReviewer($stories);
|
|
|
|
/* Get related tasks, bugs, cases count of each story. */
|
|
$storyIdList = array();
|
|
foreach($stories as $story)
|
|
{
|
|
$storyIdList[$story->id] = $story->id;
|
|
if(!empty($story->children))
|
|
{
|
|
foreach($story->children as $child) $storyIdList[$child->id] = $child->id;
|
|
}
|
|
}
|
|
$storyTasks = $this->loadModel('task')->getStoryTaskCounts($storyIdList);
|
|
$storyBugs = $this->loadModel('bug')->getStoryBugCounts($storyIdList);
|
|
$storyCases = $this->loadModel('testcase')->getStoryCaseCounts($storyIdList);
|
|
|
|
/* Change for requirement story title. */
|
|
if($storyType == 'requirement')
|
|
{
|
|
$this->lang->story->title = str_replace($this->lang->SRCommon, $this->lang->URCommon, $this->lang->story->title);
|
|
$this->lang->story->create = str_replace($this->lang->SRCommon, $this->lang->URCommon, $this->lang->story->create);
|
|
$this->config->product->search['fields']['title'] = $this->lang->story->title;
|
|
unset($this->config->product->search['fields']['plan']);
|
|
unset($this->config->product->search['fields']['stage']);
|
|
}
|
|
|
|
/* Build search form. */
|
|
$rawModule = $this->app->rawModule;
|
|
$rawMethod = $this->app->rawMethod;
|
|
|
|
$params = $rawModule == 'projectstory' ? "projectID=$projectID&" : '';
|
|
$actionURL = $this->createLink($rawModule, $rawMethod, $params . "productID=$productID&branch=$branch&browseType=bySearch&queryID=myQueryID&storyType=$storyType");
|
|
|
|
$this->config->product->search['onMenuBar'] = 'yes';
|
|
$this->product->buildSearchForm(0, $this->products, $queryID, $actionURL, $branch);
|
|
|
|
$showModule = !empty($this->config->datatable->productBrowse->showModule) ? $this->config->datatable->productBrowse->showModule : '';
|
|
|
|
$productName = ($this->app->rawModule == 'projectstory' and empty($productID)) ? $this->lang->product->all : $this->products[$productID];
|
|
|
|
/* Assign. */
|
|
$this->view->title = $productName . $this->lang->colon . $this->lang->product->browse;
|
|
$this->view->position[] = $productName;
|
|
$this->view->position[] = $this->lang->product->browse;
|
|
$this->view->productID = $productID;
|
|
$this->view->product = $product;
|
|
$this->view->productName = $productName;
|
|
$this->view->moduleID = $moduleID;
|
|
$this->view->stories = $stories;
|
|
$this->view->plans = $this->loadModel('productplan')->getPairs($productID, $branch === 'all' ? '' : $branch, '', true);
|
|
$this->view->productPlans = isset($productPlans) ? array(0 => '') + $productPlans : array();
|
|
$this->view->summary = $this->product->summary($stories, $storyType);
|
|
$this->view->moduleTree = $moduleTree;
|
|
$this->view->parentModules = $this->tree->getParents($moduleID);
|
|
$this->view->pager = $pager;
|
|
$this->view->users = $this->user->getPairs('noletter|pofirst|nodeleted');
|
|
$this->view->teamMembers = $this->user->getTeamMemberPairs($projectID);
|
|
$this->view->orderBy = $orderBy;
|
|
$this->view->browseType = $browseType;
|
|
$this->view->modules = $this->tree->getOptionMenu($productID, 'story', 0, $branchID);
|
|
$this->view->moduleID = $moduleID;
|
|
$this->view->moduleName = ($moduleID and $moduleID !== 'all') ? $this->tree->getById($moduleID)->name : $this->lang->tree->allMenu;
|
|
$this->view->branch = $branch;
|
|
$this->view->branchID = $branchID;
|
|
$this->view->branchOption = $branchOption;
|
|
$this->view->branchTagOption = $branchTagOption;
|
|
$this->view->showBranch = $showBranch;
|
|
$this->view->storyStages = $this->product->batchGetStoryStage($stories);
|
|
$this->view->setModule = true;
|
|
$this->view->storyTasks = $storyTasks;
|
|
$this->view->storyBugs = $storyBugs;
|
|
$this->view->storyCases = $storyCases;
|
|
$this->view->param = $param;
|
|
$this->view->projectID = $projectID;
|
|
$this->view->products = $this->products;
|
|
$this->view->projectProducts = isset($projectProducts) ? $projectProducts : array();
|
|
$this->view->storyType = $storyType;
|
|
$this->view->from = $this->app->tab;
|
|
$this->view->modulePairs = $showModule ? $this->tree->getModulePairs($productID, 'story', $showModule) : array();
|
|
$this->display();
|
|
}
|
|
}
|