From 1e928ed625e113a435c9ff4a7de902c20ed8b60e Mon Sep 17 00:00:00 2001 From: wangyidong Date: Thu, 29 Sep 2022 09:50:11 +0800 Subject: [PATCH] * code for task #70541. --- framework/base/router.class.php | 12 ++++- module/common/lang/menu.php | 6 ++- module/group/js/managepriv.js | 3 +- module/group/lang/resource.php | 65 +++++++++++++----------- module/group/model.php | 34 +++++-------- module/group/view/privbygroup.html.php | 2 +- module/project/control.php | 2 +- module/project/lang/de.php | 3 ++ module/project/lang/en.php | 3 ++ module/project/lang/fr.php | 3 ++ module/project/lang/zh-cn.php | 3 ++ module/project/model.php | 9 +--- module/project/view/createguide.html.php | 2 + 13 files changed, 82 insertions(+), 65 deletions(-) diff --git a/framework/base/router.class.php b/framework/base/router.class.php index 56b6690cb5..9db231e3f4 100644 --- a/framework/base/router.class.php +++ b/framework/base/router.class.php @@ -996,7 +996,14 @@ class baseRouter if($writable) { $ztSessionHandler = new ztSessionHandler($_GET['tid']); - session_set_save_handler($ztSessionHandler, true); + session_set_save_handler( + array($ztSessionHandler, "open"), + array($ztSessionHandler, "close"), + array($ztSessionHandler, "read"), + array($ztSessionHandler, "write"), + array($ztSessionHandler, "destroy"), + array($ztSessionHandler, "gc") + ); } } @@ -3140,7 +3147,7 @@ class EndResponseException extends \Exception * * @package framework */ -class ztSessionHandler implements SessionHandlerInterface +class ztSessionHandler { public $sessSavePath; public $tagID; @@ -3160,6 +3167,7 @@ class ztSessionHandler implements SessionHandlerInterface { $this->tagID = $tagID; ini_set('session.save_handler', 'files'); + register_shutdown_function('session_write_close'); } /** diff --git a/module/common/lang/menu.php b/module/common/lang/menu.php index 6ae0c72573..ba619a70f1 100644 --- a/module/common/lang/menu.php +++ b/module/common/lang/menu.php @@ -562,8 +562,10 @@ if($config->edition == 'max') $lang->admin->menu->model['dropMenu']->scrum = array('link' => "{$lang->scrumModel}|process|scrumbrowse|processID=0&browseType=scrum", 'subModule' => 'auditcl,process,activity,zoutput,classify,'); } } - -$lang->admin->menu->model['dropMenu']->waterfall = array('link' => "{$lang->waterfallModel}|stage|setType|", 'subModule' => 'stage,auditcl,cmcl,process,activity,zoutput,classify,reviewcl,reviewsetting,design'); +if(strpos(",$config->disabledFeatures,", ',waterfall,') === false) +{ + $lang->admin->menu->model['dropMenu']->waterfall = array('link' => "{$lang->waterfallModel}|stage|setType|", 'subModule' => 'stage,auditcl,cmcl,process,activity,zoutput,classify,reviewcl,reviewsetting,design'); +} $lang->admin->menu->allModel['subMenu'] = new stdclass(); $lang->admin->menu->allModel['subMenu']->storyConcept = array('link' => "{$lang->storyConcept}|custom|browsestoryconcept|"); diff --git a/module/group/js/managepriv.js b/module/group/js/managepriv.js index 6b7ac166ac..51fe3f653d 100644 --- a/module/group/js/managepriv.js +++ b/module/group/js/managepriv.js @@ -20,7 +20,8 @@ function setModuleActions(module) function setNoChecked() { var noCheckValue = ''; - $(':checkbox').each(function(){ + $(':checkbox').each(function() + { if(!$(this).prop('checked') && $(this).next('span').attr('id') != undefined) noCheckValue = noCheckValue + ',' + $(this).next('span').attr('id'); }) $('#noChecked').val(noCheckValue); diff --git a/module/group/lang/resource.php b/module/group/lang/resource.php index 9b91f33276..d5624d1272 100644 --- a/module/group/lang/resource.php +++ b/module/group/lang/resource.php @@ -320,7 +320,9 @@ $lang->stakeholder->methodOrder[75] = 'viewExpect'; $lang->stakeholder->methodOrder[80] = 'userIssue'; global $config; -if($config->systemMode == 'new' || (defined('IN_UPGRADE') && IN_UPGRADE)) +$hasWaterfall = strpos(",$config->disabledFeatures,", ',waterfall,') === false || (defined('IN_UPGRADE') && IN_UPGRADE); +$isURSR = $config->URAndSR || (defined('IN_UPGRADE') && IN_UPGRADE); +if($hasWaterfall) { /* Design. */ $lang->resource->design = new stdclass(); @@ -348,6 +350,33 @@ if($config->systemMode == 'new' || (defined('IN_UPGRADE') && IN_UPGRADE)) $lang->design->methodOrder[50] = 'unlinkCommit'; $lang->design->methodOrder[55] = 'revision'; + /* Program plan. */ + $lang->resource->programplan = new stdclass(); + $lang->resource->programplan->create = 'create'; + $lang->resource->programplan->edit = 'edit'; + + $lang->programplan->methodOrder[0] = 'create'; + $lang->programplan->methodOrder[5] = 'edit'; + + /* Stage. */ + $lang->resource->stage = new stdclass(); + $lang->resource->stage->browse = 'browse'; + $lang->resource->stage->create = 'create'; + $lang->resource->stage->batchCreate = 'batchCreate'; + $lang->resource->stage->edit = 'edit'; + $lang->resource->stage->setType = 'setType'; + $lang->resource->stage->delete = 'delete'; + + $lang->stage->methodOrder[5] = 'browse'; + $lang->stage->methodOrder[10] = 'create'; + $lang->stage->methodOrder[15] = 'batchCreate'; + $lang->stage->methodOrder[20] = 'edit'; + $lang->stage->methodOrder[25] = 'setType'; + $lang->stage->methodOrder[30] = 'delete'; +} + +if($config->systemMode == 'new' || (defined('IN_UPGRADE') && IN_UPGRADE)) +{ /* Program. */ $lang->resource->program = new stdclass(); $lang->resource->program->browse = 'browse'; @@ -389,38 +418,14 @@ if($config->systemMode == 'new' || (defined('IN_UPGRADE') && IN_UPGRADE)) $lang->program->methodOrder[90] = 'unbindWhitelist'; $lang->program->methodOrder[95] = 'updateOrder'; - /* Program plan. */ - $lang->resource->programplan = new stdclass(); - $lang->resource->programplan->create = 'create'; - $lang->resource->programplan->edit = 'edit'; - - $lang->programplan->methodOrder[0] = 'create'; - $lang->programplan->methodOrder[5] = 'edit'; - $lang->resource->project->programTitle = 'moduleOpen'; - - /* Stage. */ - $lang->resource->stage = new stdclass(); - $lang->resource->stage->browse = 'browse'; - $lang->resource->stage->create = 'create'; - $lang->resource->stage->batchCreate = 'batchCreate'; - $lang->resource->stage->edit = 'edit'; - $lang->resource->stage->setType = 'setType'; - $lang->resource->stage->delete = 'delete'; - - $lang->stage->methodOrder[5] = 'browse'; - $lang->stage->methodOrder[10] = 'create'; - $lang->stage->methodOrder[15] = 'batchCreate'; - $lang->stage->methodOrder[20] = 'edit'; - $lang->stage->methodOrder[25] = 'setType'; - $lang->stage->methodOrder[30] = 'delete'; } /* Product. */ $lang->resource->product = new stdclass(); $lang->resource->product->index = 'indexAction'; $lang->resource->product->browse = 'browse'; -if($config->URAndSR) $lang->resource->product->requirement = 'requirement'; +if($isURSR) $lang->resource->product->requirement = 'requirement'; $lang->resource->product->create = 'create'; $lang->resource->product->view = 'view'; $lang->resource->product->edit = 'edit'; @@ -444,7 +449,7 @@ $lang->resource->product->unbindWhitelist = 'unbindWhitelist'; $lang->product->methodOrder[0] = 'index'; $lang->product->methodOrder[5] = 'browse'; -if($config->URAndSR) $lang->product->methodOrder[6] = 'requirement'; +if($isURSR) $lang->product->methodOrder[6] = 'requirement'; $lang->product->methodOrder[10] = 'create'; $lang->product->methodOrder[15] = 'view'; $lang->product->methodOrder[20] = 'edit'; @@ -491,7 +496,7 @@ $lang->resource->story = new stdclass(); $lang->resource->story->create = 'create'; $lang->resource->story->batchCreate = 'batchCreate'; $lang->resource->story->edit = 'editAction'; -if($config->URAndSR) $lang->resource->story->linkStory = 'linkStory'; +if($isURSR) $lang->resource->story->linkStory = 'linkStory'; $lang->resource->story->batchEdit = 'batchEdit'; $lang->resource->story->export = 'exportAction'; $lang->resource->story->delete = 'deleteAction'; @@ -540,14 +545,14 @@ $lang->story->methodOrder[90] = 'tasks'; $lang->story->methodOrder[95] = 'bugs'; $lang->story->methodOrder[100] = 'cases'; $lang->story->methodOrder[105] = 'report'; -if($config->URAndSR) $lang->story->methodOrder[110] = 'linkStory'; +if($isURSR) $lang->story->methodOrder[110] = 'linkStory'; $lang->story->methodOrder[115] = 'batchChangeBranch'; $lang->story->methodOrder[120] = 'batchChangeModule'; $lang->story->methodOrder[125] = 'batchToTask'; $lang->story->methodOrder[130] = 'processStoryChange'; $lang->story->methodOrder[135] = 'linkStories'; -if($config->URAndSR) +if($isURSR) { /* Requirement. */ $lang->resource->requirement = new stdclass(); diff --git a/module/group/model.php b/module/group/model.php index e0b8cfb593..13f08d2270 100644 --- a/module/group/model.php +++ b/module/group/model.php @@ -402,6 +402,7 @@ class groupModel extends model */ public function updatePrivByGroup($groupID, $menu, $version) { + /* Delete old. */ /* Set priv when have version. */ if($version) { @@ -416,27 +417,19 @@ class groupModel extends model $this->dao->delete()->from(TABLE_GROUPPRIV)->where('`group`')->eq($groupID)->andWhere('module')->eq($module)->andWhere('method')->eq($method)->exec(); } } - - /* Replace new. */ - if($this->post->actions) - { - foreach($this->post->actions as $moduleName => $moduleActions) - { - foreach($moduleActions as $actionName) - { - $data = new stdclass(); - $data->group = $groupID; - $data->module = $moduleName; - $data->method = $actionName; - $this->dao->replace(TABLE_GROUPPRIV)->data($data)->exec(); - } - } - } - return true; } - - /* Delete old. */ - $this->dao->delete()->from(TABLE_GROUPPRIV)->where('`group`')->eq($groupID)->andWhere('module')->in($this->getMenuModules($menu))->exec(); + else + { + foreach($this->getMenuModules($menu) as $moduleName) + { + $methodList = (array)zget($this->lang->resource, $moduleName, array()); + $methodList = array_keys($methodList); + $this->dao->delete()->from(TABLE_GROUPPRIV)->where('`group`')->eq($groupID) + ->andWhere('module')->eq($moduleName) + ->beginIF($methodList)->andWhere('method')->in($methodList)->fi() + ->exec(); + } + } /* Insert new. */ if($this->post->actions) @@ -453,7 +446,6 @@ class groupModel extends model } } } - return true; } diff --git a/module/group/view/privbygroup.html.php b/module/group/view/privbygroup.html.php index c6007257d3..c9b8d47a0d 100644 --- a/module/group/view/privbygroup.html.php +++ b/module/group/view/privbygroup.html.php @@ -64,8 +64,8 @@ if($i >= $config->group->maxToolBarCount) echo '
  • '; echo html::a(inlink('managePriv', sprintf($params, $module)), "" . strip_tags(substr($title, 0, strpos($title, '|'))) . '', '', "class='btn btn-link $active'"); if($i >= $config->group->maxToolBarCount) echo '
  • '; - if($i == count($lang->mainNav->menuOrder) and $i >= $config->group->maxToolBarCount) echo ''; } + if($i >= $config->group->maxToolBarCount) echo ''; ?> diff --git a/module/project/control.php b/module/project/control.php index 3ce136ea03..6c1f8664fc 100644 --- a/module/project/control.php +++ b/module/project/control.php @@ -757,7 +757,7 @@ class project extends control $this->view->availableBudget = $this->program->getBudgetLeft($parentProject) + (float)$project->budget; $this->view->budgetUnitList = $this->project->getBudgetUnitList(); $this->view->model = $project->model; - $this->view->disableModel = (isset($canChangeModel) and $canChangeModel == true) ? '' : 'disabled'; + $this->view->disableModel = (isset($canChangeModel) and $canChangeModel) ? '' : 'disabled'; $this->view->teamMembers = $this->user->getTeamMemberPairs($projectID, 'project'); $this->display(); diff --git a/module/project/lang/de.php b/module/project/lang/de.php index 56d2b9bfa7..25a7316088 100644 --- a/module/project/lang/de.php +++ b/module/project/lang/de.php @@ -245,6 +245,9 @@ $lang->project->modelList['scrum'] = "Scrum"; $lang->project->modelList['waterfall'] = "CMMI"; $lang->project->modelList['kanban'] = "Kanban"; +global $config; +if(strpos(",$config->disabledFeatures,", ',waterfall,') !== false) unset($lang->project->modelList['waterfall']); + $lang->project->featureBar['browse']['all'] = 'All'; $lang->project->featureBar['browse']['undone'] = 'Unfinished'; $lang->project->featureBar['browse']['wait'] = 'Waiting'; diff --git a/module/project/lang/en.php b/module/project/lang/en.php index 43a03f9316..ae618966ef 100644 --- a/module/project/lang/en.php +++ b/module/project/lang/en.php @@ -245,6 +245,9 @@ $lang->project->modelList['scrum'] = "Scrum"; $lang->project->modelList['waterfall'] = "CMMI"; $lang->project->modelList['kanban'] = "Kanban"; +global $config; +if(strpos(",$config->disabledFeatures,", ',waterfall,') !== false) unset($lang->project->modelList['waterfall']); + $lang->project->featureBar['browse']['all'] = 'All'; $lang->project->featureBar['browse']['undone'] = 'Unfinished'; $lang->project->featureBar['browse']['wait'] = 'Waiting'; diff --git a/module/project/lang/fr.php b/module/project/lang/fr.php index b34aad2de1..380915da92 100644 --- a/module/project/lang/fr.php +++ b/module/project/lang/fr.php @@ -245,6 +245,9 @@ $lang->project->modelList['scrum'] = "Scrum"; $lang->project->modelList['waterfall'] = "CMMI"; $lang->project->modelList['kanban'] = "Kanban"; +global $config; +if(strpos(",$config->disabledFeatures,", ',waterfall,') !== false) unset($lang->project->modelList['waterfall']); + $lang->project->featureBar['browse']['all'] = 'All'; $lang->project->featureBar['browse']['undone'] = 'Non Terminées'; $lang->project->featureBar['browse']['wait'] = 'En Attente'; diff --git a/module/project/lang/zh-cn.php b/module/project/lang/zh-cn.php index c9d9d9a160..30c38dc6fb 100644 --- a/module/project/lang/zh-cn.php +++ b/module/project/lang/zh-cn.php @@ -245,6 +245,9 @@ $lang->project->modelList['scrum'] = "Scrum"; $lang->project->modelList['waterfall'] = "瀑布"; $lang->project->modelList['kanban'] = "看板"; +global $config; +if(strpos(",$config->disabledFeatures,", ',waterfall,') !== false) unset($lang->project->modelList['waterfall']); + $lang->project->featureBar['browse']['all'] = '所有'; $lang->project->featureBar['browse']['undone'] = '未完成'; $lang->project->featureBar['browse']['wait'] = '未开始'; diff --git a/module/project/model.php b/module/project/model.php index 54351e774e..d4fe21dda5 100644 --- a/module/project/model.php +++ b/module/project/model.php @@ -2577,14 +2577,9 @@ class projectModel extends model { if($module == '') continue; - $type = ''; + $type = ''; $table = constant('TABLE_'. strtoupper($module)); - $object = new stdclass(); - - if($table == TABLE_EXECUTION) - { - $type = $model == 'scrum' ? 'sprint' : 'stage'; - } + if($module == 'execution') $type = $model == 'scrum' ? 'sprint' : 'stage'; $object = $this->getDataByProject($table, $projectID, $type); if(!empty($object)) return false; diff --git a/module/project/view/createguide.html.php b/module/project/view/createguide.html.php index 0abab2b72c..3825a0462a 100644 --- a/module/project/view/createguide.html.php +++ b/module/project/view/createguide.html.php @@ -28,6 +28,7 @@

    project->scrumTitle; ?>

    + disabledFeatures,", ',waterfall,') === false):?>
    createLink("project", "create", "model=waterfall&programID=$programID©ProjectID=0&extra=productID=$productID,branchID=$branchID"), "", '', "data-app='{$tab}' class='createButton'")?> @@ -35,6 +36,7 @@

    project->waterfallTitle; ?>

    +
    createLink("project", "create", "model=kanban&programID=$programID©ProjectID=0&extra=productID=$productID,branchID=$branchID"), "", '', "data-app='{$tab}' class='createButton'")?>