From 1faa97ccb94251c6bb5d8876db23f077907c7f02 Mon Sep 17 00:00:00 2001 From: tanghucheng Date: Thu, 16 Nov 2023 01:27:20 -0500 Subject: [PATCH] * Merge module product into merge184. --- module/product/control.php | 2 ++ module/product/model.php | 21 ++++++++++++--------- module/product/tao.php | 4 ++-- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/module/product/control.php b/module/product/control.php index 3dc80a840a..83952c618e 100755 --- a/module/product/control.php +++ b/module/product/control.php @@ -585,6 +585,8 @@ class product extends control $products = $this->product->getList($programID, $browseType); } + $this->product->refreshStats(); // Refresh stats fields of products. + $this->app->loadClass('pager', true); $pager = new pager($recTotal, $recPerPage, $pageID); $productStatList = $this->product->getStats(array_keys($products), $orderBy, $pager, 'story', $programID); diff --git a/module/product/model.php b/module/product/model.php index 85204634af..33fc24f964 100755 --- a/module/product/model.php +++ b/module/product/model.php @@ -21,11 +21,7 @@ class productModel extends model */ public function checkPriv(int $productID): bool { - if(empty($productID)) return false; - - /* Is admin? */ - if($this->app->user->admin) return true; - return (strpos(",{$this->app->user->view->products},", ",{$productID},") !== false); + return !empty($productID) && ($this->app->user->admin || (strpos(",{$this->app->user->view->products},", ",{$productID},") !== false)); } /** @@ -732,6 +728,9 @@ class productModel extends model if(empty($product) && isset($products[$productID])) $product = array($productID => $products[$productID]); $searchConfig['params']['product']['values'] = $product + array('all' => $this->lang->product->allProduct); + /* Get product stage data. */ + $this->config->product->search['params']['stage']['values'] = array('' => '') + $this->lang->story->stageList; + /* Get module data. */ $projectID = ($this->app->tab == 'project' && empty($projectID)) ? $this->session->project : $projectID; $searchConfig['params']['module']['values'] = $this->productTao->getModulesForSearchForm($productID, $products, $branch, $projectID); @@ -1592,12 +1591,16 @@ class productModel extends model * @param int $limit * @param int $line * @param string|int $shadow all | 0 | 1 + * @param string $fields * or fieldList, such as id,name,program * @access protected * @return array */ - protected function getList(int $programID = 0, string $status = 'all', int $limit = 0, int $line = 0, string|int $shadow = 0): array + protected function getList(int $programID = 0, string $status = 'all', int $limit = 0, int $line = 0, string|int $shadow = 0, string $fields = '*'): array { - return $this->dao->select('DISTINCT t1.*,t2.order')->from(TABLE_PRODUCT)->alias('t1') + $fields = explode(',', $fields); + $fields = trim(implode(',t1.', $fields), ','); + + return $this->dao->select("DISTINCT t1.$fields,t2.order")->from(TABLE_PRODUCT)->alias('t1') ->leftJoin(TABLE_PROGRAM)->alias('t2')->on('t1.program = t2.id') ->leftJoin(TABLE_PROJECTPRODUCT)->alias('t3')->on('t3.product = t1.id') ->leftJoin(TABLE_TEAM)->alias('t4')->on("t4.root = t3.project and t4.type='project'") @@ -1605,9 +1608,9 @@ class productModel extends model ->beginIF($shadow !== 'all')->andWhere('t1.shadow')->eq((int)$shadow)->fi() ->beginIF($programID)->andWhere('t1.program')->eq($programID)->fi() ->beginIF($line > 0)->andWhere('t1.line')->eq($line)->fi() - ->beginIF(!$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->products)->fi() + ->beginIF(strpos($status, 'feedback') === false && !$this->app->user->admin)->andWhere('t1.id')->in($this->app->user->view->products)->fi() ->andWhere("FIND_IN_SET('{$this->config->vision}', t1.vision)") - ->beginIF($status == 'noclosed')->andWhere('t1.status')->ne('closed')->fi() + ->beginIF(strpos($status, 'noclosed') !== false)->andWhere('t1.status')->ne('closed')->fi() ->beginIF(!in_array($status, array('all', 'noclosed', 'involved', 'review'), true))->andWhere('t1.status')->in($status)->fi() ->beginIF($status == 'involved') ->andWhere('t1.PO', true)->eq($this->app->user->account) diff --git a/module/product/tao.php b/module/product/tao.php index 4b1473140a..321ec8091d 100644 --- a/module/product/tao.php +++ b/module/product/tao.php @@ -86,7 +86,7 @@ class productTao extends productModel ->beginIF($browseType == 'undone')->andWhere('t2.status')->in('wait,doing')->fi() ->beginIF(strpos(",all,undone,", ",$browseType,") === false)->andWhere('t2.status')->eq($browseType)->fi() ->beginIF(!$this->app->user->admin)->andWhere('t2.id')->in($this->app->user->view->projects)->fi() - ->beginIF($branch !== '' and $branch !== 'all')->andWhere('t1.branch')->in($branch)->fi() + ->beginIF($branch !== 'all')->andWhere('t1.branch')->in($branch)->fi() ->andWhere('t2.deleted')->eq('0') ->orderBy($orderBy) ->page($pager, 't2.id') @@ -125,7 +125,7 @@ class productTao extends productModel ->markRight(1) ->orWhere("CONCAT(',', t2.whitelist, ',')")->like("%,{$this->app->user->account},%") ->markRight(1) - ->beginIF($branch !== '' and $branch !== 'all')->andWhere('t1.branch')->in($branch)->fi() + ->beginIF($branch !== 'all')->andWhere('t1.branch')->in($branch)->fi() ->andWhere('t2.deleted')->eq('0') ->orderBy($orderBy) ->page($pager, 't2.id')