Fixed bug #7896: Hide the page browser if not enough entries are available (Thanks...
[Packages/TYPO3.CMS.git] / typo3 / alt_doc.php
old mode 100755 (executable)
new mode 100644 (file)
index d2a7704..4541eae
@@ -2,7 +2,7 @@
 /***************************************************************
 *  Copyright notice
 *
-*  (c) 1999-2005 Kasper Skaarhoj (kasperYYYY@typo3.com)
+*  (c) 1999-2009 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
 *  This script is part of the TYPO3 project. The TYPO3 project is
 require('init.php');
 require('template.php');
 $LANG->includeLLFile('EXT:lang/locallang_alt_doc.xml');
-require_once (PATH_t3lib.'class.t3lib_tceforms.php');
-require_once (PATH_t3lib.'class.t3lib_clipboard.php');
-
-require_once (PATH_t3lib.'class.t3lib_tcemain.php');
-require_once (PATH_t3lib.'class.t3lib_loaddbgroup.php');
-require_once (PATH_t3lib.'class.t3lib_transferdata.php');
-
 
 t3lib_BEfunc::lockRecords();
 
@@ -120,7 +113,7 @@ class SC_alt_doc {
        var $returnNewPageId;   // GPvar (for processing only) : Boolean: If set, then the GET var "&id=" will be added to the retUrl string so that the NEW id of something is returned to the script calling the form.
        var $vC;                                // GPvar (for processing only) : Verification code, internal stuff.
        var $uc;                                // GPvar : update BE_USER->uc
-       
+
        var $popViewId;                 // GPvar (module) : ID for displaying the page in the frontend (used for SAVE/VIEW operations)
        var $popViewId_addParams;       // GPvar (module) : Additional GET vars for the link, eg. "&L=xxx"
        var $viewUrl;                   // GPvar (module) : Alternative URL for viewing the frontend pages.
@@ -253,7 +246,7 @@ class SC_alt_doc {
         * @return      boolean         True, then save the document (data submitted)
         */
        function doProcessData()        {
-               $out = $this->doSave || isset($_POST['_savedok_x']) || isset($_POST['_saveandclosedok_x']) || isset($_POST['_savedokview_x']) || isset($_POST['_savedoknew_x']) || isset($_POST['_translation_savedok_x']);
+               $out = $this->doSave || isset($_POST['_savedok_x']) || isset($_POST['_saveandclosedok_x']) || isset($_POST['_savedokview_x']) || isset($_POST['_savedoknew_x']) || isset($_POST['_translation_savedok_x']) || isset($_POST['_translation_savedokclear_x']);
                return $out;
        }
 
