コード例 #1
0
ファイル: _dbfactory.php プロジェクト: nemein/openpsa
 /**
  * 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;
 }