Updated Workspaces and Version extension to version 4.5.0beta3. See their ChangeLog...
authorSteffen Kamper <info@sk-typo3.de>
Tue, 28 Dec 2010 10:17:54 +0000 (10:17 +0000)
committerSteffen Kamper <info@sk-typo3.de>
Tue, 28 Dec 2010 10:17:54 +0000 (10:17 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@9931 709f56b5-9817-0410-a4d7-c38de5d9e867

50 files changed:
ChangeLog
typo3/sysext/version/ChangeLog
typo3/sysext/version/class.tx_version_cm1.php
typo3/sysext/version/cm1/index.php
typo3/sysext/version/ext_tables.php
typo3/sysext/version/tasks/class.tx_version_tasks_autopublish.php
typo3/sysext/version/ws/class.wslib.php
typo3/sysext/version/ws/class.wslib_gui.php
typo3/sysext/version/ws/index.php
typo3/sysext/version/ws/publish.php
typo3/sysext/version/ws/workspaceforms.php
typo3/sysext/version/ws/wsol_preview.php
typo3/sysext/workspaces/ChangeLog
typo3/sysext/workspaces/Classes/BackendUserInterface/WorkspaceSelectorToolbarItem.php
typo3/sysext/workspaces/Classes/Controller/AbstractController.php
typo3/sysext/workspaces/Classes/Controller/PreviewController.php
typo3/sysext/workspaces/Classes/Controller/ReviewController.php
typo3/sysext/workspaces/Classes/ExtDirect/AbstractHandler.php
typo3/sysext/workspaces/Classes/ExtDirect/ActionHandler.php
typo3/sysext/workspaces/Classes/ExtDirect/MassActionHandler.php
typo3/sysext/workspaces/Classes/ExtDirect/Server.php
typo3/sysext/workspaces/Classes/ExtDirect/ToolbarMenu.php
typo3/sysext/workspaces/Classes/Service/AutoPublish.php
typo3/sysext/workspaces/Classes/Service/AutoPublishTask.php
typo3/sysext/workspaces/Classes/Service/Befunc.php
typo3/sysext/workspaces/Classes/Service/Fehooks.php [new file with mode: 0644]
typo3/sysext/workspaces/Classes/Service/GridData.php
typo3/sysext/workspaces/Classes/Service/Stages.php
typo3/sysext/workspaces/Classes/Service/Tcemain.php
typo3/sysext/workspaces/Classes/Service/Workspaces.php
typo3/sysext/workspaces/Classes/ViewHelpers/TempFlashMessageQueueViewHelper.php [deleted file]
typo3/sysext/workspaces/Resources/Private/Language/locallang.xml
typo3/sysext/workspaces/Resources/Private/Layouts/module.html
typo3/sysext/workspaces/Resources/Private/Layouts/nodoc.html
typo3/sysext/workspaces/Resources/Private/Layouts/popup.html
typo3/sysext/workspaces/Resources/Private/Templates/Preview/Preview.html [new file with mode: 0644]
typo3/sysext/workspaces/Resources/Private/Templates/Review/Index.html
typo3/sysext/workspaces/Resources/Public/Images/slider-bg.png [new file with mode: 0644]
typo3/sysext/workspaces/Resources/Public/Images/slider-thumb.png [new file with mode: 0644]
typo3/sysext/workspaces/Resources/Public/Images/typo3-logo.png [new file with mode: 0644]
typo3/sysext/workspaces/Resources/Public/JavaScript/Ext.ux.plugins.TabStripContainer.js [new file with mode: 0644]
typo3/sysext/workspaces/Resources/Public/JavaScript/actions.js
typo3/sysext/workspaces/Resources/Public/JavaScript/configuration.js
typo3/sysext/workspaces/Resources/Public/JavaScript/helpers.js
typo3/sysext/workspaces/Resources/Public/JavaScript/preview.js
typo3/sysext/workspaces/Resources/Public/JavaScript/toolbar.js
typo3/sysext/workspaces/Resources/Public/JavaScript/workspacemenu.js
typo3/sysext/workspaces/Resources/Public/StyleSheet/preview.css [new file with mode: 0644]
typo3/sysext/workspaces/ext_emconf.php
typo3/sysext/workspaces/ext_localconf.php

index 074d609..f049152 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2010-12-28  Steffen Kamper  <steffen@typo3.org>
+
+       * Updated Workspaces and Version extension to version 4.5.0beta3. See their ChangeLog for details.
+
 2010-12-27  Ingo Renner  <ingo@typo3.org>
 
        * Fixed issue #16857: Refine new labels in pages and tt_content TCE forms (Thanks to Mark Lehm and Jeff Segars for helping)
index eb140eb..510944a 100644 (file)
@@ -1,3 +1,15 @@
+2010-12-22  Tolleiv Nietsch  <typo3@tolleiv.de>
+
+       * Fixed bug:#11606 Remove "Send to review / pub" from contextmenu
+
+2010-12-21  Sonja Scholz  <ss@cabag.ch>
+
+       * Fixed bug #11633: Versioning module should not be available when workspaces is loaded
+
+2010-12-05  Steffen Gebert  <steffen@steffen-gebert.de>
+
+       * Fixed bug #11290: PHP notices from XCLASS inclusions
+
 2010-12-01  Oliver Hader  <oliver@typo3.org>
 
        * Cleanup: Fixed ext_emconf.php
index 56db07e..42199cc 100755 (executable)
@@ -86,6 +86,7 @@ class tx_version_cm1 {
                        );
 
                                // "Send to review" element added:
+                       /*
                        $url = t3lib_extMgm::extRelPath('version').'cm1/index.php?id='.($table=='pages'?$uid:$backRef->rec['pid']).'&table='.rawurlencode($table).'&uid='.$uid.'&sendToReview=1';
                        $localItems[] = $backRef->linkItem(
                                $GLOBALS['LANG']->getLLL('title_review',$LL),
@@ -93,6 +94,7 @@ class tx_version_cm1 {
                                $backRef->urlRefForCM($url),
                                1
                        );
+                       */
 
                                // Find position of "delete" element:
                        $c=0;
@@ -127,7 +129,7 @@ class tx_version_cm1 {
 
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/version/class.tx_version_cm1.php'])   {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/version/class.tx_version_cm1.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/version/class.tx_version_cm1.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/version/class.tx_version_cm1.php']);
 }
 ?>
\ No newline at end of file
index 4b0ffc3..26c686e 100755 (executable)
@@ -356,14 +356,11 @@ class tx_version_cm1 extends t3lib_SCbase {
                        }
 
                                // If access to Web>List for user, then link to that module.
-                       $buttons['record_list'] = t3lib_BEfunc::getListViewLink(
-                               array(
-                                       'id' => $this->pageinfo['uid'],
-                                       'returnUrl' => t3lib_div::getIndpEnv('REQUEST_URI'),
-                               ),
-                               $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.showList')
+                       $buttons['record_list'] = t3lib_extMgm::createListViewLink(
+                               $this->pageinfo['uid'],
+                               '&returnUrl=' . rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI')),
+                               $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_core.php:labels.showList', TRUE)
                        );
-
                }
                return $buttons;
        }
@@ -729,10 +726,10 @@ class tx_version_cm1 extends t3lib_SCbase {
                        $ttlHours = ($ttlHours ? $ttlHours : 24*2);
 
                        if (t3lib_div::_POST('_previewLink_wholeWorkspace'))    {
-                               $previewUrl = t3lib_BEfunc::getViewDomain($this->id) . '/index.php?ADMCMD_prev=' . t3lib_BEfunc::compilePreviewKeyword('', $GLOBALS['BE_USER']->user['uid'], 60*60*$ttlHours, $GLOBALS['BE_USER']->workspace) . '&id=' . intval($this->id);
+                               $previewUrl = t3lib_BEfunc::getViewDomain($this->id) . 'index.php?ADMCMD_prev='.t3lib_BEfunc::compilePreviewKeyword('', $GLOBALS['BE_USER']->user['uid'],60*60*$ttlHours,$GLOBALS['BE_USER']->workspace).'&id='.intval($this->id);
                        } else {
                                $params = 'id='.$this->id.'&ADMCMD_previewWS='.$GLOBALS['BE_USER']->workspace;
-                               $previewUrl = t3lib_BEfunc::getViewDomain($this->id) . '/index.php?ADMCMD_prev=' . t3lib_BEfunc::compilePreviewKeyword($params, $GLOBALS['BE_USER']->user['uid'], 60*60*$ttlHours);
+                               $previewUrl = t3lib_BEfunc::getViewDomain($this->id) .'index.php?ADMCMD_prev='.t3lib_BEfunc::compilePreviewKeyword($params, $GLOBALS['BE_USER']->user['uid'],60*60*$ttlHours);
                        }
                        $this->content .= $this->doc->section($GLOBALS['LANG']->getLL('previewUrl'), sprintf($GLOBALS['LANG']->getLL('previewInstruction'), $ttlHours) . '<br /><br /><a target="_blank" href="' . htmlspecialchars($previewUrl) . '">' . $previewUrl . '</a>', 0, 1);
                }
@@ -1839,8 +1836,8 @@ class tx_version_cm1 extends t3lib_SCbase {
 
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/version/cm1/index.php'])      {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/version/cm1/index.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/version/cm1/index.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/version/cm1/index.php']);
 }
 
 
index a5e7994..a6b1596 100755 (executable)
@@ -7,7 +7,9 @@ if (TYPO3_MODE=='BE')   {
                'path' => t3lib_extMgm::extPath($_EXTKEY).'class.tx_version_cm1.php'
        );
 
-       t3lib_extMgm::addModule('web', 'txversionM1', '', t3lib_extMgm::extPath($_EXTKEY) . 'cm1/');
+       if (!t3lib_extMgm::isLoaded('workspaces')) {
+               t3lib_extMgm::addModule('web', 'txversionM1', '', t3lib_extMgm::extPath($_EXTKEY) . 'cm1/');
+       }
 }
 
 
@@ -35,4 +37,4 @@ $TCA['sys_workspace'] = array(
 );
 
 
-?>
\ No newline at end of file
+?>
index afdf783..da3f1e3 100644 (file)
@@ -54,7 +54,7 @@ class tx_version_tasks_AutoPublish extends tx_scheduler_Task {
        }
 }
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/version/tasks/class.tx_version_tasks_autopublish.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/version/tasks/class.tx_version_tasks_autopublish.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/version/tasks/class.tx_version_tasks_autopublish.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/version/tasks/class.tx_version_tasks_autopublish.php']);
 }
 ?>
\ No newline at end of file
index 01b6dad..cedd548 100755 (executable)
@@ -239,7 +239,7 @@ class wslib {
 
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/class.wslib.php'])      {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/class.wslib.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/class.wslib.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/class.wslib.php']);
 }
 ?>
\ No newline at end of file
index f60d464..77a5a43 100644 (file)
@@ -1302,8 +1302,8 @@ class wslib_gui {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/class.wslib_gui.php'])  {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/class.wslib_gui.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/class.wslib_gui.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/class.wslib_gui.php']);
 }
 
 ?>
