* finish task #2554.

* code model.php of product module for task #2553.
This commit is contained in:
chenfeiCF
2016-03-31 09:39:28 +08:00
parent 6cbd5c8782
commit c9658bc638
6 changed files with 71 additions and 42 deletions
+6 -4
View File
@@ -359,8 +359,12 @@ class productModel extends model
{
$this->loadModel('story');
/* Set modules and browse type. */
$modules = $moduleID ? $this->loadModel('tree')->getAllChildID($moduleID) : '0';
$browseType = (($browseType == 'bymodule') and ($this->session->storyBrowseType) and ($this->session->storyBrowseType != 'bysearch')) ? $this->session->storyBrowseType : $browseType;
/* Get stories by browseType. */
$modules = $moduleID ? $this->loadModel('tree')->getAllChildID($moduleID) : '0';
$stories = array();
if($browseType == 'unclosed')
{
$unclosedStatus = $this->lang->story->statusList;
@@ -380,9 +384,7 @@ class productModel extends model
if($browseType == 'willclose') $stories = $this->story->get2BeClosed($productID, $branch, $modules, $sort, $pager);
if($browseType == 'closedstory') $stories = $this->story->getByStatus($productID, $branch, $modules, 'closed', $sort, $pager);
if($stories) return $stories;
return array();
return $stories;
}
/**
+14 -8
View File
@@ -129,14 +129,19 @@ class project extends control
$this->loadModel('task');
$this->loadModel('datatable');
/* Set browseType, productID, moduleID and queryID. */
/* Set browse type. */
$browseType = strtolower($status);
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
$moduleID = ($browseType == 'bymodule') ? (int)$param : 0;
$productID = ($browseType == 'byproduct') ? (int)$param : 0;
$project = $this->commonAction($projectID, $status);
$projectID = $project->id;
$products = $this->loadModel('product')->getProductsByProject($projectID);
if($browseType == 'bymodule') setcookie('taskModule', (int)$param, $this->config->cookieLife, $this->config->webRoot);
if($browseType != 'bymodule') $this->session->set('taskBrowseType', $browseType);
/* Set productID, moduleID and queryID. */
$queryID = ($browseType == 'bysearch') ? (int)$param : 0;
$moduleID = ($browseType == 'bymodule') ? (int)$param : ($browseType == 'bysearch' ? 0 : ($this->cookie->taskModule ? $this->cookie->taskModule : 0));
$productID = ($browseType == 'byproduct') ? (int)$param : 0;
$project = $this->commonAction($projectID, $status);
$projectID = $project->id;
$products = $this->loadModel('product')->getProductsByProject($projectID);
/* Save to session. */
$uri = $this->app->getURI(true);
@@ -190,6 +195,7 @@ class project extends control
$this->view->modules = $this->tree->getTaskOptionMenu($projectID);
$this->view->moduleID = $moduleID;
$this->view->moduleTree = $this->tree->getTaskTreeMenu($projectID, $productID = 0, $startModuleID = 0, array('treeModel', 'createTaskLink'));
$this->view->moduleName = $moduleID ? $this->tree->getById($moduleID)->name : $this->lang->tree->all;
$this->view->projectTree = $this->project->tree();
$this->view->memberPairs = $memberPairs;
$this->view->branchGroups = $this->loadModel('branch')->getByProducts(array_keys($products), 'noempty');
@@ -220,7 +226,7 @@ class project extends control
$this->view->position[] = $this->lang->project->task;
/* Get tasks and group them. */
$tasks = $this->loadModel('task')->getProjectTasks($projectID, $status = 'all', $groupBy ? $groupBy : 'story');
$tasks = $this->loadModel('task')->getProjectTasks($projectID, $status = 'all', $modules = 0, $groupBy ? $groupBy : 'story');
$groupBy = strtolower(str_replace('`', '', $groupBy));
$taskLang = $this->lang->task;
$groupByList = array();
+14 -11
View File
@@ -753,26 +753,31 @@ class projectModel extends model
{
$this->loadModel('task');
/* Set modules and $browseType. */
$modules = $moduleID ? $this->loadModel('tree')->getAllChildID($moduleID) : '0';
$browseType = (($browseType == 'bymodule') and ($this->session->taskBrowseType) and ($this->session->taskBrowseType != 'bysearch')) ? $this->session->taskBrowseType : $browseType;
/* Get tasks. */
$tasks = array();
if($status == 'byProduct')
{
$modules = $this->loadModel('tree')->getProjectModule($projectID, $productID);
$tasks = $this->task->getTasksByModule($projectID, $modules, $sort, $pager);
}
elseif($status == 'byModule')
elseif($browseType == 'bymodule')
{
$tasks = $this->task->getTasksByModule($projectID, $this->loadModel('tree')->getAllChildID($moduleID), $sort, $pager);
$tasks = $this->task->getTasksByModule($projectID, $modules, $sort, $pager);
}
elseif($browseType != "bysearch")
{
$qureyStatus = $status == 'byProject' ? 'all' : $status;
if($qureyStatus == 'unclosed')
$queryStatus = $browseType == 'byproject' ? 'all' : $browseType;
if($queryStatus == 'unclosed')
{
$qureyStatus = $this->lang->task->statusList;
unset($qureyStatus['closed']);
$qureyStatus = array_keys($qureyStatus);
$queryStatus = $this->lang->task->statusList;
unset($queryStatus['closed']);
$queryStatus = array_keys($queryStatus);
}
$tasks = $this->task->getProjectTasks($projectID, $qureyStatus, $sort, $pager);
$tasks = $this->task->getProjectTasks($projectID, $queryStatus, $modules, $sort, $pager);
}
else
{
@@ -807,9 +812,7 @@ class projectModel extends model
$tasks = $this->getSearchTasks($taskQuery, $pager, $sort);
}
if($tasks) return $tasks;
return array();
return $tasks;
}
/**
+2 -2
View File
@@ -123,8 +123,8 @@ js::set('browseType', $browseType);
<?php js::set('replaceID', 'taskList')?>
<script language='javascript'>
$('#project<?php echo $projectID;?>').addClass('active')
$('#<?php echo $browseType;?>Tab').addClass('active')
statusActive = '<?php echo isset($lang->project->statusSelects[$browseType]);?>';
$('#<?php echo $this->session->taskBrowseType;?>Tab').addClass('active')
statusActive = '<?php echo isset($lang->project->statusSelects[$this->session->taskBrowseType]);?>';
if(statusActive) $('#statusTab').addClass('active')
</script>
<?php include '../../common/view/footer.html.php';?>
+20 -4
View File
@@ -1,6 +1,22 @@
<div id='featurebar'>
<ul class='nav'>
<?php
<?php if(isset($moduleID)):?>
<li>
<span>
<?php
echo $moduleName;
if($moduleID)
{
$removeLink = $browseType == 'bymodule' ? inlink('task', "projectID=$projectID&browseType=$status&param=0&orderBy=$orderBy&recTotal={$pager->recTotal}&recPerPage={$pager->recPerPage}") : 'javascript:removeCookieByKey("taskModule")';
echo '&nbsp;' . html::a($removeLink, "<i class='icon icon-remove'></i>") . '&nbsp;';
}
echo " <i class='icon-angle-right'></i>&nbsp; ";
?>
</span>
</li>
<?php endif;?>
<?php
echo "<li id='unclosedTab'>"; common::printLink('project', 'task', "project=$projectID&type=unclosed", $lang->project->unclosed); echo '</li>' ;
echo "<li id='allTab'>"; common::printLink('project', 'task', "project=$projectID&type=all", $lang->project->allTasks); echo '</li>' ;
echo "<li id='kanbanTab'>"; common::printLink('project', 'kanban', "projectID=$projectID", $lang->project->kanban, '', '', false); echo '</li>';
@@ -8,15 +24,15 @@
echo "<li id='assignedtomeTab'>"; common::printLink('project', 'task', "project=$projectID&type=assignedtome", $lang->project->assignedToMe); echo '</li>' ;
echo "<li id='statusTab' class='dropdown'>";
$status = isset($status) ? $status : '';
$current = zget($lang->project->statusSelects, $status, '');
$taskBrowseType = isset($status) ? $this->session->taskBrowseType : '';
$current = zget($lang->project->statusSelects, $taskBrowseType, '');
if(empty($current)) $current = $lang->project->statusSelects[''];
echo html::a('javascript:;', $current . " <span class='caret'></span>", '', "data-toggle='dropdown'");
echo "<ul class='dropdown-menu'>";
foreach ($lang->project->statusSelects as $key => $value)
{
if($key == '') continue;
echo '<li' . ($key == $status ? " class='active'" : '') . '>';
echo '<li' . ($key == $taskBrowseType ? " class='active'" : '') . '>';
echo html::a($this->createLink('project', 'task', "project=$projectID&type=$key"), $value);
}
echo '</ul></li>';
+15 -13
View File
@@ -792,12 +792,12 @@ class taskModel extends model
/**
* Get tasks list of a project.
*
* @param int $projectID
* @param array|string $moduleIds
* @param string $status
* @param string $orderBy
* @param object $pager
*
* @param int $projectID
* @param array|string $moduleIds
* @param string $status
* @param string $orderBy
* @param object $pager
* @access public
* @return array
*/
@@ -808,7 +808,7 @@ class taskModel extends model
->leftJoin(TABLE_STORY)->alias('t2')->on('t1.story = t2.id')
->leftJoin(TABLE_USER)->alias('t3')->on('t1.assignedTo = t3.account')
->where('t1.project')->eq((int)$projectID)
->andWhere('t1.module')->in($moduleIds)
->beginIF($moduleIds)->andWhere('t1.module')->in($moduleIds)->fi()
->andWhere('t1.deleted')->eq(0)
->orderBy($orderBy)
->page($pager)
@@ -822,15 +822,16 @@ class taskModel extends model
/**
* Get tasks of a project.
*
* @param int $projectID
* @param string $status all|needConfirm|wait|doing|done|cancel
* @param string $type
* @param object $pager
*
* @param int $projectID
* @param string $status all|needConfirm|wait|doing|done|cancel
* @param string $type
* @param array|string $modules
* @param object $pager
* @access public
* @return array
*/
public function getProjectTasks($projectID, $type = 'all', $orderBy = 'status_asc, id_desc', $pager = null)
public function getProjectTasks($projectID, $type = 'all', $modules = 0, $orderBy = 'status_asc, id_desc', $pager = null)
{
if(is_string($type)) $type = strtolower($type);
$tasks = $this->dao->select('t1.*, t2.id AS storyID, t2.title AS storyTitle, t2.product, t2.branch, t2.version AS latestStoryVersion, t2.status AS storyStatus, t3.realname AS assignedToRealName')
@@ -845,6 +846,7 @@ class taskModel extends model
->beginIF($type == 'finishedbyme')->andWhere('t1.finishedby')->eq($this->app->user->account)->fi()
->beginIF($type == 'delayed')->andWhere('deadline')->gt('1970-1-1')->andWhere('deadline')->lt(date(DT_DATE1))->andWhere('t1.status')->in('wait,doing')->fi()
->beginIF(is_array($type) or strpos(',all,undone,needconfirm,assignedtome,delayed,finishedbyme,', ",$type,") === false)->andWhere('t1.status')->in($type)->fi()
->beginIF($modules)->andWhere('t1.module')->in($modules)->fi()
->orderBy($orderBy)
->page($pager)
->fetchAll();