@@ -279,9 +272,14 @@ class SC_alt_doc {
                        // Only options related to $this->data submission are included here.
                $tce = t3lib_div::makeInstance('t3lib_TCEmain');
                $tce->stripslashes_values=0;
+
                if (isset($_POST['_translation_savedok_x']))    {
                        $tce->updateModeL10NdiffData = 'FORCE_FFUPD';
                }
+               if (isset($_POST['_translation_savedokclear_x']))       {
+                       $tce->updateModeL10NdiffData = 'FORCE_FFUPD';
+                       $tce->updateModeL10NdiffDataClear = TRUE;
+               }
 
                        // Setting default values specific for the user:
                $TCAdefaultOverride = $BE_USER->getTSConfigProp('TCAdefaults');
@@ -304,7 +302,7 @@ class SC_alt_doc {
 
                        // If pages are being edited, we set an instruction about updating the page tree after this operation.
                if (isset($this->data['pages']))        {
-                       t3lib_BEfunc::getSetUpdateSignal('updatePageTree');
+                       t3lib_BEfunc::setUpdateSignal('updatePageTree');
                }
 
 
@@ -341,7 +339,7 @@ class SC_alt_doc {
                                                                }
                                                                $newEditConf[$tableName][$editId] = 'edit';
                                                        }
-       
+
                                                                // Traverse all new records and forge the content of ->editconf so we can continue to EDIT these records!
                                                        if ($tableName=='pages' && $this->retUrl!='dummy.php' && $this->returnNewPageId)        {
                                                                $this->retUrl.='&id='.$tce->substNEWwithIDs[$key];
@@ -356,7 +354,7 @@ class SC_alt_doc {
                                if (count($newEditConf)) {
                                        $this->editconf = $newEditConf;
                                }
-                               
+
                                        // Finally, set the editconf array in the "getvars" so they will be passed along in URLs as needed.
                                $this->R_URL_getvars['edit']=$this->editconf;
 
@@ -400,12 +398,12 @@ class SC_alt_doc {
                        }
 
                        $tce->printLogErrorMessages(
-                               isset($_POST['_saveandclosedok_x']) ?
+                               (isset($_POST['_saveandclosedok_x']) || isset($_POST['_translation_savedok_x'])) ?
                                $this->retUrl :
                                $this->R_URL_parts['path'].'?'.t3lib_div::implodeArrayForUrl('',$this->R_URL_getvars)   // popView will not be invoked here, because the information from the submit button for save/view will be lost .... But does it matter if there is an error anyways?
                        );
                }
-               if (isset($_POST['_saveandclosedok_x']) || $this->closeDoc<0)   {       //  || count($tce->substNEWwithIDs)... If any new items has been save, the document is CLOSED because if not, we just get that element re-listed as new. And we don't want that!
+               if ((isset($_POST['_saveandclosedok_x']) || isset($_POST['_translation_savedok_x'])) || $this->closeDoc<0)      {       //  || count($tce->substNEWwithIDs)... If any new items has been save, the document is CLOSED because if not, we just get that element re-listed as new. And we don't want that!
                        $this->closeDocument(abs($this->closeDoc));
                }
        }
@@ -426,7 +424,7 @@ class SC_alt_doc {
                $this->recTitle = t3lib_div::_GP('recTitle');
                $this->disHelp = t3lib_div::_GP('disHelp');
                $this->noView = t3lib_div::_GP('noView');
-               
+
                $this->perms_clause = $BE_USER->getPagePermsClause(1);
 
                        // Set other internal variables:
@@ -448,13 +446,12 @@ class SC_alt_doc {
                $this->MOD_SETTINGS = t3lib_BEfunc::getModuleData($this->MOD_MENU, t3lib_div::_GP('SET'), $this->MCONF['name']);
 
                        // Create an instance of the document template object
-               $this->doc = t3lib_div::makeInstance('template');
+               $this->doc = $GLOBALS['TBE_TEMPLATE'];
                $this->doc->backPath = $BACK_PATH;
-               $this->doc->setModuleTemplate('templates/alt_doc.html');        
-               $this->doc->docType = 'xhtml_trans';
-               $this->doc->form = '<form action="'.htmlspecialchars($this->R_URI).'" method="post" enctype="'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype'].'" name="editform" onsubmit="document.editform._scrollPosition.value=(document.documentElement.scrollTop || document.body.scrollTop); return TBE_EDITOR.checkSubmit(1);">';                   
-               
-               $this->doc->loadJavascriptLib('contrib/prototype/prototype.js');
+               $this->doc->setModuleTemplate('templates/alt_doc.html');
+               $this->doc->form = '<form action="'.htmlspecialchars($this->R_URI).'" method="post" enctype="'.$GLOBALS['TYPO3_CONF_VARS']['SYS']['form_enctype'].'" name="editform" onsubmit="document.editform._scrollPosition.value=(document.documentElement.scrollTop || document.body.scrollTop); return TBE_EDITOR.checkSubmit(1);">';
+
+               $this->doc->getPageRenderer()->loadPrototype();
                $this->doc->JScode = $this->doc->wrapScriptTags('
                        function jumpToUrl(URL,formEl)  {       //
                                if (!TBE_EDITOR.isFormChanged())        {
@@ -464,8 +461,12 @@ class SC_alt_doc {
                                }
                        }
                                // Object: TS:
+                               // passwordDummy and decimalSign are used by tbe_editor.js and have to be declared here as
+                               // TS object overwrites the object declared in tbe_editor.js
                        function typoSetup      ()      {       //
                                this.uniqueID = "";
+                               this.passwordDummy = "********";
+                               this.decimalSign = ".";
                        }
                        var TS = new typoSetup();
 
@@ -507,10 +508,10 @@ class SC_alt_doc {
         */
        function main() {
                global $BE_USER,$LANG;
-               
+
                        // Begin edit:
                if (is_array($this->editconf))  {
-                       
+
                                // Initialize TCEforms (rendering the forms)
                        $this->tceforms = t3lib_div::makeInstance('t3lib_TCEforms');
                        $this->tceforms->initDefaultBEMode();
@@ -518,7 +519,7 @@ class SC_alt_doc {
                        $this->tceforms->localizationMode = t3lib_div::inList('text,media',$this->localizationMode) ? $this->localizationMode : '';     // text,media is keywords defined in TYPO3 Core API..., see "l10n_cat"
                        $this->tceforms->returnUrl = $this->R_URI;
                        $this->tceforms->palettesCollapsed = !$this->MOD_SETTINGS['showPalettes'];
-                       $this->tceforms->disableRTE = !$BE_USER->isRTE(); 
+                       $this->tceforms->disableRTE = !$BE_USER->isRTE();
                        $this->tceforms->enableClickMenu = TRUE;
                        $this->tceforms->enableTabMenu = TRUE;
 
@@ -533,14 +534,21 @@ class SC_alt_doc {
                                $this->editRegularContentFromId();
                        }
 
+
                                // Creating the editing form, wrap it with buttons, document selector etc.
                        $editForm = $this->makeEditForm();
 
-
-
                        if ($editForm)  {
                                $this->firstEl = reset($this->elementsData);
 
+                                       // Checking if the currently open document is stored in the list of "open documents" - if not, then add it:
+                               if ((strcmp($this->docDat[1], $this->storeUrlMd5) || !isset($this->docHandler[$this->storeUrlMd5])) && !$this->dontStoreDocumentRef) {
+                                               $this->docHandler[$this->storeUrlMd5] = array($this->storeTitle, $this->storeArray, $this->storeUrl, $this->firstEl);
+                                               $BE_USER->pushModuleData('alt_doc.php', array($this->docHandler, $this->storeUrlMd5));
+                                               t3lib_BEfunc::setUpdateSignal('tx_opendocs::updateNumber', count($this->docHandler));
+                               }
+
+
                                        // Module configuration
                                $this->modTSconfig = ($this->viewId ? t3lib_BEfunc::getModTSconfig($this->viewId,'mod.xMOD_alt_doc') : array());
 
@@ -548,15 +556,14 @@ class SC_alt_doc {
                                $body.= $this->compileForm($editForm);
                                $body.= $this->tceforms->printNeededJSFunctions();
                                $body.= $this->functionMenus();
-                               $body.= t3lib_BEfunc::cshItem('xMOD_csh_corebe', 'TCEforms', $GLOBALS['BACK_PATH'], '<br/>|', FALSE, 'margin-top: 20px;') . '<br /><br />';
                                $body.= $this->tceformMessages();
                        }
                }
-               
+
                // Access check...
                // The page will show only if there is a valid page and if this page may be viewed by the user
                $this->pageinfo = t3lib_BEfunc::readPageAccess($this->viewId, $this->perms_clause);
-               
+
                        // Setting up the buttons and markers for docheader
                $docHeaderButtons = $this->getButtons();
                $markers = array(
@@ -661,7 +668,8 @@ class SC_alt_doc {
                                                                                $CALC_PERMS = $BE_USER->calcPerms($calcPRec);   // Permissions for the parent page
                                                                                if ($table=='pages')    {       // If pages:
                                                                                        $hasAccess = $CALC_PERMS&8 ? 1 : 0;
-                                                                                       $this->viewId = $calcPRec['pid'];
+                                                                                       #$this->viewId = $calcPRec['pid'];
+                                                                                       $this->viewId = 0;
                                                                                } else {
                                                                                        $hasAccess = $CALC_PERMS&16 ? 1 : 0;
                                                                                        $this->viewId = $calcPRec['uid'];
@@ -762,28 +770,25 @@ class SC_alt_doc {
                                                                        }
 
                                                                                // Display "is-locked" message:
-                                                                       if ($lockInfo = t3lib_BEfunc::isRecordLocked($table,$rec['uid']))       {
-                                                                               $lockIcon = '
-
-                                                                                       <!-- Warning box: -->
-                                                                                       <table border="0" cellpadding="0" cellspacing="0" class="warningbox">
-                                                                                               <tr>
-                                                                                                       <td><img'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/recordlock_warning3.gif','width="17" height="12"').' alt="" /></td>
-                                                                                                       <td>'.htmlspecialchars($lockInfo['msg']).'</td>
-                                                                                               </tr>
-                                                                                       </table>
-                                                                               ';
-                                                                       } else $lockIcon = '';
+                                                                       if ($lockInfo = t3lib_BEfunc::isRecordLocked($table, $rec['uid'])) {
+                                                                               $lockedMessage = t3lib_div::makeInstance(
+                                                                                       't3lib_FlashMessage',
+                                                                                       htmlspecialchars($lockInfo['msg']),
+                                                                                       '',
+                                                                                       t3lib_FlashMessage::WARNING
+                                                                               );
+                                                                               t3lib_FlashMessageQueue::addMessage($lockedMessage);
+                                                                       }
 
                                                                                // Combine it all:
-                                                                       $editForm.= $lockIcon.$panel;
+                                                                       $editForm .= $panel;
                                                                }
 
                                                                $thePrevUid = $rec['uid'];
                                                        } else {
                                                                $this->errorC++;
                                                                $editForm.=$LANG->sL('LLL:EXT:lang/locallang_core.php:labels.noEditPermission',1).'<br /><br />'.
-                                                                                       ($deniedAccessReason ? 'Reason: '.htmlspecialchars($deniedAccessReason).'<br/><br/>' : '');
+                                                                       ($deniedAccessReason ? 'Reason: ' . htmlspecialchars($deniedAccessReason) . '<br /><br />' : '');
                                                        }
                                                }
                                        }
@@ -799,7 +804,7 @@ class SC_alt_doc {
         *
         * @return      array   all available buttons as an assoc. array
         */
-       private function getButtons()   {
+       protected function getButtons() {
                global $TCA,$LANG;
                $buttons = array(
                        'save' => '',
@@ -810,7 +815,10 @@ class SC_alt_doc {
                        'delete' => '',
                        'undo' => '',
                        'history' => '',
-                       'columns_only' => ''
+                       'columns_only' => '',
+                       'csh' => '',
+                       'translation_save' => '',
+                       'translation_saveclear' => ''
                );
 
                        // Render SAVE type buttons:
@@ -818,24 +826,25 @@ class SC_alt_doc {
                if (!$this->errorC && !$TCA[$this->firstEl['table']]['ctrl']['readOnly'])       {
 
                                // SAVE button:
-                       $buttons['save'] = '<input type="image" class="c-inputButton" name="_savedok"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/savedok.gif','').' title="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveDoc',1).'" />';
+                       $buttons['save'] = '<input type="image" class="c-inputButton" name="_savedok" src="' . t3lib_iconWorks::skinImg($this->doc->backPath, 'gfx/savedok.gif', '', 1) . '" title="' . $LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveDoc', 1) . '" />';
 
                                // SAVE / VIEW button:
-                       if ($this->viewId && !$this->noView && t3lib_extMgm::isLoaded('cms')) {
-                               $buttons['save_view'] = '<input type="image" class="c-inputButton" name="_savedokview"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/savedokshow.gif','').' title="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveDocShow',1).'" />';
+                       if ($this->viewId && !$this->noView && t3lib_extMgm::isLoaded('cms') && $this->getNewIconMode($this->firstEl['table'], 'saveDocView')) {
+                               $buttons['save_view'] = '<input type="image" class="c-inputButton" name="_savedokview" src="' . t3lib_iconWorks::skinImg($this->doc->backPath, 'gfx/savedokshow.gif', '', 1) . '" title="' . $LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveDocShow', 1) . '" />';
                        }
 
                                // SAVE / NEW button:
                        if (count($this->elementsData)==1 && $this->getNewIconMode($this->firstEl['table'])) {
-                               $buttons['save_new'] = '<input type="image" class="c-inputButton" name="_savedoknew"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/savedoknew.gif','').' title="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveNewDoc',1).'" />';
+                               $buttons['save_new'] = '<input type="image" class="c-inputButton" name="_savedoknew" src="' . t3lib_iconWorks::skinImg($this->doc->backPath, 'gfx/savedoknew.gif', '', 1) . '" title="' . $LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveNewDoc', 1) . '" />';
                        }
 
                                // SAVE / CLOSE
-                       $buttons['save_close'] = '<input type="image" class="c-inputButton" name="_saveandclosedok"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/saveandclosedok.gif','').' title="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveCloseDoc',1).'" />';
-                       
+                       $buttons['save_close'] = '<input type="image" class="c-inputButton" name="_saveandclosedok" src="' . t3lib_iconWorks::skinImg($this->doc->backPath, 'gfx/saveandclosedok.gif', '', 1) . '" title="' . $LANG->sL('LLL:EXT:lang/locallang_core.php:rm.saveCloseDoc', 1) . '" />';
+
                                // FINISH TRANSLATION / SAVE / CLOSE
                        if ($GLOBALS['TYPO3_CONF_VARS']['BE']['explicitConfirmationOfTranslation'])     {
-                               $buttons['translation_save'] = '<input type="image" class="c-inputButton" name="_translation_savedok"'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/translationsavedok.gif','').' title="'.$LANG->sL('LLL:EXT:lang/locallang_core.php:rm.translationSaveDoc',1).'" />';
+                               $buttons['translation_save'] = '<input type="image" class="c-inputButton" name="_translation_savedok" src="' . t3lib_iconWorks::skinImg($this->doc->backPath, 'gfx/translationsavedok.gif', '', 1) . '" title="' . $LANG->sL('LLL:EXT:lang/locallang_core.php:rm.translationSaveDoc', 1) . '" />';
+                               $buttons['translation_saveclear'] = '<input type="image" class="c-inputButton" name="_translation_savedokclear" src="' . t3lib_iconWorks::skinImg($this->doc->backPath, 'gfx/translationsavedok_clear.gif', '', 1) . '" title="' . $LANG->sL('LLL:EXT:lang/locallang_core.php:rm.translationSaveDocClear', 1) . '" />';
                        }
                }
 
@@ -862,8 +871,12 @@ class SC_alt_doc {
                                if ($undoButtonR = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($undoRes))     {
                                        $aOnClick = 'window.location.href=\'show_rechis.php?element='.rawurlencode($this->firstEl['table'].':'.$this->firstEl['uid']).'&revert=ALL_FIELDS&sumUp=-1&returnUrl='.rawurlencode($this->R_URI).'\'; return false;';
                                        $buttons['undo'] = '<a href="#" onclick="'.htmlspecialchars($aOnClick).'">'.
-                                                       '<img'.t3lib_iconWorks::skinImg($this->doc->backPath,'gfx/undo.gif','width="21" height="16"').' class="c-inputButton" title="'.htmlspecialchars(sprintf($LANG->getLL('undoLastChange'),t3lib_BEfunc::calcAge(time()-$undoButtonR['tstamp'],$LANG->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears')))).'" alt="" />'.
-                                                       '</a>';
+                                               '<img' .
+                                                       t3lib_iconWorks::skinImg($this->doc->backPath, 'gfx/undo.gif', 'width="21" height="16"') .
+                                                       ' class="c-inputButton"' .
+                                                       ' title="' . htmlspecialchars(sprintf($LANG->getLL('undoLastChange'), t3lib_BEfunc::calcAge($GLOBALS['EXEC_TIME'] - $undoButtonR['tstamp'], $LANG->sL('LLL:EXT:lang/locallang_core.php:labels.minutesHoursDaysYears')))) .
+                                                       '" alt="" />' .
+                                               '</a>';
                                }
                                if ($this->getNewIconMode($this->firstEl['table'],'showHistory'))       {
                                        $aOnClick = 'window.location.href=\'show_rechis.php?element='.rawurlencode($this->firstEl['table'].':'.$this->firstEl['uid']).'&returnUrl='.rawurlencode($this->R_URI).'\'; return false;';
@@ -880,25 +893,37 @@ class SC_alt_doc {
                                }
                        }
                }
+
+                       // add the CSH icon
+               $buttons['csh'] = t3lib_BEfunc::cshItem('xMOD_csh_corebe', 'TCEforms', $GLOBALS['BACK_PATH'], '', TRUE);
                $buttons['shortcut'] = $this->shortCutLink();
                $buttons['open_in_new_window'] = $this->openInNewWindowLink();
                return $buttons;
        }
-       
+
+       /**
+        * Returns the language switch/selector for editing,
+        * show only when a single record is edited
+        * - multiple records are too confusing
+        * @return      string          the HTML
+        */
        function langSelector() {
                $langSelector = '';
-               
-                       // language switch/selector for editing, show only when a single record is edited
-                       // - multiple records are too confusing
                if (count($this->elementsData) == 1) {
                        $langSelector = $this->languageSwitch($this->firstEl['table'], $this->firstEl['uid'], $this->firstEl['pid']);
                }
                return $langSelector;
        }
-       
+
+
+       /**
+        * Compiles the extra form headers if the tceforms
+        *
+        * @return      string          the HTML
+        */
        function extraFormHeaders() {
-               $extraHeader = '';
-               
+               $extraTemplate = '';
+
                if (is_array($this->tceforms->extraFormHeaders)) {
                        $extraTemplate = t3lib_parsehtml::getSubpart($this->doc->moduleTemplate, '###DOCHEADER_EXTRAHEADER###');
                        $extraTemplate = t3lib_parsehtml::substituteMarker($extraTemplate, '###EXTRAHEADER###', implode(chr(10), $this->tceforms->extraFormHeaders));
@@ -906,6 +931,7 @@ class SC_alt_doc {
                return $extraTemplate;
        }
 
+
        /**
         * Put together the various elements (buttons, selectors, form) into a table
         *
@@ -1144,8 +1170,7 @@ class SC_alt_doc {
                                $returnUrl = '&returnUrl='.rawurlencode(t3lib_div::_GP('returnUrl'));
                                $location = $GLOBALS['BACK_PATH'].'alt_doc.php?'.$params.$returnUrl;
 
-                               header('Location: '.t3lib_div::locationHeaderUrl($location));
-                               exit;
+                               t3lib_utility_Http::redirect($location);
                        }
                }
        }
@@ -1343,9 +1368,8 @@ class SC_alt_doc {
         * @param       string          The option for look for. Default is checking if the saveDocNew button should be displayed.
         * @return      string          Return value fetched from USER TSconfig
         */
-       function getNewIconMode($table,$key='saveDocNew')       {
-               global $BE_USER;
-               $TSconfig = $BE_USER->getTSConfig('options.'.$key);
+       function getNewIconMode($table, $key = 'saveDocNew') {
+               $TSconfig = $GLOBALS['BE_USER']->getTSConfig('options.'.$key);
                $output = trim(isset($TSconfig['properties'][$table]) ? $TSconfig['properties'][$table] : $TSconfig['value']);
                return $output;
        }
@@ -1359,7 +1383,7 @@ class SC_alt_doc {
        function closeDocument($code=0) {
                global $BE_USER;
 
-                       // If current document is found in docHandler, 
+                       // If current document is found in docHandler,
                        // then unset it, possibly unset it ALL and finally, write it to the session data
                if (isset($this->docHandler[$this->storeUrlMd5])) {
 
@@ -1382,6 +1406,7 @@ class SC_alt_doc {
                        }
                        $BE_USER->pushModuleData('opendocs::recent', $recentDocs);
                        $BE_USER->pushModuleData('alt_doc.php', array($this->docHandler, $this->docDat[1]));
+                       t3lib_BEfunc::setUpdateSignal('tx_opendocs::updateNumber', count($this->docHandler));
                }
 
 
@@ -1392,8 +1417,7 @@ class SC_alt_doc {
 
                        // If code is NOT set OR set to 1, then make a header location redirect to $this->retUrl
                if (!$code || $code==1) {
-                       Header('Location: '.t3lib_div::locationHeaderUrl($this->retUrl));
-                       exit;
+                       t3lib_utility_Http::redirect($this->retUrl);
                } else {
                        $this->setDocument('',$this->retUrl);
                }
@@ -1422,31 +1446,17 @@ class SC_alt_doc {
                                $retUrl = $sParts['path'].'?'.$setupArr[2].'&returnUrl='.rawurlencode($retUrl);
                        }
                }
-               Header('Location: '.t3lib_div::locationHeaderUrl($retUrl));
-               exit;
+               t3lib_utility_Http::redirect($retUrl);
        }
 }
 
-// Include extension?
+
 if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/alt_doc.php'])      {
        include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['typo3/alt_doc.php']);
 }
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
 // Make instance:
 $SOBE = t3lib_div::makeInstance('SC_alt_doc');
 
@@ -1461,4 +1471,5 @@ if ($SOBE->doProcessData())       {               // Checks, if a save button has been clicked (or
 $SOBE->init();
 $SOBE->main();
 $SOBE->printContent();
-?>
+
+?>
\ No newline at end of file