From 28a5d9e2b445583cf648db1c4583c24b004dbcf2 Mon Sep 17 00:00:00 2001 From: Chuck Hagenbuch Date: Mon, 31 May 2010 15:26:44 -0400 Subject: [PATCH] Pass the Horde_Db_Adapter that Mappers use in the constructor, to make it injectable. --- framework/Rdo/examples/Horde/Rdo/Clotho.php | 57 +++++++++------------- framework/Rdo/examples/Horde/Rdo/CountTest.php | 10 ++-- framework/Rdo/examples/Horde/Rdo/DumpXmlTest.php | 12 ++--- .../Rdo/examples/Horde/Rdo/RelationshipTest.php | 10 ++-- framework/Rdo/examples/Horde/Rdo/Task.php | 19 +++----- framework/Rdo/examples/Horde/Rdo/User.php | 18 +++---- framework/Rdo/examples/Horde/Rdo/clotho.data.php | 10 ++-- framework/Rdo/examples/Horde/Rdo/conf.php.dist | 7 +-- framework/Rdo/lib/Horde/Rdo/Base.php | 5 +- framework/Rdo/lib/Horde/Rdo/Mapper.php | 49 +++++-------------- framework/Rdo/lib/Horde/Rdo/Query.php | 5 +- 11 files changed, 78 insertions(+), 124 deletions(-) diff --git a/framework/Rdo/examples/Horde/Rdo/Clotho.php b/framework/Rdo/examples/Horde/Rdo/Clotho.php index f14cb886e..791ad412a 100644 --- a/framework/Rdo/examples/Horde/Rdo/Clotho.php +++ b/framework/Rdo/examples/Horde/Rdo/Clotho.php @@ -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'; - } diff --git a/framework/Rdo/examples/Horde/Rdo/CountTest.php b/framework/Rdo/examples/Horde/Rdo/CountTest.php index 7f0fb209f..3f74df14f 100644 --- a/framework/Rdo/examples/Horde/Rdo/CountTest.php +++ b/framework/Rdo/examples/Horde/Rdo/CountTest.php @@ -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"; diff --git a/framework/Rdo/examples/Horde/Rdo/DumpXmlTest.php b/framework/Rdo/examples/Horde/Rdo/DumpXmlTest.php index 8ccb5a136..b681a5af2 100644 --- a/framework/Rdo/examples/Horde/Rdo/DumpXmlTest.php +++ b/framework/Rdo/examples/Horde/Rdo/DumpXmlTest.php @@ -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(); diff --git a/framework/Rdo/examples/Horde/Rdo/RelationshipTest.php b/framework/Rdo/examples/Horde/Rdo/RelationshipTest.php index a00752839..e8302f297 100644 --- a/framework/Rdo/examples/Horde/Rdo/RelationshipTest.php +++ b/framework/Rdo/examples/Horde/Rdo/RelationshipTest.php @@ -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"; diff --git a/framework/Rdo/examples/Horde/Rdo/Task.php b/framework/Rdo/examples/Horde/Rdo/Task.php index de3131db7..d86dedda6 100644 --- a/framework/Rdo/examples/Horde/Rdo/Task.php +++ b/framework/Rdo/examples/Horde/Rdo/Task.php @@ -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(); diff --git a/framework/Rdo/examples/Horde/Rdo/User.php b/framework/Rdo/examples/Horde/Rdo/User.php index 31ad59635..1aab7274f 100644 --- a/framework/Rdo/examples/Horde/Rdo/User.php +++ b/framework/Rdo/examples/Horde/Rdo/User.php @@ -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(); diff --git a/framework/Rdo/examples/Horde/Rdo/clotho.data.php b/framework/Rdo/examples/Horde/Rdo/clotho.data.php index 77bcb562d..3517e248b 100644 --- a/framework/Rdo/examples/Horde/Rdo/clotho.data.php +++ b/framework/Rdo/examples/Horde/Rdo/clotho.data.php @@ -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"; diff --git a/framework/Rdo/examples/Horde/Rdo/conf.php.dist b/framework/Rdo/examples/Horde/Rdo/conf.php.dist index 1568d9c1a..447f3bdb6 100644 --- a/framework/Rdo/examples/Horde/Rdo/conf.php.dist +++ b/framework/Rdo/examples/Horde/Rdo/conf.php.dist @@ -1,9 +1,4 @@ ':memory')); diff --git a/framework/Rdo/lib/Horde/Rdo/Base.php b/framework/Rdo/lib/Horde/Rdo/Base.php index 80e1e3fb0..750b5cb73 100644 --- a/framework/Rdo/lib/Horde/Rdo/Base.php +++ b/framework/Rdo/lib/Horde/Rdo/Base.php @@ -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)) { diff --git a/framework/Rdo/lib/Horde/Rdo/Mapper.php b/framework/Rdo/lib/Horde/Rdo/Mapper.php index ddb9f6968..649930691 100644 --- a/framework/Rdo/lib/Horde/Rdo/Mapper.php +++ b/framework/Rdo/lib/Horde/Rdo/Mapper.php @@ -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)) { diff --git a/framework/Rdo/lib/Horde/Rdo/Query.php b/framework/Rdo/lib/Horde/Rdo/Query.php index 7b0d10644..26f6502d5 100644 --- a/framework/Rdo/lib/Horde/Rdo/Query.php +++ b/framework/Rdo/lib/Horde/Rdo/Query.php @@ -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)) { -- 2.11.0