/** * Saves a new object * @param $object Object - a new object * @return Newly generated object with its id set */ function save(&$object) { // Fill object Fulltext index $fullTextIndex = $this->generateFullTextIndex($object); $object->setFullTextIndex($fullTextIndex); // Coordinate transaction $icfDatabase = new IcfDatabase(); $conn = $icfDatabase->dbOpen(); $conn->StartTrans(); // Save object $objectMapper = new ObjectMapper(); $objectMapper->setConnection($conn); $object =& $objectMapper->save($object); // Save attributes $objectAttributeMapper = new ObjectAttributeMapper(); $objectAttributeMapper->setConnection($conn); $objectAttributeArray =& $object->getAttributes(); foreach ($objectAttributeArray as $objectAttribute) { $objectAttribute->setObjectID($object->getId()); $objectAttributeMapper->save($objectAttribute); } // Save folders $objectFolderMapper = new ObjectFolderMapper(); $objectFolderMapper->setConnection($conn); $objectFolderArray =& $object->getObjectFolders(); foreach ($objectFolderArray as $objectFolder) { $objectFolder->setObjectID($object->getId()); $objectFolderMapper->save($objectFolder); } // Save relationships $objectRelationMapper = new ObjectRelationMapper(); $objectRelationMapper->setConnection($conn); $objectRelationArray =& $object->getObjectRelations(); foreach ($objectRelationArray as $objectRelation) { /* @var $objectRelation ObjectRelation */ $objectRelation->setParentID($object->getId()); $objectRelationMapper->save($objectRelation); } // Close transaction $conn->completeTrans(); $icfDatabase->dbClose($conn); return $object; }