/** * Get the host object of $this * * @param CExObject $ex_object The ExObject to get the host object of * * @return CMbObject|null */ function getHostObject(CExObject $ex_object) { // Load the list of objects /** @var CMbObject[] $objects */ $objects = array(); // Links are stored if ($ex_object->_id) { $links = $ex_object->loadRefsLinks(true); // Direct reference foreach ($links as $_link) { $objects[] = $_link->loadTargetObject(); } } else { $objects = array($ex_object->_ref_object, $ex_object->_ref_reference_object_1, $ex_object->_ref_reference_object_2); } // Direct reference foreach ($objects as $_object) { if ($this->host_class == $_object->_class) { return $this->_ref_host_object = $_object; } } // Indirect references foreach ($objects as $_object) { $_obj = $_object->getRelatedObjectOfClass($this->host_class); if ($_obj && $_obj->_id) { return $this->_ref_host_object = $_obj; } } return $this->_ref_host_object = new $this->host_class(); }
} else { $ex_object->group_id = CGroups::loadCurrent()->_id; } // Host and reference objects $ex_object->setObject($object); if (!$ex_object->_id) { if (!$ex_object->reference_id && !$ex_object->reference_class) { $reference = $ex_class_event->resolveReferenceObject($object, 1); $ex_object->setReferenceObject_1($reference); } if (!$ex_object->reference2_id && !$ex_object->reference2_class) { $reference = $ex_class_event->resolveReferenceObject($object, 2); $ex_object->setReferenceObject_2($reference); } } else { $ex_object->loadRefsLinks(); } $ex_object->loadRefGroup(); // loadAllFwdRefs ne marche pas bien (a cause de la clé primaire) foreach ($ex_object->_specs as $_field => $_spec) { if ($_spec instanceof CRefSpec && $_field != $ex_object->_spec->key) { $class = $_spec->meta ? $ex_object->{$_spec->meta} : $_spec->class; if (!$class) { continue; } /** @var CMbObject $obj */ $obj = new $class(); $obj->load($ex_object->{$_field}); $ex_object->_fwd[$_field] = $obj; } }