public function testCopyAndDeleteObject() { $objectList = new Object_List(); $objectList->setCondition("o_key like '%_data%' and o_type = 'object'"); $objects = $objectList->load(); $parent = $objects[0]; $this->assertTrue($parent instanceof Object_Unittest); //remove childs if there are some if ($parent->hasChilds()) { foreach ($parent->getChilds() as $child) { $child->delete(); } } $this->assertFalse($parent->hasChilds()); $service = new Object_Service(User::getById(1)); //copy as child $service->copyAsChild($parent, $parent); $this->assertTrue($parent->hasChilds()); $this->assertTrue(count($parent->getChilds()) == 1); //copy as child no. 2 $service->copyAsChild($parent, $parent); $this->assertTrue($parent->hasChilds()); $this->assertTrue(count($parent->getChilds()) == 2); $childs = $parent->getChilds(); //load all in case of lazy loading fields Object_Service::loadAllObjectFields($parent); Object_Service::loadAllObjectFields($childs[0]); Object_Service::loadAllObjectFields($childs[1]); $this->assertTrue(Test_Tool::objectsAreEqual($parent, $childs[0], true)); $this->assertTrue(Test_Tool::objectsAreEqual($parent, $childs[1], true)); //copy recursivley $rootNode = Object_Abstract::getById(1); $copy = $service->copyRecursive($rootNode, $parent); $this->assertTrue($copy->hasChilds()); Object_Service::loadAllObjectFields($copy); $this->assertTrue(count($copy->getChilds()) == 2); $this->assertTrue(Test_Tool::objectsAreEqual($parent, $copy, true)); //create empty object $emptyObject = new Object_Unittest(); $emptyObject->setOmitMandatoryCheck(true); $emptyObject->setParentId(1); $emptyObject->setUserOwner(1); $emptyObject->setUserModification(1); $emptyObject->setCreationDate(time()); $emptyObject->setKey(uniqid() . rand(10, 99)); $emptyObject->save(); $emptyObject->setOmitMandatoryCheck(false); $this->assertFalse(Test_Tool::objectsAreEqual($emptyObject, $copy, true)); //copy contents $emptyObject = $service->copyContents($emptyObject, $copy); $this->assertTrue(Test_Tool::objectsAreEqual($emptyObject, $copy, true)); //todo copy contents must fail if types differ //delete recusively $shouldBeDeleted[] = $copy->getId(); $childs = $copy->getChilds(); foreach ($childs as $child) { $shouldBeDeleted[] = $child->getId(); } $copy->delete(); foreach ($shouldBeDeleted as $id) { $o = Object_Abstract::getById($id); $this->assertFalse($o instanceof Object_Abstract); } }
/** * @param int $id * @return Webservice_Data_Object_Concrete_Out */ public function getObjectConcreteById($id) { try { $object = Object_Concrete::getById($id); if ($object instanceof Object_Concrete) { // load all data (eg. lazy loaded fields like multihref, object, ...) Object_Service::loadAllObjectFields($object); $apiObject = Webservice_Data_Mapper::map($object, "Webservice_Data_Object_Concrete_Out", "out"); return $apiObject; } throw new Exception("Object with given ID (" . $id . ") does not exist."); } catch (Exception $e) { Logger::error($e); throw $e; } }
/** * @static * @param Element_Interface $element * @return Element_Interface */ public static function loadAllFields(Element_Interface $element) { if ($element instanceof Document) { Document_Service::loadAllDocumentFields($element); } else { if ($element instanceof Object_Concrete) { Object_Service::loadAllObjectFields($element); } } return $element; }