Index: Z:/svnworkspace/TYPO3_4-1/t3lib/class.t3lib_page.php =================================================================== --- Z:/svnworkspace/TYPO3_4-1/t3lib/class.t3lib_page.php (revision 2438) +++ Z:/svnworkspace/TYPO3_4-1/t3lib/class.t3lib_page.php (working copy) @@ -239,7 +239,35 @@ } return 0; } - + /** + * function that checks which page record overlay language should be used, according to the given fallbackorder + * + * @param integer pid which is checked for translations + * @param string comma seperated list of language uids (integer). the languageUid to whith the fallback order + * @return integer id of the first found languageuid in the fallbackorder where a translation for $pid exists. + **/ + function getLanguageOverlayUidForPage($page_id,$fallBackOrder) { + $lUids = t3lib_div::intExplode(',', $fallBackOrder); + foreach($lUids as $lUid) { + // Selecting overlay record: + $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery( + '*', + 'pages_language_overlay', + 'pid='.intval($page_id).' + AND sys_language_uid='.intval($lUid). + $this->enableFields('pages_language_overlay'), + '', + '', + '1' + ); + $row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res); + $this->versionOL('pages_language_overlay',$row); + if (is_array($row)) { + return $lUid; + } + } + return 0; + } /** * Returns the relevant page overlay record fields * @@ -248,20 +276,28 @@ * @return array Page row which is overlayed with language_overlay record (or the overlay record alone) */ function getPageOverlay($pageInput,$lUid=-1) { - - // Initialize: - if ($lUid<0) $lUid = $this->sys_language_uid; + //get page_id + if (is_array($pageInput)) { + $page_id = $pageInput['uid']; // Was the whole record + } + else { + $page_id = $pageInput; // Was the id + } + // Initialize: + if ($lUid<0) { + $lUid = $this->sys_language_uid; + //if with sys_language_overlayCheckOrder, check for other Overlay language which should be used instead + if ($page_id && $lUid && is_object($GLOBALS['TSFE']) && $GLOBALS['TSFE']->sys_language_overlayCheckOrder) { + $lUid=$this->getLanguageOverlayUidForPage($page_id,$GLOBALS['TSFE']->sys_language_overlayCheckOrder); + } + } $row = NULL; - // If language UID is different from zero, do overlay: if ($lUid) { $fieldArr = explode(',', $GLOBALS['TYPO3_CONF_VARS']['FE']['pageOverlayFields']); - if (is_array($pageInput)) { - $page_id = $pageInput['uid']; // Was the whole record + if (is_array($pageInput)) { $fieldArr = array_intersect($fieldArr,array_keys($pageInput)); // Make sure that only fields which exist in the incoming record are overlaid! - } else { - $page_id = $pageInput; // Was the id - } + } if (count($fieldArr)) { /* @@ -286,7 +322,7 @@ if (is_array($row)) { $row['_PAGES_OVERLAY'] = TRUE; - + $row['_PAGES_OVERLAY_LUID'] = $lUid; // Unset vital fields that are NOT allowed to be overlaid: unset($row['uid']); unset($row['pid']);