aboutsummaryrefslogtreecommitdiff
path: root/engine/lib/export.php
diff options
context:
space:
mode:
Diffstat (limited to 'engine/lib/export.php')
-rw-r--r--engine/lib/export.php165
1 files changed, 66 insertions, 99 deletions
diff --git a/engine/lib/export.php b/engine/lib/export.php
index c541b583b..ecc894e63 100644
--- a/engine/lib/export.php
+++ b/engine/lib/export.php
@@ -2,71 +2,16 @@
/**
* Elgg Data import export functionality.
*
- * @package Elgg
- * @subpackage Core
- * @author Curverider Ltd
- * @link http://elgg.org/
+ * @package Elgg.Core
+ * @subpackage DataModel.Export
*/
/**
- * Define an interface for all ODD exportable objects.
- *
- * @package Elgg
- * @subpackage Core
- * @author Curverider Ltd
- */
-interface Exportable {
- /**
- * This must take the contents of the object and convert it to exportable ODD
- * @return object or array of objects.
- */
- public function export();
-
- /**
- * Return a list of all fields that can be exported.
- * This should be used as the basis for the values returned by export()
- */
- public function getExportableValues();
-}
-
-/**
- * Define an interface for all ODD importable objects.
- * @author Curverider Ltd
- */
-interface Importable {
- /**
- * Accepts an array of data to import, this data is parsed from the XML produced by export.
- * The function should return the constructed object data, or NULL.
- *
- * @param ODD $data
- * @return bool
- * @throws ImportException if there was a critical error importing data.
- */
- public function import(ODD $data);
-}
-
-/**
- * Export exception
- *
- * @package Elgg
- * @subpackage Exceptions
- *
- */
-class ExportException extends DataFormatException {}
-
-/**
- * Import exception
- *
- * @package Elgg
- * @subpackage Exceptions
- */
-class ImportException extends DataFormatException {}
-
-/**
* Get a UUID from a given object.
*
- * @param $object The object either an ElggEntity, ElggRelationship or ElggExtender
- * @return the UUID or false
+ * @param mixed $object The object either an ElggEntity, ElggRelationship or ElggExtender
+ *
+ * @return string|false the UUID or false
*/
function get_uuid_from_object($object) {
if ($object instanceof ElggEntity) {
@@ -74,9 +19,9 @@ function get_uuid_from_object($object) {
} else if ($object instanceof ElggExtender) {
$type = $object->type;
if ($type == 'volatile') {
- $uuid = guid_to_uuid($object->entity_guid). $type . "/{$object->name}/";
+ $uuid = guid_to_uuid($object->entity_guid) . $type . "/{$object->name}/";
} else {
- $uuid = guid_to_uuid($object->entity_guid). $type . "/{$object->id}/";
+ $uuid = guid_to_uuid($object->entity_guid) . $type . "/{$object->id}/";
}
return $uuid;
@@ -91,22 +36,22 @@ function get_uuid_from_object($object) {
* Generate a UUID from a given GUID.
*
* @param int $guid The GUID of an object.
+ *
+ * @return string
*/
function guid_to_uuid($guid) {
- global $CONFIG;
-
- return $CONFIG->wwwroot . "export/opendd/$guid/";
+ return elgg_get_site_url() . "export/opendd/$guid/";
}
/**
* Test to see if a given uuid is for this domain, returning true if so.
- * @param $uuid
+ *
+ * @param string $uuid A unique ID
+ *
* @return bool
*/
function is_uuid_this_domain($uuid) {
- global $CONFIG;
-
- if (strpos($uuid, $CONFIG->wwwroot) === 0) {
+ if (strpos($uuid, elgg_get_site_url()) === 0) {
return true;
}
@@ -116,12 +61,15 @@ function is_uuid_this_domain($uuid) {
/**
* This function attempts to retrieve a previously imported entity via its UUID.
*
- * @param $uuid
+ * @param string $uuid A unique ID
+ *
+ * @return ElggEntity|false
*/
function get_entity_from_uuid($uuid) {
$uuid = sanitise_string($uuid);
- $entities = elgg_get_entities_from_metadata(array('metadata_name' => 'import_uuid', 'metadata_value' => $uuid));
+ $options = array('metadata_name' => 'import_uuid', 'metadata_value' => $uuid);
+ $entities = elgg_get_entities_from_metadata($options);
if ($entities) {
return $entities[0];
@@ -133,14 +81,17 @@ function get_entity_from_uuid($uuid) {
/**
* Tag a previously created guid with the uuid it was imported on.
*
- * @param int $guid
- * @param string $uuid
+ * @param int $guid A GUID
+ * @param string $uuid A Unique ID
+ *
+ * @return bool
*/
function add_uuid_to_guid($guid, $uuid) {
$guid = (int)$guid;
$uuid = sanitise_string($uuid);
- return create_metadata($guid, "import_uuid", $uuid);
+ $result = create_metadata($guid, "import_uuid", $uuid);
+ return (bool)$result;
}
@@ -154,40 +105,50 @@ $IMPORTED_OBJECT_COUNTER = 0;
* If nobody processes the top level element, the sub level elements are processed.
*
* @param ODD $odd The odd element to process
+ *
+ * @return bool
+ * @access private
*/
-function __process_element(ODD $odd) {
+function _process_element(ODD $odd) {
global $IMPORTED_DATA, $IMPORTED_OBJECT_COUNTER;
// See if anyone handles this element, return true if it is.
+ $to_be_serialised = null;
if ($odd) {
- $handled = trigger_plugin_hook("import", "all", array("element" => $odd), $to_be_serialised);
- }
+ $handled = elgg_trigger_plugin_hook("import", "all", array("element" => $odd), $to_be_serialised);
- // If not, then see if any of its sub elements are handled
- if ($handled) {
- // Increment validation counter
- $IMPORTED_OBJECT_COUNTER ++;
- // Return the constructed object
- $IMPORTED_DATA[] = $handled;
+ // If not, then see if any of its sub elements are handled
+ if ($handled) {
+ // Increment validation counter
+ $IMPORTED_OBJECT_COUNTER ++;
+ // Return the constructed object
+ $IMPORTED_DATA[] = $handled;
- return true;
+ return true;
+ }
}
return false;
}
+/**
+ * Exports an entity as an array
+ *
+ * @param int $guid Entity GUID
+ *
+ * @return array
+ * @throws ExportException
+ * @access private
+ */
function exportAsArray($guid) {
$guid = (int)$guid;
- // Initialise the array
- $to_be_serialised = array();
-
// Trigger a hook to
- $to_be_serialised = trigger_plugin_hook("export", "all", array("guid" => $guid), $to_be_serialised);
+ $to_be_serialised = elgg_trigger_plugin_hook("export", "all", array("guid" => $guid), array());
// Sanity check
- if ((!is_array($to_be_serialised)) || (count($to_be_serialised)==0)) {
- throw new ExportException(sprintf(elgg_echo('ExportException:NoSuchEntity'), $guid));
+ if ((!is_array($to_be_serialised)) || (count($to_be_serialised) == 0)) {
+ throw new ExportException(elgg_echo('ExportException:NoSuchEntity', array($guid)));
}
return $to_be_serialised;
@@ -201,10 +162,11 @@ function exportAsArray($guid) {
* This function makes use of the "serialise" plugin hook, which is passed an array to which plugins
* should add data to be serialised to.
*
- * @see ElggEntity for an example of its usage.
* @param int $guid The GUID.
- * @param ODDWrapperFactory $wrapper Optional wrapper permitting the export process to embed ODD in other document formats.
- * @return xml
+ *
+ * @return string XML
+ * @see ElggEntity for an example of its usage.
+ * @access private
*/
function export($guid) {
$odd = new ODDDocument(exportAsArray($guid));
@@ -216,9 +178,11 @@ function export($guid) {
* Import an XML serialisation of an object.
* This will make a best attempt at importing a given xml doc.
*
- * @param string $xml
+ * @param string $xml XML string
+ *
* @return bool
- * @throws Exception if there was a problem importing the data.
+ * @throws ImportException if there was a problem importing the data.
+ * @access private
*/
function import($xml) {
global $IMPORTED_DATA, $IMPORTED_OBJECT_COUNTER;
@@ -232,10 +196,10 @@ function import($xml) {
}
foreach ($document as $element) {
- __process_element($element);
+ _process_element($element);
}
- if ($IMPORTED_OBJECT_COUNTER!= count($IMPORTED_DATA)) {
+ if ($IMPORTED_OBJECT_COUNTER != count($IMPORTED_DATA)) {
throw new ImportException(elgg_echo('ImportException:NotAllImported'));
}
@@ -245,12 +209,15 @@ function import($xml) {
/**
* Register the OpenDD import action
+ *
+ * @return void
+ * @access private
*/
function export_init() {
global $CONFIG;
- register_action("import/opendd", false);
+ elgg_register_action("import/opendd");
}
// Register a startup event
-register_elgg_event_handler('init', 'system', 'export_init', 100);
+elgg_register_event_handler('init', 'system', 'export_init', 100);