diff options
Diffstat (limited to 'engine/lib/export.php')
| -rw-r--r-- | engine/lib/export.php | 165 |
1 files changed, 66 insertions, 99 deletions
diff --git a/engine/lib/export.php b/engine/lib/export.php index e3acace5f..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 = get_entities_from_metadata("import_uuid", $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);
\ No newline at end of file +elgg_register_event_handler('init', 'system', 'export_init', 100); |
