[BUGFIX] Only check if a record lives in a workspace if extension is installed 28/49628/5
authorAndreas Fernandez <a.fernandez@scripting-base.de>
Mon, 29 Aug 2016 16:00:28 +0000 (18:00 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Mon, 27 Feb 2017 21:29:29 +0000 (22:29 +0100)
The reference index checks if a record type is enabled for workspaces and
if a record exists in the currently selected workspace. However, this is
not required if EXT:workspaces is not installed at all as a lot of useless
queries could be run.

It's now checked whether the extension is installed before doing further
workspace processing of the record.

Resolves: #77676
Related: #64253
Releases: master, 7.6
Change-Id: I94aab84fce72e8b852783820b34065ab1e051ea5
Reviewed-on: https://review.typo3.org/49628
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Tested-by: Morton Jonuschat <m.jonuschat@mojocode.de>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
typo3/sysext/core/Classes/Database/ReferenceIndex.php

index 879f5b3..f49d5bd 100644 (file)
@@ -317,7 +317,7 @@ class ReferenceIndex
 
         // Return if there are no fields which could contain relations
         if ($tableRelationFields === '') {
-            return $this->relations;
+            return array_filter($this->relations);
         }
 
         $deleteField = $GLOBALS['TCA'][$tableName]['ctrl']['delete'];
@@ -383,7 +383,7 @@ class ReferenceIndex
             }
         }
 
-        return $this->relations;
+        return array_filter($this->relations);
     }
 
     /**
@@ -401,16 +401,19 @@ class ReferenceIndex
      * @param int $sort The sorting order of references if many (the "group" or "select" TCA types). -1 if no sorting order is specified.
      * @param string $softref_key If the reference is a soft reference, this is the soft reference parser key. Otherwise empty.
      * @param string $softref_id Soft reference ID for key. Might be useful for replace operations.
-     * @return array Array record to insert into table.
+     * @return array|null Array record to insert into table.
      */
     public function createEntryData($table, $uid, $field, $flexPointer, $deleted, $ref_table, $ref_uid, $ref_string = '', $sort = -1, $softref_key = '', $softref_id = '')
     {
-        if (BackendUtility::isTableWorkspaceEnabled($table)) {
+        if ($this->getWorkspaceId() > 0 && BackendUtility::isTableWorkspaceEnabled($table)) {
             $element = BackendUtility::getRecord($table, $uid, 't3ver_wsid');
-            if ($element !== null && isset($element['t3ver_wsid']) && (int)$element['t3ver_wsid'] !== $this->getWorkspaceId()) {
-                //The given Element is ws-enabled but doesn't live in the selected workspace
-                // => don't add index as it's not actually there
-                return false;
+            if ($element !== null
+                && isset($element['t3ver_wsid'])
+                && (int)$element['t3ver_wsid'] !== $this->getWorkspaceId()
+            ) {
+                // The given element is ws-enabled but doesn't live in the selected workspace
+                // => don't add to index as it's not actually there
+                return null;
             }
         }
         return [