From b167243b48a4dc276c55e85a12eaa6b8e477f8a0 Mon Sep 17 00:00:00 2001 From: zhouxin Date: Fri, 10 Jun 2022 02:31:24 +0000 Subject: [PATCH] * Finish task #56467. --- module/doc/model.php | 47 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/module/doc/model.php b/module/doc/model.php index b476f43f03..b4c4f8db81 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -357,7 +357,7 @@ class docModel extends model if($this->session->contributeDocQuery == false) $this->session->set('contributeDocQuery', ' 1 = 1'); } - $query = $this->session->contributeDocQuery; + $query = $this->getDocQuery($this->session->contributeDocQuery); $docIDList = $this->dao->select('objectID')->from(TABLE_ACTION) ->where('objectType')->eq('doc') ->andWhere('actor')->eq($this->app->user->account) @@ -481,6 +481,51 @@ class docModel extends model return $docs; } + /** + * Replace all in query. + * + * @param string $query + * @access public + * @return string + */ + public function getDocQuery($query) + { + $allLibs = "`lib` = 'all'"; + if(strpos($query, $allLibs) !== false) + { + $libs = $this->loadModel('doc')->getLibs('all', 'withObject'); + $query = str_replace($allLibs, '1', $query); + $query = $query . ' AND `lib` ' . helper::dbIN($libs); + } + + $allProject = "`project` = 'all'"; + if(strpos($query, $allProject) !== false) + { + $projectIDList = $this->loadModel('bug')->getAllProjectIds(); + if(is_array($projectIDList)) $projectIDList = implode(',', $projectIDList); + $query = str_replace($allProject, '1', $query); + $query = $query . ' AND `project` in (' . $projectIDList . ')'; + } + + $allProduct = "`product` = 'all'"; + if(strpos($query, $allProduct) !== false) + { + $products = $this->app->user->view->products; + $query = str_replace($allProduct, '1', $query); + $query = $query . ' AND `product` ' . helper::dbIN($products); + } + + $allExecutions = "`execution` = 'all'"; + if(strpos($query, $allExecutions) !== false) + { + $executions = $this->loadModel('execution')->getPairs(); + $query = str_replace($allExecutions, '1', $query); + $query = $query . ' AND `execution` ' . helper::dbIN(array_keys($executions)); + } + + return $query; + } + /** * Get projects, executions and products by docIdList. *