ExtBase
authorJochen Rau <j.rau@web.de>
Thu, 26 Mar 2009 14:52:31 +0000 (14:52 +0000)
committerJochen Rau <j.rau@web.de>
Thu, 26 Mar 2009 14:52:31 +0000 (14:52 +0000)
* The Object Storage throws now an exception if an object is attached like this $storage[] = $object
* Some minor fixes to the ORM

typo3/sysext/extbase/Classes/Exception/InvalidArgumentType.php
typo3/sysext/extbase/Classes/Persistence/Mapper/ObjectRelationalMapper.php
typo3/sysext/extbase/Classes/Persistence/ObjectStorage.php
typo3/sysext/extbase/Tests/ObjectStorage_testcase.php [new file with mode: 0644]
typo3/sysext/extbase/ext_emconf.php

index a91b738..ad07dbf 100644 (file)
@@ -30,7 +30,7 @@
  * @version $ID:$
  */
 
-class InvalidArgumentType extends Tx_ExtBase_Exception {
+class TX_ExtBase_Exception_InvalidArgumentType extends Tx_ExtBase_Exception {
 
 }
 ?>
\ No newline at end of file
index 07c1be4..13bd165 100644 (file)
@@ -91,12 +91,16 @@ class Tx_ExtBase_Persistence_Mapper_ObjectRelationalMapper implements t3lib_Sing
         * @return array An array of objects, empty if no objects found
         * @see Repository#find(...)
         */
-       public function find($className, $conditions = '', $groupBy = '', $orderBy = '', $limit = '', $useEnableFields = TRUE) {
+       public function find($className, $conditions, $groupBy = '', $orderBy = '', $limit = '', $useEnableFields = TRUE) {
                $dataMap = $this->getDataMap($className);
                if (is_array($conditions)) {
                        $where = $this->queryByConditions($dataMap, $conditions);
                } elseif (is_string($conditions)) {
-                       $where = $conditions;
+                       if (strlen($conditions) === 0) {
+                               $where = '1=1';
+                       } else {
+                               $where = $conditions;
+                       }
                }
                return $this->fetch($className, $where, $groupBy, $orderBy, $limit, $useEnableFields);
        }
@@ -191,7 +195,7 @@ class Tx_ExtBase_Persistence_Mapper_ObjectRelationalMapper implements t3lib_Sing
                        $enableFields = '';
                }
                
-               $joinTables = $this->getJoinClause($className);         
+               $joinTables = $this->getJoinClause($className);
                $res = $this->db->exec_SELECTquery(
                        '*', // TODO limit fetched fields (CH: should we do that? JR: Not needed; only existing properties will be mapped)
                        $dataMap->getTableName() . ' ' . $joinTables,
@@ -200,7 +204,6 @@ class Tx_ExtBase_Persistence_Mapper_ObjectRelationalMapper implements t3lib_Sing
                        $orderBy,
                        $limit
                        );
-               
                $fieldMap = array();
                $i = 0;
                // FIXME mysql_fetch_field should be available in t3lib_db (patch core)
index fdcd990..018b33c 100644 (file)
@@ -101,6 +101,7 @@ class Tx_ExtBase_Persistence_ObjectStorage implements Iterator, Countable, Array
         * @return void
         */
        public function offsetSet($offset, $obj) {
+               if (!is_object($offset)) throw new InvalidArgumentException('Expects Parameter 1 to be object, null given');
                if (is_object($obj) && !$this->contains($obj)) {
                        $this->storage[$offset] = $obj;
                }
diff --git a/typo3/sysext/extbase/Tests/ObjectStorage_testcase.php b/typo3/sysext/extbase/Tests/ObjectStorage_testcase.php
new file mode 100644 (file)
index 0000000..2d78d08
--- /dev/null
@@ -0,0 +1,40 @@
+<?php
+/***************************************************************
+*  Copyright notice
+*
+*  (c) 2009 Jochen Rau <jochen.rau@typoplanet.de>
+*  All rights reserved
+*
+*  This script is part of the TYPO3 project. The TYPO3 project is
+*  free software; you can redistribute it and/or modify
+*  it under the terms of the GNU General Public License as published by
+*  the Free Software Foundation; either version 2 of the License, or
+*  (at your option) any later version.
+*
+*  The GNU General Public License can be found at
+*  http://www.gnu.org/copyleft/gpl.html.
+*
+*  This script is distributed in the hope that it will be useful,
+*  but WITHOUT ANY WARRANTY; without even the implied warranty of
+*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+*  GNU General Public License for more details.
+*
+*  This copyright notice MUST APPEAR in all copies of the script!
+***************************************************************/
+
+require_once('Base_testcase.php');
+
+class Tx_ExtBase_Persistence_ObjectStorage_testcase extends Tx_ExtBase_Base_testcase {
+       
+       public function setUp() {
+       }
+       
+       public function test_AddingAnObjectWithoutOffsetThrowsAnException() {
+               $this->setExpectedException('InvalidArgumentException');
+               $objectStorage = new Tx_ExtBase_Persistence_ObjectStorage();
+               $object = $this->getMock('Tx_ExtBase_DomainObject_AbstractEntity');
+               $objectStorage[] = $object;
+       }
+       
+}
+?>
\ No newline at end of file
index e787583..93b39e0 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 ########################################################################
-# Extension Manager/Repository config file for ext: "extbase"
+# Extension Manager/Repository config file for ext: "ext_base"
 #
 # Auto generated 
 #
@@ -34,6 +34,7 @@ $EM_CONF[$_EXTKEY] = array(
                'depends' => array(
                        'php' => '5.2.0-0.0.0',
                        'typo3' => '4.3.dev-4.3.99',
+                       'fluid' => '',
                ),
                'conflicts' => array(
                ),