\ No newline at end of file
index 904f523..9f2a710 100755 (executable)
@@ -465,7 +465,7 @@ class SC_mod_user_ws_index extends t3lib_SCbase {
                        if (t3lib_div::_POST('_previewLink'))   {
                                $ttlHours = intval($GLOBALS['BE_USER']->getTSConfigVal('options.workspaces.previewLinkTTLHours'));
                                $ttlHours = ($ttlHours ? $ttlHours : 24*2);
-                               $previewUrl = t3lib_BEfunc::getViewDomain($this->id) . '/index.php?ADMCMD_prev=' . t3lib_BEfunc::compilePreviewKeyword('', $GLOBALS['BE_USER']->user['uid'], 60*60*$ttlHours, $GLOBALS['BE_USER']->workspace) . '&id=' . intval($GLOBALS['BE_USER']->workspaceRec['db_mountpoints']);
+                               $previewUrl = t3lib_BEfunc::getViewDomain($this->id) . 'index.php?ADMCMD_prev='.t3lib_BEfunc::compilePreviewKeyword('', $GLOBALS['BE_USER']->user['uid'],60*60*$ttlHours,$GLOBALS['BE_USER']->workspace).'&id='.intval($GLOBALS['BE_USER']->workspaceRec['db_mountpoints']);
                                $actionLinks.= '<br />Any user can browse the workspace frontend using this link for the next ' . $ttlHours . ' hours (does not require backend login):<br /><br /><a target="_blank" href="' . htmlspecialchars($previewUrl) . '">' . $previewUrl . '</a>';
                        } else {
                                $actionLinks.= '<input type="submit" name="_previewLink" value="Generate Workspace Preview Link" />';
@@ -1078,8 +1078,8 @@ class SC_mod_user_ws_index extends t3lib_SCbase {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/index.php'])    {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/index.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/index.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/index.php']);
 }
 
 
index 826cbbf..111abbe 100644 (file)
@@ -255,8 +255,8 @@ class SC_mod_user_ws_publish extends t3lib_SCbase {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/publish.php'])  {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/publish.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/publish.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/publish.php']);
 }
 
 // Make instance:
index c9eeef2..23ede5b 100644 (file)
@@ -645,8 +645,8 @@ class user_SC_mod_user_ws_workspaceForms {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/workspaceforms.php'])   {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/workspaceforms.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/workspaceforms.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/workspaceforms.php']);
 }
 
 // Make instance:
index 190bf6e..32c6ba4 100755 (executable)
@@ -208,8 +208,8 @@ class wsol_preview {
        }
 }
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/wsol_preview.php']) {
-    include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/wsol_preview.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/wsol_preview.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['typo3/mod/user/ws/wsol_preview.php']);
 }
 
 $previewObject = t3lib_div::makeInstance('wsol_preview');
index 50beaa2..ba643bf 100644 (file)
@@ -1,3 +1,73 @@
+2010-12-28  Steffen Kamper  <steffen@typo3.org>
+
+       * Follow-up to #11635: Removed remaining event listener
+
+2010-12-26  Tolleiv Nietsch <typo3@tolleiv.de>
+
+       * Fixed issue #11722: TempFlashMessageQueueViewHelper is not required anymore
+       * Fixed bug #11718: ExtJS confirmation window contents might be "cached"
+
+2010-12-25  Tolleiv Nietsch <typo3@tolleiv.de>
+
+       * Fixed bug #11473: Send to stage window may be too large
+       * Fixed bug #11608: Missing space in Mass Release Confirmation
+       * Fixed bug #11635: Remove "Preview of workspace ..." box when in workspace preview module
+       * Fixed bug #11657: singleView should not have depth and mass-action combos
+       * Fixed bug #11600: [All] tab in ws-module should not have action-buttons
+
+2010-12-22  Tolleiv Nietsch <typo3@tolleiv.de>
+
+       * Fixed bug #11568: Remove "Enable comparison view" switch
+       * Fixed bug #11479: Label of publish action is confusing
+
+2010-12-22  Steffen Gebert <steffen@steffen-gebert.de>
+
+       * Added feature #10642: Design of workspace preview/comparison view (Thanks to Lars Zimmermann)
+
+2010-12-21  Sonja Scholz <ss@cabag.ch>
+
+       * Fixed bug #11480: Add warning when choosing mass actions
+
+2010-12-21  Tolleiv Nietsch <typo3@tolleiv.de>
+
+       * Followup-to #9819: Workspace preview window - browser compatibility fixed
+
+2010-12-20  Tolleiv Nietsch <typo3@tolleiv.de>
+
+       * Fixed bug #10693: Save and view command previews wrong page record
+       * Fixed bug #11532: Generate Workspace Preview Link not working
+       * Fixed bug #11605: Do you really want to swap?? - one question mark is enough
+       * Fixed bug #11531 Check if email is set before trying to send an email
+       * Fixed bug #11141: switching with the tabs in the workspace module should also switch to the related workspace
+
+2010-12-19  Marco Bresch <marco.bresch@starfinanz.de>
+
+       * Fixed bug #11142: The 'All' tab throws Exception 'No such workspace defined'
+
+2010-12-19  Sonja Scholz <ss@cabag.ch>
+
+       * Cleanup: #11153: Determine whether Tx_Workspaces_Service_Stages::encodeStageUid and resolveStageUid are required
+
+2010-12-19  Tolleiv Nietsch <typo3@tolleiv.de>
+
+       * Followup-to #9819: Workspace preview window - "live" and "workspace" buttons are clickable now
+
+2010-12-18  Tolleiv Nietsch <typo3@tolleiv.de>
+
+       * Fixed bug #11318: workspaces task miss title
+
+2010-12-17  Tolleiv Nietsch <typo3@tolleiv.de>
+
+       * Followup-to #9819: Workspace preview window - empty preview.css included in order to support the skin team
+
+2010-12-14  Tolleiv Nietsch <typo3@tolleiv.de>
+
+       * Fixed bug #9819: Workspace preview window
+
+2010-12-05  Steffen Gebert  <steffen@steffen-gebert.de>
+
+       * Fixed bug #11290: PHP notices from XCLASS inclusions
+
 2010-12-01  Oliver Hader  <oliver@typo3.org>
 
        * Raised version to 4.5.0beta2b
@@ -27,7 +97,7 @@
        * Fixed bug #11152 Calls about this-> in static context in workspaces-lib
        * Cleanup: Added several small changes from the Skin-Team at the xTemplate
 
-2010-11-30  Tolleiv Nietsch <typo3q@tolleiv.de>
+2010-11-30  Tolleiv Nietsch <typo3@tolleiv.de>
 
        * Fixed bug #11138: preview links in page- and list-module point to mod.php instead of typo3/mod.php
 
 
 2010-11-17  Tolleiv Nietsch <info@tolleiv.de>
 
-       * Fixed bug: #10896 php-warnings after merge into Core - missing argument 
+       * Fixed bug: #10896 php-warnings after merge into Core - missing argument
        * Fixed bug: #10895 php-warnings after merge into Core - array_merge on non-array
 
 2010-11-17  Steffen Ritter  <info@rs-websystems.de>
index 265d160..d1cc06b 100644 (file)
@@ -128,19 +128,8 @@ class WorkspaceSelectorToolbarItem implements backend_toolbarItem {
                                '</li>';
                }
 
-                       // frontend preview toggle
-               $frontendPreviewActiveIcon = $stateUncheckedIcon;
-               if (!$GLOBALS['BE_USER']->user['workspace_preview']) {
-                       $frontendPreviewActiveIcon = $stateCheckedIcon;
-               }
-
-               $workspaceMenu[] = '<li class="divider">' . $frontendPreviewActiveIcon .
-                       '<a href="backend.php?changeWorkspacePreview=' .
-                       ($GLOBALS['BE_USER']->user['workspace_preview'] ? '0' : '1') .
-                       '" id="frontendPreviewToggle">' . $GLOBALS['LANG']->getLL('bookmark_workspaceComparisonView', true) . '</a></li>';
-
                        // go to workspace module link
-               $workspaceMenu[] = '<li>' . $stateUncheckedIcon . ' ' .
+               $workspaceMenu[] = '<li class="divider">' . $stateUncheckedIcon . ' ' .
                        '<a href="javascript:top.goToModule(\'web_WorkspacesWorkspaces\');" target="content" id="goToWsModule">' .
                        ' '. $GLOBALS['LANG']->getLL('bookmark_workspace', true) . '</a></li>';
 
@@ -174,7 +163,7 @@ if(!(TYPO3_REQUESTTYPE & TYPO3_REQUESTTYPE_AJAX)) {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/BackendUserInterface/WorkspaceSelectorToolbarItem.php'])   {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/BackendUserInterface/WorkspaceSelectorToolbarItem.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/BackendUserInterface/WorkspaceSelectorToolbarItem.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/BackendUserInterface/WorkspaceSelectorToolbarItem.php']);
 }
 ?>
\ No newline at end of file
index 08db100..874d535 100644 (file)
@@ -107,7 +107,7 @@ class Tx_Workspaces_Controller_AbstractController extends Tx_Extbase_MVC_Control
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/AbstractController.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/AbstractController.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/AbstractController.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/AbstractController.php']);
 }
 ?>
