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(); } }