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();
}