eZContentOperationCollection::swapNode PHP Method

swapNode() public static method

Swap a node with another one
public static swapNode ( integer $nodeID, integer $selectedNodeID, array $nodeIdList = [] ) : array
$nodeID integer
$selectedNodeID integer
$nodeIdList array
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);
    }

Usage Example

Esempio n. 1
0
     if (!$nodeParent || !$selectedNodeParent) {
         return $module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel', array());
     }
     if (!$nodeParent->canMoveTo($selectedObjectClassID)) {
         eZDebug::writeError("Cannot move an object of class {$selectedObjectClassID} to node {$nodeParentNodeID} (no create permission)");
         return $module->handleError(eZError::KERNEL_ACCESS_DENIED, 'kernel', array());
     }
     if (!$selectedNodeParent->canMoveTo($objectClassID)) {
         eZDebug::writeError("Cannot move an object of class {$objectClassID} to node {$selectedNodeParentNodeID} (no create permission)");
         return $module->handleError(eZError::KERNEL_ACCESS_DENIED, 'kernel', array());
     }
     // exchange contentobject ids and versions.
     if (eZOperationHandler::operationIsAvailable('content_swap')) {
         $operationResult = eZOperationHandler::execute('content', 'swap', array('node_id' => $nodeID, 'selected_node_id' => $selectedNodeID, 'node_id_list' => array($nodeID, $selectedNodeID)), null, true);
     } else {
         eZContentOperationCollection::swapNode($nodeID, $selectedNodeID, array($nodeID, $selectedNodeID));
     }
     return $module->redirectToView('view', array($viewMode, $nodeID, $languageCode));
 } else {
     if ($module->isCurrentAction('SwapNodeRequest')) {
         /* This action brings a browse screen up to select with which the selected
          * node should be swapped. It will not actually move the nodes. */
         if (!$module->hasActionParameter('NodeID')) {
             eZDebug::writeError("Missing NodeID parameter for action " . $module->currentAction(), 'content/action');
             return $module->redirectToView('view', array('full', 2));
         }
         $nodeID = $module->actionParameter('NodeID');
         $node = eZContentObjectTreeNode::fetch($nodeID);
         if (!$node) {
             return $module->handleError(eZError::KERNEL_NOT_AVAILABLE, 'kernel', array());
         }