switch ($operationResult['status']) { case eZModuleOperationInfo::STATUS_HALTED: case eZModuleOperationInfo::STATUS_CANCELLED: $module->redirectToView('trash'); } } $objectID = $object->attribute('id'); $object = eZContentObject::fetch($objectID); $mainNodeID = $object->attribute('main_node_id'); eZContentObjectTrashNode::purgeForObject($objectID); if ($locationAdded) { if ($object->attribute('contentclass_id') == $userClassID) { eZUser::purgeUserCacheByUserId($object->attribute('id')); } } eZContentObject::fixReverseRelations($objectID, 'restore'); $db->commit(); $module->redirectToView('view', array('full', $mainNodeID)); return; } $tpl = eZTemplate::factory(); $res = eZTemplateDesignResource::instance(); $designKeys = array(array('object', $object->attribute('id')), array('remote_id', $object->attribute('remote_id')), array('class', $class->attribute('id')), array('class_identifier', $class->attribute('identifier'))); // Class identifier $res->setKeys($designKeys); $Result = array(); $tpl->setVariable("object", $object); $tpl->setVariable("version", $version); $tpl->setVariable("location", $location); $Result['content'] = $tpl->fetch('design:content/restore.tpl'); $Result['path'] = array(array('uri' => false, 'text' => ezpI18n::tr("kernel/content/restore", "Restore object")), array('uri' => false, 'text' => $object->attribute('name')));
/** * Swap a node with another one * * @param int $nodeID * @param int $selectedNodeID * @param array $nodeIdList * * @return array An array with operation status, always true */ public static function swapNode($nodeID, $selectedNodeID, $nodeIdList = array()) { $userClassIDArray = eZUser::contentClassIDs(); $node = eZContentObjectTreeNode::fetch($nodeID); $selectedNode = eZContentObjectTreeNode::fetch($selectedNodeID); $object = $node->object(); $nodeParentNodeID = $node->attribute('parent_node_id'); $nodeParent = $node->attribute('parent'); $objectID = $object->attribute('id'); $objectVersion = $object->attribute('current_version'); $selectedObject = $selectedNode->object(); $selectedObjectID = $selectedObject->attribute('id'); $selectedObjectVersion = $selectedObject->attribute('current_version'); $selectedNodeParentNodeID = $selectedNode->attribute('parent_node_id'); $selectedNodeParent = $selectedNode->attribute('parent'); $db = eZDB::instance(); $db->begin(); $node->setAttribute('contentobject_id', $selectedObjectID); $node->setAttribute('contentobject_version', $selectedObjectVersion); $selectedNode->setAttribute('contentobject_id', $objectID); $selectedNode->setAttribute('contentobject_version', $objectVersion); // fix main node id if ($node->isMain() && !$selectedNode->isMain()) { $node->setAttribute('main_node_id', $selectedNode->attribute('main_node_id')); $selectedNode->setAttribute('main_node_id', $selectedNode->attribute('node_id')); } else { if ($selectedNode->isMain() && !$node->isMain()) { $selectedNode->setAttribute('main_node_id', $node->attribute('main_node_id')); $node->setAttribute('main_node_id', $node->attribute('node_id')); } } $node->store(); $selectedNode->store(); // clear user policy cache if this was a user object if (in_array($object->attribute('contentclass_id'), $userClassIDArray)) { eZUser::purgeUserCacheByUserId($object->attribute('id')); } if (in_array($selectedObject->attribute('contentclass_id'), $userClassIDArray)) { eZUser::purgeUserCacheByUserId($selectedObject->attribute('id')); } // modify path string $changedOriginalNode = eZContentObjectTreeNode::fetch($nodeID); $changedOriginalNode->updateSubTreePath(); $changedTargetNode = eZContentObjectTreeNode::fetch($selectedNodeID); $changedTargetNode->updateSubTreePath(); // modify section if ($changedOriginalNode->isMain()) { $changedOriginalObject = $changedOriginalNode->object(); $parentObject = $nodeParent->object(); if ($changedOriginalObject->attribute('section_id') != $parentObject->attribute('section_id')) { eZContentObjectTreeNode::assignSectionToSubTree($changedOriginalNode->attribute('main_node_id'), $parentObject->attribute('section_id'), $changedOriginalObject->attribute('section_id')); } } if ($changedTargetNode->isMain()) { $changedTargetObject = $changedTargetNode->object(); $selectedParentObject = $selectedNodeParent->object(); if ($changedTargetObject->attribute('section_id') != $selectedParentObject->attribute('section_id')) { eZContentObjectTreeNode::assignSectionToSubTree($changedTargetNode->attribute('main_node_id'), $selectedParentObject->attribute('section_id'), $changedTargetObject->attribute('section_id')); } } eZContentObject::fixReverseRelations($objectID, 'swap'); eZContentObject::fixReverseRelations($selectedObjectID, 'swap'); $db->commit(); // clear cache for new placement. eZContentCacheManager::clearContentCacheIfNeeded($objectID); eZSearch::swapNode($nodeID, $selectedNodeID, $nodeIdList = array()); return array('status' => true); }
/** * Archives the current object and removes assigned nodes * * Transaction unsafe. If you call several transaction unsafe methods you must enclose * the calls within a db transaction; thus within db->begin and db->commit. * * @param int $nodeID */ function removeThis( $nodeID = null ) { $delID = $this->ID; // Who deletes which content should be logged. eZAudit::writeAudit( 'content-delete', array( 'Object ID' => $delID, 'Content Name' => $this->attribute( 'name' ), 'Comment' => 'Setted archived status for the current object: eZContentObject::remove()' ) ); $nodes = $this->attribute( 'assigned_nodes' ); if ( $nodeID === null or count( $nodes ) <= 1 ) { $db = eZDB::instance(); $db->begin(); $mainNodeKey = false; foreach ( $nodes as $key => $node ) { if ( $node->attribute( 'main_node_id' ) == $node->attribute( 'node_id' ) ) { $mainNodeKey = $key; } else { $node->removeThis(); } } if ( $mainNodeKey !== false ) { $nodes[$mainNodeKey]->removeNodeFromTree( true ); } $this->setAttribute( 'status', eZContentObject::STATUS_ARCHIVED ); eZSearch::removeObjectById( $delID ); $this->store(); eZContentObject::fixReverseRelations( $delID, 'trash' ); // Delete stored attribute from other tables $db->commit(); } else if ( $nodeID !== null ) { $node = eZContentObjectTreeNode::fetch( $nodeID , false ); if ( is_object( $node ) ) { if ( $node->attribute( 'main_node_id' ) == $nodeID ) { $db = eZDB::instance(); $db->begin(); foreach ( $additionalNodes as $additionalNode ) { if ( $additionalNode->attribute( 'node_id' ) != $node->attribute( 'main_node_id' ) ) { $additionalNode->remove(); } } $node->removeNodeFromTree( true ); $this->setAttribute( 'status', eZContentObject::STATUS_ARCHIVED ); eZSearch::removeObjectById( $delID ); $this->store(); eZContentObject::fixReverseRelations( $delID, 'trash' ); $db->commit(); } else { eZContentObjectTreeNode::removeNode( $nodeID ); } } } else { eZContentObjectTreeNode::removeNode( $nodeID ); } }