/** * Import midgard_blob unserialized with midgard_replicator::unserialize() * * This method does ACL checks and triggers watchers etc. * * @param midgard_blob $unserialized_object midgard_blob gotten from midgard_replicator::unserialize() * @param string $xml XML the midgard_blob was unserialized from * @param boolean $use_force set use of force for the midcom_helper_replicator_import_from_xml() call * @return boolean indicating success/failure */ function import_blob(&$unserialized_object, &$xml, $use_force = false) { if (!is_a($unserialized_object, 'midgard_blob')) { debug_add("You should use the *import* method to import normal objects, passing control there", MIDCOM_LOG_WARNING); return $this->import($unserialized_object, $use_force); } // We need this helper (workaround Zend bug) if (!function_exists('midcom_helper_replicator_import_object')) { midcom::get('componentloader')->load('midcom.helper.replicator'); } try { $acl_object = midcom::get('dbfactory')->get_object_by_guid($unserialized_object->parentguid); } catch (midcom_error $e) { debug_add("Could not get parent object (GUID: {$unserialized_object->parentguid}), aborting", MIDCOM_LOG_ERROR); return false; } // midgard_blob has no action, update is the best check for allowing import of blob data if (!midcom_baseclasses_core_dbobject::update_pre_checks($acl_object)) { $parent_class = get_class($acl_object); debug_add("parent ({$parent_class} {$acl_object->guid}) update pre-flight check returned false", MIDCOM_LOG_ERROR); return false; } // Actual import // NOTE: midgard_replicator::import_from_xml returns void, which evaluates to false, check midcom_connection::get_error instead midcom_helper_replicator_import_from_xml($xml, $use_force); if (midcom_connection::get_error() !== MGD_ERR_OK) { debug_add('midcom_helper_replicator_import_from_xml returned false, errstr: ' . midcom_connection::get_error_string(), MIDCOM_LOG_ERROR); return false; } // Trigger parent updated midcom_baseclasses_core_dbobject::update_post_ops($acl_object); // And also imported midcom::get('componentloader')->trigger_watches(MIDCOM_OPERATION_DBA_IMPORT, $acl_object); return true; }