/** * Copies the specified object to the same folder, with optional $destinationName. * * @param eZContentObject $object * @param eZContentObject $newParentNode * @param string $destinationName * @return bool */ protected function copyObjectSameDirectory($object, $newParentNode, $destinationName = null) { $object = $object->ContentObject; $newParentNodeID = $newParentNode->attribute('node_id'); $classID = $object->attribute('contentclass_id'); if (!$newParentNode->checkAccess('create', $classID)) { $objectID = $object->attribute('id'); return false; } $db = eZDB::instance(); $db->begin(); $newObject = $object->copy(true); // We should reset section that will be updated in updateSectionID(). // If sectionID is 0 than the object has been newly created $newObject->setAttribute('section_id', 0); // @as 2009-01-08 - Added check for destination name the same as the source name // (this was causing problems with nodes disappearing after renaming) $newName = $destinationName; if ($destinationName === null || strtolower($destinationName) === strtolower($object->attribute('name'))) { $newName = 'Copy of ' . $object->attribute('name'); } // @todo @as avoid using [0] (could be another index in some classes) $contentObjectAttributes = $newObject->contentObjectAttributes(); $contentObjectAttributes[0]->setAttribute('data_text', $newName); $contentObjectAttributes[0]->store(); $newObject->store(); $curVersion = $newObject->attribute('current_version'); $curVersionObject = $newObject->attribute('current'); $newObjAssignments = $curVersionObject->attribute('node_assignments'); unset($curVersionObject); // remove old node assignments foreach ($newObjAssignments as $assignment) { $assignment->purge(); } // and create a new one $nodeAssignment = eZNodeAssignment::create(array('contentobject_id' => $newObject->attribute('id'), 'contentobject_version' => $curVersion, 'parent_node' => $newParentNodeID, 'is_main' => 1)); $nodeAssignment->store(); // publish the newly created object eZOperationHandler::execute('content', 'publish', array('object_id' => $newObject->attribute('id'), 'version' => $curVersion)); // Update "is_invisible" attribute for the newly created node. $newNode = $newObject->attribute('main_node'); eZContentObjectTreeNode::updateNodeVisibility($newNode, $newParentNode); $db->commit(); return true; }