diff options
Diffstat (limited to 'engine/lib/extender.php')
-rw-r--r-- | engine/lib/extender.php | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/engine/lib/extender.php b/engine/lib/extender.php new file mode 100644 index 000000000..f15aaa1ee --- /dev/null +++ b/engine/lib/extender.php @@ -0,0 +1,141 @@ +<?php + /** + * Elgg Entity Extender. + * This file contains ways of extending an Elgg entity in custom ways. + * + * @package Elgg + * @subpackage Core + * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2 + * @author Marcus Povey + * @copyright Curverider Ltd 2008 + * @link http://elgg.org/ + */ + + /** + * @class ElggExtender + * @author Marcus Povey + */ + abstract class ElggExtender implements Exportable, Importable + { + /** + * This contains the site's main properties (id, etc) + * @var array + */ + protected $attributes; + + protected function get($name) { + if (isset($this->attributes[$name])) { + + // Sanitise value if necessary + if ($name=='value') + { + switch ($this->attributes['value_type']) + { + case 'integer' : return (int)$this->attributes['value']; + case 'tag' : + case 'text' : + case 'file' : return sanitise_string($this->attributes['value']); + + default : throw new InstallationException("Type {$this->attributes['value_type']} is not supported. This indicates an error in your installation, most likely caused by an incomplete upgrade."); + } + } + + return $this->attributes[$name]; + } + return null; + } + + protected function set($name, $value) { + $this->attributes[$name] = $value; + return true; + } + + /** + * Return the owner of this annotation. + * + * @return mixed + */ + public function getOwner() + { + return get_user($this->owner_guid); + } + + /** + * Save this data to the appropriate database table. + */ + abstract public function save(); + + /** + * Delete this data. + */ + abstract public function delete(); + + public function export() + { + $tmp = new stdClass; + $tmp->attributes = $this->attributes; + $tmp->attributes['owner_uuid'] = guid_to_uuid($this->owner_guid); + return $tmp; + } + + public function import(array $data, $version = 1) + { + if ($version == 1) + { + $entity_uuid = NULL; + + // Get attributes + foreach ($data['elements'][0]['elements'] as $attr) + { + $name = strtolower($attr['name']); + $text = $attr['text']; + + switch ($name) + { + case 'entity_uuid' : $entity_uuid = $text; break; + default : $this->attributes[$name] = $text; + } + + // See if this entity has already been imported, if so then we need to link to it + $entity = get_entity_from_uuid($entity_uuid); + if (!$entity) + throw new ImportException("Sorry $entity_uuid was not found. Could not import annotation."); + + // Set owner ID + $this->attributes['owner_guid'] = $entity->getGUID(); + + return $this; + } + } + else + throw new ImportException("Unsupported version ($version) passed to ElggAnnotation::import()"); + } + } + + /** + * Handler called by trigger_plugin_hook on the "import" event. + */ + function import_extender_plugin_hook($hook, $entity_type, $returnvalue, $params) + { + $name = $params['name']; + $element = $params['element']; + + $tmp = NULL; + + switch ($name) + { + case 'ElggAnnotation' : $tmp = new ElggAnnotation(); break; + case 'ElggMetadata' : $tmp = new ElggMetadata(); break; + } + + if ($tmp) + { + $tmp->import($element); + return $tmp; + } + } + + /** Register the hook */ + register_plugin_hook("import", "all", "import_extender_plugin_hook", 2); + +?>
\ No newline at end of file |