Pass the Horde_Db_Adapter that Mappers use in the constructor, to make it injectable.
authorChuck Hagenbuch <chuck@horde.org>
Mon, 31 May 2010 19:26:44 +0000 (15:26 -0400)
committerChuck Hagenbuch <chuck@horde.org>
Mon, 31 May 2010 19:27:41 +0000 (15:27 -0400)
framework/Rdo/examples/Horde/Rdo/Clotho.php
framework/Rdo/examples/Horde/Rdo/CountTest.php
framework/Rdo/examples/Horde/Rdo/DumpXmlTest.php
framework/Rdo/examples/Horde/Rdo/RelationshipTest.php
framework/Rdo/examples/Horde/Rdo/Task.php
framework/Rdo/examples/Horde/Rdo/User.php
framework/Rdo/examples/Horde/Rdo/clotho.data.php
framework/Rdo/examples/Horde/Rdo/conf.php.dist
framework/Rdo/lib/Horde/Rdo/Base.php
framework/Rdo/lib/Horde/Rdo/Mapper.php
framework/Rdo/lib/Horde/Rdo/Query.php

index f14cb88..791ad41 100644 (file)
@@ -7,8 +7,8 @@
 require_once 'Horde/Autoloader.php';
 
 @include './conf.php';
-if (empty($conf['sql'])) {
-    die("No sql configuration found\n");
+if (empty($conf)) {
+    die("No configuration found\n");
 }
 
 /* additional things to handle:
@@ -24,29 +24,17 @@ if (empty($conf['sql'])) {
 
 
 /**
- * Base Mapper class for Clotho - defines getAdapter() so subclasses
- * stay simple.
- */
-class Clotho_Mapper extends Horde_Rdo_Mapper {
-
-    public function getAdapter()
-    {
-        return $GLOBALS['injector']->getInstance('Horde_Db_Base');
-    }
-
-}
-
-/**
  * Items
  */
-class Item extends Horde_Rdo_Base {
+class Item extends Horde_Rdo_Base
+{
 }
 
 /**
  * Item Mapper
  */
-class ItemMapper extends Clotho_Mapper {
-
+class ItemMapper extends Horde_Rdo_Mapper
+{
     protected $_relationships = array(
         'parent' => array('type' => Horde_Rdo::ONE_TO_ONE,
                           'foreignKey' => 'item_parent',
@@ -60,50 +48,50 @@ class ItemMapper extends Clotho_Mapper {
     );
 
     protected $_table = 'clotho_wbs_items';
-
 }
 
 /**
  * Dependencies
  */
-class Dependency extends Horde_Rdo_Base {
+class Dependency extends Horde_Rdo_Base
+{
 }
 
 /**
  * Dependency Mapper.
  */
-class DependencyMapper extends Clotho_Mapper {
-
+class DependencyMapper extends Horde_Rdo_Mapper
+{
     protected $_table = 'clotho_wbs_dependencies';
-
 }
 
 /**
  * Calendars
  */
-class Calendar extends Horde_Rdo_Base {
+class Calendar extends Horde_Rdo_Base
+{
 }
 
 /**
  * Calendar Mapper.
  */
-class CalendarMapper extends Clotho_Mapper {
-
+class CalendarMapper extends Horde_Rdo_Mapper
+{
     protected $_table = 'clotho_calendars';
-
 }
 
 /**
  * Resources
  */
-class Resource extends Horde_Rdo_Base {
+class Resource extends Horde_Rdo_Base
+{
 }
 
 /**
  * Resource Mapper.
  */
-class ResourceMapper extends Clotho_Mapper {
-
+class ResourceMapper extends Horde_Rdo_Mapper
+{
     protected $_lazyRelationships = array(
         'availabilities' => array('type' => Horde_Rdo::ONE_TO_MANY,
                                   'foreignKey' => 'resource_id',
@@ -114,20 +102,20 @@ class ResourceMapper extends Clotho_Mapper {
         );
 
     protected $_table = 'clotho_resources';
-
 }
 
 /**
  * ResourceAvailability
  */
-class ResourceAvailability extends Horde_Rdo_Base {
+class ResourceAvailability extends Horde_Rdo_Base
+{
 }
 
 /**
  * ResourceAvailability Mapper.
  */
-class ResourceAvailabilityMapper extends Clotho_Mapper {
-
+class ResourceAvailabilityMapper extends Horde_Rdo_Mapper
+{
     protected $_relationships = array(
         'resource' => array('type' => Horde_Rdo::MANY_TO_ONE,
                             'foreignKey' => 'resource_id',
@@ -135,5 +123,4 @@ class ResourceAvailabilityMapper extends Clotho_Mapper {
         );
 
     protected $_table = 'clotho_resource_availability';
-
 }
index 7f0fb20..3f74df1 100644 (file)
@@ -5,11 +5,11 @@
 
 require './Clotho.php';
 
-$im = new ItemMapper();
-$dm = new DependencyMapper();
-$cm = new CalendarMapper();
-$rm = new ResourceMapper();
-$ram = new ResourceAvailabilityMapper();
+$im = new ItemMapper($conf['adapter']);
+$dm = new DependencyMapper($conf['adapter']);
+$cm = new CalendarMapper($conf['adapter']);
+$rm = new ResourceMapper($conf['adapter']);
+$ram = new ResourceAvailabilityMapper($conf['adapter']);
 
 echo count($im) . "\n";
 echo count($dm) . "\n";
index 8ccb5a1..b681a5a 100644 (file)
@@ -5,11 +5,12 @@
 
 require_once './Clotho.php';
 
-class XmlItemMapper extends ItemMapper {
+class XmlItemMapper extends ItemMapper
+{
 }
 
-class XmlItem extends Item {
-
+class XmlItem extends Item
+{
     /**
      * Return an XML representation of this object. The default
      * implementation is unlikely to be useful in most cases and
@@ -31,10 +32,9 @@ class XmlItem extends Item {
 
         return $doc->saveXML();
     }
-
 }
 
-$im = new XmlItemMapper();
+$im = new XmlItemMapper($conf['adapter']);
 
-$i = $im->find(1);
+$i = $im->findOne(1);
 echo $i->toXml();
index a007528..e8302f2 100644 (file)
@@ -9,7 +9,7 @@ require './Clotho.php';
 
 
 // one-to-one
-$im = new ItemMapper();
+$im = new ItemMapper($conf['adapter']);
 
 $i = $im->findOne(3);
 echo "({$i->item_id}) {$i->item_name} has parent:\n";
@@ -17,7 +17,7 @@ echo "  ({$i->parent->item_id}) {$i->parent->item_name}\n";
 
 
 // one-to-many
-$rm = new ResourceMapper();
+$rm = new ResourceMapper($conf['adapter']);
 
 $r = $rm->findOne(1);
 echo "Resource ({$r->resource_id}) {$r->resource_name} has " . count($r->availabilities) . " availabilities:\n";
@@ -27,7 +27,7 @@ foreach ($r->availabilities as $ra) {
 
 
 // many-to-one
-$ram = new ResourceAvailabilityMapper();
+$ram = new ResourceAvailabilityMapper($conf['adapter']);
 
 $ra = $ram->findOne(1);
 echo "Resource Availability ({$ra->availability_id}) " . strftime('%x %X', $ra->availability_date) . " has resource:\n";
@@ -36,7 +36,7 @@ echo "  ({$ra->resource->resource_id}) {$ra->resource->resource_name}\n";
 
 // many-to-many
 echo "Listing all Items and their Resources:\n\n";
-$im = new ItemMapper();
+$im = new ItemMapper($conf['adapter']);
 foreach ($im->find() as $i) {
     if (count($i->resources)) {
         echo " (" . $i->item_id . ") " . $i->item_name . " has resources:\n";
@@ -47,7 +47,7 @@ foreach ($im->find() as $i) {
 }
 
 echo "\n\nListing all Resources and their Items:\n\n";
-$rm = new ResourceMapper();
+$rm = new ResourceMapper($conf['adapter']);
 foreach ($rm->find() as $r) {
     if (count($r->items)) {
         echo " (" . $r->resource_id . ") " . $r->resource_name . " has items:\n";
index de3131d..d86dedd 100644 (file)
@@ -4,31 +4,26 @@
  */
 
 @include './conf.php';
-if (empty($conf['sql'])) {
-    die('No sql configuration found.');
+if (empty($conf)) {
+    die('No configuration found.');
 }
 
 require_once 'Horde/Autoloader.php';
 
 /**
  */
-class Task extends Horde_Rdo_Base {
+class Task extends Horde_Rdo_Base
+{
 }
 
 /**
  */
-class TaskMapper extends Horde_Rdo_Mapper {
-
+class TaskMapper extends Horde_Rdo_Mapper
+{
     protected $_table = 'nag_tasks';
-
-    public function getAdapter()
-    {
-        return Horde_Rdo_Adapter::factory('pdo', $GLOBALS['conf']['sql']);
-    }
-
 }
 
-$tm = new TaskMapper();
+$tm = new TaskMapper($conf['adapter']);
 
 // Count all tasks.
 $count = $tm->count();
index 31ad596..1aab727 100644 (file)
@@ -6,27 +6,23 @@
 require_once 'Horde/Autoloader.php';
 
 @include './conf.php';
-if (empty($conf['sql'])) {
-    die("No sql configuration found\n");
+if (empty($conf)) {
+    die("No configuration found\n");
 }
 
 /**
  */
-class User extends Horde_Rdo_Base {
+class User extends Horde_Rdo_Base
+{
 }
 
 /**
  */
-class UserMapper extends Horde_Rdo_Mapper {
-
-    public function getAdapter()
-    {
-        return $GLOBALS['injector']->getInstance('Horde_Db_Base');
-    }
-
+class UserMapper extends Horde_Rdo_Mapper
+{
 }
 
-$um = new UserMapper();
+$um = new UserMapper($conf['adapter']);
 
 // Count all users.
 $userCount = $um->count();
index 77bcb56..3517e24 100644 (file)
@@ -5,11 +5,11 @@
 
 require_once './Clotho.php';
 
-$im = new ItemMapper();
-$dm = new DependencyMapper();
-$cm = new CalendarMapper();
-$rm = new ResourceMapper();
-$ram = new ResourceAvailabilityMapper();
+$im = new ItemMapper($conf['adapter']);
+$dm = new DependencyMapper($conf['adapter']);
+$cm = new CalendarMapper($conf['adapter']);
+$rm = new ResourceMapper($conf['adapter']);
+$ram = new ResourceAvailabilityMapper($conf['adapter']);
 
 $item = $im->create(array('item_name' => 'Test Item', 'item_parent' => 0));
 echo get_class($item) . "\n";
index 1568d9c..447f3bd 100644 (file)
@@ -1,9 +1,4 @@
 <?php
 
 // Dist config file for Rdo examples.
-$conf['sql']['adapter'] = 'pdo_mysql';
-$conf['sql']['dsn'] = 'host=127.0.0.1';
-$conf['sql']['database'] = 'horde';
-$conf['sql']['username'] = 'horde';
-$conf['sql']['password'] = '';
-$conf['sql']['charset'] = 'utf-8';
+$conf['adapter'] = new Horde_Db_Adapter_Pdo_Sqlite(array('dbname' => ':memory'));
index 80e1e3f..750b5cb 100644 (file)
@@ -101,7 +101,10 @@ abstract class Horde_Rdo_Base implements IteratorAggregate
         // Try to find the Mapper class for the object the
         // relationship is with, and fail if we can't.
         if (isset($rel['mapper'])) {
-            $m = new $rel['mapper']();
+            // @TODO - should be getting this instance from somewhere
+            // else external, and not passing the adapter along
+            // automatically.
+            $m = new $rel['mapper']($mapper->adapter);
         } else {
             $m = $mapper->tableToMapper($field);
             if (is_null($m)) {
index ddb9f69..6499306 100644 (file)
@@ -16,7 +16,7 @@
  *   $inflector - The Horde_Support_Inflector this mapper uses to singularize
  *   and pluralize PHP class, database table, and database field/key names.
  *
- *   $table - The Horde_Db_Adapter_Abstract_TableDefinition object describing
+ *   $table - The Horde_Db_Adapter_Base_TableDefinition object describing
  *   the main table of this entity.
  *
  * @category Horde
@@ -47,7 +47,7 @@ abstract class Horde_Rdo_Mapper implements Countable
      * The definition of the database table (or view, etc.) that holds this
      * Mapper's objects.
      *
-     * @var Horde_Db_Adapter_Abstract_TableDefinition
+     * @var Horde_Db_Adapter_Base_TableDefinition
      */
     protected $_tableDefinition;
 
@@ -82,6 +82,11 @@ abstract class Horde_Rdo_Mapper implements Countable
      */
     protected $_defaultSort;
 
+    public function __construct(Horde_Db_Adapter $adapter)
+    {
+        $this->adapter = $adapter;
+    }
+
     /**
      * Provide read-only, on-demand access to several properties. This
      * method will only be called for properties that aren't already
@@ -98,7 +103,7 @@ abstract class Horde_Rdo_Mapper implements Countable
      *
      * table: The database table or view that this Mapper manages.
      *
-     * tableDefinition: The Horde_Db_Adapter_Abstract_TableDefinition object describing
+     * tableDefinition: The Horde_Db_Adapter_Base_TableDefinition object describing
      * the table or view this Mapper manages.
      *
      * fields: Array of all field names that are loaded up front
@@ -118,10 +123,6 @@ abstract class Horde_Rdo_Mapper implements Countable
     public function __get($key)
     {
         switch ($key) {
-        case 'adapter':
-            $this->adapter = $this->getAdapter();
-            return $this->adapter;
-
         case 'inflector':
             $this->inflector = new Horde_Support_Inflector();
             return $this->inflector;
@@ -153,35 +154,6 @@ abstract class Horde_Rdo_Mapper implements Countable
     }
 
     /**
-     * Associate an adapter with this mapper. Not needed in the
-     * general case if getAdapter() is overridden in the concrete
-     * Mapper implementation.
-     *
-     * @param Horde_Db_Adapter $adapter Horde_Db_Adapter to store objects.
-     *
-     * @see getAdapter()
-     */
-    public function setAdapter($adapter)
-    {
-        $this->adapter = $adapter;
-    }
-
-    /**
-     * getAdapter() must be overridden by Horde_Rdo_Mapper subclasses
-     * if they don't provide $adapter in some other way (by calling
-     * setAdapter() or on construction, for example), and there is no
-     * global Adapter.
-     *
-     * @see setAdapter()
-     *
-     * @return Horde_Db_Adapter The adapter for storing this Mapper's objects.
-     */
-    public function getAdapter()
-    {
-        throw new Horde_Rdo_Exception('You must override getAdapter() or assign a Horde_Db_Adapter by calling setAdapter().');
-    }
-
-    /**
      * Create an instance of $this->_classname from a set of data.
      *
      * @param array $fields Field names/default values for the new object.
@@ -242,7 +214,10 @@ abstract class Horde_Rdo_Mapper implements Countable
         if (count($relationships)) {
             foreach ($this->relationships as $relationship => $rel) {
                 if (isset($rel['mapper'])) {
-                    $m = new $rel['mapper']();
+                    // @TODO - should be getting this instance from somewhere
+                    // else external, and not passing the adapter along
+                    // automatically.
+                    $m = new $rel['mapper']($this->adapter);
                 } else {
                     $m = $this->tableToMapper($relationship);
                     if (is_null($m)) {
index 7b0d106..26f6502 100644 (file)
@@ -126,7 +126,10 @@ class Horde_Rdo_Query
             // Add all non-lazy relationships.
             foreach ($mapper->relationships as $relationship => $rel) {
                 if (isset($rel['mapper'])) {
-                    $m = new $rel['mapper']();
+                    // @TODO - should be getting this instance from somewhere
+                    // else external, and not passing the adapter along
+                    // automatically.
+                    $m = new $rel['mapper']($this->mapper->adapter);
                 } else {
                     $m = $this->mapper->tableToMapper($relationship);
                     if (is_null($m)) {