diff options
author | icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2008-03-28 19:18:55 +0000 |
---|---|---|
committer | icewing <icewing@36083f99-b078-4883-b0ff-0f9b5a30f544> | 2008-03-28 19:18:55 +0000 |
commit | 6441a960edc875a0c33fa8bbd735fd1faebaa552 (patch) | |
tree | 4127ac318d37bf0c36b454d1918dadce5e1343d2 /engine/lib | |
parent | 5aa0bbb5bef7265fb570b400f7966b8411295f9e (diff) | |
download | elgg-6441a960edc875a0c33fa8bbd735fd1faebaa552.tar.gz elgg-6441a960edc875a0c33fa8bbd735fd1faebaa552.tar.bz2 |
Marcus Povey <marcus@dushka.co.uk>
* Metadata and Annotations now exported.
git-svn-id: https://code.elgg.org/elgg/trunk@291 36083f99-b078-4883-b0ff-0f9b5a30f544
Diffstat (limited to 'engine/lib')
-rw-r--r-- | engine/lib/annotations.php | 49 | ||||
-rw-r--r-- | engine/lib/api.php | 2 | ||||
-rw-r--r-- | engine/lib/entities.php | 2 | ||||
-rw-r--r-- | engine/lib/export.php | 11 | ||||
-rw-r--r-- | engine/lib/metadata.php | 53 |
5 files changed, 113 insertions, 4 deletions
diff --git a/engine/lib/annotations.php b/engine/lib/annotations.php index e1570ac0d..cceb8fd05 100644 --- a/engine/lib/annotations.php +++ b/engine/lib/annotations.php @@ -16,7 +16,7 @@ * An annotation is similar to metadata each entity can contain more than one of each annotation. * @author Marcus Povey <marcus@dushka.co.uk> */ - class ElggAnnotation + class ElggAnnotation implements Exportable { /** * This contains the site's main properties (id, etc) @@ -105,6 +105,12 @@ return delete_annotation($this->id); } + public function export() + { + $tmp = new stdClass; + $tmp->attributes = $this->attributes; + return $tmp; + } } /** @@ -442,4 +448,45 @@ return delete_data(); } + /** + * Handler called by trigger_plugin_hook on the "export" event. + */ + function export_annotations_plugin_hook($hook, $entity_type, $returnvalue, $params) + { + global $CONFIG; + + // Sanity check values + if ((!is_array($params)) && (!isset($params['guid']))) + throw new InvalidParameterException("GUID has not been specified during export, this should never happen."); + + if (!is_array($returnvalue)) + throw new InvalidParameterException("Entity serialisation function passed a non-array returnvalue parameter"); + + $guid = (int)$params['guid']; + $access = get_access_list(); + + $where = array(); + + if ($guid != 0) + $where[] = "a.entity_guid=$guid"; + + $query = "SELECT a.*, n.string as name, v.string as value from {$CONFIG->dbprefix}annotations a JOIN {$CONFIG->dbprefix}entities e on a.entity_guid = e.guid JOIN {$CONFIG->dbprefix}metastrings v on a.value_id=v.id JOIN {$CONFIG->dbprefix}metastrings n on a.name_id = n.id where "; + foreach ($where as $w) + $query .= " $w and "; + $query .= " (a.access_id in {$access} or (a.access_id = 0 and a.owner_guid = {$_SESSION['id']}))"; // Add access controls + $query .= " order by a.time_created"; // Add order and limit + error_log($query); + $annotations = get_data($query, "row_to_elggannotation"); + + if ($annotations) + { + foreach ($annotations as $a) + $returnvalue[] = $a; + } + + return $returnvalue; + } + + /** Register the hook, ensuring entities are serialised first */ + register_plugin_hook("export", "all", "export_annotations_plugin_hook", 2); ?>
\ No newline at end of file diff --git a/engine/lib/api.php b/engine/lib/api.php index e7d6cc4a1..95bbede01 100644 --- a/engine/lib/api.php +++ b/engine/lib/api.php @@ -17,7 +17,7 @@ * @class GenericResult Result superclass. * @author Marcus Povey <marcus@dushka.co.uk> */ - abstract class GenericResult + abstract class GenericResult implements Exportable { /** * The status of the result. diff --git a/engine/lib/entities.php b/engine/lib/entities.php index 8044b1df9..017e86a74 100644 --- a/engine/lib/entities.php +++ b/engine/lib/entities.php @@ -16,7 +16,7 @@ * This class holds methods for accessing the main entities table. * @author Marcus Povey <marcus@dushka.co.uk> */ - abstract class ElggEntity + abstract class ElggEntity implements Exportable { /** * The main attributes of an entity. diff --git a/engine/lib/export.php b/engine/lib/export.php index 89b5a1ef5..5937a71bc 100644 --- a/engine/lib/export.php +++ b/engine/lib/export.php @@ -11,6 +11,17 @@ */ /** + * Define an interface for all exportable objects. + */ + interface Exportable + { + /** + * This must take the contents of the object and return it as a stdClass. + */ + public function export(); + } + + /** * Export a GUID. * * This function exports a GUID and all information related to it in an XML format. diff --git a/engine/lib/metadata.php b/engine/lib/metadata.php index 4744f6f6f..2c738ebda 100644 --- a/engine/lib/metadata.php +++ b/engine/lib/metadata.php @@ -16,7 +16,7 @@ * This class describes metadata that can be attached to ElggEntities. * @author Marcus Povey <marcus@dushka.co.uk> */ - class ElggMetadata + class ElggMetadata implements Exportable { /** * This contains the site's main properties (id, etc) @@ -106,6 +106,13 @@ { return delete_metadata($this->id); } + + public function export() + { + $tmp = new stdClass; + $tmp->attributes = $this->attributes; + return $tmp; + } } @@ -299,6 +306,21 @@ return get_data("SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where m.entity_guid=$entity_guid and m.name_id='$meta_name' and (m.access_id in {$access} or (m.access_id = 0 and m.owner_guid = {$_SESSION['id']}))", "row_to_elggmetadata"); } + + /** + * Return all the metadata for a given GUID. + * + * @param int $entity_guid + */ + function get_metadata_for_entity($entity_guid) + { + global $CONFIG; + + $entity_guid = (int)$entity_guid; + $access = get_access_list(); + + return get_data("SELECT m.*, n.string as name, v.string as value from {$CONFIG->dbprefix}metadata m JOIN {$CONFIG->dbprefix}metastrings v on m.value_id = v.id JOIN {$CONFIG->dbprefix}metastrings n on m.name_id = n.id where m.entity_guid=$entity_guid and (m.access_id in {$access} or (m.access_id = 0 and m.owner_guid = {$_SESSION['id']}))", "row_to_elggmetadata"); + } /** * Return a list of entities based on the given search criteria. @@ -360,4 +382,33 @@ return delete_data("DELETE from {$CONFIG->dbprefix}metadata where entity_guid=$entity_guid and access_id in {$access} or (access_id = 0 and owner_guid = {$_SESSION['id']})"); } + /** + * Handler called by trigger_plugin_hook on the "export" event. + */ + function export_metadata_plugin_hook($hook, $entity_type, $returnvalue, $params) + { + // Sanity check values + if ((!is_array($params)) && (!isset($params['guid']))) + throw new InvalidParameterException("GUID has not been specified during export, this should never happen."); + + if (!is_array($returnvalue)) + throw new InvalidParameterException("Entity serialisation function passed a non-array returnvalue parameter"); + + $guid = (int)$params['guid']; + + // Get the metadata for the entity + $metadata = get_metadata_for_entity($guid); + + if ($metadata) + { + foreach ($metadata as $m) + $returnvalue[] = $m; + } + + return $returnvalue; + } + + /** Register the hook, ensuring entities are serialised first */ + register_plugin_hook("export", "all", "export_metadata_plugin_hook", 2); + ?>
\ No newline at end of file |