* Modify ajaxGetDropMenu.

This commit is contained in:
zhaoke
2023-04-28 15:59:21 +08:00
parent 52622959cd
commit f6c570d551
5 changed files with 172 additions and 49 deletions
+3 -36
View File
@@ -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;
+28 -13
View File
@@ -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");
}
+70
View File
@@ -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");
}
}
}
@@ -0,0 +1,32 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . "/test/lib/init.php";
su('admin');
$project = zdTable('project');
$project->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');
+39
View File
@@ -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();
}
}