eZContentOperationCollection::removeOldNodes PHP Method

removeOldNodes() public static method

public static removeOldNodes ( $objectID, $versionNum )
    public static function removeOldNodes($objectID, $versionNum)
    {
        $object = eZContentObject::fetch($objectID);
        if (!$object instanceof eZContentObject) {
            eZDebug::writeError('Unable to find object #' . $objectID, __METHOD__);
            return;
        }
        $version = $object->version($versionNum);
        if (!$version instanceof eZContentObjectVersion) {
            eZDebug::writeError('Unable to find version #' . $versionNum . ' for object #' . $objectID, __METHOD__);
            return;
        }
        $moveToTrash = true;
        $assignedExistingNodes = $object->attribute('assigned_nodes');
        $curentVersionNodeAssignments = $version->attribute('node_assignments');
        $removeParentNodeList = array();
        $removeAssignmentsList = array();
        foreach ($curentVersionNodeAssignments as $nodeAssignment) {
            $nodeAssignmentOpcode = $nodeAssignment->attribute('op_code');
            if ($nodeAssignmentOpcode == eZNodeAssignment::OP_CODE_REMOVE || $nodeAssignmentOpcode == eZNodeAssignment::OP_CODE_REMOVE_NOP) {
                $removeAssignmentsList[] = $nodeAssignment->attribute('id');
                if ($nodeAssignmentOpcode == eZNodeAssignment::OP_CODE_REMOVE) {
                    $removeParentNodeList[] = $nodeAssignment->attribute('parent_node');
                }
            }
        }
        $db = eZDB::instance();
        $db->begin();
        foreach ($assignedExistingNodes as $node) {
            if (in_array($node->attribute('parent_node_id'), $removeParentNodeList)) {
                eZContentObjectTreeNode::removeSubtrees(array($node->attribute('node_id')), $moveToTrash);
            }
        }
        if (count($removeAssignmentsList) > 0) {
            eZNodeAssignment::purgeByID($removeAssignmentsList);
        }
        $db->commit();
    }

Usage Example

 /**
  * Fatal Error when calling eZContentOperationCollection::removeOldNodes()
  * with inexistant object/object version
  *
  * @link http://issues.ez.no/22232
  */
 public function testRemoveOldNodes()
 {
     eZContentOperationCollection::removeOldNodes(1234, 1234);
 }