|
### Eclipse Workspace Patch 1.0
|
|
#P igeworkspace42
|
|
Index: typo3/mod/user/ws/class.wsstagelib.php
|
|
===================================================================
|
|
--- typo3/mod/user/ws/class.wsstagelib.php (revision 287)
|
|
+++ typo3/mod/user/ws/class.wsstagelib.php (working copy)
|
|
@@ -115,6 +115,9 @@
|
|
if($stageid === '0') {
|
|
$nextStage = $workspaceStageRecs[0];
|
|
$nextStage['uid'] = $nextStage['uid']+20;
|
|
+ if(!empty($nextStage['responsible_persons'])) {
|
|
+ $nextStage['responsible_persons'] = $this->getResponsibleUser($nextStage['responsible_persons']);
|
|
+ }
|
|
return $nextStage;
|
|
}
|
|
|
|
@@ -126,6 +129,9 @@
|
|
if($workspaceStageRecs[$array_key+1]) {
|
|
$nextStage = $workspaceStageRecs[$array_key+1];
|
|
$nextStage['uid'] = $nextStage['uid']+20;
|
|
+ if(!empty($nextStage['responsible_persons'])) {
|
|
+ $nextStage['responsible_persons'] = $this->getResponsibleUser($nextStage['responsible_persons']);
|
|
+ }
|
|
} else {
|
|
$nextStage['uid'] = '10';
|
|
}
|
|
@@ -152,6 +158,9 @@
|
|
if($stageid == '10') {
|
|
$prevStage = end($workspaceStageRecs);
|
|
$prevStage['uid'] = $prevStage['uid']+20;
|
|
+ if(!empty($prevStage['responsible_persons'])) {
|
|
+ $prevStage['responsible_persons'] = $this->getResponsibleUser($prevStage['responsible_persons']);
|
|
+ }
|
|
} else {
|
|
while (list($array_key, $workspaceStageRec) = each($workspaceStageRecs)) {
|
|
if($workspaceStageRec['uid'] == ($stageid-20)) {
|
|
@@ -159,6 +168,9 @@
|
|
if($workspaceStageRecs[$array_key-1]) {
|
|
$prevStage = $workspaceStageRecs[$array_key-1];
|
|
$prevStage['uid'] = $prevStage['uid']+20;
|
|
+ if(!empty($prevStage['responsible_persons'])) {
|
|
+ $prevStage['responsible_persons'] = $this->getResponsibleUser($prevStage['responsible_persons']);
|
|
+ }
|
|
} else {
|
|
// First stage is always the standart edit stage
|
|
$prevStage['uid'] = '0';
|
|
@@ -172,6 +184,82 @@
|
|
return false;
|
|
}
|
|
}
|
|
+
|
|
+ /**
|
|
+ * Get uids of all responsilbe persons for a stage
|
|
+ *
|
|
+ * @param string responsible_persion value from stage record
|
|
+ * @return string uid list of responsible be_users
|
|
+ */
|
|
+ function getResponsibleUser($stageRespValue) {
|
|
+ $stageValuesArray = t3lib_div::trimExplode(',',$stageRespValue);
|
|
+
|
|
+ $beuserUidArray = array();
|
|
+ $begroupUidArray = array();
|
|
+ $subgroupUidArray = array();
|
|
+
|
|
+ foreach($stageValuesArray as $key => $uidvalue) {
|
|
+ if(strstr($uidvalue, 'be_users') !== FALSE) { // Current value is a uid of a be_user record
|
|
+ $beuserUidArray[] = str_replace('be_users_','',$uidvalue);
|
|
+ } else {
|
|
+ $begroupUidArray[] = str_replace('be_groups_','',$uidvalue);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if(!empty($begroupUidArray)) {
|
|
+ $allBeUserArray = t3lib_befunc::getUserNames();
|
|
+ $begroupUidList = implode(',',$begroupUidArray);
|
|
+ $begroupUidArray = $this->fetchGroups($begroupUidList);
|
|
+
|
|
+ foreach($begroupUidArray as $groupkey => $groupData) {
|
|
+ foreach($allBeUserArray as $useruid => $userdata) {
|
|
+ if(t3lib_div::inList($userdata['usergroup'],$groupData['uid'])) {
|
|
+ $beuserUidArray[] = $useruid;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ array_unique($beuserUidArray);
|
|
+ return implode(',',$beuserUidArray);
|
|
+ }
|
|
+
|
|
+ function fetchGroups($grList,$idList='') {
|
|
+ global $TYPO3_CONF_VARS;
|
|
+
|
|
+ $whereSQL = 'deleted=0 AND hidden=0 AND pid=0 AND uid IN ('.$grList.')';
|
|
+ $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'be_groups', $whereSQL);
|
|
+
|
|
+ // The userGroups array is filled
|
|
+ while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
|
|
+ $this->userGroups[$row['uid']] = $row;
|
|
+ }
|
|
+
|
|
+ // Traversing records in the correct order
|
|
+ $include_staticArr = t3lib_div::intExplode(',',$grList);
|
|
+ reset($include_staticArr);
|
|
+ while(list(,$uid)=each($include_staticArr)) { // traversing list
|
|
+ // Get row:
|
|
+ $row = $this->userGroups[$uid];
|
|
+ if (is_array($row) && !t3lib_div::inList($idList,$uid)) { // Must be an array and $uid should not be in the idList, because then it is somewhere previously in the grouplist
|
|
+ // If the localconf.php option isset the user of the sub- sub- groups will also be used
|
|
+ if($GLOBALS['TYPO3_CONF_VARS']['BE']['customStageShowRecipientRecursive'] == 1) {
|
|
+ // Include sub groups
|
|
+ if (trim($row['subgroup'])) {
|
|
+ $theList = implode(',',t3lib_div::intExplode(',',$row['subgroup'])); // Make integer list
|
|
+ return $this->fetchGroups($theList, $idList.','.$uid); // Call recursively, pass along list of already processed groups so they are not recursed again.
|
|
+ } else {
|
|
+ return $this->userGroups;
|
|
+ }
|
|
+ }
|
|
+ return $this->userGroups;
|
|
+ } else {
|
|
+ return $this->userGroups;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
}
|
|
|
|
|
|
Index: t3lib/class.t3lib_tcemain.php
|
|
===================================================================
|
|
--- t3lib/class.t3lib_tcemain.php (revision 285)
|
|
+++ t3lib/class.t3lib_tcemain.php (working copy)
|
|
@@ -4715,10 +4715,17 @@
|
|
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') ||
|
|
+ if((t3lib_div::inList($workspaceCurrentStageRec['responsible_persons'],'be_users_'.$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;
|
|
}
|
|
+
|
|
+ foreach($GLOBALS['BE_USER']->userGroupsUID as $groupUid) {
|
|
+ if ((t3lib_div::inList($workspaceCurrentStageRec['responsible_persons'],'be_groups_'.$groupUid) && $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;
|
|
}
|
|
Index: t3lib/stddb/tbl_be.php
|
|
===================================================================
|
|
--- t3lib/stddb/tbl_be.php (revision 286)
|
|
+++ t3lib/stddb/tbl_be.php (working copy)
|
|
@@ -944,9 +944,10 @@
|
|
'config' => array(
|
|
'type' => 'group',
|
|
'internal_type' => 'db',
|
|
- 'allowed' => 'be_users',
|
|
+ 'allowed' => 'be_users,be_groups',
|
|
+ 'prepend_tname' => 1,
|
|
'size' => '3',
|
|
- 'maxitems' => '20',
|
|
+ 'maxitems' => '100',
|
|
'autoSizeMax' => 20,
|
|
'show_thumbs' => '1'
|
|
)
|
|
Index: t3lib/config_default.php
|
|
===================================================================
|
|
--- t3lib/config_default.php (revision 270)
|
|
+++ t3lib/config_default.php (working copy)
|
|
@@ -200,6 +200,7 @@
|
|
'ModuleMenu::render' => 'typo3/classes/class.modulemenu.php:ModuleMenu->renderAjax',
|
|
'SC_mod_web_perm_ajax::dispatch' => 'typo3/mod/web/perm/class.sc_mod_web_perm_ajax.php:SC_mod_web_perm_ajax->dispatch'
|
|
),
|
|
+ 'customStageShowRecipientRecursive' => FALSE, // If true the email recipients for custom stage change will be used from selected be_group and sub be_groups recursive
|
|
'XCLASS' => Array(), // See 'Inside TYPO3' document for more information.
|
|
),
|
|
'FE' => Array( // Configuration for the TypoScript frontend (FE). Nothing here relates to the administration backend!
|
|
Index: t3lib/class.t3lib_userauthgroup.php
|
|
===================================================================
|
|
--- t3lib/class.t3lib_userauthgroup.php (revision 285)
|
|
+++ t3lib/class.t3lib_userauthgroup.php (working copy)
|
|
@@ -800,10 +800,17 @@
|
|
$stat = $this->checkWorkspaceCurrent();
|
|
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') ||
|
|
+ if((t3lib_div::inList($workspaceStageRec['responsible_persons'],'be_users_'.$this->user['uid']) && $stat['_ACCESS']==='member') ||
|
|
($stat['_ACCESS']==='owner')) {
|
|
return TRUE; // OK for these criteria
|
|
}
|
|
+
|
|
+ foreach($this->userGroupsUID as $groupUid) {
|
|
+ if ((t3lib_div::inList($workspaceStageRec['responsible_persons'],'be_groups_'.$groupUid) && $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') ||
|