* Refactor setMenu method.

This commit is contained in:
tianshujie
2023-08-29 08:47:54 +08:00
parent e4b93a4df0
commit 4861e00acd
4 changed files with 81 additions and 69 deletions
+45 -58
View File
@@ -95,51 +95,31 @@ class executionModel extends model
}
/**
* 设置执行导航。
* Set menu.
*
* @param int $executionID
* @param int $buildID
* @param string $extra
* @access public
* @return void
*/
public function setMenu($executionID, $buildID = 0, $extra = '')
public function setMenu(int $executionID)
{
$execution = $this->getByID($executionID);
if(!$execution) return;
if($execution and $execution->type == 'kanban')
{
global $lang;
$lang->executionCommon = $lang->execution->kanban;
include $this->app->getModulePath('', 'execution') . 'lang/' . $this->app->getClientLang() . '.php';
$this->lang->execution->menu = new stdclass();
$this->lang->execution->menu->kanban = array('link' => "{$this->lang->kanban->common}|execution|kanban|executionID=%s", 'subModule' => 'task');
$this->lang->execution->menu->CFD = array('link' => "{$this->lang->execution->CFD}|execution|cfd|executionID=%s");
$this->lang->execution->menu->build = array('link' => "{$this->lang->build->common}|execution|build|executionID=%s");
$this->lang->execution->menu->settings = array('link' => "{$this->lang->settings}|execution|view|executionID=%s", 'subModule' => 'personnel', 'alias' => 'edit,manageproducts,team,whitelist,addwhitelist,managemembers', 'class' => 'dropdown dropdown-hover');
$this->lang->execution->dividerMenu = '';
$this->lang->execution->menu->settings['subMenu'] = new stdclass();
$this->lang->execution->menu->settings['subMenu']->view = array('link' => "{$this->lang->overview}|execution|view|executionID=%s", 'subModule' => 'view', 'alias' => 'edit,start,suspend,putoff,close');
$this->lang->execution->menu->settings['subMenu']->products = array('link' => "{$this->lang->productCommon}|execution|manageproducts|executionID=%s");
$this->lang->execution->menu->settings['subMenu']->team = array('link' => "{$this->lang->team->common}|execution|team|executionID=%s", 'alias' => 'managemembers');
$this->lang->execution->menu->settings['subMenu']->whitelist = array('link' => "{$this->lang->whitelist}|execution|whitelist|executionID=%s", 'subModule' => 'personnel', 'alias' => 'addwhitelist');
}
if($execution->type == 'kanban') $this->executionTao->setKanbanMenu();
$project = $this->loadModel('project')->getByID($execution->project);
if($execution->type == 'stage' || (!empty($project) && $project->model == 'waterfallplus')) unset($this->lang->execution->menu->settings['subMenu']->products);
if($execution->type == 'stage' or (!empty($project) and $project->model == 'waterfallplus')) unset($this->lang->execution->menu->settings['subMenu']->products);
if(!$this->app->user->admin and strpos(",{$this->app->user->view->sprints},", ",$executionID,") === false and !commonModel::isTutorialMode() and $executionID != 0) return print(js::error($this->lang->execution->accessDenied) . js::locate('back'));
/* Check execution permission. */
$executions = $this->getPairs(0, 'all', 'nocode');
if(!$executionID and $this->session->execution) $executionID = $this->session->execution;
if(!$executionID or !in_array($executionID, array_keys($executions))) $executionID = key($executions);
$this->session->set('execution', $executionID, $this->app->tab);
if(!$executionID && $this->session->execution) $executionID = $this->session->execution;
if(!$executionID || !in_array($executionID, array_keys($executions))) $executionID = key($executions);
if($executions && (!isset($executions[$executionID]) || !$this->checkPriv($executionID))) return $this->accessDenied();
if($execution and $execution->type == 'stage')
/* Replaces the iterated language with the stage. */
if($execution->type == 'stage')
{
global $lang;
$this->app->loadLang('project');
@@ -147,9 +127,41 @@ class executionModel extends model
include $this->app->getModulePath('', 'execution') . 'lang/' . $this->app->getClientLang() . '.php';
}
if(isset($execution->acl) and $execution->acl != 'private') unset($this->lang->execution->menu->settings['subMenu']->whitelist);
/* Set secondary navigation based on the conditions. */
$this->removeMenu($execution);
if($this->cookie->executionMode == 'noclosed' && $execution && ($execution->status == 'done' || $execution->status == 'closed'))
{
helper::setcookie('executionMode', 'all');
$this->cookie->executionMode = 'all';
}
$this->session->set('execution', $executionID, $this->app->tab);
common::setMenuVars('execution', $executionID);
/* Set stroy navigation for no-product project. */
$this->loadModel('project')->setNoMultipleMenu($executionID);
if(isset($this->lang->execution->menu->storyGroup)) unset($this->lang->execution->menu->storyGroup);
if(isset($this->lang->execution->menu->story['dropMenu']) && $this->app->getMethodName() == 'storykanban')
{
unset($this->lang->execution->menu->story['dropMenu']);
$this->lang->execution->menu->story['link'] = str_replace(array($this->lang->common->story, 'story'), array($this->lang->SRCommon, 'storykanban'), $this->lang->execution->menu->story['link']);
}
}
/**
* 根据条件设置执行二级导航。
* Set secondary navigation based on the conditions.
*
* @param object $execution
* @access public
* @return void
*/
public function removeMenu(object $execution)
{
if(empty($execution->hasProduct)) unset($this->lang->execution->menu->settings['subMenu']->products);
if(isset($execution->acl) && $execution->acl != 'private') unset($this->lang->execution->menu->settings['subMenu']->whitelist);
/* Redjust menus. */
$features = $this->getExecutionFeatures($execution);
if(!$features['story']) unset($this->lang->execution->menu->story);
if(!$features['story']) unset($this->lang->execution->menu->view['subMenu']->groupTask);
@@ -159,32 +171,7 @@ class executionModel extends model
if(!$features['build']) unset($this->lang->execution->menu->build);
if(!$features['burn']) unset($this->lang->execution->menu->burn);
if(!$features['other']) unset($this->lang->execution->menu->other);
if(!$features['story'] and $this->config->edition == 'open') unset($this->lang->execution->menu->view);
if($executions and (!isset($executions[$executionID]) or !$this->checkPriv($executionID))) $this->accessDenied();
$moduleName = $this->app->getModuleName();
$methodName = $this->app->getMethodName();
if($this->cookie->executionMode == 'noclosed' and $execution and ($execution->status == 'done' or $execution->status == 'closed'))
{
helper::setcookie('executionMode', 'all');
$this->cookie->executionMode = 'all';
}
if(empty($execution->hasProduct)) unset($this->lang->execution->menu->settings['subMenu']->products);
$this->lang->switcherMenu = $this->getSwitcher($executionID, $this->app->rawModule, $this->app->rawMethod);
common::setMenuVars('execution', $executionID);
$this->loadModel('project')->setNoMultipleMenu($executionID);
if(isset($this->lang->execution->menu->storyGroup)) unset($this->lang->execution->menu->storyGroup);
if(isset($this->lang->execution->menu->story['dropMenu']) and $methodName == 'storykanban')
{
unset($this->lang->execution->menu->story['dropMenu']);
$this->lang->execution->menu->story['link'] = str_replace(array($this->lang->common->story, 'story'), array($this->lang->SRCommon, 'storykanban'), $this->lang->execution->menu->story['link']);
}
if(!$features['story'] && $this->config->edition == 'open') unset($this->lang->execution->menu->view);
}
/**
+27
View File
@@ -75,4 +75,31 @@ class executionTao extends executionModel
}
return $productList;
}
/**
* 设置看板执行的菜单。
* Set kanban menu.
*
* @access protected
* @return void
*/
protected function setKanbanMenu()
{
global $lang;
$lang->executionCommon = $lang->execution->kanban;
include $this->app->getModulePath('', 'execution') . 'lang/' . $this->app->getClientLang() . '.php';
$this->lang->execution->menu = new stdclass();
$this->lang->execution->menu->kanban = array('link' => "{$this->lang->kanban->common}|execution|kanban|executionID=%s", 'subModule' => 'task');
$this->lang->execution->menu->CFD = array('link' => "{$this->lang->execution->CFD}|execution|cfd|executionID=%s");
$this->lang->execution->menu->build = array('link' => "{$this->lang->build->common}|execution|build|executionID=%s");
$this->lang->execution->menu->settings = array('link' => "{$this->lang->settings}|execution|view|executionID=%s", 'subModule' => 'personnel', 'alias' => 'edit,manageproducts,team,whitelist,addwhitelist,managemembers', 'class' => 'dropdown dropdown-hover');
$this->lang->execution->dividerMenu = '';
$this->lang->execution->menu->settings['subMenu'] = new stdclass();
$this->lang->execution->menu->settings['subMenu']->view = array('link' => "{$this->lang->overview}|execution|view|executionID=%s", 'subModule' => 'view', 'alias' => 'edit,start,suspend,putoff,close');
$this->lang->execution->menu->settings['subMenu']->products = array('link' => "{$this->lang->productCommon}|execution|manageproducts|executionID=%s");
$this->lang->execution->menu->settings['subMenu']->team = array('link' => "{$this->lang->team->common}|execution|team|executionID=%s", 'alias' => 'managemembers');
$this->lang->execution->menu->settings['subMenu']->whitelist = array('link' => "{$this->lang->whitelist}|execution|whitelist|executionID=%s", 'subModule' => 'personnel', 'alias' => 'addwhitelist');
}
}
+6 -5
View File
@@ -2671,13 +2671,14 @@ class executionTest
}
/**
* Test set menu.
* 设置看板执行的菜单。
* Set kanban menu.
*
* @param int $executionID
* @param int $executionID
* @access public
* @return string
* @return object|string
*/
public function setMenuTest($executionID = 0)
public function setMenuTest($executionID = 0): object|string
{
$execution = $this->executionModel->getByID($executionID);
if(empty($execution)) return '0';
@@ -2685,7 +2686,7 @@ class executionTest
$this->executionModel->setMenu($executionID);
global $lang;
return strip_tags($lang->switcherMenu);
return $lang->execution->menu;
}
/**
+3 -6
View File
@@ -20,15 +20,12 @@ $execution->gen(5);
/**
title=测试 executionModel::setMenu();
timeout=0
cid=1
pid=1
执行存在的情况 >> 迭代1
执行不存在的情况 >> 0
*/
$executionTester = new executionTest();
r($executionTester->setMenuTest(3)) && p() && e('迭代1'); // 执行存在的情况
r($executionTester->setMenuTest(10)) && p() && e('0'); // 执行不存在的情况
r($executionTester->setMenuTest(3)) && p('more:link') && e('更多|execution|more|3'); // 执行存在的情况
r($executionTester->setMenuTest(10)) && p() && e('0'); // 执行不存在的情况