[BUGFIX] Fix resource exceptions 57/31757/2
authorHelmut Hummel <helmut.hummel@typo3.org>
Wed, 23 Jul 2014 18:50:56 +0000 (20:50 +0200)
committerAnja Leichsenring <aleichsenring@ab-softlab.de>
Thu, 24 Jul 2014 13:08:58 +0000 (15:08 +0200)
When rendering the FILES content object,
exceptions due to missing file references and missing collections
are meant to be caught. However they are not, because
InvalidArgumentException and RuntimeException are thrown instead of
ResourceDoesNotExistException

Throw the appropriate exceptions instead and also
fix a wrong check in RecordCollection Repository, where
the return type is checked against NULL while the DB
call returns FALSE when no record is found.

Resolves: #60506
Releases: 6.2, 6.3
Change-Id: I9cea492d814850f75549d280c2de0defc8b91548
Reviewed-on: http://review.typo3.org/31757
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
typo3/sysext/core/Classes/Collection/RecordCollectionRepository.php
typo3/sysext/core/Classes/Resource/FileCollectionRepository.php
typo3/sysext/core/Classes/Resource/ResourceFactory.php

index ac3a96b..4152f6c 100644 (file)
@@ -47,7 +47,7 @@ class RecordCollectionRepository {
        public function findByUid($uid) {
                $result = NULL;
                $data = $this->getDatabaseConnection()->exec_SELECTgetSingleRow('*', $this->table, 'uid=' . (int)$uid . \TYPO3\CMS\Backend\Utility\BackendUtility::deleteClause($this->table));
-               if ($data !== NULL) {
+               if (is_array($data)) {
                        $result = $this->createDomainObject($data);
                }
                return $result;
index 95b4146..968c4cd 100644 (file)
@@ -13,6 +13,9 @@ namespace TYPO3\CMS\Core\Resource;
  *
  * The TYPO3 project - inspiring people to share!
  */
+
+use TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException;
+
 /**
  * Repository for accessing the collections stored in the database
  *
@@ -34,15 +37,14 @@ class FileCollectionRepository extends \TYPO3\CMS\Core\Collection\RecordCollecti
        /**
         * Finds a record collection by uid.
         *
-        * @todo the parent function throws already an exception if not found
         * @param integer $uid The uid to be looked up
         * @return NULL|Collection\AbstractFileCollection
-        * @throws \RuntimeException
+        * @throws ResourceDoesNotExistException
         */
        public function findByUid($uid) {
                $object = parent::findByUid($uid);
                if ($object === NULL) {
-                       throw new \RuntimeException('Could not find row with uid "' . $uid . '" in table "' . $this->table . '"', 1314354066);
+                       throw new ResourceDoesNotExistException('Could not find row with uid "' . $uid . '" in table "' . $this->table . '"', 1314354066);
                }
                return $object;
        }
index b50f751..3ad5fca 100644 (file)
@@ -561,12 +561,12 @@ class ResourceFactory implements ResourceFactoryInterface, \TYPO3\CMS\Core\Singl
         * @param integer $uid The uid of the file usage (sys_file_reference) to instantiate.
         * @param array $fileReferenceData The record row from database.
         *
-        * @throws \InvalidArgumentException
+        * @throws \TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException
         * @return FileReference
         */
        public function getFileReferenceObject($uid, array $fileReferenceData = array()) {
                if (!is_numeric($uid)) {
-                       throw new \InvalidArgumentException('uid of fileusage (sys_file_reference) has to be numeric.', 1300086584);
+                       throw new \InvalidArgumentException('uid of file usage (sys_file_reference) has to be numeric.', 1300086584);
                }
                if (!$this->fileReferenceInstances[$uid]) {
                        // Fetches data in case $fileData is empty
@@ -581,7 +581,7 @@ class ResourceFactory implements ResourceFactoryInterface, \TYPO3\CMS\Core\Singl
                                        $fileReferenceData = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow('*', 'sys_file_reference', 'uid=' . (int)$uid . ' AND deleted=0');
                                }
                                if (!is_array($fileReferenceData)) {
-                                       throw new \InvalidArgumentException('No fileusage (sys_file_reference) found for given UID.', 1317178794);
+                                       throw new \TYPO3\CMS\Core\Resource\Exception\ResourceDoesNotExistException('No file usage (sys_file_reference) found for given UID.', 1317178794);
                                }
                        }
                        $this->fileReferenceInstances[$uid] = $this->createFileReferenceObject($fileReferenceData);
@@ -630,4 +630,4 @@ class ResourceFactory implements ResourceFactoryInterface, \TYPO3\CMS\Core\Singl
                return GeneralUtility::makeInstance('TYPO3\\CMS\\Core\\Resource\\Index\\Indexer', $storage);
        }
 
-}
+}
\ No newline at end of file