[BUGFIX] Missing column in t3lib_TCEmain::getPreviousLocalizedRecordUid
[Packages/TYPO3.CMS.git] / t3lib / class.t3lib_befunc.php
index 9aff859..5fc8797 100644 (file)
@@ -105,7 +105,7 @@ final class t3lib_BEfunc {
         */
        public static function getRecordWSOL($table, $uid, $fields = '*', $where = '', $useDeleteClause = TRUE, $unsetMovePointers = FALSE) {
                if ($fields !== '*') {
         */
        public static function getRecordWSOL($table, $uid, $fields = '*', $where = '', $useDeleteClause = TRUE, $unsetMovePointers = FALSE) {
                if ($fields !== '*') {
-                       $internalFields = t3lib_div::uniqueList($fields . ',uid,pid' . ($table == 'pages' ? ',t3ver_swapmode' : ''));
+                       $internalFields = t3lib_div::uniqueList($fields . ',uid,pid');
                        $row = self::getRecord($table, $uid, $internalFields, $where, $useDeleteClause);
                        self::workspaceOL($table, $row, -99, $unsetMovePointers);
 
                        $row = self::getRecord($table, $uid, $internalFields, $where, $useDeleteClause);
                        self::workspaceOL($table, $row, -99, $unsetMovePointers);
 
@@ -242,17 +242,17 @@ final class t3lib_BEfunc {
                                if ($ctrl['enablecolumns']['disabled']) {
                                        $field = $table . '.' . $ctrl['enablecolumns']['disabled'];
                                        $query[] = $field . '=0';
                                if ($ctrl['enablecolumns']['disabled']) {
                                        $field = $table . '.' . $ctrl['enablecolumns']['disabled'];
                                        $query[] = $field . '=0';
-                                       $invQuery[] = $field . '!=0';
+                                       $invQuery[] = $field . '<>0';
                                }
                                if ($ctrl['enablecolumns']['starttime']) {
                                        $field = $table . '.' . $ctrl['enablecolumns']['starttime'];
                                        $query[] = '(' . $field . '<=' . $GLOBALS['SIM_ACCESS_TIME'] . ')';
                                }
                                if ($ctrl['enablecolumns']['starttime']) {
                                        $field = $table . '.' . $ctrl['enablecolumns']['starttime'];
                                        $query[] = '(' . $field . '<=' . $GLOBALS['SIM_ACCESS_TIME'] . ')';
-                                       $invQuery[] = '(' . $field . '!=0 AND ' . $field . '>' . $GLOBALS['SIM_ACCESS_TIME'] . ')';
+                                       $invQuery[] = '(' . $field . '<>0 AND ' . $field . '>' . $GLOBALS['SIM_ACCESS_TIME'] . ')';
                                }
                                if ($ctrl['enablecolumns']['endtime']) {
                                        $field = $table . '.' . $ctrl['enablecolumns']['endtime'];
                                        $query[] = '(' . $field . '=0 OR ' . $field . '>' . $GLOBALS['SIM_ACCESS_TIME'] . ')';
                                }
                                if ($ctrl['enablecolumns']['endtime']) {
                                        $field = $table . '.' . $ctrl['enablecolumns']['endtime'];
                                        $query[] = '(' . $field . '=0 OR ' . $field . '>' . $GLOBALS['SIM_ACCESS_TIME'] . ')';
-                                       $invQuery[] = '(' . $field . '!=0 AND ' . $field . '<=' . $GLOBALS['SIM_ACCESS_TIME'] . ')';
+                                       $invQuery[] = '(' . $field . '<>0 AND ' . $field . '<=' . $GLOBALS['SIM_ACCESS_TIME'] . ')';
                                }
                        }
                }
                                }
                        }
                }
@@ -343,7 +343,6 @@ final class t3lib_BEfunc {
                                        't3ver_oid' => $val['t3ver_oid'],
                                        't3ver_wsid' => $val['t3ver_wsid'],
                                        't3ver_state' => $val['t3ver_state'],
                                        't3ver_oid' => $val['t3ver_oid'],
                                        't3ver_wsid' => $val['t3ver_wsid'],
                                        't3ver_state' => $val['t3ver_state'],
-                                       't3ver_swapmode' => $val['t3ver_swapmode'],
                                        't3ver_stage' => $val['t3ver_stage'],
                                        'backend_layout_next_level' => $val['backend_layout_next_level']
                                );
                                        't3ver_stage' => $val['t3ver_stage'],
                                        'backend_layout_next_level' => $val['backend_layout_next_level']
                                );
@@ -373,7 +372,7 @@ final class t3lib_BEfunc {
                        $row = $getPageForRootline_cache[$ident];
                } else {
                        $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
                        $row = $getPageForRootline_cache[$ident];
                } else {
                        $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
-                               'pid,uid,title,TSconfig,is_siteroot,storage_pid,t3ver_oid,t3ver_wsid,t3ver_state,t3ver_swapmode,t3ver_stage,backend_layout_next_level',
+                               'pid,uid,title,TSconfig,is_siteroot,storage_pid,t3ver_oid,t3ver_wsid,t3ver_state,t3ver_stage,backend_layout_next_level',
                                'pages',
                                        'uid=' . intval($uid) . ' ' .
                                                        self::deleteClause('pages') . ' ' .
                                'pages',
                                        'uid=' . intval($uid) . ' ' .
                                                        self::deleteClause('pages') . ' ' .
@@ -463,9 +462,6 @@ final class t3lib_BEfunc {
                        if ($record['uid'] === 0) {
                                continue;
                        }
                        if ($record['uid'] === 0) {
                                continue;
                        }
-                       if ($record['_ORIG_pid'] && $record['t3ver_swapmode'] > 0) { // Branch points
-                               $output = ' [#VEP#]' . $output; // Adding visual token - Versioning Entry Point - that tells that THIS position was where the versionized branch got connected to the main tree. I will have to find a better name or something...
-                       }
                        $output = '/' . t3lib_div::fixed_lgd_cs(strip_tags($record['title']), $titleLimit) . $output;
                        if ($fullTitleLimit) {
                                $fullOutput = '/' . t3lib_div::fixed_lgd_cs(strip_tags($record['title']), $fullTitleLimit) . $fullOutput;
                        $output = '/' . t3lib_div::fixed_lgd_cs(strip_tags($record['title']), $titleLimit) . $output;
                        if ($fullTitleLimit) {
                                $fullOutput = '/' . t3lib_div::fixed_lgd_cs(strip_tags($record['title']), $fullTitleLimit) . $fullOutput;
@@ -486,50 +482,52 @@ final class t3lib_BEfunc {
         * @return      array           Array of arrays with excludeFields (fieldname, table:fieldname) from all TCA entries and from FlexForms (fieldname, table:extkey;sheetname;fieldname)
         */
        public static function getExcludeFields() {
         * @return      array           Array of arrays with excludeFields (fieldname, table:fieldname) from all TCA entries and from FlexForms (fieldname, table:extkey;sheetname;fieldname)
         */
        public static function getExcludeFields() {
-                       // All TCA keys:
-               $theExcludeArray = Array();
+                       // All TCA keys
+               $theExcludeArray = array();
                $tc_keys = array_keys($GLOBALS['TCA']);
                foreach ($tc_keys as $table) {
                                // Load table
                        t3lib_div::loadTCA($table);
                $tc_keys = array_keys($GLOBALS['TCA']);
                foreach ($tc_keys as $table) {
                                // Load table
                        t3lib_div::loadTCA($table);
-                               // All field names configured:
-                       if (is_array($GLOBALS['TCA'][$table]['columns'])) {
+                               // All field names configured and not restricted to admins
+                       if (is_array($GLOBALS['TCA'][$table]['columns'])
+                                       && $GLOBALS['TCA'][$table]['ctrl']['adminOnly'] != 1
+                                       && $GLOBALS['TCA'][$table]['ctrl']['rootLevel'] != 1
+                                       ) {
                                $f_keys = array_keys($GLOBALS['TCA'][$table]['columns']);
                                foreach ($f_keys as $field) {
                                        if ($GLOBALS['TCA'][$table]['columns'][$field]['exclude']) {
                                $f_keys = array_keys($GLOBALS['TCA'][$table]['columns']);
                                foreach ($f_keys as $field) {
                                        if ($GLOBALS['TCA'][$table]['columns'][$field]['exclude']) {
-                                                       // Get Human Readable names of fields and table:
+                                                       // Get human readable names of fields and table
                                                $Fname = $GLOBALS['LANG']->sl($GLOBALS['TCA'][$table]['ctrl']['title']) . ': ' . $GLOBALS['LANG']->sl($GLOBALS['TCA'][$table]['columns'][$field]['label']);
                                                $Fname = $GLOBALS['LANG']->sl($GLOBALS['TCA'][$table]['ctrl']['title']) . ': ' . $GLOBALS['LANG']->sl($GLOBALS['TCA'][$table]['columns'][$field]['label']);
-                                                       // add entry:
-                                               $theExcludeArray[] = Array($Fname, $table . ':' . $field);
+                                                       // Add entry
+                                               $theExcludeArray[] = array($Fname, $table . ':' . $field);
                                        }
                                }
                        }
                                        }
                                }
                        }
-               }
                        // All FlexForm fields
                        // All FlexForm fields
-               $table = (!empty($GLOBALS['TYPO3_CONF_VARS']['SYS']['contentTable']) ? $GLOBALS['TYPO3_CONF_VARS']['SYS']['contentTable'] : 'tt_content');
-               $flexFormArray = self::getRegisteredFlexForms($table);
-               foreach ($flexFormArray as $tableField => $flexForms) {
-                               // Prefix for field label, e.g. "Plugin Options:"
-                       $labelPrefix = '';
-                       if (!empty($GLOBALS['TCA'][$table]['columns'][$tableField]['label'])) {
-                               $labelPrefix = $GLOBALS['LANG']->sl($GLOBALS['TCA'][$table]['columns'][$tableField]['label']);
-                       }
-                               // Get all sheets and title
-                       foreach ($flexForms as $extIdent => $extConf) {
-                               $extTitle = $GLOBALS['LANG']->sl($extConf['title']);
-                                       // Get all fields in sheet
-                               foreach ($extConf['ds']['sheets'] as $sheetName => $sheet) {
-                                       if (empty($sheet['ROOT']['el']) || !is_array($sheet['ROOT']['el'])) {
-                                               continue;
-                                       }
-                                       foreach ($sheet['ROOT']['el'] as $fieldName => $field) {
-                                                       // Use only excludeable fields
-                                               if (empty($field['TCEforms']['exclude'])) {
+                       $flexFormArray = self::getRegisteredFlexForms($table);
+                       foreach ($flexFormArray as $tableField => $flexForms) {
+                                       // Prefix for field label, e.g. "Plugin Options:"
+                               $labelPrefix = '';
+                               if (!empty($GLOBALS['TCA'][$table]['columns'][$tableField]['label'])) {
+                                       $labelPrefix = $GLOBALS['LANG']->sl($GLOBALS['TCA'][$table]['columns'][$tableField]['label']);
+                               }
+                                       // Get all sheets and title
+                               foreach ($flexForms as $extIdent => $extConf) {
+                                       $extTitle = $GLOBALS['LANG']->sl($extConf['title']);
+                                               // Get all fields in sheet
+                                       foreach ($extConf['ds']['sheets'] as $sheetName => $sheet) {
+                                               if (empty($sheet['ROOT']['el']) || !is_array($sheet['ROOT']['el'])) {
                                                        continue;
                                                }
                                                        continue;
                                                }
-                                               $fieldLabel = (!empty($field['TCEforms']['label']) ? $GLOBALS['LANG']->sl($field['TCEforms']['label']) : $fieldName);
-                                               $fieldIdent = $table . ':' . $tableField . ';' . $extIdent . ';' . $sheetName . ';' . $fieldName;
-                                               $theExcludeArray[] = array(trim($labelPrefix . ' ' . $extTitle, ': ') . ': ' . $fieldLabel, $fieldIdent);
+                                               foreach ($sheet['ROOT']['el'] as $fieldName => $field) {
+                                                               // Use only excludeable fields
+                                                       if (empty($field['TCEforms']['exclude'])) {
+                                                               continue;
+                                                       }
+                                                       $fieldLabel = (!empty($field['TCEforms']['label']) ? $GLOBALS['LANG']->sl($field['TCEforms']['label']) : $fieldName);
+                                                       $fieldIdent = $table . ':' . $tableField . ';' . $extIdent . ';' . $sheetName . ';' . $fieldName;
+                                                       $theExcludeArray[] = array(trim($labelPrefix . ' ' . $extTitle, ': ') . ': ' . $fieldLabel, $fieldIdent);
+                                               }
                                        }
                                }
                        }
                                        }
                                }
                        }
@@ -765,23 +763,70 @@ final class t3lib_BEfunc {
         * If no "type" field is configured in the "ctrl"-section of the $GLOBALS['TCA'] for the table, zero is used.
         * If zero is not an index in the "types" section of $GLOBALS['TCA'] for the table, then the $fieldValue returned will default to 1 (no matter if that is an index or not)
         *
         * If no "type" field is configured in the "ctrl"-section of the $GLOBALS['TCA'] for the table, zero is used.
         * If zero is not an index in the "types" section of $GLOBALS['TCA'] for the table, then the $fieldValue returned will default to 1 (no matter if that is an index or not)
         *
+        * Note: This method is very similar to t3lib_TCEforms::getRTypeNum(), however, it has two differences:
+        *       1) The method in TCEForms also takes care of localization (which is difficult to do here as the whole infrastructure for language overlays is only in TCEforms).
+        *       2) The $rec array looks different in TCEForms, as in there it's not the raw record but the t3lib_transferdata version of it, which changes e.g. how "select"
+        *          and "group" field values are stored, which makes different processing of the "foreign pointer field" type field variant necessary.
+        *
         * @param       string          Table name present in TCA
         * @param       array           Record from $table
         * @return      string          Field value
         * @see getTCAtypes()
         */
         * @param       string          Table name present in TCA
         * @param       array           Record from $table
         * @return      string          Field value
         * @see getTCAtypes()
         */
-       public static function getTCAtypeValue($table, $rec) {
+       public static function getTCAtypeValue($table, $row) {
+
+               $typeNum = 0;
 
 
-                       // If no field-value, set it to zero. If there is no type matching the field-value (which now may be zero...) test field-value '1' as default.
                t3lib_div::loadTCA($table);
                if ($GLOBALS['TCA'][$table]) {
                        $field = $GLOBALS['TCA'][$table]['ctrl']['type'];
                t3lib_div::loadTCA($table);
                if ($GLOBALS['TCA'][$table]) {
                        $field = $GLOBALS['TCA'][$table]['ctrl']['type'];
-                       $fieldValue = $field ? ($rec[$field] ? $rec[$field] : 0) : 0;
-                       if (!is_array($GLOBALS['TCA'][$table]['types'][$fieldValue])) {
-                               $fieldValue = 1;
+
+                       if (strpos($field, ':') !== FALSE) {
+                               list($pointerField, $foreignTableTypeField) = explode(':', $field);
+
+                               // Get field value from database if field is not in the $row array
+                               if (!isset($row[$pointerField])) {
+                                       $localRow = t3lib_BEfunc::getRecord($table, $row['uid'], $pointerField);
+                                       $foreignUid = $localRow[$pointerField];
+                               } else {
+                                       $foreignUid = $row[$pointerField];
+                               }
+
+                               if ($foreignUid) {
+                                       $fieldConfig = $GLOBALS['TCA'][$table]['columns'][$pointerField]['config'];
+                                       $relationType = $fieldConfig['type'];
+                                       if ($relationType === 'select') {
+                                               $foreignTable = $fieldConfig['foreign_table'];
+                                       } elseif ($relationType === 'group') {
+                                               $allowedTables = explode(',', $fieldConfig['allowed']);
+                                               $foreignTable = $allowedTables[0]; // Always take the first configured table.
+                                       } else {
+                                               throw new RuntimeException('TCA foreign field pointer fields are only allowed to be used with group or select field types.', 1325862240);
+                                       }
+
+                                       $foreignRow = t3lib_BEfunc::getRecord($foreignTable, $foreignUid, $foreignTableTypeField);
+
+                                       if ($foreignRow[$foreignTableTypeField]) {
+                                               $typeNum = $foreignRow[$foreignTableTypeField];
+                                       }
+                               }
+                       } else {
+                               $typeNum = $row[$field];
                        }
                        }
-                       return $fieldValue;
+
+                       if (!strcmp($typeNum, '')) {  // If that value is an empty string, set it to "0" (zero)
+                               $typeNum = 0;
+                       }
+               }
+
+               // If current typeNum doesn't exist, set it to 0 (or to 1 for historical reasons, if 0 doesn't exist)
+               if (!$GLOBALS['TCA'][$table]['types'][$typeNum]) {
+                       $typeNum = $GLOBALS['TCA'][$table]['types']["0"] ? 0 : 1;
                }
                }
+
+               $typeNum = (string)$typeNum; // Force to string. Necessary for eg '-1' to be recognized as a type value.
+
+               return $typeNum;
        }
 
        /**
        }
 
        /**
@@ -944,9 +989,13 @@ final class t3lib_BEfunc {
                                                if ($WSOL) {
                                                        self::workspaceOL($tName, $dataStructRec);
                                                }
                                                if ($WSOL) {
                                                        self::workspaceOL($tName, $dataStructRec);
                                                }
-                                               if (is_file(PATH_site . $dataStructRec[$fName])) {
-                                                               // The value is a pointer to a file
-                                                       $dataStructArray = t3lib_div::xml2array(t3lib_div::getUrl(PATH_site . $dataStructRec[$fName]));
+                                               if (strpos($dataStructRec[$fName], '<') === FALSE) {
+                                                       if (is_file(PATH_site . $dataStructRec[$fName])) {
+                                                                       // The value is a pointer to a file
+                                                               $dataStructArray = t3lib_div::xml2array(t3lib_div::getUrl(PATH_site . $dataStructRec[$fName]));
+                                                       } else {
+                                                               $dataStructArray = sprintf('File \'%s\' was not found', $dataStructRec[$fName]);
+                                                       }
                                                } else {
                                                                // No file pointer, handle as being XML (default behaviour)
                                                        $dataStructArray = t3lib_div::xml2array($dataStructRec[$fName]);
                                                } else {
                                                                // No file pointer, handle as being XML (default behaviour)
                                                        $dataStructArray = t3lib_div::xml2array($dataStructRec[$fName]);
@@ -1567,27 +1616,19 @@ final class t3lib_BEfunc {
                                        $check = basename($theFile_abs) . ':' . filemtime($theFile_abs) . ':' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'];
                                        $params = '&file=' . rawurlencode($theFile);
                                        $params .= $size ? '&size=' . $size : '';
                                        $check = basename($theFile_abs) . ':' . filemtime($theFile_abs) . ':' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'];
                                        $params = '&file=' . rawurlencode($theFile);
                                        $params .= $size ? '&size=' . $size : '';
-                                       $params .= '&md5sum=' . t3lib_div::shortMD5($check);
+                                       $params .= '&md5sum=' . md5($check);
 
 
-                                       $url = $thumbScript . '?&dummy=' . $GLOBALS['EXEC_TIME'] . $params;
+                                       $url = $thumbScript . '?' . $params;
                                        $onClick = 'top.launchView(\'' . $theFile . '\',\'\',\'' . $backPath . '\');return false;';
                                        $thumbData .= '<a href="#" onclick="' . htmlspecialchars($onClick) . '"><img src="' . htmlspecialchars($backPath . $url) . '" hspace="2" border="0" title="' . trim($theFile) . '"' . $tparams . ' alt="" /></a> ';
                                } else {
                                                // Icon
                                        $onClick = 'top.launchView(\'' . $theFile . '\',\'\',\'' . $backPath . '\');return false;';
                                        $thumbData .= '<a href="#" onclick="' . htmlspecialchars($onClick) . '"><img src="' . htmlspecialchars($backPath . $url) . '" hspace="2" border="0" title="' . trim($theFile) . '"' . $tparams . ' alt="" /></a> ';
                                } else {
                                                // Icon
-                                       $theFile_abs = PATH_site . ($uploaddir ? $uploaddir . '/' : '') . trim($theFile);
                                        $theFile = ($abs ? '' : '../') . ($uploaddir ? $uploaddir . '/' : '') . trim($theFile);
                                        $theFile = ($abs ? '' : '../') . ($uploaddir ? $uploaddir . '/' : '') . trim($theFile);
-
                                        $fileIcon = t3lib_iconWorks::getSpriteIconForFile(
                                                strtolower($ext),
                                                array('title' => htmlspecialchars(trim($theFile)))
                                        );
 
                                        $fileIcon = t3lib_iconWorks::getSpriteIconForFile(
                                                strtolower($ext),
                                                array('title' => htmlspecialchars(trim($theFile)))
                                        );
 
-                                       $check = basename($theFile_abs) . ':' . filemtime($theFile_abs) . ':' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'];
-                                       $params = '&file=' . rawurlencode($theFile);
-                                       $params .= $size ? '&size=' . $size : '';
-                                       $params .= '&md5sum=' . t3lib_div::shortMD5($check);
-
-                                       $url = $thumbScript . '?&dummy=' . $GLOBALS['EXEC_TIME'] . $params;
                                        $onClick = 'top.launchView(\'' . $theFile . '\',\'\',\'' . $backPath . '\');return false;';
                                        $thumbData .= '<a href="#" onclick="' . htmlspecialchars($onClick) . '">' . $fileIcon . '</a> ';
                                }
                                        $onClick = 'top.launchView(\'' . $theFile . '\',\'\',\'' . $backPath . '\');return false;';
                                        $thumbData .= '<a href="#" onclick="' . htmlspecialchars($onClick) . '">' . $fileIcon . '</a> ';
                                }
@@ -1609,9 +1650,9 @@ final class t3lib_BEfunc {
                $check = basename($theFile) . ':' . filemtime($theFile) . ':' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'];
                $params = '&file=' . rawurlencode($theFile);
                $params .= trim($size) ? '&size=' . trim($size) : '';
                $check = basename($theFile) . ':' . filemtime($theFile) . ':' . $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'];
                $params = '&file=' . rawurlencode($theFile);
                $params .= trim($size) ? '&size=' . trim($size) : '';
-               $params .= '&md5sum=' . t3lib_div::shortMD5($check);
+               $params .= '&md5sum=' . md5($check);
 
 
-               $url = $thumbScript . '?&dummy=' . $GLOBALS['EXEC_TIME'] . $params;
+               $url = $thumbScript . '?' . $params;
                $th = '<img src="' . htmlspecialchars($url) . '" title="' . trim(basename($theFile)) . '"' . ($tparams ? " " . $tparams : "") . ' alt="" />';
                return $th;
        }
                $th = '<img src="' . htmlspecialchars($url) . '" title="' . trim(basename($theFile)) . '"' . ($tparams ? " " . $tparams : "") . ' alt="" />';
                return $th;
        }
@@ -2202,7 +2243,9 @@ final class t3lib_BEfunc {
         */
        public static function getCommonSelectFields($table, $prefix = '', $fields = array()) {
                $fields[] = $prefix . 'uid';
         */
        public static function getCommonSelectFields($table, $prefix = '', $fields = array()) {
                $fields[] = $prefix . 'uid';
-               $fields[] = $prefix . $GLOBALS['TCA'][$table]['ctrl']['label'];
+               if (isset($GLOBALS['TCA'][$table]['ctrl']['label']) && $GLOBALS['TCA'][$table]['ctrl']['label'] != '') {
+                       $fields[] = $prefix . $GLOBALS['TCA'][$table]['ctrl']['label'];
+               }
 
                if ($GLOBALS['TCA'][$table]['ctrl']['label_alt']) {
                        $secondFields = t3lib_div::trimExplode(',', $GLOBALS['TCA'][$table]['ctrl']['label_alt'], 1);
 
                if ($GLOBALS['TCA'][$table]['ctrl']['label_alt']) {
                        $secondFields = t3lib_div::trimExplode(',', $GLOBALS['TCA'][$table]['ctrl']['label_alt'], 1);
@@ -2611,9 +2654,29 @@ final class t3lib_BEfunc {
                        // checks alternate domains
                if (count($rootLine) > 0) {
                        $urlParts = parse_url($domain);
                        // checks alternate domains
                if (count($rootLine) > 0) {
                        $urlParts = parse_url($domain);
-                       if (self::getDomainStartPage($urlParts['host'], $urlParts['path'])) {
-                               $protocol = t3lib_div::getIndpEnv('TYPO3_SSL') ? 'https://' : 'http://';
-                               $domain = $protocol . self::firstDomainRecord($rootLine);
+
+                               /** @var t3lib_pageSelect $sysPage */
+                       $sysPage = t3lib_div::makeInstance('t3lib_pageSelect');
+
+                       $page = (array)$sysPage->getPage($pageId);
+                       $protocol = 'http';
+                       if ($page['url_scheme'] == t3lib_utility_Http::SCHEME_HTTPS || ($page['url_scheme'] == 0 && t3lib_div::getIndpEnv('TYPO3_SSL'))) {
+                               $protocol = 'https';
+                       }
+
+                       $domainName = self::firstDomainRecord($rootLine);
+
+                       if ($domainName) {
+                               $domain = $domainName;
+                       } else {
+                               $domainRecord = self::getDomainStartPage($urlParts['host'], $urlParts['path']);
+                               $domain = $domainRecord['domainName'];
+                       }
+
+                       if ($domain) {
+                               $domain = $protocol . '://' . $domain;
+                       } else {
+                               $domain = rtrim(t3lib_div::getIndpEnv('TYPO3_SITE_URL'), '/');
                        }
                }
 
                        }
                }
 
@@ -3066,7 +3129,7 @@ final class t3lib_BEfunc {
                        $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
                                '*',
                                'sys_lockedrecords',
                        $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
                                '*',
                                'sys_lockedrecords',
-                                       'sys_lockedrecords.userid!=' . intval($GLOBALS['BE_USER']->user['uid']) . '
+                                       'sys_lockedrecords.userid<>' . intval($GLOBALS['BE_USER']->user['uid']) . '
                                                                AND sys_lockedrecords.tstamp > ' . ($GLOBALS['EXEC_TIME'] - 2 * 3600)
                        );
                        while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
                                                                AND sys_lockedrecords.tstamp > ' . ($GLOBALS['EXEC_TIME'] - 2 * 3600)
                        );
                        while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
@@ -3567,7 +3630,7 @@ final class t3lib_BEfunc {
                                !$GLOBALS['TCA'][$table]['ctrl']['transOrigPointerTable']) {
 
                        $where = $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'] . '=' . intval($ref) .
                                !$GLOBALS['TCA'][$table]['ctrl']['transOrigPointerTable']) {
 
                        $where = $GLOBALS['TCA'][$table]['ctrl']['transOrigPointerField'] . '=' . intval($ref) .
-                                       ' AND ' . $GLOBALS['TCA'][$table]['ctrl']['languageField'] . '!=0';
+                                       ' AND ' . $GLOBALS['TCA'][$table]['ctrl']['languageField'] . '<>0';
 
                        if (!empty($GLOBALS['TCA'][$table]['ctrl']['delete'])) {
                                $where .= ' AND ' . $GLOBALS['TCA'][$table]['ctrl']['delete'] . '=0';
 
                        if (!empty($GLOBALS['TCA'][$table]['ctrl']['delete'])) {
                                $where .= ' AND ' . $GLOBALS['TCA'][$table]['ctrl']['delete'] . '=0';
@@ -3636,7 +3699,7 @@ final class t3lib_BEfunc {
                        $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
                                $fields,
                                $table,
                        $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
                                $fields,
                                $table,
-                                       'pid=-1 AND uid!=' . intval($uid) . ' AND t3ver_oid=' . intval($uid) . ($workspace != 0 ? ' AND t3ver_wsid=' . intval($workspace) : '') .
+                                       'pid=-1 AND uid<>' . intval($uid) . ' AND t3ver_oid=' . intval($uid) . ($workspace != 0 ? ' AND t3ver_wsid=' . intval($workspace) : '') .
                                                        ($includeDeletedRecords ? '' : self::deleteClause($table)),
                                '',
                                't3ver_id DESC'
                                                        ($includeDeletedRecords ? '' : self::deleteClause($table)),
                                '',
                                't3ver_id DESC'
@@ -3707,7 +3770,7 @@ final class t3lib_BEfunc {
         * Recently, this function has been modified so it MAY set $row to FALSE. This happens if a version overlay with the move-id pointer is found in which case we would like a backend preview. In other words, you should check if the input record is still an array afterwards when using this function.
         *
         * @param       string          Table name
         * Recently, this function has been modified so it MAY set $row to FALSE. This happens if a version overlay with the move-id pointer is found in which case we would like a backend preview. In other words, you should check if the input record is still an array afterwards when using this function.
         *
         * @param       string          Table name
-        * @param       array           Record array passed by reference. As minimum, the "uid", "pid" and "t3ver_swapmode" (pages) fields must exist! Fake fields cannot exist since the fields in the array is used as field names in the SQL look up. It would be nice to have fields like "t3ver_state" and "t3ver_mode_id" as well to avoid a new lookup inside movePlhOL().
+        * @param       array           Record array passed by reference. As minimum, the "uid" and  "pid" fields must exist! Fake fields cannot exist since the fields in the array is used as field names in the SQL look up. It would be nice to have fields like "t3ver_state" and "t3ver_mode_id" as well to avoid a new lookup inside movePlhOL().
         * @param       integer         Workspace ID, if not specified will use $GLOBALS['BE_USER']->workspace
         * @param       boolean         If TRUE the function does not return a "pointer" row for moved records in a workspace
         * @return      void            (Passed by ref).
         * @param       integer         Workspace ID, if not specified will use $GLOBALS['BE_USER']->workspace
         * @param       boolean         If TRUE the function does not return a "pointer" row for moved records in a workspace
         * @return      void            (Passed by ref).
@@ -3763,19 +3826,11 @@ final class t3lib_BEfunc {
                                        }
 
                                                // For versions of single elements or page+content, swap UID and PID:
                                        }
 
                                                // For versions of single elements or page+content, swap UID and PID:
-                                       if ($table !== 'pages' || $wsAlt['t3ver_swapmode'] <= 0) {
-                                               $wsAlt['_ORIG_uid'] = $wsAlt['uid'];
-                                               $wsAlt['uid'] = $row['uid'];
-
-                                                       // Backend css class:
-                                               $wsAlt['_CSSCLASS'] = $table === 'pages' && $wsAlt['t3ver_swapmode'] == 0 ? 'ver-page' : 'ver-element';
-                                       } else { // This is only for page-versions with BRANCH below!
-                                               $wsAlt['_ONLINE_uid'] = $row['uid'];
-
-                                                       // Backend css class:
-                                               $wsAlt['_CSSCLASS'] = 'ver-branchpoint';
-                                               $wsAlt['_SUBCSSCLASS'] = 'ver-branch';
-                                       }
+                                       $wsAlt['_ORIG_uid'] = $wsAlt['uid'];
+                                       $wsAlt['uid'] = $row['uid'];
+
+                                               // Backend css class:
+                                       $wsAlt['_CSSCLASS'] = 'ver-element';
 
                                                // Changing input record to the workspace version alternative:
                                        $row = $wsAlt;
 
                                                // Changing input record to the workspace version alternative:
                                        $row = $wsAlt;
@@ -3899,8 +3954,10 @@ final class t3lib_BEfunc {
         * @param       string          Table name you are checking for. If you don't give the table name ONLY "branch" types are found and returned TRUE. Specifying table you might also get a positive response if the pid is a "page" versioning type AND the table has "versioning_followPages" set.
         * @param       boolean         If set, the keyword "branchpoint" or "first" is not returned by rather the "t3ver_stage" value of the branch-point.
         * @return      mixed           Returns either "branchpoint" (if branch) or "first" (if page) or FALSE if nothing. Alternatively, it returns the value of "t3ver_stage" for the branchpoint (if any)
         * @param       string          Table name you are checking for. If you don't give the table name ONLY "branch" types are found and returned TRUE. Specifying table you might also get a positive response if the pid is a "page" versioning type AND the table has "versioning_followPages" set.
         * @param       boolean         If set, the keyword "branchpoint" or "first" is not returned by rather the "t3ver_stage" value of the branch-point.
         * @return      mixed           Returns either "branchpoint" (if branch) or "first" (if page) or FALSE if nothing. Alternatively, it returns the value of "t3ver_stage" for the branchpoint (if any)
+        * @deprecated since TYPO3 4.4, will be removed in TYPO3 4.7, as branch versioning is not supported anymore
         */
        public static function isPidInVersionizedBranch($pid, $table = '', $returnStage = FALSE) {
         */
        public static function isPidInVersionizedBranch($pid, $table = '', $returnStage = FALSE) {
+               t3lib_div::logDeprecatedFunction();
                $rl = self::BEgetRootLine($pid);
                $c = 0;
 
                $rl = self::BEgetRootLine($pid);
                $c = 0;
 
@@ -3941,11 +3998,11 @@ final class t3lib_BEfunc {
        public static function getWorkspaceWhereClause($table, $workspaceId = NULL) {
                $whereClause = '';
 
        public static function getWorkspaceWhereClause($table, $workspaceId = NULL) {
                $whereClause = '';
 
-               if (is_null($workspaceId)) {
-                       $workspaceId = $GLOBALS['BE_USER']->workspace;
-               }
-
                if (self::isTableWorkspaceEnabled($table)) {
                if (self::isTableWorkspaceEnabled($table)) {
+                       if (is_null($workspaceId)) {
+                               $workspaceId = $GLOBALS['BE_USER']->workspace;
+                       }
+
                        $workspaceId = intval($workspaceId);
                        $pidOperator = ($workspaceId === 0 ? '!=' : '=');
                        $whereClause = ' AND ' . $table . '.t3ver_wsid=' . $workspaceId . ' AND ' . $table . '.pid' . $pidOperator . '-1';
                        $workspaceId = intval($workspaceId);
                        $pidOperator = ($workspaceId === 0 ? '!=' : '=');
                        $whereClause = ' AND ' . $table . '.t3ver_wsid=' . $workspaceId . ' AND ' . $table . '.pid' . $pidOperator . '-1';
@@ -3959,14 +4016,13 @@ final class t3lib_BEfunc {
         *
         * @param       integer         Workspace ID
         * @param       integer         Page ID
         *
         * @param       integer         Workspace ID
         * @param       integer         Page ID
-        * @param       boolean         If set, then all tables and not only "versioning_followPages" are found (except other pages)
         * @return      array           Overview of records
         */
         * @return      array           Overview of records
         */
-       public static function countVersionsOfRecordsOnPage($workspace, $pageId, $allTables = FALSE) {
+       public static function countVersionsOfRecordsOnPage($workspace, $pageId) {
                $output = array();
                if ($workspace != 0) {
                        foreach ($GLOBALS['TCA'] as $tableName => $cfg) {
                $output = array();
                if ($workspace != 0) {
                        foreach ($GLOBALS['TCA'] as $tableName => $cfg) {
-                               if ($tableName != 'pages' && $cfg['ctrl']['versioningWS'] && ($cfg['ctrl']['versioning_followPages'] || $allTables)) {
+                               if ($tableName != 'pages' && $cfg['ctrl']['versioningWS']) {
 
                                                // Select all records from this table in the database from the workspace
                                                // This joins the online version with the offline version as tables A and B
 
                                                // Select all records from this table in the database from the workspace
                                                // This joins the online version with the offline version as tables A and B
@@ -4021,7 +4077,7 @@ final class t3lib_BEfunc {
                        $row = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow(
                                $fields,
                                $table,
                        $row = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow(
                                $fields,
                                $table,
-                                       'pid!=-1 AND
+                                       'pid<>-1 AND
                                 t3ver_state=3 AND
                                 t3ver_move_id=' . intval($uid) . ' AND
                                 t3ver_wsid=' . intval($workspace) .
                                 t3ver_state=3 AND
                                 t3ver_move_id=' . intval($uid) . ' AND
                                 t3ver_wsid=' . intval($workspace) .
@@ -4063,7 +4119,7 @@ final class t3lib_BEfunc {
                                '<a href="' . TYPO3_URL_LICENSE . '" target="_blank">', '</a>'
                        );
                }
                                '<a href="' . TYPO3_URL_LICENSE . '" target="_blank">', '</a>'
                        );
                }
-               $cNotice = '<a href="http://typo3.com/" target="_blank">' .
+               $cNotice = '<a href="' . TYPO3_URL_GENERAL . '" target="_blank">' .
                                '<img' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'], 'gfx/loginlogo_transp.gif', 'width="75" height="19" vspace="2" hspace="4"') . ' alt="' .
                                $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_login.xml:typo3.logo') . '" align="left" />' .
                                $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_login.xml:typo3.cms') . ' ' .
                                '<img' . t3lib_iconWorks::skinImg($GLOBALS['BACK_PATH'], 'gfx/loginlogo_transp.gif', 'width="75" height="19" vspace="2" hspace="4"') . ' alt="' .
                                $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_login.xml:typo3.logo') . '" align="left" />' .
                                $GLOBALS['LANG']->sL('LLL:EXT:lang/locallang_login.xml:typo3.cms') . ' ' .
@@ -4373,4 +4429,4 @@ final class t3lib_BEfunc {
        }
 }
 
        }
 }
 
-?>
\ No newline at end of file
+?>