diff --git a/module/project/control.php b/module/project/control.php index 13ea86cf99..819857e76a 100755 --- a/module/project/control.php +++ b/module/project/control.php @@ -120,41 +120,9 @@ class project extends control */ public function ajaxGetDropMenu($projectID, $module, $method) { - /* Load module. */ - $this->loadModel('program'); - /* Set cookie for show all project. */ $_COOKIE['showClosed'] = 1; - /* Sort project. */ - $programs = array(); - $orderedProjects = array(); - - $projects = $this->dao->select('*')->from(TABLE_PROJECT) - ->where('type')->eq('project') - ->beginIF($this->config->vision)->andWhere('vision')->eq($this->config->vision)->fi() - ->andWhere('deleted')->eq(0) - ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi() - ->orderBy('order_asc,id_desc') - ->fetchAll('id'); - - $programs = $this->program->getPairs(true); - - foreach($projects as $project) - { - $project->parent = $this->program->getTopByID($project->parent); - $project->parent = isset($programs[$project->parent]) ? $project->parent : $project->id; - $orderedProjects[$project->parent][] = $project; - unset($projects[$project->id]); - } - - $this->view->link = $this->project->getProjectLink($module, $method, $projectID); - $this->view->projectID = $projectID; - $this->view->projects = $orderedProjects; - $this->view->module = $module; - $this->view->method = $method; - $this->view->programs = $programs; - $this->display(); } @@ -343,7 +311,7 @@ class project extends control if(empty($project) || $project->type != 'project') return print(js::error($this->lang->notFound) . js::locate('back')); if(!$projectID) $this->locate($this->createLink('project', 'browse')); - setCookie("lastProject", $projectID, $this->config->cookieLife, $this->config->webRoot, '', false, true); + setCookie("lastProject", strVal($projectID), $this->config->cookieLife, $this->config->webRoot, '', false, true); if($project->model == 'kanban' and $this->config->vision != 'lite') { @@ -487,7 +455,6 @@ class project extends control */ public function create($model = 'scrum', $programID = 0, $copyProjectID = 0, $extra = '') { - $this->loadModel('execution'); $this->session->set('projectModel', $model); if($model == 'kanban') unset($this->lang->project->authList['reset']); @@ -522,8 +489,8 @@ class project extends control if($model == 'waterfall' or $model == 'waterfallplus') { $productID = $this->loadModel('product')->getProductIDByProject($projectID, true); - $this->session->set('projectPlanList', $this->createLink('programplan', 'browse', "projectID=$projectID&productID=$productID&type=lists", '', false, $projectID), 'project'); - return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('programplan', 'create', "projectID=$projectID", '', false, $projectID))); + $this->session->set('projectPlanList', $this->createLink('programplan', 'browse', "projectID=$projectID&productID=$productID&type=lists", '', '', $projectID), 'project'); + return $this->send(array('result' => 'success', 'message' => $this->lang->saveSuccess, 'locate' => $this->createLink('programplan', 'create', "projectID=$projectID", '', '', $projectID))); } $parent = isset($_POST['parent']) ? $_POST['parent'] : 0; diff --git a/module/project/model.php b/module/project/model.php index dc14f1ed4b..a3f755b1d8 100755 --- a/module/project/model.php +++ b/module/project/model.php @@ -2,6 +2,25 @@ declare(strict_types=1); class projectModel extends model { + /** + * 获取当前登录用户有权限查看的项目列表. + * Get project list by current user. + * + * @param string $fields + * @access public + * @return array + */ + public function getListByCurrentUser(string $fields = '*') :array + { + return $this->dao->select($fields)->from(TABLE_PROJECT) + ->where('type')->eq('project') + ->beginIF($this->config->vision)->andWhere('vision')->eq($this->config->vision)->fi() + ->andWhere('deleted')->eq(0) + ->beginIF(!$this->app->user->admin)->andWhere('id')->in($this->app->user->view->projects)->fi() + ->orderBy('order_asc,id_desc') + ->fetchAll('id'); + } + /** * Check the privilege. * @@ -594,21 +613,17 @@ class projectModel extends model $project = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->eq($projectID)->fetch(); if(empty($project->multiple)) return $link; + + if(in_array($module, array('testreport', 'testcase'))) + return helper::createLink('project', $module, "projectID=%s"); + + if($module == 'projectstory' && in_array($method, array('story', 'linkstory', 'track'))) + return helper::createLink($module, $method, "projectID=%s"); + + if($module == 'project') $this->buildLinkForProject($module, $method); if(strpos(',project,product,projectstory,story,bug,doc,testcase,testtask,testreport,repo,build,projectrelease,stakeholder,issue,risk,meeting,report,measrecord,', ',' . $module . ',') !== false) { - if($module == 'project' and $method == 'execution') - { - $link = helper::createLink($module, $method, "status=all&projectID=%s"); - } - elseif($module == 'project' and strpos(',bug,testcase,testtask,testreport,build,dynamic,view,manageproducts,team,managemembers,whitelist,addwhitelist,group,', ',' . $method . ',') !== false) - { - $link = helper::createLink($module, $method, "projectID=%s"); - } - elseif($module == 'project' and $method == 'managePriv') - { - $link = helper::createLink($module, 'group', "projectID=%s"); - } - elseif($module == 'product' and $method == 'showerrornone') + if($module == 'product' and $method == 'showerrornone') { $link = helper::createLink('projectstory', 'story', "projectID=%s"); } diff --git a/module/project/tao.php b/module/project/tao.php index 402ad006c7..f33d0aaf6c 100755 --- a/module/project/tao.php +++ b/module/project/tao.php @@ -383,4 +383,74 @@ class projectTao extends projectModel return !dao::isError(); } + + /** + * 生成project模块的项目下拉框跳转链接. + * Build project link in project page. + * + * @param string $method + * @access protected + * @return string + */ + protected function buildLinkForProject(string $method) :string + { + if($method == 'execution') + return helper::createLink($module, $method, "status=all&projectID=%s"); + + if($method == 'managePriv') + return helper::createLink($module, 'group', "projectID=%s"); + + if($method == 'showerrornone') + return helper::createLink('projectstory', 'story', "projectID=%s"); + + $methods = ',bug,testcase,testtask,testreport,build,dynamic,view,manageproducts,team,managemembers,whitelist,addwhitelist,group,'; + if(strpos($methods, ',' . $method . ',') !== false) + return helper::createLink($module, $method, "projectID=%s"); + } + + /** + * 生成bug模块的项目下拉框跳转链接. + * Build project link in bug page. + * + * @param string $method + * @access protected + * @return string + */ + protected function buildLinkForBug(string $method) :string + { + if($method == 'create') + return helper::createLink($module, $method, "productID=0&branch=0&extras=projectID=%s"); + + if($method == 'edit') + return helper::createLink('project', 'bug', "projectID=%s"); + } + + /** + * 生成story模块的项目下拉框跳转链接. + * Build project link in story page. + * + * @param string $method + * @access protected + * @return string + */ + protected function buildLinkForStory(string $method) :string + { + if($method == 'change' or $method == 'create') + return helper::createLink('projectstory', 'story', "projectID=%s"); + if($method == 'zerocase') + return helper::createLink('project', 'testcase', "projectID=%s"); + } + + protected function buildLinkForTask if($module == 'testtask') + { + if($method == 'browseunits') + { + $link = helper::createLink('project', 'testcase', "projectID=%s"); + } + else + { + $link = helper::createLink('project', 'testtask', "projectID=%s"); + } + } + } diff --git a/module/project/test/model/getlistbycurrentuser.php b/module/project/test/model/getlistbycurrentuser.php new file mode 100644 index 0000000000..1ed4729f55 --- /dev/null +++ b/module/project/test/model/getlistbycurrentuser.php @@ -0,0 +1,32 @@ +#!/usr/bin/env php +gen(5); + +/** + +title=测试 projectModel->getListByCurrentUser(); +timeout=0 +cid=1 + +- 执行projectModel模块的getListByCurrentUser方法 @1 + +- 执行projectModel模块的getListByCurrentUser方法 @1 + +- 执行projectModel模块的getListByCurrentUser方法 + - 第11条的id属性 @11 + - 第11条的name属性 @项目1 + + + +*/ + +global $tester; +$projectModel = $tester->loadModel('project'); + +r(count($projectModel->getListByCurrentUser())) && p() && e('1'); +r(count($projectModel->getListByCurrentUser())) && p() && e('1'); +r($projectModel->getListByCurrentUser()) && p('11:id,name') && e('11,项目1'); \ No newline at end of file diff --git a/module/project/zen.php b/module/project/zen.php index 41c84691e6..abdd7216ee 100644 --- a/module/project/zen.php +++ b/module/project/zen.php @@ -447,4 +447,43 @@ class projectZen extends project $this->view->actions = $this->loadModel('action')->getList('project', $projectID); $this->display(); } + + /** + * 获取项目下拉选择框 + * Get project drop menu. + * + * @param int $projectID + * @param int $module + * @param int $method + * @access protected + * @return void + */ + protected function getDropMenu(int $projectID, string $module, string $method) :void + { + $this->loadModel('program'); + + $programs = array(); + $orderedProjects = array(); + + $projects = $this->project->getListByCurrentUser(); + $programs = $this->program->getPairs(true); + $link = $this->project->getProjectLink($module, $method, $projectID); + + foreach($projects as $project) + { + $project->parent = $this->program->getTopByID($project->parent); + $project->parent = isset($programs[$project->parent]) ? $project->parent : $project->id; + $orderedProjects[$project->parent][] = $project; + unset($projects[$project->id]); + } + + $this->view->link = $link; + $this->view->projectID = $projectID; + $this->view->projects = $orderedProjects; + $this->view->module = $module; + $this->view->method = $method; + $this->view->programs = $programs; + + $this->display(); + } }