From 80462b4952c73923a369dfdbcf82e77cf2f544b9 Mon Sep 17 00:00:00 2001 From: icewing Date: Fri, 25 Apr 2008 16:07:52 +0000 Subject: Marcus Povey * Metadata and relationships can now be accessed as arrays git-svn-id: https://code.elgg.org/elgg/trunk@536 36083f99-b078-4883-b0ff-0f9b5a30f544 --- engine/lib/extender.php | 72 ++++++++++++++++++++++++++++++++++++++++- engine/lib/relationships.php | 76 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 145 insertions(+), 3 deletions(-) (limited to 'engine') diff --git a/engine/lib/extender.php b/engine/lib/extender.php index 9762526aa..e1d42efd6 100644 --- a/engine/lib/extender.php +++ b/engine/lib/extender.php @@ -18,7 +18,10 @@ * @package Elgg * @subpackage Core */ - abstract class ElggExtender implements Exportable + abstract class ElggExtender implements + Exportable, + Iterator, // Override foreach behaviour + ArrayAccess // Override for array access { /** * This contains the site's main properties (id, etc) @@ -100,6 +103,8 @@ return can_edit_extender($this->id,$this->type,$user_guid); } + // EXPORTABLE INTERFACE //////////////////////////////////////////////////////////// + /** * Export this object * @@ -115,6 +120,71 @@ return $meta; } + + // ITERATOR INTERFACE ////////////////////////////////////////////////////////////// + /* + * This lets an entity's attributes be displayed using foreach as a normal array. + * Example: http://www.sitepoint.com/print/php5-standard-library + */ + + private $valid = FALSE; + + function rewind() + { + $this->valid = (FALSE !== reset($this->attributes)); + } + + function current() + { + return current($this->attributes); + } + + function key() + { + return key($this->attributes); + } + + function next() + { + $this->valid = (FALSE !== next($this->attributes)); + } + + function valid() + { + return $this->valid; + } + + // ARRAY ACCESS INTERFACE ////////////////////////////////////////////////////////// + /* + * This lets an entity's attributes be accessed like an associative array. + * Example: http://www.sitepoint.com/print/php5-standard-library + */ + + function offsetSet($key, $value) + { + if ( array_key_exists($key, $this->attributes) ) { + $this->attributes[$key] = $value; + } + } + + function offsetGet($key) + { + if ( array_key_exists($key, $this->attributes) ) { + return $this->attributes[$key]; + } + } + + function offsetUnset($key) + { + if ( array_key_exists($key, $this->attributes) ) { + $this->attributes[$key] = ""; // Full unsetting is dangerious for our objects + } + } + + function offsetExists($offset) + { + return array_key_exists($offset, $this->attributes); + } } /** diff --git a/engine/lib/relationships.php b/engine/lib/relationships.php index 592e3ecea..c1d2af71f 100644 --- a/engine/lib/relationships.php +++ b/engine/lib/relationships.php @@ -18,7 +18,11 @@ * @package Elgg * @subpackage Core */ - class ElggRelationship implements Importable, Exportable + class ElggRelationship implements + Importable, + Exportable, + Iterator, // Override foreach behaviour + ArrayAccess // Override for array access { /** * This contains the site's main properties (id, etc) @@ -103,7 +107,8 @@ return delete_relationship($this->id); } - + // EXPORTABLE INTERFACE //////////////////////////////////////////////////////////// + /** * Export this relationship * @@ -122,6 +127,8 @@ ); } + // IMPORTABLE INTERFACE //////////////////////////////////////////////////////////// + /** * Import a relationship * @@ -163,6 +170,71 @@ } } } + + // ITERATOR INTERFACE ////////////////////////////////////////////////////////////// + /* + * This lets an entity's attributes be displayed using foreach as a normal array. + * Example: http://www.sitepoint.com/print/php5-standard-library + */ + + private $valid = FALSE; + + function rewind() + { + $this->valid = (FALSE !== reset($this->attributes)); + } + + function current() + { + return current($this->attributes); + } + + function key() + { + return key($this->attributes); + } + + function next() + { + $this->valid = (FALSE !== next($this->attributes)); + } + + function valid() + { + return $this->valid; + } + + // ARRAY ACCESS INTERFACE ////////////////////////////////////////////////////////// + /* + * This lets an entity's attributes be accessed like an associative array. + * Example: http://www.sitepoint.com/print/php5-standard-library + */ + + function offsetSet($key, $value) + { + if ( array_key_exists($key, $this->attributes) ) { + $this->attributes[$key] = $value; + } + } + + function offsetGet($key) + { + if ( array_key_exists($key, $this->attributes) ) { + return $this->attributes[$key]; + } + } + + function offsetUnset($key) + { + if ( array_key_exists($key, $this->attributes) ) { + $this->attributes[$key] = ""; // Full unsetting is dangerious for our objects + } + } + + function offsetExists($offset) + { + return array_key_exists($offset, $this->attributes); + } } -- cgit v1.2.3