\ No newline at end of file
index 7a0e8ec..57cb83a 100644 (file)
@@ -42,6 +42,8 @@ class Tx_Workspaces_Controller_PreviewController extends Tx_Workspaces_Controlle
        protected function initializeAction() {
                parent::initializeAction();
 
+               $resourcePath = t3lib_extMgm::extRelPath('workspaces') . 'Resources/Public/';
+               $GLOBALS['TBE_STYLES']['extJS']['theme'] = $resourcePath . 'StyleSheet/preview.css';
                $this->pageRenderer->loadExtJS();
                $this->pageRenderer->enableExtJSQuickTips();
                $this->pageRenderer->enableExtJsDebug();
@@ -57,8 +59,8 @@ class Tx_Workspaces_Controller_PreviewController extends Tx_Workspaces_Controlle
                $this->pageRenderer->addJsFile($this->backPath . '../t3lib/js/extjs/ux/flashmessages.js');
                $this->pageRenderer->addJsFile($this->backPath . 'js/extjs/iframepanel.js');
 
-               $resourcePath = t3lib_extMgm::extRelPath('workspaces') . 'Resources/Public/JavaScript/';
-               $this->pageRenderer->addJsFile($resourcePath . 'preview.js');
+               $this->pageRenderer->addJsFile($resourcePath . 'JavaScript/Ext.ux.plugins.TabStripContainer.js');
+               $this->pageRenderer->addJsFile($resourcePath . 'JavaScript/preview.js');
 
                        // todo this part should be done with inlineLocallanglabels
                $this->pageRenderer->addJsInlineCode('workspace-inline-code', $this->generateJavascript());
@@ -72,6 +74,7 @@ class Tx_Workspaces_Controller_PreviewController extends Tx_Workspaces_Controlle
         * @return void
         */
        public function indexAction() {
+               // @todo language doesn't always come throught the L parameter
                // @todo Evaluate how the intval() call can be used with Extbase validators/filters
                $language = intval(t3lib_div::_GP('L'));
 
@@ -102,6 +105,15 @@ class Tx_Workspaces_Controller_PreviewController extends Tx_Workspaces_Controlle
                $this->view->assign('wsUrl', $wsBaseUrl . '&ADMCMD_view=1&ADMCMD_editIcons=1&ADMCMD_previewWS=' . $GLOBALS['BE_USER']->workspace);
                $this->view->assign('wsSettingsUrl', $wsSettingsUrl);
                $this->view->assign('wsHelpUrl', $wsHelpUrl);
+               $this->view->assign('backendDomain', t3lib_div::getIndpEnv('TYPO3_HOST_ONLY'));
+               $GLOBALS['BE_USER']->setAndSaveSessionData('workspaces.backend_domain', t3lib_div::getIndpEnv('TYPO3_HOST_ONLY'));
+               $this->pageRenderer->addJsInlineCode("workspaces.preview.lll" , "TYPO3.LLL.Workspaces = {
+                       visualPreview: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.visualPreview', true) . "',
+                       listView: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.listView', true) . "',
+                       helpView: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.helpView', true) . "',
+                       livePreview: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.livePreview', true) . "',
+                       workspacePreview: '" . $GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:preview.workspacePreview', true) . "'
+               };\n");
        }
 
        /**
@@ -243,7 +255,7 @@ class Tx_Workspaces_Controller_PreviewController extends Tx_Workspaces_Controlle
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/PreviewController.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/PreviewController.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/PreviewController.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/PreviewController.php']);
 }
-?>
+?>
\ No newline at end of file
index c14fb23..7281498 100644 (file)
@@ -42,6 +42,7 @@ class Tx_Workspaces_Controller_ReviewController extends Tx_Workspaces_Controller
 
                $wsList = $wsService->getAvailableWorkspaces();
                $activeWorkspace = $GLOBALS['BE_USER']->workspace;
+               $performWorkspaceSwitch = FALSE;
 
                if (!$GLOBALS['BE_USER']->isAdmin()) {
                        $wsCur = array($activeWorkspace => true);
@@ -50,15 +51,20 @@ class Tx_Workspaces_Controller_ReviewController extends Tx_Workspaces_Controller
                        $wsList = $wsService->getAvailableWorkspaces();
                        if (strlen(t3lib_div::_GP('workspace'))) {
                                $switchWs = (int) t3lib_div::_GP('workspace');
-                               if (in_array($switchWs, array_keys($wsList))) {
+                               if (in_array($switchWs, array_keys($wsList)) && $activeWorkspace != $switchWs) {
                                        $activeWorkspace = $switchWs;
+                                       $GLOBALS['BE_USER']->setWorkspace($activeWorkspace);
+                                       $performWorkspaceSwitch = TRUE;
+                                       t3lib_BEfunc::setUpdateSignal('updatePageTree');
                                } elseif ($switchWs == tx_Workspaces_Service_Workspaces::SELECT_ALL_WORKSPACES) {
-                                       $activeWorkspace = tx_Workspaces_Service_Workspaces::SELECT_ALL_WORKSPACES;
+                                       $this->redirect('fullIndex');
                                }
                        }
                }
+               $this->view->assign('performWorkspaceSwitch', $performWorkspaceSwitch);
                $this->view->assign('workspaceList', $wsList);
                $this->view->assign('activeWorkspaceUid', $activeWorkspace);
+               $this->view->assign('activeWorkspaceTitle', tx_Workspaces_Service_Workspaces::getWorkspaceTitle($activeWorkspace));
                $GLOBALS['BE_USER']->setAndSaveSessionData('tx_workspace_activeWorkspace', $activeWorkspace);
        }
 
@@ -80,6 +86,8 @@ class Tx_Workspaces_Controller_ReviewController extends Tx_Workspaces_Controller
                        $this->view->assign('workspaceList', $wsService->getAvailableWorkspaces());
                        $this->view->assign('activeWorkspaceUid', tx_Workspaces_Service_Workspaces::SELECT_ALL_WORKSPACES);
                        $GLOBALS['BE_USER']->setAndSaveSessionData('tx_workspace_activeWorkspace', tx_Workspaces_Service_Workspaces::SELECT_ALL_WORKSPACES);
+                               // set flag for javascript
+                       $this->pageRenderer->addInlineSetting('Workspaces', 'allView', '1');
                }
        }
 
@@ -102,6 +110,7 @@ class Tx_Workspaces_Controller_ReviewController extends Tx_Workspaces_Controller
                $this->view->assign('showGrid', true);
                $this->view->assign('showAllWorkspaceTab', false);
                $this->view->assign('workspaceList', $wsList);
+               $this->pageRenderer->addInlineSetting('Workspaces', 'singleView', '1');
        }
 
 
@@ -170,8 +179,8 @@ class Tx_Workspaces_Controller_ReviewController extends Tx_Workspaces_Controller
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/ReviewController.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/ReviewController.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/ReviewController.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Controller/ReviewController.php']);
 }
 
 ?>
\ No newline at end of file
index 4a19398..e8b532a 100644 (file)
@@ -70,7 +70,7 @@ abstract class tx_Workspaces_ExtDirect_AbstractHandler {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/AbstractHandler.php'])   {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/AbstractHandler.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/AbstractHandler.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/AbstractHandler.php']);
 }
 ?>
\ No newline at end of file
index 7fc84b9..3172536 100644 (file)
@@ -246,10 +246,16 @@ class tx_Workspaces_ExtDirect_ActionHandler extends tx_Workspaces_ExtDirect_Abst
                        $additionalRecipients = array();
                }
 
-               $finalRecipients = array_unique(
+               $allRecipients = array_unique(
                        array_merge($recipients, $additionalRecipients)
                );
 
+               foreach ($allRecipients as $recipient) {
+                       if (t3lib_div::validEmail($recipient)) {
+                               $finalRecipients[] = $recipient;
+                       }
+               }
+
                return $finalRecipients;
        }
 
@@ -418,6 +424,8 @@ class tx_Workspaces_ExtDirect_ActionHandler extends tx_Workspaces_ExtDirect_Abst
                                        'xtype' => 'checkboxgroup',
                                        'itemCls' => 'x-check-group-alt',
                                        'columns' => 1,
+                                       'style' => 'max-height: 200px',
+                                       'autoScroll' => true,
                                        'items' => array(
                                                $this->getReceipientsOfStage($nextStageId)
                                        )
@@ -443,7 +451,7 @@ class tx_Workspaces_ExtDirect_ActionHandler extends tx_Workspaces_ExtDirect_Abst
 
        /**
         * Gets all assigned recipients of a particular stage.
-        * 
+        *
         * @param integer $stage
         * @return array
         */
@@ -452,12 +460,15 @@ class tx_Workspaces_ExtDirect_ActionHandler extends tx_Workspaces_ExtDirect_Abst
 
                $recipients = $this->getStageService()->getResponsibleBeUser($stage);
 
-               foreach ($recipients as $id => $name) {
-                       $result[] = array(
-                               'boxLabel' => $name,
-                               'name' => 'receipients-' . $id,
-                               'checked' => TRUE,
-                       );
+               foreach ($recipients as $id => $user) {
+                       if (t3lib_div::validEmail($user['email'])) {
+                               $name = $user['realName'] ? $user['realName'] : $user['username'];
+                               $result[] = array(
+                                       'boxLabel' => sprintf('%s (%s)', $name, $user['email']),
+                                       'name' => 'receipients-' . $id,
+                                       'checked' => TRUE,
+                               );
+                       }
                }
 
                return $result;
@@ -489,7 +500,7 @@ class tx_Workspaces_ExtDirect_ActionHandler extends tx_Workspaces_ExtDirect_Abst
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/ActionHandler.php'])     {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/ActionHandler.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/ActionHandler.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/ActionHandler.php']);
 }
 ?>
\ No newline at end of file
index a3855f2..af47eb7 100644 (file)
@@ -230,7 +230,7 @@ class tx_Workspaces_ExtDirect_MassActionHandler extends tx_Workspaces_ExtDirect_
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/MassActionHandler.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/MassActionHandler.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/MassActionHandler.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/MassActionHandler.php']);
 }
 ?>
\ No newline at end of file
index ca2826d..30b3079 100644 (file)
@@ -200,7 +200,7 @@ class tx_Workspaces_ExtDirect_Server extends tx_Workspaces_ExtDirect_AbstractHan
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/Server.php'])    {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/Server.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/Server.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/Server.php']);
 }
 ?>
\ No newline at end of file
index 1d6a6ae..b4c2893 100644 (file)
@@ -59,6 +59,6 @@ class tx_Workspaces_ExtDirect_ToolbarMenu {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/ToolbarMenu.php'])       {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/ToolbarMenu.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/ToolbarMenu.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/ExtDirect/ToolbarMenu.php']);
 }
\ No newline at end of file
index 88bd7f1..dd6d5ce 100644 (file)
@@ -81,7 +81,7 @@ class tx_Workspaces_Service_AutoPublish {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/AutoPublish.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/AutoPublish.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/AutoPublish.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/AutoPublish.php']);
 }
 ?>
\ No newline at end of file
index 9e1e892..33d98e0 100644 (file)
@@ -50,7 +50,7 @@ class tx_Workspaces_Service_AutoPublishTask extends tx_scheduler_Task {
        }
 }
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/AutoPublishTask.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/AutoPublishTask.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/AutoPublishTask.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/AutoPublishTask.php']);
 }
 ?>
