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 '
project->scrumTitle; ?>
+ disabledFeatures,", ',waterfall,') === false):?>
", '', "data-app='{$tab}' class='createButton'")?>
@@ -35,6 +36,7 @@
project->waterfallTitle; ?>
", '', "data-app='{$tab}' class='createButton'")?>