*Finish task #53659.
This commit is contained in:
@@ -240,15 +240,15 @@ class programModel extends model
|
||||
foreach($products as $product)
|
||||
{
|
||||
$product->plans = zget($plans, $product->id, array());
|
||||
|
||||
|
||||
/* Convert predefined HTML entities to characters. */
|
||||
!empty($product->plans) && array_map(function($planVal)
|
||||
{
|
||||
return $planVal->title = htmlspecialchars_decode($planVal->title, ENT_QUOTES);
|
||||
},
|
||||
},
|
||||
$product->plans);
|
||||
$product->name = htmlspecialchars_decode($product->name, ENT_QUOTES);
|
||||
|
||||
|
||||
$product->releases = zget($releases, $product->id, array());
|
||||
$projects = zget($projectGroup, $product->id, array());
|
||||
foreach($projects as $project)
|
||||
|
||||
@@ -132,6 +132,43 @@ $config->project->maxCheckList = new stdclass();
|
||||
$config->project->maxCheckList->scrum = array('bug', 'execution', 'build', 'doc', 'release', 'testtask', 'case', 'issue', 'risk', 'meeting');
|
||||
$config->project->maxCheckList->waterfall = array('execution', 'design', 'doc', 'bug', 'case', 'build', 'release', 'testtask', 'review', 'build', 'researchplan', 'issue', 'risk', 'opportunity', 'auditplan', 'gapanalysis', 'meeting');
|
||||
|
||||
$config->project->search['module'] = 'project';
|
||||
$config->project->search['fields']['name'] = $lang->project->name;
|
||||
$config->project->search['fields']['code'] = $lang->project->code;
|
||||
$config->project->search['fields']['id'] = $lang->project->id;
|
||||
$config->project->search['fields']['model'] = $lang->project->manageType;
|
||||
$config->project->search['fields']['parent'] = $lang->project->parent;
|
||||
$config->project->search['fields']['status'] = $lang->project->projectStatus;
|
||||
$config->project->search['fields']['desc'] = $lang->project->desc;
|
||||
$config->project->search['fields']['PM'] = $lang->project->PM;
|
||||
$config->project->search['fields']['openedDate'] = $lang->project->openedDate;
|
||||
$config->project->search['fields']['begin'] = $lang->project->begin;
|
||||
$config->project->search['fields']['end'] = $lang->project->end;
|
||||
$config->project->search['fields']['realBeginAB'] = $lang->project->realBeginAB;
|
||||
$config->project->search['fields']['realEndAB'] = $lang->project->realEndAB;
|
||||
$config->project->search['fields']['openedBy'] = $lang->project->openedBy;
|
||||
$config->project->search['fields']['closedBy'] = $lang->project->closedBy;
|
||||
$config->project->search['fields']['lastEditedDate'] = $lang->project->lastEditedDate;
|
||||
$config->project->search['fields']['closedDate'] = $lang->project->closedDate;
|
||||
|
||||
$config->project->search['params']['name'] = array('operator' => 'include', 'control' => 'input' , 'values' => '');
|
||||
$config->project->search['params']['code'] = array('operator' => '=' , 'control' => 'input' , 'values' => '');
|
||||
$config->project->search['params']['id'] = array('operator' => '=' , 'control' => 'input' , 'values' => '');
|
||||
$config->project->search['params']['model'] = array('operator' => '=' , 'control' => 'select', 'values' => $lang->project->modelList);
|
||||
$config->project->search['params']['parent'] = array('operator' => '=' , 'control' => 'select', 'values' => '');
|
||||
$config->project->search['params']['status'] = array('operator' => '=' , 'control' => 'select', 'values' => $lang->project->statusList);
|
||||
$config->project->search['params']['desc'] = array('operator' => 'include', 'control' => 'input' , 'values' => '');
|
||||
$config->project->search['params']['PM'] = array('operator' => '=' , 'control' => 'select', 'values' => 'users');
|
||||
$config->project->search['params']['openedDate'] = array('operator' => '=' , 'control' => 'input' , 'values' => '', 'class' => 'date');
|
||||
$config->project->search['params']['begin'] = array('operator' => '=' , 'control' => 'input' , 'values' => '', 'class' => 'date');
|
||||
$config->project->search['params']['end'] = array('operator' => '=' , 'control' => 'input' , 'values' => '', 'class' => 'date');
|
||||
$config->project->search['params']['realBeginAB'] = array('operator' => '=' , 'control' => 'input' , 'values' => '', 'class' => 'date');
|
||||
$config->project->search['params']['realEndAB'] = array('operator' => '=' , 'control' => 'input' , 'values' => '', 'class' => 'date');
|
||||
$config->project->search['params']['openedBy'] = array('operator' => '=' , 'control' => 'select', 'values' => 'users');
|
||||
$config->project->search['params']['closedBy'] = array('operator' => '=' , 'control' => 'select', 'values' => 'users');
|
||||
$config->project->search['params']['lastEditedDate'] = array('operator' => '=' , 'control' => 'input' , 'values' => '', 'class' => 'date');
|
||||
$config->project->search['params']['closedDate'] = array('operator' => '=' , 'control' => 'input' , 'values' => '', 'class' => 'date');
|
||||
|
||||
$config->project->includedPriv['project'] = array('edit', 'group', 'createGroup', 'managePriv', 'manageMembers', 'manageGroupMember', 'copyGroup', 'editGroup', 'start', 'suspend', 'close', 'activate', 'delete', 'view', 'whitelist', 'addWhitelist', 'unbindWhitelist', 'manageProducts', 'dynamic', 'build', 'bug', 'testcase', 'testtask', 'testreport', 'execution', 'team', 'unlinkMember');
|
||||
$config->project->includedPriv['execution'] = array('create', 'start', 'delete', 'calendar', 'effortCalendar', 'effort', 'taskEffort', 'computeTaskEffort', 'deleterelation', 'maintainrelation', 'relation', 'gantt');
|
||||
$config->project->includedPriv['task'] = array('create');
|
||||
|
||||
@@ -307,6 +307,11 @@ class project extends control
|
||||
$programTitle = $this->loadModel('setting')->getItem('owner=' . $this->app->user->account . '&module=project&key=programTitle');
|
||||
$projectStats = $this->loadModel('program')->getProjectStats($programID, $browseType, $queryID, $orderBy, $pager, $programTitle);
|
||||
|
||||
$actionURL = $this->createLink('project', 'browse', "&programID=$programID&browseType=bySearch&queryID=myQueryID");
|
||||
$this->project->buildSearchFrom($queryID, $actionURL);
|
||||
$projectQuery = $this->session->projectQuery;
|
||||
if($browseType == 'bySearch') $projectStats = $this->project->getBySearch($projectQuery);
|
||||
|
||||
$this->view->title = $this->lang->project->browse;
|
||||
$this->view->position[] = $this->lang->project->browse;
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@ $lang->project->id = '项目编号';
|
||||
$lang->project->project = '所属项目';
|
||||
$lang->project->stage = '阶段';
|
||||
$lang->project->model = '项目管理方式';
|
||||
$lang->project->manageType = '管理类型';
|
||||
$lang->project->PM = '负责人';
|
||||
$lang->project->PO = '项目负责人';
|
||||
$lang->project->QD = '测试负责人';
|
||||
@@ -79,6 +80,7 @@ $lang->project->begin = '计划开始';
|
||||
$lang->project->end = '计划完成';
|
||||
$lang->project->status = '状态';
|
||||
$lang->project->subStatus = '子状态';
|
||||
$lang->project->projectStatus = '项目状态';
|
||||
$lang->project->type = '项目类型';
|
||||
$lang->project->lifetime = '项目周期';
|
||||
$lang->project->attribute = '阶段类型';
|
||||
@@ -227,6 +229,7 @@ $lang->project->currencySymbol['NZD'] = 'NZ$';
|
||||
$lang->project->currencySymbol['THB'] = '฿';
|
||||
$lang->project->currencySymbol['SGD'] = 'S$';
|
||||
|
||||
$lang->project->modelList[''] = "";
|
||||
$lang->project->modelList['scrum'] = "Scrum";
|
||||
$lang->project->modelList['waterfall'] = "瀑布";
|
||||
$lang->project->modelList['kanban'] = "看板";
|
||||
@@ -257,6 +260,7 @@ $lang->project->kanbanSubAclList['program'] = '项目集内公开(所有上级
|
||||
$lang->project->authList['extend'] = '继承 (取系统权限与项目权限的合集)';
|
||||
$lang->project->authList['reset'] = '重新定义 (只取项目权限)';
|
||||
|
||||
$lang->project->statusList[''] = '';
|
||||
$lang->project->statusList['wait'] = '未开始';
|
||||
$lang->project->statusList['doing'] = '进行中';
|
||||
$lang->project->statusList['suspended'] = '已挂起';
|
||||
|
||||
@@ -629,6 +629,39 @@ class projectModel extends model
|
||||
->fetchGroup('productID', 'branchID');
|
||||
}
|
||||
|
||||
/*
|
||||
* Get projects by search conditions.
|
||||
*
|
||||
* @param string $projectQuery
|
||||
* @return array
|
||||
* */
|
||||
public function getBySearch($projectQuery)
|
||||
{
|
||||
$projects = $this->dao->select('*')->from(TABLE_PROJECT)
|
||||
->where($projectQuery)
|
||||
->fetchAll();
|
||||
return $projects;
|
||||
}
|
||||
|
||||
/*
|
||||
* Build search form
|
||||
*
|
||||
* @param int $queryID
|
||||
* @param string $actionURL
|
||||
*
|
||||
* @return 0
|
||||
* */
|
||||
public function buildSearchFrom($queryID, $actionURL)
|
||||
{
|
||||
$this->config->project->search['queryID'] = $queryID;
|
||||
$this->config->project->search['actionURL'] = $actionURL;
|
||||
|
||||
$programPairs = array(0 => '');
|
||||
$programPairs += $this->loadModel('program')->getPairs();
|
||||
$this->config->project->search['params']['parent']['values'] = $programPairs;
|
||||
$this->loadModel('search')->setSearchParams($this->config->project->search);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the query.
|
||||
*
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
<?php echo html::a(inlink('browse', "programID=$programID&browseType=$key"), $label, '', "class='btn btn-link $active'");?>
|
||||
<?php endforeach;?>
|
||||
<?php echo html::checkbox('involved', array('1' => $lang->project->mine), '', $this->cookie->involved ? 'checked=checked' : '');?>
|
||||
<a class="btn btn-link querybox-toggle" id='bysearchTab'><i class="icon icon-search muted"></i> <?php echo '搜索';?></a>
|
||||
</div>
|
||||
<div class="btn-toolbar pull-right">
|
||||
<div class="btn-group panel-actions">
|
||||
@@ -67,6 +68,7 @@
|
||||
</div>
|
||||
<?php endif;?>
|
||||
<div class="main-col">
|
||||
<div class="cell<?php if($browseType == 'bysearch') echo ' show';?>" id="queryBox" data-module='project'></div>
|
||||
<?php if(empty($projectStats)):?>
|
||||
<div class="table-empty-tip">
|
||||
<p>
|
||||
|
||||
Reference in New Issue
Block a user