DavidBruchmann / wdb_language_fallback

Fixes some issues concerning language fallback in TYPO3. Obtain the professional version for special extensions like powermail.
1 stars 2 forks source link

sys_file_metadata needs null instead of false #9

Closed DavidBruchmann closed 5 years ago

DavidBruchmann commented 5 years ago

For empty or not existing overlays it's stated and experienced that those records have to be given the value false in method \TYPO3\CMS\Frontend\Page\PageRepository::getRecordOverlay().

Nevertheless if that's done for all tables, records of the table sys_file_metadata might raise an error


(1/1) InvalidArgumentException
Passed variable is not an array or object

in typo3/sysext/frontend/Classes/Aspect/FileMetadataOverlayAspect.php line 53
            'sys_file_metadata',
            $overlaidMetaData
        );
        if ($overlaidMetaData !== null) {
            $data->exchangeArray($overlaidMetaData);
        }
    }
}
at ArrayObject->exchangeArray(false)
in typo3/sysext/frontend/Classes/Aspect/FileMetadataOverlayAspect.php line 53
            'sys_file_metadata',
            $overlaidMetaData
        );
        if ($overlaidMetaData !== null) {
            $data->exchangeArray($overlaidMetaData);
        }
    }
}
at TYPO3\CMS\Frontend\Aspect\FileMetadataOverlayAspect->languageAndWorkspaceOverlay(object(ArrayObject), 'TYPO3\\CMS\\Core\\Resource\\Index\\MetaDataRepository::recordPostRetrieval')
at call_user_func_array(array(object(TYPO3\CMS\Frontend\Aspect\FileMetadataOverlayAspect), 'languageAndWorkspaceOverlay'), array(object(ArrayObject), 'TYPO3\\CMS\\Core\\Resource\\Index\\MetaDataRepository::recordPostRetrieval'))
in typo3/sysext/extbase/Classes/SignalSlot/Dispatcher.php line 155
            if ($slotInformation['passSignalInformation'] === true) {
                $preparedSlotArguments[] = $signalClassName . '::' . $signalName;
            }

            $slotReturn = call_user_func_array([$object, $slotInformation['method']], $preparedSlotArguments);

            if ($slotReturn) {
                if (!is_array($slotReturn)) {
                    throw new Exception\InvalidSlotReturnException('The slot method ' . get_class($object) . '->' . $slotInformation['method'] . '()\'s return value is of an not allowed type ('
at TYPO3\CMS\Extbase\SignalSlot\Dispatcher->dispatch('TYPO3\\CMS\\Core\\Resource\\Index\\MetaDataRepository', 'recordPostRetrieval', array(object(ArrayObject)))
in typo3/sysext/core/Classes/Resource/Index/MetaDataRepository.php line 247
     * @param \ArrayObject $data
     */
    protected function emitRecordPostRetrievalSignal(\ArrayObject $data)
    {
        $this->getSignalSlotDispatcher()->dispatch(self::class, 'recordPostRetrieval', [$data]);
    }

    /**
     * Signal that is called after an IndexRecord is updated

...

Obviously the error is raised in in typo3/sysext/frontend/Classes/Aspect/FileMetadataOverlayAspect.php line 53 because it's checked for the value null insetad of false. Therefore corresponding records related to the table sys_file_metadata have to be given the value false.