Project

General

Profile

Feature #2795 » patch-2795-3.txt

Sonja Schubert, 2009-03-27 16:36

 
### Eclipse Workspace Patch 1.0
#P igeworkspace42
Index: typo3/mod/user/ws/class.wsstagelib.php
===================================================================
--- typo3/mod/user/ws/class.wsstagelib.php (revision 323)
+++ typo3/mod/user/ws/class.wsstagelib.php (working copy)
@@ -144,6 +144,39 @@
}
/**
+ * Recursive function to get all next stages for a record depending on user permissions
+ *
+ * @param array next stages
+ * @param int workspace id
+ * @param int stage id
+ * @param int current stage id of the record
+ * @return array next stages
+ */
+ function getNextStages(&$nextStageArray, $workspaceId, $stageId) {
+ // Current stage is "Ready to publish" - there is no next stage
+ if($stageId == '10') {
+ return $nextStageArray;
+ } else {
+ $nextStageRecord = $this->getNextStage($workspaceId,$stageId);
+ if(empty($nextStageRecord) || !is_array($nextStageRecord)) {
+ // There is no next stage
+ return $nextStageArray;
+ } else {
+ // Check if the user has the permission to for the current stage
+ // If this next stage record is the first next stage after the current the user has always the needed permission
+ //if($GLOBALS['BE_USER']->workspaceCheckStageForCurrent($nextStageRecord['uid']) || $stageId == $currentStageId) {
+ if($GLOBALS['BE_USER']->workspaceCheckStageForCurrent($stageId)) {
+ $nextStageArray[] = $nextStageRecord;
+ return $this->getNextStages($nextStageArray, $workspaceId, $nextStageRecord['uid']);
+ } else {
+ // He hasn't - return given next stage array
+ return $nextStageArray;
+ }
+ }
+ }
+ }
+
+ /**
* Get next stage in process for given stage id
*
* @param int workspace id
@@ -186,6 +219,38 @@
}
/**
+ * Recursive function to get all prev stages for a record depending on user permissions
+ *
+ * @param array prev stages
+ * @param int workspace id
+ * @param int stage id
+ * @param int current stage id of the record
+ * @return array prev stages
+ */
+ function getPrevStages(&$prevStageArray, $workspaceId, $stageId) {
+ // Current stage is "Editing" - there is no prev stage
+ if($stageId == '0') {
+ return $prevStageArray;
+ } else {
+ $prevStageRecord = $this->getPrevStage($workspaceId,$stageId);
+ if(empty($prevStageRecord) || !is_array($prevStageRecord)) {
+ // There is no prev stage
+ return $prevStageArray;
+ } else {
+ // Check if the user has the permission to switch to that stage
+ // If this prev stage record is the first previous stage before the current the user has always the needed permission
+ if($GLOBALS['BE_USER']->workspaceCheckStageForCurrent($stageId)) {
+ $prevStageArray[] = $prevStageRecord;
+ return $this->getPrevStages($prevStageArray, $workspaceId, $prevStageRecord['uid']);
+ } else {
+ // He hasn't - return given prev stage array
+ return $prevStageArray;
+ }
+ }
+ }
+ }
+
+ /**
* Get uids of all responsilbe persons for a stage
*
* @param string responsible_persion value from stage record
Index: typo3/mod/user/ws/class.wslib_gui.php
===================================================================
--- typo3/mod/user/ws/class.wslib_gui.php (revision 287)
+++ typo3/mod/user/ws/class.wslib_gui.php (working copy)
@@ -1264,7 +1264,7 @@
function displayWorkspaceOverview_stageCmd($table,&$rec_off) {
global $LANG;
- $this->workspaceId = (!is_null($wsid) ? $wsid : $GLOBALS['BE_USER']->workspace);
+ $this->workspaceId = (!is_null($this->workspaceId) ? $this->workspaceId : $GLOBALS['BE_USER']->workspace);
// Initialize workspace stage object
$wsstagelibObj = t3lib_div::makeInstance('wsstagelib');
(3-3/3)