\ No newline at end of file
index bbe1e79..a828788 100644 (file)
@@ -31,6 +31,9 @@
  * @subpackage Service
  */
 class tx_Workspaces_Service_Befunc {
+
+       protected static $pageCache = array();
+
        /**
         * Hooks into the t3lib_beFunc::viewOnClick and redirects to the workspace preview
         * only if we're in a workspace and if the frontend-preview is disabled.
@@ -44,8 +47,14 @@ class tx_Workspaces_Service_Befunc {
         * @param  $switchFocus
         * @return void
         */
-       public function preProcess($pageUid, $backPath, $rootLine, $anchorSection, &$viewScript, $additionalGetVars, $switchFocus) {
-               if ($GLOBALS['BE_USER']->workspace !== 0 && !$GLOBALS['BE_USER']->user['workspace_preview']) {
+       public function preProcess(&$pageUid, $backPath, $rootLine, $anchorSection, &$viewScript, $additionalGetVars, $switchFocus) {
+
+                       // In case a $pageUid is submitted we need to make sure it points to a live-page
+               if ($pageUid >  0) {
+                       $pageUid = $this->getLivePageUid($pageUid);
+               }
+
+               if ($GLOBALS['BE_USER']->workspace !== 0) {
                        $ctrl = t3lib_div::makeInstance('Tx_Workspaces_Controller_PreviewController', FALSE);
                        $uriBuilder = t3lib_div::makeInstance('Tx_Extbase_MVC_Web_Routing_UriBuilder');
                        /**
@@ -61,9 +70,28 @@ class tx_Workspaces_Service_Befunc {
                }
        }
 
+       /**
+        * Find the Live-Uid for a given page,
+        * the results are cached at run-time to avoid too many database-queries
+        *
+        * @throws InvalidArgumentException
+        * @param  $uid
+        * @return void
+        */
+       protected function getLivePageUid($uid) {
+               if (!isset(self::$pageCache[$uid])) {
+                       $rec = t3lib_beFunc::getRecord('pages', $uid);
+                       if (is_array($rec)) {
+                               self::$pageCache[$uid] = $rec['t3ver_oid'] ? $rec['t3ver_oid'] : $uid;
+                       } else {
+                               throw new InvalidArgumentException('uid is supposed to point to an existing page - given value was:' . $uid, 1290628113);
+                       }
+               }
+               return self::$pageCache[$uid];
+       }
 }
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Befunc.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Befunc.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Befunc.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Befunc.php']);
 }
 ?>
\ No newline at end of file
diff --git a/typo3/sysext/workspaces/Classes/Service/Fehooks.php b/typo3/sysext/workspaces/Classes/Service/Fehooks.php
new file mode 100644 (file)
index 0000000..c1b855c
--- /dev/null
@@ -0,0 +1,55 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2010 Workspaces Team (http://forge.typo3.org/projects/show/typo3v4-workspaces)
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project is
+ *  free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *
+ *  This script is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * @author Workspaces Team (http://forge.typo3.org/projects/show/typo3v4-workspaces)
+ * @package Workspaces
+ * @subpackage Service
+ */
+class tx_Workspaces_Service_Fehooks {
+
+       /**
+        * @param tslib_fe $pObj
+        * @return void
+        */
+       public function hook_eofe($params, $pObj) {
+               if ($pObj->fePreview != 2) {
+                       return;
+               }
+
+               echo $GLOBALS['TSFE']->cObj->cObjGetSingle(
+                       'FLUIDTEMPLATE',
+                       array(
+                               'file' => 'EXT:workspaces/Resources/Private/Templates/Preview/Preview.html',
+                               'variables.' => array(
+                                       'backendDomain' => 'TEXT',
+                                       'backendDomain.' => array('value' => $GLOBALS['BE_USER']->getSessionData('workspaces.backend_domain'))
+                               )
+                       )
+               );
+       }
+}
index 65ceffb..c04dc34 100644 (file)
@@ -72,6 +72,10 @@ class tx_Workspaces_Service_GridData {
        protected function generateDataArray(array $versions, $filterTxt) {
                /** @var $stagesObj Tx_Workspaces_Service_Stages */
                $stagesObj = t3lib_div::makeInstance('Tx_Workspaces_Service_Stages');
+               
+               /** @var $workspacesObj Tx_Workspaces_Service_Workspaces */
+               $workspacesObj = t3lib_div::makeInstance('Tx_Workspaces_Service_Workspaces');
+               $availableWorkspaces = $workspacesObj->getAvailableWorkspaces();
 
                foreach ($versions as $table => $records) {
                        $versionArray = array('table' => $table);
@@ -81,46 +85,50 @@ class tx_Workspaces_Service_GridData {
                                $origRecord = t3lib_BEFunc::getRecord($table, $record['t3ver_oid']);
                                $versionRecord = t3lib_BEFunc::getRecord($table, $record['uid']);
 
-                               if (isset($GLOBALS['TCA'][$table]['columns']['hidden'])) {
-                                       $recordState = $this->workspaceState($versionRecord['t3ver_state'], $origRecord['hidden'], $versionRecord['hidden']);
-                               } else {
-                                       $recordState = $this->workspaceState($versionRecord['t3ver_state']);
-                               }
-                               $isDeletedPage = ($table == 'pages' && $recordState == 'deleted');
-
-                               $pctChange = $this->calculateChangePercentage($table, $origRecord, $versionRecord);
-                               $versionArray['uid'] = $record['uid'];
-                               $versionArray['workspace'] = $versionRecord['t3ver_id'];
-                               $versionArray['label_Workspace'] = $versionRecord[$GLOBALS['TCA'][$table]['ctrl']['label']];
-                               $versionArray['label_Live'] = $origRecord[$GLOBALS['TCA'][$table]['ctrl']['label']];
-                               $versionArray['label_Stage'] = $stagesObj->getStageTitle($versionRecord['t3ver_stage']);
-                               $versionArray['change'] = $pctChange;
-                               $versionArray['path_Live'] = t3lib_BEfunc::getRecordPath($record['livepid'], '', 999);
-                               $versionArray['path_Workspace'] = t3lib_BEfunc::getRecordPath($record['wspid'], '', 999);
-                               $versionArray['workspace_Title'] = tx_Workspaces_Service_Workspaces::getWorkspaceTitle($versionRecord['t3ver_wsid']);
-
-                               $versionArray['workspace_Tstamp'] = $versionRecord['tstamp'];
-                               $versionArray['workspace_Formated_Tstamp'] = t3lib_BEfunc::datetime($versionRecord['tstamp']);
-                               $versionArray['t3ver_oid'] = $record['t3ver_oid'];
-                               $versionArray['livepid'] = $record['livepid'];
-                               $versionArray['stage'] = $versionRecord['t3ver_stage'];
-                               $versionArray['icon_Live'] = t3lib_iconWorks::mapRecordTypeToSpriteIconClass($table, $origRecord);
-                               $versionArray['icon_Workspace'] = t3lib_iconWorks::mapRecordTypeToSpriteIconClass($table, $versionRecord);
-
-                               $versionArray['allowedAction_nextStage'] = $stagesObj->isNextStageAllowedForUser($versionRecord['t3ver_stage']);
-                               $versionArray['allowedAction_prevStage'] = $stagesObj->isPrevStageAllowedForUser($versionRecord['t3ver_stage']);
-                                       // @todo hide the actions if the user is not allowed to edit the current stage
-                               $versionArray['allowedAction_swap'] = $GLOBALS['BE_USER']->workspaceSwapAccess();
-                               $versionArray['allowedAction_delete'] = TRUE;
-                                       // preview and editing of a deleted page won't work ;)
-                               $versionArray['allowedAction_view'] = !$isDeletedPage;
-                               $versionArray['allowedAction_edit'] = !$isDeletedPage;
-                               $versionArray['allowedAction_editVersionedPage'] = !$isDeletedPage;
-
-                               $versionArray['state_Workspace'] = $recordState;
-
-                               if ($filterTxt == '' || $this->isFilterTextInVisibleColumns($filterTxt, $versionArray)) {
-                                       $this->dataArray[] = $versionArray;
+                               // check the given version is from an available workspace
+                               if (array_key_exists($versionRecord['t3ver_wsid'], $availableWorkspaces)) {
+                                       
+                                       if (isset($GLOBALS['TCA'][$table]['columns']['hidden'])) {
+                                               $recordState = $this->workspaceState($versionRecord['t3ver_state'], $origRecord['hidden'], $versionRecord['hidden']);
+                                       } else {
+                                               $recordState = $this->workspaceState($versionRecord['t3ver_state']);
+                                       }
+                                       $isDeletedPage = ($table == 'pages' && $recordState == 'deleted');
+
+                                       $pctChange = $this->calculateChangePercentage($table, $origRecord, $versionRecord);
+                                       $versionArray['uid'] = $record['uid'];
+                                       $versionArray['workspace'] = $versionRecord['t3ver_id'];
+                                       $versionArray['label_Workspace'] = $versionRecord[$GLOBALS['TCA'][$table]['ctrl']['label']];
+                                       $versionArray['label_Live'] = $origRecord[$GLOBALS['TCA'][$table]['ctrl']['label']];
+                                       $versionArray['label_Stage'] = $stagesObj->getStageTitle($versionRecord['t3ver_stage']);
+                                       $versionArray['change'] = $pctChange;
+                                       $versionArray['path_Live'] = t3lib_BEfunc::getRecordPath($record['livepid'], '', 999);
+                                       $versionArray['path_Workspace'] = t3lib_BEfunc::getRecordPath($record['wspid'], '', 999);
+                                       $versionArray['workspace_Title'] = tx_Workspaces_Service_Workspaces::getWorkspaceTitle($versionRecord['t3ver_wsid']);
+
+                                       $versionArray['workspace_Tstamp'] = $versionRecord['tstamp'];
+                                       $versionArray['workspace_Formated_Tstamp'] = t3lib_BEfunc::datetime($versionRecord['tstamp']);
+                                       $versionArray['t3ver_oid'] = $record['t3ver_oid'];
+                                       $versionArray['livepid'] = $record['livepid'];
+                                       $versionArray['stage'] = $versionRecord['t3ver_stage'];
+                                       $versionArray['icon_Live'] = t3lib_iconWorks::mapRecordTypeToSpriteIconClass($table, $origRecord);
+                                       $versionArray['icon_Workspace'] = t3lib_iconWorks::mapRecordTypeToSpriteIconClass($table, $versionRecord);
+
+                                       $versionArray['allowedAction_nextStage'] = $stagesObj->isNextStageAllowedForUser($versionRecord['t3ver_stage']);
+                                       $versionArray['allowedAction_prevStage'] = $stagesObj->isPrevStageAllowedForUser($versionRecord['t3ver_stage']);
+                                               // @todo hide the actions if the user is not allowed to edit the current stage
+                                       $versionArray['allowedAction_swap'] = $GLOBALS['BE_USER']->workspaceSwapAccess();
+                                       $versionArray['allowedAction_delete'] = TRUE;
+                                               // preview and editing of a deleted page won't work ;)
+                                       $versionArray['allowedAction_view'] = !$isDeletedPage;
+                                       $versionArray['allowedAction_edit'] = !$isDeletedPage;
+                                       $versionArray['allowedAction_editVersionedPage'] = !$isDeletedPage;
+
+                                       $versionArray['state_Workspace'] = $recordState;
+
+                                       if ($filterTxt == '' || $this->isFilterTextInVisibleColumns($filterTxt, $versionArray)) {
+                                               $this->dataArray[] = $versionArray;
+                                       }
                                }
                        }
                }
@@ -373,7 +381,7 @@ class tx_Workspaces_Service_GridData {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/GridData.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/GridData.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/GridData.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/GridData.php']);
 }
 ?>
\ No newline at end of file
index e627ba8..d4a5996 100644 (file)
@@ -131,6 +131,7 @@ class Tx_Workspaces_Service_Stages {
                                        'uid'
                                );
                                foreach($workspaceStageRecs as $stage) {
+                                       $stage['title'] =  $GLOBALS['LANG']->sL($this->pathToLocallang . ':actionSendToStage') . ' "' . $stage['title'] . '"'; 
                                        $stages[] = $stage;
                                }
                        }
@@ -165,11 +166,12 @@ class Tx_Workspaces_Service_Stages {
                                // go through custom stages records
                        foreach ($workspaceStageRecs as $workspaceStageRec) {
                                        // check if the user has permissions to the custom stage
-                               if ($GLOBALS['BE_USER']->workspaceCheckStageForCurrent($this->encodeStageUid($workspaceStageRec['uid']))) {
+                               if ($GLOBALS['BE_USER']->workspaceCheckStageForCurrent($workspaceStageRec['uid'])) {
                                                // yes, so add to return array
                                        $stagesForWSUserData[] = array(
-                                               'uid' => $this->encodeStageUid($workspaceStageRec['uid']),
-                                               'title' => $GLOBALS['LANG']->sL($this->pathToLocallang . ':actionSendToStage') . ' ' . $workspaceStageRec['title']);
+                                               'uid' => $workspaceStageRec['uid'],
+                                               'title' => $workspaceStageRec['title']
+                                       );
                                } else if ($workspaceStageRec['uid'] == self::STAGE_PUBLISH_EXECUTE_ID) {
                                                if ($GLOBALS['BE_USER']->workspacePublishAccess($this->getWorkspaceId())) {
                                                        $stagesForWSUserData[] = $workspaceStageRec;
@@ -190,27 +192,6 @@ class Tx_Workspaces_Service_Stages {
                return $workspaceRec['custom_stages'] > 0;
        }
 
-       /**
-        * converts from versioning stage id to stage record UID
-        *
-        * @return int UID of the database record
-        */
-       public function resolveStageUid($ver_stage) {
-               return $ver_stage;
-               //return $ver_stage - $this->raiseStageIdAmount;
-       }
-
-       /**
-        * converts from stage record UID to versioning stage id
-        *
-        * @param int UID of the stage database record
-        * @return int versioning stage id
-        */
-       public function encodeStageUid($stage_uid) {
-               return $stage_uid;
-               //return $stage_uid + $this->raiseStageIdAmount;
-       }
-
        /**
         * Gets the title of a stage.
         *
@@ -250,7 +231,7 @@ class Tx_Workspaces_Service_Stages {
         * @return array
         */
        public function getStageRecord($stageid) {
-               return t3lib_BEfunc::getRecord('sys_workspace_stage', $this->resolveStageUid($stageid));
+               return t3lib_BEfunc::getRecord('sys_workspace_stage', $stageid);
        }
 
        /**
@@ -274,7 +255,7 @@ class Tx_Workspaces_Service_Stages {
                        reset($workspaceStageRecs);
                        while (!is_null($workspaceStageRecKey = key($workspaceStageRecs))) {
                                $workspaceStageRec = current($workspaceStageRecs);
-                               if ($workspaceStageRec['uid'] == $this->resolveStageUid($stageId)) {
+                               if ($workspaceStageRec['uid'] == $stageId) {
                                        $nextStage = next($workspaceStageRecs);
                                        break;
                                }
@@ -345,7 +326,7 @@ class Tx_Workspaces_Service_Stages {
                        end($workspaceStageRecs);
                        while (!is_null($workspaceStageRecKey = key($workspaceStageRecs))) {
                                $workspaceStageRec = current($workspaceStageRecs);
-                               if ($workspaceStageRec['uid'] == $this->resolveStageUid($stageid)) {
+                               if ($workspaceStageRec['uid'] == $stageid) {
                                        $prevStage = prev($workspaceStageRecs);
                                        break;
                                }
@@ -416,7 +397,7 @@ class Tx_Workspaces_Service_Stages {
 
                if (!empty($userRecords) && is_array($userRecords)) {
                        foreach ($userRecords as $userUid => $userRecord) {
-                               $recipientArray[$userUid] = $userRecord['email'] . ' ( ' . $userRecord['realName'] . ' )';
+                               $recipientArray[$userUid] = $userRecord;
                        }
                }
                return $recipientArray;
@@ -558,10 +539,6 @@ class Tx_Workspaces_Service_Stages {
                        throw new InvalidArgumentException($GLOBALS['LANG']->sL('LLL:EXT:workspaces/Resources/Private/Language/locallang.xml:error.stageId.integer'));
                }
 
-               if ($stageId != self::STAGE_PUBLISH_ID && $stageId != self::STAGE_EDIT_ID) {
-                       $stageId = $this->resolveStageUid($stageId);
-               }
-
                $workspaceStage = t3lib_BEfunc::getRecord(self::TABLE_STAGE, $stageId);
 
                if (is_array($workspaceStage) && isset($workspaceStage[$property])) {
@@ -683,7 +660,7 @@ class Tx_Workspaces_Service_Stages {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Stages.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Stages.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Stages.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Stages.php']);
 }
 ?>
\ No newline at end of file
index b5a1357..3c75e44 100644 (file)
@@ -64,16 +64,12 @@ class tx_Workspaces_Service_Tcemain {
         * @return void
         */
        protected function resetStageOfElements($stageId) {
-               $service = t3lib_div::makeInstance('Tx_Workspaces_Service_Stages');
-                       // @todo: remove the encode/decode functionality
-               $pseudoStageId = $service->encodeStageUid($stageId);
-
                $fields = array('t3ver_stage' => Tx_Workspaces_Service_Stages::STAGE_EDIT_ID);
 
                foreach ($this->getTcaTables() as $tcaTable) {
                        if (t3lib_BEfunc::isTableWorkspaceEnabled($tcaTable)) {
 
-                               $where = 't3ver_stage = ' . intval($pseudoStageId);
+                               $where = 't3ver_stage = ' . intval($stageId);
                                $where .= ' AND t3ver_wsid > 0 AND pid=-1';
                                $where .= t3lib_BEfunc::deleteClause($tcaTable);
 
@@ -136,7 +132,7 @@ class tx_Workspaces_Service_Tcemain {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Tcemain.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Tcemain.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Tcemain.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Tcemain.php']);
 }
 ?>
\ No newline at end of file
index 4172c52..89c32e1 100644 (file)
@@ -458,7 +458,7 @@ class tx_Workspaces_Service_Workspaces {
 }
 
 
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Workspaces.php']) {
-       include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Workspaces.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Workspaces.php'])) {
+       include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['ext/workspaces/Classes/Service/Workspaces.php']);
 }
 ?>
\ No newline at end of file
diff --git a/typo3/sysext/workspaces/Classes/ViewHelpers/TempFlashMessageQueueViewHelper.php b/typo3/sysext/workspaces/Classes/ViewHelpers/TempFlashMessageQueueViewHelper.php
deleted file mode 100644 (file)
index bbe3480..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-/*                                                                        *
- * This script belongs to the FLOW3 package "Fluid".                      *
- *                                                                        *
- * It is free software; you can redistribute it and/or modify it under    *
- * the terms of the GNU Lesser General Public License as published by the *
- * Free Software Foundation, either version 3 of the License, or (at your *
- * option) any later version.                                             *
- *                                                                        *
- * This script is distributed in the hope that it will be useful, but     *
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHAN-    *
- * TABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser       *
- * General Public License for more details.                               *
- *                                                                        *
- * You should have received a copy of the GNU Lesser General Public       *
- * License along with the script.                                         *
- * If not, see http://www.gnu.org/licenses/lgpl.html                      *
- *                                                                        *
- * The TYPO3 project - inspiring people to share!                         *
- *                                                                        */
-
-/**
- * View helper which renders the FlashMessageQueu
- *
- * = Examples =
- *
- * <code title="Minimal">
- * <f:be.flashMessageQueue />
- * </code>
- *
- * Output:
- * All FlashMessages which were registered using t3lib_FlashMessageQueue::addMessage($message);
- *
- * @author      Tolleiv Nietsch <info@tolleiv.de>
- * @license     http://www.gnu.org/copyleft/gpl.html
- * @version     SVN: $Id:
- *
- */
-
-/**
- * ViewHelper to integrate the backend FlashMessageQueue into our module
- *
- * @todo Remove this viewHelper once http://forge.typo3.org/issues/10821 is available
- */
-class Tx_Workspaces_ViewHelpers_TempFlashMessageQueueViewHelper extends Tx_Fluid_ViewHelpers_Be_AbstractBackendViewHelper {
-
-
-       /**
-        * Renders a shortcut button as known from the TYPO3 backend
-        *
-        * @return string the rendered flashMessage
-        * @see template::makeShortcutIcon()
-        */
-       public function render() {
-
-               $renderedMessages = '';
-               $flashMessages = t3lib_FlashMessageQueue::renderFlashMessages();
-               if (!empty($flashMessages)) {
-                       $renderedMessages = '<div id="typo3-messages">' . $flashMessages . '</div>';
-               }
-
-               return $renderedMessages;
-       }
-}
-?>
\ No newline at end of file
index b3202e0..2fb5603 100644 (file)
                        <label index="actionSendToStage">Send to stage </label>
                        <label index="publish_execute_action_option">Publish  to LIVE</label>
                        <label index="close">Close</label>
-                       <label index="runMassAction.doneProcessing">Done processing</label>
-                       <label index="runMassAction.elements"> elements</label>
+                       <label index="runMassAction.done">Done processing %d elements</label>
                        <label index="runMassAction.init">init</label>
                        <label index="tooltip.publishAll">Really publish entire workspace?</label>
                        <label index="tooltip.swapAll">Really swap entire workspace?</label>
                        <label index="tooltip.releaseAll">Really release entire workspace?</label>
+                       <label index="tooltip.affectWholeWorkspace">Please note that this will affect all changes in the current workspace, which may be more than you are currently seeing on your screen.</label>
                        <label index="previewLink">Preview Link</label>
                        <label index="error.noResponse">The server did not send any response whether the action was successful.</label>
                        <label index="rowDetails">Row details...</label>
@@ -57,7 +57,7 @@
                        <label index="window.remove.title">Remove version from workspace</label>
                        <label index="window.remove.message">Do you really want to remove this version from workspace?</label>
                        <label index="window.swap.title">Swap version</label>
-                       <label index="window.swap.message">Do you really want to swap this version??</label>
+                       <label index="window.swap.message">Do you really want to swap this version?</label>
                        <label index="window.massAction.title">Prepare to start mass action</label>
                        <label index="error.stageId.integer">StageId is supposed to be an integer</label>
                        <label index="error.stageId.invalid">The stage to be used seems to be invalid and cannot be used. Please consider to use the update wizard in the install tool to fix this.</label>
                        <label index="warning.oldStyleWorkspaceInUser">It seems that you're still using old-style workspace. Please use the update scripts in the TYPO3 Install Tool to run the necessary updates. If you continue using this module without migrating your workspace you might loose data.</label>
                        <label index="info.newpage">New Page!</label>
                        <label index="info.newpage.detail">The previewed page has been created in a workspace and has no live counterpart.</label>
+                       <label index="preview.visualPreview">Visual preview</label>
+                       <label index="preview.listView">List view</label>
+                       <label index="preview.helpView">Help</label>
+                       <label index="preview.livePreview">Live</label>
+                       <label index="preview.workspacePreview">Workspace</label>
                </languageKey>
        </data>
-</T3locallang>
\ No newline at end of file
+</T3locallang>
index 3fd235e..e810a97 100644 (file)
@@ -1,4 +1,3 @@
-{namespace this=Tx_Workspaces_ViewHelpers}
 <!-- ###FULLDOC### begin -->
 <div class="typo3-fullDoc">
 <!-- Page header with buttons, path details and csh -->
@@ -20,7 +19,7 @@
 <div id="typo3-docbody">
 <div id="typo3-inner-docbody">
 
-       <this:TempFlashMessageQueue />
+       <f:renderFlashMessages renderMode="div" />
 
        <f:render partial="navigation" arguments="{workspaceList: workspaceList, activeWorkspaceUid: activeWorkspaceUid, showAllWorkspaceTab:showAllWorkspaceTab}" />
        <div class="typo3-dyntabmenu-divs"><f:render section="main" /></div>
index 38ad7bc..f29e097 100644 (file)
@@ -1,10 +1,9 @@
-{namespace this=Tx_Workspaces_ViewHelpers}
 <div class="typo3-noDoc">
        <!-- Content of module, for instance listing, info or editing -->
        <div id="typo3-docbody">
                <div id="typo3-inner-docbody">
 
-                       <this:TempFlashMessageQueue />
+                       <f:renderFlashMessages renderMode="div" />
 
                        <f:render section="main"/>
                </div>
index fc86011..ddd83a1 100644 (file)
@@ -5,4 +5,13 @@
        var wsUrl = '{wsUrl}';
        var wsSettingsUrl = '{wsSettingsUrl}';
        var wsHelpUrl = '{wsHelpUrl}';
+       document.domain = '{backendDomain}';
+
+       function resize(height) {
+                       // poor way to avoid that we require any scrollbars within the frames 
+               var finalHeight = height * 1.1;
+               Ext.getCmp('visualPanel').setHeight(finalHeight);
+               Ext.getCmp('wsPanel').setHeight(finalHeight);
+               Ext.getCmp('livePanel').setHeight(finalHeight);
+       }
 </script>
diff --git a/typo3/sysext/workspaces/Resources/Private/Templates/Preview/Preview.html b/typo3/sysext/workspaces/Resources/Private/Templates/Preview/Preview.html
new file mode 100644 (file)
index 0000000..42623f8
--- /dev/null
@@ -0,0 +1,19 @@
+<script type="text/javascript">
+       document.domain =  '{backendDomain}';
+
+               // @todo redirect to split module if this is opened standalone
+
+               // make sure we're in the workspace preview module 
+       if (typeof parent.resize == 'function') {
+               parent.resize(
+                       Math.max(
+                               Math.max(document.body.scrollHeight, document.documentElement.scrollHeight),
+                               Math.max(document.body.offsetHeight, document.documentElement.offsetHeight),
+                               Math.max(document.body.clientHeight, document.documentElement.clientHeight)
+                       )
+               );
+
+               var element = document.getElementById('typo3-previewInfo');
+               element.parentNode.removeChild(element);
+       }
+</script>
index 50005c5..c3faa4e 100644 (file)
@@ -1,6 +1,14 @@
 <f:layout name="module" />
 
 <f:section name="main">
+
+<f:if condition="{performWorkspaceSwitch}">
+<script type="text/javascript">
+       top.TYPO3.ModuleMenu.Store.load();
+       top.TYPO3BackendWorkspaceMenu.performWorkspaceSwitch({activeWorkspaceUid}, "{activeWorkspaceTitle}");
+</script>
+</f:if>
+
 <f:if condition="{showGrid}">
        <f:then><div id="workspacegrid"></div>
        </f:then>
diff --git a/typo3/sysext/workspaces/Resources/Public/Images/slider-bg.png b/typo3/sysext/workspaces/Resources/Public/Images/slider-bg.png
new file mode 100644 (file)
index 0000000..cbfb8e1
Binary files /dev/null and b/typo3/sysext/workspaces/Resources/Public/Images/slider-bg.png differ
diff --git a/typo3/sysext/workspaces/Resources/Public/Images/slider-thumb.png b/typo3/sysext/workspaces/Resources/Public/Images/slider-thumb.png
new file mode 100644 (file)
index 0000000..b0f4aad
Binary files /dev/null and b/typo3/sysext/workspaces/Resources/Public/Images/slider-thumb.png differ
diff --git a/typo3/sysext/workspaces/Resources/Public/Images/typo3-logo.png b/typo3/sysext/workspaces/Resources/Public/Images/typo3-logo.png
new file mode 100644 (file)
index 0000000..c0868a3
Binary files /dev/null and b/typo3/sysext/workspaces/Resources/Public/Images/typo3-logo.png differ
diff --git a/typo3/sysext/workspaces/Resources/Public/JavaScript/Ext.ux.plugins.TabStripContainer.js b/typo3/sysext/workspaces/Resources/Public/JavaScript/Ext.ux.plugins.TabStripContainer.js
new file mode 100644 (file)
index 0000000..7bece71
--- /dev/null
@@ -0,0 +1,202 @@
+/**
+ * Ext.ux.plugins.TabStripContainer
+ *
+ * @author  Steffen Kamper
+ * @date       December 19, 2010
+ *
+ * @class Ext.ux.plugins.TabStripContainer
+ * @extends Object
+ */
+
+Ext.ns('Ext.ux.plugins');
+
+Ext.ux.plugins.TabStripContainer = Ext.extend(Object, {
+
+       /**
+        * @hide        private
+        *
+        * Tab panel we are plugged in.
+        */
+       tabPanel : null,
+
+       /**
+        * @hide        private
+        *
+        * items for the panel
+        */
+       items: [],
+
+       /**
+        * @hide        private
+        *
+        * Cached tab panel's strip wrap element container, i.e. panel's header or footer element.
+        */
+       headerFooterEl : null,
+
+
+       /**
+        * @constructor
+        */
+       constructor : function(config) {
+               Ext.apply(this, config);
+       },
+
+       /**
+        * Initializes plugin
+        */
+       init : function(tabPanel) {
+               this.tabPanel = tabPanel;
+               tabPanel.on(
+                       'afterrender',
+                       this.onTabPanelAfterRender,
+                       this,
+                       {
+                               delay: 10
+                       }
+               );
+       },
+
+       /**
+        * Adds the panel to the tab header/footer
+        *
+        * @param tabPanel
+        */
+       onTabPanelAfterRender: function(tabPanel) {
+               var height, panelDiv, stripTarget, config;
+               // Getting and caching strip wrap element parent, i.e. tab panel footer or header.
+               this.headerFooterEl =
+                               this.tabPanel.tabPosition == 'bottom'
+                                       ? this.tabPanel.footer
+                                       : this.tabPanel.header;
+               height = this.headerFooterEl.getComputedHeight();
+               stripTarget = tabPanel[tabPanel.stripTarget];
+
+               stripTarget.applyStyles('position: relative;');
+
+               panelDiv = this.headerFooterEl.createChild({
+                       tag : 'div',
+                       id: this.id || Ext.id(),
+                       style : {
+                               position : 'absolute',
+                               right: 0,
+                               top: 0
+                       }
+               });
+               panelDiv.setSize(this.width, height, false);
+               config = Ext.applyIf({
+                       layout: 'hbox',
+                       layoutConfig: {
+                               align: 'stretchmax'
+                       },
+                       height: height,
+                       width: this.width,
+                       renderTo: panelDiv
+               }, this.panelConfig);
+               this.panelContainer = new Ext.Panel(config);
+               this.panelContainer.add(this.items);
+               this.panelContainer.doLayout();
+       }
+
+});
+Ext.preg('Ext.ux.plugins.TabStripContainer', Ext.ux.plugins.TabStripContainer);
+/**
+ * Ext.ux.plugins.TabStripContainer
+ *
+ * @author  Steffen Kamper
+ * @date       December 19, 2010
+ *
+ * @class Ext.ux.plugins.TabStripContainer
+ * @extends Object
+ */
+
+Ext.ns('Ext.ux.plugins');
+
+Ext.ux.plugins.TabStripContainer = Ext.extend(Object, {
+
+       /**
+        * @hide        private
+        *
+        * Tab panel we are plugged in.
+        */
+       tabPanel : null,
+
+       /**
+        * @hide        private
+        *
+        * items for the panel
+        */
+       items: [],
+
+       /**
+        * @hide        private
+        *
+        * Cached tab panel's strip wrap element container, i.e. panel's header or footer element.
+        */
+       headerFooterEl : null,
+
+
+       /**
+        * @constructor
+        */
+       constructor : function(config) {
+               Ext.apply(this, config);
+       },
+
+       /**
+        * Initializes plugin
+        */
+       init : function(tabPanel) {
+               this.tabPanel = tabPanel;
+               tabPanel.on(
+                       'afterrender',
+                       this.onTabPanelAfterRender,
+                       this,
+                       {
+                               delay: 10
+                       }
+               );
+       },
+
+       /**
+        * Adds the panel to the tab header/footer
+        *
+        * @param tabPanel
+        */
+       onTabPanelAfterRender: function(tabPanel) {
+               var height, panelDiv, stripTarget, config;
+               // Getting and caching strip wrap element parent, i.e. tab panel footer or header.
+               this.headerFooterEl =
+                               this.tabPanel.tabPosition == 'bottom'
+                                       ? this.tabPanel.footer
+                                       : this.tabPanel.header;
+               height = this.headerFooterEl.getComputedHeight();
+               stripTarget = tabPanel[tabPanel.stripTarget];
+
+               stripTarget.applyStyles('position: relative;');
+
+               panelDiv = this.headerFooterEl.createChild({
+                       tag : 'div',
+                       id: this.id || Ext.id(),
+                       style : {
+                               position : 'absolute',
+                               right: 0,
+                               top: 0
+                       }
+               });
+               panelDiv.setSize(this.width, height, false);
+               config = Ext.applyIf({
+                       layout: 'hbox',
+                       layoutConfig: {
+                               align: 'stretchmax'
+                       },
+                       height: height,
+                       width: this.width,
+                       renderTo: panelDiv
+               }, this.panelConfig);
+               this.panelContainer = new Ext.Panel(config);
+               this.panelContainer.add(this.items);
+               this.panelContainer.doLayout();
+       }
+
+});
+Ext.preg('Ext.ux.plugins.TabStripContainer', Ext.ux.plugins.TabStripContainer);
index f7fcc44..51c6b72 100644 (file)
@@ -79,13 +79,13 @@ TYPO3.Workspaces.Actions = {
                                top.Ext.getCmp('executeMassActionOkButton').hide();
                                top.Ext.getCmp('executeMassActionCancleButton').setText(TYPO3.lang.close);
                                top.Ext.getCmp('executeMassActionForm').show();
-                               top.Ext.getCmp('executeMassActionForm').update(TYPO3.lang["runMassAction.doneProcessing"] + response.total + TYPO3.lang["runMassAction.elements"]);
+                               top.Ext.getCmp('executeMassActionForm').update(TYPO3.lang["runMassAction.done"].replace('%d', response.total));
                        }
                }
        },
        generateWorkspacePreviewLink: function() {
                TYPO3.Workspaces.ExtDirectActions.generateWorkspacePreviewLink(TYPO3.settings.Workspaces.id, function(response) {
-                       top.TYPO3.Dialog.getInformationDialog({title: TYPO3.lang.previewLink, msg: response});
+                       top.TYPO3.Dialog.InformationDialog({title: TYPO3.lang.previewLink, msg: response});
                });
        },
        swapSingleRecord: function(table, t3ver_oid, orig_uid) {
index a9ec6d2..f546063 100644 (file)
@@ -176,6 +176,7 @@ TYPO3.Workspaces.Configuration.SendToPrevStageButton = {
        xtype: 'actioncolumn',
        header:'',
        width: 18,
+       hidden: (TYPO3.settings.Workspaces.allView === '1'),
        items:[
                {
                        iconCls: 't3-icon t3-icon-extensions t3-icon-extensions-workspaces t3-icon-workspaces-sendtoprevstage',
@@ -192,6 +193,7 @@ TYPO3.Workspaces.Configuration.SendToNextStageButton = {
        xtype: 'actioncolumn',
        header:'',
        width: 18,
+       hidden: (TYPO3.settings.Workspaces.allView === '1'),
        items: [
                {},{    // empty dummy important!!!!
                        iconCls: 't3-icon t3-icon-extensions t3-icon-extensions-workspaces t3-icon-workspaces-sendtonextstage',
@@ -216,14 +218,14 @@ TYPO3.Workspaces.Configuration.Stage = {
        },
        renderer: function(value, metaData, record, rowIndex, colIndex, store) {
                var returnCode = '';
-               if (record.json.allowedAction_prevStage) {
+               if (record.json.allowedAction_prevStage && TYPO3.settings.Workspaces.allView !== '1') {
                        var prevButton = new Ext.grid.ActionColumn(TYPO3.Workspaces.Configuration.SendToPrevStageButton);
                        returnCode += prevButton.renderer(1, metaData, record, rowIndex, 1, store);
                } else {
                        returnCode += "<span class=\"t3-icon t3-icon-empty t3-icon-empty-empty\">&nbsp;</span>";
                }
                returnCode += record.json.label_Stage;
-               if (record.json.allowedAction_nextStage) {
+               if (record.json.allowedAction_nextStage && TYPO3.settings.Workspaces.allView !== '1') {
                        var nextButton = new Ext.grid.ActionColumn(TYPO3.Workspaces.Configuration.SendToNextStageButton);
                        returnCode += nextButton.renderer(2, metaData, record, rowIndex, 2, store);
                } else {
@@ -249,6 +251,7 @@ TYPO3.Workspaces.Configuration.RowButtons = {
        header: TYPO3.lang["column.actions"],
        width: 70,
        hideable: false,
+       hidden: (TYPO3.settings.Workspaces.allView === '1'),
        menuDisabled: true,
        items: [
                {
@@ -340,6 +343,7 @@ TYPO3.Workspaces.Configuration.SwapButton = {
        width: 18,
        menuDisabled: true,
        sortable: false,
+       hidden: (TYPO3.settings.Workspaces.allView === '1'),
        items: [
                {
                        iconCls:'t3-icon t3-icon-actions t3-icon-actions-version t3-icon-version-swap-workspace'
index 60b5880..32ec9a9 100644 (file)
@@ -49,6 +49,7 @@ TYPO3.Workspaces.Helpers = {
        },
 
        getSendToStageWindow: function(configuration) {
+               top.TYPO3.Windows.close('sendToStageWindow');
                return top.TYPO3.Windows.showWindow({
                        id: 'sendToStageWindow',
                        title: configuration.title,
index c3e0cf2..1703760 100644 (file)
 Ext.onReady(function() {
        var viewport = new Ext.Viewport({
                layout: 'border',
-               items: [
-               {
+               items: [{
                        xtype: 'tabpanel',
                        region: 'center', // a center region is ALWAYS required for border layout
                        id: 'preview',
                        activeTab: 0,
-                       items: [
+                       plugins : [{
+                               ptype : 'Ext.ux.plugins.TabStripContainer',
+                               id: 'controls',
+                               width: 400,
+                               items: [{
+                                       xtype: 'button',
+                                       id: 'sizeSliderButtonLive',
+                                       cls: 'sliderButton',
+                                       text: TYPO3.LLL.Workspaces.livePreview,
+                                       width: 100,
+                                       listeners: {
+                                               click: {
+                                                       fn: function () {
+                                                               Ext.getCmp('sizeSlider').setValue(0);
+                                                       }
+                                               }
+                                       }
+                               },
                                {
-                                       title: 'Workspace preview',
-                                       id: 'workspaceRegion',
-                                       layout: 'fit',
-                                       items: [{
-                                               xtype: 'iframePanel',
-                                               id: 'wsPanel',
-                                               doMask: false,
-                                               src: wsUrl
-                                       }]
-                               }, {
-                                       title: 'Live site',
-                                       id: 'liveRegion',
+                                       xtype: 'slider',
+                                       id: 'sizeSlider',
+                                       margins: '0 10 0 10',
+                                       maxValue: 100,
+                                       minValue: 0,
+                                       value: 100,
+                                       flex: 1,
+                                       listeners: {
+                                               change: {
+                                                       fn: function resizeFromValue(slider, newValue, thumb) {
+                                                               var height = Ext.getCmp('wsPanel').getHeight();
+                                                               Ext.getCmp('liveContainer').setHeight(height * (100 - newValue) / 100);
+                                                               Ext.getCmp('visualPanel').setHeight(height);
+                                                       }
+                                               }
+                                       }
+                               },
+                               {
+                                       xtype: 'button',
+                                       id: 'sizeSliderButtonWorkspace',
+                                       cls: 'sliderButton',
+                                       text: TYPO3.LLL.Workspaces.workspacePreview,
+                                       width: 100,
+                                       listeners: {
+                                               click: {
+                                                       fn: function () {
+                                                               Ext.getCmp('sizeSlider').setValue(100);
+                                                       }
+                                               }
+                                       }
+                               }]
+                       }],
+                       items: [{
+                               title: TYPO3.LLL.Workspaces.visualPreview,
+                               id: 'wsVisual',
+                               layout: 'fit',
+                               items: [{
                                        layout: 'fit',
+                                       x: 0, y:0,
+                                       anchor: '100% 100%',
+                                       autoScroll: true,
                                        items: [{
-                                               xtype: 'iframePanel',
-                                               id: 'livePanel',
-                                               doMask: false,
-                                               src: liveUrl
-                                       }]
-                               },{
-                                       title: 'List view',
-                                       id: 'wsSettings',
-                                       layout: 'fit',
-                                       items:  [{
-                                               xtype: 'iframePanel',
-                                               id: 'settingsPanel',
-                                               doMask: false,
-                                               src: wsSettingsUrl
-                                       }]
-                               },{
-                                       title: 'Help',
-                                       id: 'wsHelp',
-                                       layout: 'fit',
-                                       items:  [{
-                                               xtype: 'iframePanel',
-                                               id: 'settingsPanel',
-                                               doMask: false,
-                                               src: wsHelpUrl
+                                               layout: 'absolute',
+                                               id: 'visualPanel',
+                                               items: [{
+                                                       x: 0, y:0,
+                                                       anchor: '100% 100%',
+                                                       id: 'wsContainer',
+                                                       layout: 'absolute',
+                                                       autoScroll: false,
+                                                       items:[{
+                                                               xtype: 'iframePanel',
+                                                               x: 0, y:0,
+                                                               id: 'wsPanel',
+                                                               doMask: false,
+                                                               src: wsUrl,
+                                                               autoScroll: false
+                                                       }]
+                                               },{
+                                                       x: 0, y:0,
+                                                       anchor: '100% 0%',
+                                                       id: 'liveContainer',
+                                                       layout: 'absolute',
+                                                       bodyStyle: 'height:0px;border-bottom: 2px solid red;',
+                                                       autoScroll: false,
+                                                       items:[{
+                                                               xtype: 'iframePanel',
+                                                               x: 0, y:0,
+                                                               id: 'livePanel',
+                                                               doMask: false,
+                                                               src: liveUrl,
+                                                               autoScroll: false
+                                                       }]
+                                               }]
                                        }]
-                               }
-                       ]
+                               }]
+                       },{
+                               title: TYPO3.LLL.Workspaces.listView,
+                               id: 'wsSettings',
+                               layout: 'fit',
+                               items:  [{
+                                       xtype: 'iframePanel',
+                                       id: 'settingsPanel',
+                                       doMask: false,
+                                       src: wsSettingsUrl
+                               }]
+                       },{
+                               title: TYPO3.LLL.Workspaces.helpView,
+                               id: 'wsHelp',
+                               layout: 'fit',
+                               items:  [{
+                                       xtype: 'iframePanel',
+                                       id: 'settingsPanel',
+                                       doMask: false,
+                                       src: wsHelpUrl
+                               }]
+                       }]
                }]
        });
 });
\ No newline at end of file
index 42f8cc1..a3e852c 100644 (file)
@@ -90,7 +90,7 @@ TYPO3.Workspaces.Toolbar.selectMassActionStore = new Ext.data.DirectStore({
        ],
        listeners : {
                load : function(store, records) {
-                       if (records.length == 0) {
+                       if (records.length == 0 || TYPO3.settings.Workspaces.singleView === '1') {
                                TYPO3.Workspaces.Toolbar.selectStateMassActionCombo.hide();
                        } else {
                                TYPO3.Workspaces.Toolbar.selectStateMassActionCombo.show();
@@ -115,6 +115,7 @@ TYPO3.Workspaces.Toolbar.selectStateMassActionCombo = new Ext.form.ComboBox({
        listeners: {
                'select' : function (combo, record) {
                        var label = '';
+                       var affectWholeWorkspaceWarning = TYPO3.lang["tooltip.affectWholeWorkspace"];
                        switch (record.data.action) {
                                case 'publish':
                                        label = TYPO3.lang["tooltip.publishAll"];
@@ -126,6 +127,7 @@ TYPO3.Workspaces.Toolbar.selectStateMassActionCombo = new Ext.form.ComboBox({
                                        label = TYPO3.lang["tooltip.releaseAll"];
                                        break;
                        }
+                       top.TYPO3.Windows.close('executeMassActionWindow');
                        var dialog = top.TYPO3.Windows.showWindow({
                                id: 'executeMassActionWindow',
                                title: TYPO3.lang["window.massAction.title"],
@@ -134,7 +136,7 @@ TYPO3.Workspaces.Toolbar.selectStateMassActionCombo = new Ext.form.ComboBox({
                                                xtype: 'form',
                                                id: 'executeMassActionForm',
                                                width: '100%',
-                                               html: label,
+                                               html: label + '<br /><br />' + affectWholeWorkspaceWarning,
                                                bodyStyle: 'padding: 5px 5px 3px 5px; border-width: 0; margin-bottom: 7px;'
                                        },
                                        {
@@ -195,7 +197,7 @@ TYPO3.Workspaces.Toolbar.depthFilter = new Ext.form.ComboBox({
        triggerAction: 'all',
        editable: false,
        forceSelection: true,
-       hidden: TYPO3.lang.showDepthMenu,
+       hidden: (TYPO3.settings.Workspaces.singleView === '1'),
        store: new Ext.data.SimpleStore({
                autoLoad: true,
                fields: ['depth','label'],
@@ -236,4 +238,4 @@ TYPO3.Workspaces.Toolbar.FullBottomBar = [
        TYPO3.Workspaces.Toolbar.selectStateMassActionCombo,
        {xtype: 'tbfill'},
        TYPO3.Workspaces.Toolbar.Pager
-];
\ No newline at end of file
+];
index aeff853..7e5ec41 100644 (file)
@@ -48,7 +48,6 @@ var WorkspaceMenu = Class.create({
                        }
                        this.positionMenu();
                        Event.observe('workspace-selector-menu', 'click', this.toggleMenu);
-                       Event.observe('frontendPreviewToggle', 'click', this.toggleFrontendPreview.bind(this));
                        Event.observe('goToWsModule', 'click', this.goToWorkspaceModule.bind(this));
 
                        // observe all clicks on workspace links in the menu
@@ -150,34 +149,8 @@ var WorkspaceMenu = Class.create({
                        if (!response.id) {
                                response.id = 0;
                        }
-                       if(response.title) {
-                               top.TYPO3.Workspaces.workspaceTitle = response.title;
-                       }
-                       top.TYPO3.configuration.inWorkspace = response.id === 0 ? 0 : 1;
-                       if (top.TYPO3.configuration.inWorkspace == 1) {
-                               Ext.getBody().addClass('typo3-in-workspace');
-                               if (Ext.get('typo3-topbar-workspaces-title')) {
-                                       Ext.get('typo3-topbar-workspaces-title').remove();
-                               }
-                               Ext.select('#username a').insertHtml('beforeEnd', '<span id="typo3-topbar-workspaces-title">@' + top.TYPO3.Workspaces.workspaceTitle + '</span>');
-                       } else {
-                               Ext.getBody().removeClass('typo3-in-workspace');
-                               Ext.select('#typo3-topbar-workspaces-title').remove();
-                       }
-
-                       TYPO3BackendWorkspaceMenu.positionMenu();
-
-                       // first remove all checks, then set the check in front of the selected workspace
-                       var stateActiveClass = 't3-icon t3-icon-status t3-icon-status-status t3-icon-status-checked';
-                       var stateInactiveClass = 't3-icon t3-icon-empty t3-icon-empty-empty t3-icon-empty';
 
-                       // remove "selected" class and checkmark
-                       $$('#workspace-selector-menu li.selected span.t3-icon-status-checked')[0].removeClassName(stateActiveClass).addClassName(stateInactiveClass);
-                       $$('#workspace-selector-menu li.selected')[0].removeClassName('selected');
-
-                       // add "selected" class and checkmark
-                       clickedElement.previous().removeClassName(stateInactiveClass).addClassName(stateActiveClass);
-                       clickedElement.up().addClassName('selected');
+                       TYPO3BackendWorkspaceMenu.performWorkspaceSwitch(response.id, response.title);
 
                        // when in web module reload, otherwise send the user to the web module
                        if (currentModuleLoaded.startsWith('web_')) {
@@ -192,7 +165,36 @@ var WorkspaceMenu = Class.create({
                        TYPO3ModuleMenu.refreshMenu();
                });
 
-               this.toggleMenu(event);
+               TYPO3BackendWorkspaceMenu.toggleMenu(event);
+       },
+
+       performWorkspaceSwitch: function(id, title) {
+               top.TYPO3.Workspaces.workspaceTitle = title;
+               top.TYPO3.configuration.inWorkspace = id === 0 ? 0 : 1;
+               if (top.TYPO3.configuration.inWorkspace == 1) {
+                       Ext.getBody().addClass('typo3-in-workspace');
+                       if (Ext.get('typo3-topbar-workspaces-title')) {
+                               Ext.get('typo3-topbar-workspaces-title').remove();
+                       }
+                       Ext.select('#username a').insertHtml('beforeEnd', '<span id="typo3-topbar-workspaces-title">@' + top.TYPO3.Workspaces.workspaceTitle + '</span>');
+               } else {
+                       Ext.getBody().removeClass('typo3-in-workspace');
+                       Ext.select('#typo3-topbar-workspaces-title').remove();
+               }
+
+               TYPO3BackendWorkspaceMenu.positionMenu();
+
+               // first remove all checks, then set the check in front of the selected workspace
+               var stateActiveClass = 't3-icon t3-icon-status t3-icon-status-status t3-icon-status-checked';
+               var stateInactiveClass = 't3-icon t3-icon-empty t3-icon-empty-empty t3-icon-empty';
+
+               // remove "selected" class and checkmark
+               $$('#workspace-selector-menu li.selected span.t3-icon-status-checked')[0].removeClassName(stateActiveClass).addClassName(stateInactiveClass);
+               $$('#workspace-selector-menu li.selected')[0].removeClassName('selected');
+
+               // add "selected" class and checkmark
+               $$('#ws-' + id)[0].previous().removeClassName(stateInactiveClass).addClassName(stateActiveClass);
+               $$('#ws-' + id)[0].up().addClassName('selected');
        }
 
 });
diff --git a/typo3/sysext/workspaces/Resources/Public/StyleSheet/preview.css b/typo3/sysext/workspaces/Resources/Public/StyleSheet/preview.css
new file mode 100644 (file)
index 0000000..e9fdb1a
--- /dev/null
@@ -0,0 +1,152 @@
+/**
+ * Top bar
+ */
+
+/**
+ * Tabs
+ */
+
+/* panel containing the tabs */
+.x-tab-panel-header {
+       background-color: #3f3f3f;
+       background-image: url('../../../../t3skin/images/backgrounds/topbar.png');
+       background-image: -moz-linear-gradient(center top, #494949 0%, #373737 91%, #343434 92%, #2A2A2A 100%);
+       background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0, #494949), color-stop(0.91, #373737), color-stop(0.92, #343434), color-stop(1, #2a2a2a));
+       background-repeat: repeat-x;
+       border: none;
+       padding-bottom: 0;
+       padding-top: 9px;
+
+}
+
+.x-tab-strip-wrap {
+       background: url('../Images/typo3-logo.png') no-repeat 16px 0;
+       padding-left: 140px;
+}
+
+/* normal tab */
+ul.x-tab-strip li {
+       margin-left: 4px;
+}
+
+ul.x-tab-strip-top {
+       border-bottom: 0;
+}
+
+/* reset ExtJS "no skin" nonsense */
+.x-tab-strip-top .x-tab-right,
+.x-tab-strip-top .x-tab-strip-over .x-tab-right {
+       background-position: 0 0;
+}
+
+/* we don't need the active tab to be 1px below the inactive */
+.x-tab-strip-top .x-tab-strip-active .x-tab-right {
+       margin-bottom: 0;
+}
+
+.x-tab-strip span.x-tab-strip-text,
+.x-tab-strip-top .x-tab-strip-active .x-tab-right span.x-tab-strip-text {
+       padding-bottom: 4px;
+}
+
+/* normal tab styling */
+.x-tab-strip .x-tab-right {
+       background-color: #707171;
+       background-image: -moz-linear-gradient(center top, #707171 0%, #474747 85%, #363636 100%);
+       background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0, #707171), color-stop(0.85, #474747), color-stop(1, #363636));
+       filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#707171', EndColorStr='#474747'); /* IE6, IE7 */
+       -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#707171', EndColorStr='#474747')"; /* IE8 */
+       -moz-border-radius-topleft: 3px;
+       -moz-border-radius-topright: 3px;
+       -webkit-border-top-left-radius: 3px;
+       -webkit-border-top-right-radius: 3px;
+       border-top-left-radius: 3px;
+       border-top-right-radius: 3px;
+
+}
+
+/* container surrounding text */
+.x-tab-strip-inner {
+       padding: 4px;
+}
+
+/* hover tab */
+.x-tab-strip-over .x-tab-right {
+       background-color: #707171;
+       background-image: -moz-linear-gradient(center top, #888888 0%, #474747 85%, #363636 100%);
+       background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0, #888888), color-stop(0.85, #474747), color-stop(1, #363636));
+       filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#888888', EndColorStr='#474747'); /* IE6, IE7 */
+       -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#888888', EndColorStr='#474747')"; /* IE8 */
+
+}
+
+/* active tab */
+.x-tab-strip-active .x-tab-right {
+       background-color: #989898;
+       background-image: -moz-linear-gradient(center top, #989898 0%, #6c6c6c 85%, #474747 100%);
+       background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(0, #989898), color-stop(0.85, #6c6c6c), color-stop(1, #474747));
+       filter: progid:DXImageTransform.Microsoft.gradient(startColorStr='#989898', EndColorStr='#6c6c6c'); /* IE6, IE7 */
+       -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorStr='#989898', EndColorStr='#6c6c6c')"; /* IE8 */
+}
+
+/* tab label */
+.x-tab-strip span.x-tab-strip-text {
+       color: #ffffff;
+}
+
+/* text in tabs should not be italic.. why should it be? */
+.x-tab-strip em {
+       font-style: normal;
+}
+
+/**
+ * Slider
+ */
+#controls {
+       padding-top: 10px;
+}
+
+/* remove default ExtJS border */
+.x-panel-body {
+       border: none;
+}
+
+.x-slider-horz .x-slider-thumb {
+       background-image: url('../Images/slider-thumb.png');
+       height: 21px;
+       padding: 0 2px;
+       top: 0;
+       width: 7px;
+}
+
+.x-slider-horz .x-slider-thumb-over {
+       background-position: -7px -21px;
+}
+
+.x-slider-horz .x-slider-inner {
+       background-image: url('../Images/slider-bg.png');
+}
+
+/* text */
+.x-btn.sliderButton .x-btn-text {
+       color: #a0a0a0;
+       font-style: normal;
+}
+
+/* alignment of text in Button "Live" */
+#sizeSliderButtonLive .x-btn-mc {
+       text-align: right;
+}
+
+/* alignment of text in Button "Workspace" */
+#sizeSliderButtonWorkspace .x-btn-mc {
+       text-align: left;
+}
+
+/**
+ * Preview panel
+ */
+.x-panel-body-noheader {
+       border-top: 0;
+}
+
index 5836d86..31586b4 100644 (file)
@@ -47,4 +47,4 @@ $EM_CONF[$_EXTKEY] = array(
        ),
 );
 
-?>
+?>
\ No newline at end of file
index 177b299..805d63d 100644 (file)
@@ -12,10 +12,12 @@ if(TYPO3_MODE == 'BE') {
        // Register the autopublishing task
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['scheduler']['tasks']['tx_Workspaces_Service_AutoPublishTask'] = array(
        'extension'        => $_EXTKEY,
-       'title'            => 'LLL:EXT:' . $_EXTKEY . '/locallang.xml:autopublishTask.name',
-       'description'      => 'LLL:EXT:' . $_EXTKEY . '/locallang.xml:autopublishTask.description'
+       'title'            => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_mod.xml:autopublishTask.name',
+       'description'      => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_mod.xml:autopublishTask.description'
 );
 
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_tcemain.php']['processCmdmapClass']['workspaces'] = 'EXT:workspaces/Classes/Service/Tcemain.php:tx_Workspaces_Service_Tcemain';
 $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_befunc.php']['viewOnClickClass']['workspaces'] = 'EXT:workspaces/Classes/Service/Tcemain.php:tx_Workspaces_Service_Befunc';
+$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['hook_eofe']['workspaces'] = 'EXT:workspaces/Classes/Service/Fehooks.php:tx_Workspaces_Service_Fehooks->hook_eofe';
+
 ?>
\ No newline at end of file