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:
/**
- * 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',
);
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',
);
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',
);
protected $_table = 'clotho_resource_availability';
-
}
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";
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
return $doc->saveXML();
}
-
}
-$im = new XmlItemMapper();
+$im = new XmlItemMapper($conf['adapter']);
-$i = $im->find(1);
+$i = $im->findOne(1);
echo $i->toXml();
// 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";
// 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";
// 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";
// 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";
}
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";
*/
@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();
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();
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";
<?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'));
// 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)) {
* $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
* 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;
*/
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
*
* 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
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;
}
/**
- * 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.
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)) {
// 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)) {