[BUGFIX] respect rootLevel=-1 in exec_foreign_table_where_query
[Packages/TYPO3.CMS.git] / typo3 / sysext / backend / Classes / Utility / BackendUtility.php
index 1ba67c6..e901ac5 100644 (file)
@@ -3033,13 +3033,16 @@ class BackendUtility {
                $fTWHERE = str_replace('###PAGE_TSCONFIG_ID###', intval($TSconfig[$field]['PAGE_TSCONFIG_ID']), $fTWHERE);
                $fTWHERE = str_replace('###PAGE_TSCONFIG_IDLIST###', $GLOBALS['TYPO3_DB']->cleanIntList($TSconfig[$field]['PAGE_TSCONFIG_IDLIST']), $fTWHERE);
                $fTWHERE = str_replace('###PAGE_TSCONFIG_STR###', $GLOBALS['TYPO3_DB']->quoteStr($TSconfig[$field]['PAGE_TSCONFIG_STR'], $foreign_table), $fTWHERE);
-               // rootLevel = -1 is not handled 'properly' here - it goes as if it was rootLevel = 1 (that is pid=0)
                $wgolParts = $GLOBALS['TYPO3_DB']->splitGroupOrderLimit($fTWHERE);
-               if ($rootLevel) {
+               // rootLevel = -1 means that elements can be on the rootlevel OR on any page (pid!=-1)
+               // rootLevel = 0 means that elements are not allowed on root level
+               // rootLevel = 1 means that elements are only on the root level (pid=0)
+               if ($rootLevel == 1 || $rootLevel == -1) {
+                       $pidWhere = $foreign_table . '.pid' . (($rootLevel == -1) ? '<>-1' : '=0');
                        $queryParts = array(
                                'SELECT' => self::getCommonSelectFields($foreign_table, $foreign_table . '.'),
                                'FROM' => $foreign_table,
-                               'WHERE' => $foreign_table . '.pid=0 ' . self::deleteClause($foreign_table) . ' ' . $wgolParts['WHERE'],
+                               'WHERE' => $pidWhere . ' ' . self::deleteClause($foreign_table) . ' ' . $wgolParts['WHERE'],
                                'GROUPBY' => $wgolParts['GROUPBY'],
                                'ORDERBY' => $wgolParts['ORDERBY'],
                                'LIMIT' => $wgolParts['LIMIT']
@@ -4079,4 +4082,4 @@ class BackendUtility {
 }
 
 
-?>
\ No newline at end of file
+?>