### Eclipse Workspace Patch 1.0 #P igeworkspace42 Index: t3lib/class.t3lib_tcemain.php =================================================================== --- t3lib/class.t3lib_tcemain.php (revision 270) +++ t3lib/class.t3lib_tcemain.php (working copy) @@ -4707,7 +4707,25 @@ $record = t3lib_BEfunc::getRecord($table, $id); $stat = $this->BE_USER->checkWorkspace($record['t3ver_wsid']); - if (t3lib_div::inList('admin,online,offline,reviewer,owner', $stat['_ACCESS']) || ($stageId<=1 && $stat['_ACCESS']==='member')) { + // get current workspace information + $wsid = $GLOBALS['BE_USER']->workspace; + $workspaceRec = $GLOBALS['BE_USER']->workspaceRec; + $changeStageAccess = FALSE; + + if($workspaceRec['use_custom_staging'] == '1' && $stageId !== '10') { // Check if custom staging is activated + if($record['t3ver_stage'] !== '0') { + $workspaceCurrentStageRec = t3lib_BEfunc::getRecord('sys_workspace_stage', $record['t3ver_stage']-20); + if((t3lib_div::inList($workspaceCurrentStageRec['responsible_persons'],$GLOBALS['BE_USER']->user['uid']) && $stat['_ACCESS']==='member') || + ($stat['_ACCESS']==='owner')) { // Only if the user is responsible for the element in the current stage or he is owner he's allowed to change the stage forward or backwards + $changeStageAccess = TRUE; + } + } elseif(($record['t3ver_stage'] === '0') && ($stat['_ACCESS']==='member')) { + $changeStageAccess = TRUE; + } + } + + // check regular staging permissions and check the advanced staging permission + if (t3lib_div::inList('admin,online,offline,reviewer,owner', $stat['_ACCESS']) || ($stageId<=1 && $stat['_ACCESS']==='member') || $changeStageAccess) { // Set stage of record: $sArray = array(); Index: t3lib/class.t3lib_userauthgroup.php =================================================================== --- t3lib/class.t3lib_userauthgroup.php (revision 270) +++ t3lib/class.t3lib_userauthgroup.php (working copy) @@ -798,11 +798,19 @@ if ($this->workspace>0) { $stat = $this->checkWorkspaceCurrent(); - $memberStageLimit = $this->workspaceRec['review_stage_edit'] ? 1 : 0; - if (($stage<=$memberStageLimit && $stat['_ACCESS']==='member') || - ($stage<=1 && $stat['_ACCESS']==='reviewer') || - ($stat['_ACCESS']==='owner')) { - return TRUE; // OK for these criteria + if($this->workspaceRec['use_custom_staging'] == '1' && $stage !== '0' && $stage !== '10') { // Check if custom staging is activated + $workspaceStageRec = t3lib_BEfunc::getRecord('sys_workspace_stage', $stage-20); // Get custom stage record + if((t3lib_div::inList($workspaceStageRec['responsible_persons'],$this->user['uid']) && $stat['_ACCESS']==='member') || + ($stat['_ACCESS']==='owner')) { + return TRUE; // OK for these criteria + } + } else { + $memberStageLimit = $this->workspaceRec['review_stage_edit'] ? 1 : 0; + if (($stage<=$memberStageLimit && $stat['_ACCESS']==='member') || + ($stage<=1 && $stat['_ACCESS']==='reviewer') || + ($stat['_ACCESS']==='owner')) { + return TRUE; // OK for these criteria + } } } else return TRUE; // Always OK for live and draft workspaces. }