diff --git typo3/sysext/extbase/Classes/Domain/Model/File.php typo3/sysext/extbase/Classes/Domain/Model/File.php index 3ded5a60dd3725bda262c01ccf3024956371053e..a0fce481e6aad27067850edf0f5e328716fb03f4 100644 --- typo3/sysext/extbase/Classes/Domain/Model/File.php +++ typo3/sysext/extbase/Classes/Domain/Model/File.php @@ -41,6 +41,11 @@ class File extends \TYPO3\CMS\Extbase\Domain\Model\AbstractFileFolder { protected $fileRepository; /** + * @var int + */ + protected $type; + + /** * @return \TYPO3\CMS\Core\Resource\File */ public function getOriginalResource() { @@ -50,6 +55,13 @@ class File extends \TYPO3\CMS\Extbase\Domain\Model\AbstractFileFolder { return $this->originalResource; } + + /** + * @return int + */ + public function getType() { + return $this->type; + } } ?> \ No newline at end of file diff --git typo3/sysext/extbase/Classes/Domain/Model/FileReference.php typo3/sysext/extbase/Classes/Domain/Model/FileReference.php index 7b708425692c7d3ce2aeff63107be5072d6f6e67..e8232334a3a514ddc64a4b2e11671617d91333a0 100644 --- typo3/sysext/extbase/Classes/Domain/Model/FileReference.php +++ typo3/sysext/extbase/Classes/Domain/Model/FileReference.php @@ -41,6 +41,11 @@ class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\AbstractFileFolder { protected $fileRepository; /** + * @var \TYPO3\CMS\Extbase\Domain\Model\File + */ + protected $uidLocal; + + /** * @return \TYPO3\CMS\Core\Resource\FileReference */ public function getOriginalResource() { @@ -50,6 +55,13 @@ class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\AbstractFileFolder { return $this->originalResource; } + + /** + * @return \TYPO3\CMS\Extbase\Domain\Model\File + */ + public function getUidLocal() { + return $this->uidLocal; + } } ?> \ No newline at end of file diff --git typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php index dd20954a6e846137e993183c386a861785094d72..cbda6135a3ac100d59d1a639e26dff6565d6fdc7 100644 --- typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php +++ typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php @@ -534,7 +534,19 @@ class Typo3DbBackend implements \TYPO3\CMS\Extbase\Persistence\Generic\Storage\B $recordTypeStatements = array(); foreach ($recordTypes as $recordType) { $tableName = $dataMap->getTableName(); - $recordTypeStatements[] = $tableName . '.' . $dataMap->getRecordTypeColumnName() . '=' . $this->databaseHandle->fullQuoteStr($recordType, $tableName); + + if (strpos($dataMap->getRecordTypeColumnName(), ':')) { + $recordTypePath = explode(':', $dataMap->getRecordTypeColumnName()); + $rightSelectorType = $this->dataMapper->getType($className, \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToLowerCamelCase($recordTypePath[0])); + $rightTableName = $this->dataMapper->convertClassNameToTableName($rightSelectorType); + $sql['unions'][$rightTableName] = 'LEFT JOIN ' . $rightTableName; + $sql['unions'][$rightTableName] .= ' ON ' . $tableName . '.' . $recordTypePath[0] . ' = ' . $rightTableName . '.uid'; + $recordTypeStatements[] = $rightTableName . '.' . $recordTypePath[1] . '=' . $this->databaseHandle->fullQuoteStr($recordType, $tableName); + + } else { + $recordTypeStatements[] = $tableName . '.' . $dataMap->getRecordTypeColumnName() . '=' . $this->databaseHandle->fullQuoteStr($recordType, $tableName); + } + } $sql['additionalWhereClause'][] = '(' . implode(' OR ', $recordTypeStatements) . ')'; }