From 0695047d20ab499b683aa5dd81f74a46441d395e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=99=E5=8D=8E=E4=BC=9F?= Date: Wed, 11 May 2022 15:40:59 +0800 Subject: [PATCH] *Finish task #53659. --- module/program/model.php | 6 ++-- module/project/config.php | 37 +++++++++++++++++++++++ module/project/control.php | 5 +++ module/project/lang/zh-cn.php | 4 +++ module/project/model.php | 33 ++++++++++++++++++++ module/project/view/browsebylist.html.php | 2 ++ 6 files changed, 84 insertions(+), 3 deletions(-) diff --git a/module/program/model.php b/module/program/model.php index baff7f83d0..da8f3dd75a 100644 --- a/module/program/model.php +++ b/module/program/model.php @@ -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) diff --git a/module/project/config.php b/module/project/config.php index a9e7474d96..9c8be57d6b 100644 --- a/module/project/config.php +++ b/module/project/config.php @@ -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'); diff --git a/module/project/control.php b/module/project/control.php index e46b59976d..e99b77f51e 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -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; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index 551d4649ed..ba4ec95a1f 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -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'] = '已挂起'; diff --git a/module/project/model.php b/module/project/model.php index ab4804577c..65b2b5717f 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -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. * diff --git a/module/project/view/browsebylist.html.php b/module/project/view/browsebylist.html.php index 93a0f68599..df3626ef01 100644 --- a/module/project/view/browsebylist.html.php +++ b/module/project/view/browsebylist.html.php @@ -40,6 +40,7 @@ $lang->project->mine), '', $this->cookie->involved ? 'checked=checked' : '');?> +
@@ -67,6 +68,7 @@
+