aboutsummaryrefslogtreecommitdiff
path: root/engine/classes/ElggData.php
diff options
context:
space:
mode:
Diffstat (limited to 'engine/classes/ElggData.php')
-rw-r--r--engine/classes/ElggData.php146
1 files changed, 122 insertions, 24 deletions
diff --git a/engine/classes/ElggData.php b/engine/classes/ElggData.php
index fbc11881a..4f843cde4 100644
--- a/engine/classes/ElggData.php
+++ b/engine/classes/ElggData.php
@@ -1,10 +1,21 @@
<?php
+/**
+ * A generic class that contains shared code b/w
+ * ElggExtender, ElggEntity, and ElggRelationship
+ *
+ * @package Elgg.Core
+ * @subpackage DataModel
+ *
+ * @property int $owner_guid
+ * @property int $time_created
+ */
abstract class ElggData implements
Loggable, // Can events related to this object class be logged
Iterator, // Override foreach behaviour
- ArrayAccess // Override for array access
+ ArrayAccess, // Override for array access
+ Exportable
{
-
+
/**
* The main attributes of an entity.
* Holds attributes to save to database
@@ -14,37 +25,121 @@ abstract class ElggData implements
* Any field not appearing in this will be viewed as a
*/
protected $attributes = array();
-
+
+ // @codingStandardsIgnoreStart
+ /**
+ * Initialise the attributes array.
+ *
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * @param bool $pre18_api Compatibility for subclassing in 1.7 -> 1.8 change.
+ * Passing true (default) emits a deprecation notice.
+ * Passing false returns false. Core constructors always pass false.
+ * Does nothing either way since attributes are initialized by the time
+ * this is called.
+ * @return void
+ * @deprecated 1.8 Use initializeAttributes()
+ */
+ protected function initialise_attributes($pre18_api = true) {
+ if ($pre18_api) {
+ elgg_deprecated_notice('initialise_attributes() is deprecated by initializeAttributes()', 1.8);
+ }
+ }
+ // @codingStandardsIgnoreEnd
+
+ /**
+ * Initialize the attributes array.
+ *
+ * This is vital to distinguish between metadata and base parameters.
+ *
+ * @return void
+ */
protected function initializeAttributes() {
- $this->attributes['time_created'] = time();
+ // Create attributes array if not already created
+ if (!is_array($this->attributes)) {
+ $this->attributes = array();
+ }
+
+ $this->attributes['time_created'] = NULL;
}
-
+
/**
- * Get a URL for this object
- *
- * @return string
+ * Return an attribute or a piece of metadata.
+ *
+ * @param string $name Name
+ *
+ * @return mixed
*/
- abstract public function getURL();
-
+ public function __get($name) {
+ return $this->get($name);
+ }
+
/**
- * Return the guid of the entity's owner.
+ * Set an attribute or a piece of metadata.
*
- * @return int The owner GUID
+ * @param string $name Name
+ * @param mixed $value Value
+ *
+ * @return mixed
*/
- public function getOwner() {
- return $this->owner_guid;
+ public function __set($name, $value) {
+ return $this->set($name, $value);
}
/**
- * Returns the ElggEntity or child object of the owner of the entity.
+ * Test if property is set either as an attribute or metadata.
+ *
+ * @tip Use isset($entity->property)
+ *
+ * @param string $name The name of the attribute or metadata.
*
- * @return ElggEntity The owning user
+ * @return bool
*/
- public function getOwnerEntity() {
- return get_entity($this->owner_guid);
+ function __isset($name) {
+ return $this->$name !== NULL;
}
+
+ /**
+ * Fetch the specified attribute
+ *
+ * @param string $name The attribute to fetch
+ *
+ * @return mixed The attribute, if it exists. Otherwise, null.
+ */
+ abstract protected function get($name);
+
+ /**
+ * Set the specified attribute
+ *
+ * @param string $name The attribute to set
+ * @param mixed $value The value to set it to
+ *
+ * @return bool The success of your set function?
+ */
+ abstract protected function set($name, $value);
+
+ /**
+ * Get a URL for this object
+ *
+ * @return string
+ */
+ abstract public function getURL();
+
+ /**
+ * Save this data to the appropriate database table.
+ *
+ * @return bool
+ */
+ abstract public function save();
/**
+ * Delete this data.
+ *
+ * @return bool
+ */
+ abstract public function delete();
+
+ /**
* Returns the UNIX epoch time that this entity was created
*
* @return int UNIX epoch time
@@ -52,7 +147,7 @@ abstract class ElggData implements
public function getTimeCreated() {
return $this->time_created;
}
-
+
/*
* SYSTEM LOG INTERFACE
*/
@@ -70,8 +165,10 @@ abstract class ElggData implements
* Return the GUID of the owner of this object.
*
* @return int
+ * @deprecated 1.8 Use getOwnerGUID() instead
*/
public function getObjectOwnerGUID() {
+ elgg_deprecated_notice("getObjectOwnerGUID() was deprecated. Use getOwnerGUID().", 1.8);
return $this->owner_guid;
}
@@ -101,7 +198,7 @@ abstract class ElggData implements
*
* @see Iterator::current()
*
- * @return void
+ * @return mixed
*/
public function current() {
return current($this->attributes);
@@ -112,7 +209,7 @@ abstract class ElggData implements
*
* @see Iterator::key()
*
- * @return void
+ * @return string
*/
public function key() {
return key($this->attributes);
@@ -134,7 +231,7 @@ abstract class ElggData implements
*
* @see Iterator::valid()
*
- * @return void
+ * @return bool
*/
public function valid() {
return $this->valid;
@@ -172,12 +269,13 @@ abstract class ElggData implements
*
* @param mixed $key Name
*
- * @return void
+ * @return mixed
*/
public function offsetGet($key) {
if (array_key_exists($key, $this->attributes)) {
return $this->attributes[$key];
}
+ return null;
}
/**
@@ -208,4 +306,4 @@ abstract class ElggData implements
public function offsetExists($offset) {
return array_key_exists($offset, $this->attributes);
}
-} \ No newline at end of file
+}