function storeNodeAssignments( $module, $class, $object, $version, $contentObjectAttributes, $editVersion, $editLanguage ) { $http = eZHTTPTool::instance(); // If the object has been previously published we do not allow node assignment operations if ( $object->attribute( 'status' ) != eZContentObject::STATUS_DRAFT ) { return; } // If node assignment handling is diabled we return immedieately $useNodeAssigments = true; if ( $http->hasPostVariable( 'UseNodeAssigments' ) ) $useNodeAssigments = (bool)$http->postVariable( 'UseNodeAssigments' ); if ( !$useNodeAssigments ) return; $setPlacementNodeIDArray = array(); if ( $http->hasPostVariable( 'SetPlacementNodeIDArray' ) ) $setPlacementNodeIDArray = $http->postVariable( 'SetPlacementNodeIDArray' ); // We will quit if some important POST variables are missing if ( !$http->hasPostVariable( 'MainNodeID' ) and !$http->hasPostVariable( 'SortOrderMap' ) and !$http->hasPostVariable( 'SortFieldMap' ) ) return; $mainNodeID = false; if ( $http->hasPostVariable( 'MainNodeID' ) ) { $mainNodeID = trim( $http->postVariable( 'MainNodeID' ) ); if ( strlen( $mainNodeID ) == 0 ) return; } // Check if dropdown placement is used if ( $http->hasPostVariable( 'MainAssignmentElementNumber' ) ) { $elementNumber = $http->postVariable( 'MainAssignmentElementNumber' ); $mainNodeID = $setPlacementNodeIDArray[$elementNumber]; } $nodeID = eZContentObjectTreeNode::findNode( $mainNodeID, $object->attribute('id') ); eZDebugSetting::writeDebug( 'kernel-content-edit', $nodeID, 'nodeID' ); // $object->setAttribute( 'main_node_id', $nodeID ); $nodeAssignments = eZNodeAssignment::fetchForObject( $object->attribute( 'id' ), $version->attribute( 'version' ) ) ; eZDebugSetting::writeDebug( 'kernel-content-edit', $mainNodeID, "mainNodeID" ); $setPlacementNodeIDArray = array_unique( $setPlacementNodeIDArray ); eZDebugSetting::writeDebug( 'kernel-content-edit', $setPlacementNodeIDArray, '$setPlacementNodeIDArray' ); $remoteIDFieldMap = array(); if ( $http->hasPostVariable( 'SetRemoteIDFieldMap' ) ) $remoteIDFieldMap = $http->postVariable( 'SetRemoteIDFieldMap' ); $remoteIDOrderMap = array(); if ( $http->hasPostVariable( 'SetRemoteIDOrderMap' ) ) $remoteIDOrderMap = $http->postVariable( 'SetRemoteIDOrderMap' ); $db = eZDB::instance(); $db->begin(); if ( count( $setPlacementNodeIDArray ) > 0 ) { foreach ( $setPlacementNodeIDArray as $setPlacementRemoteID => $setPlacementNodeID ) { $hasAssignment = false; foreach ( $nodeAssignments as $nodeAssignment ) { if ( $nodeAssignment->attribute( 'remote_id' ) == $setPlacementRemoteID ) { eZDebugSetting::writeDebug( 'kernel-content-edit', "Remote ID $setPlacementRemoteID already in use for node " . $nodeAssignment->attribute( 'parent_node' ), 'node_edit' ); if ( isset( $remoteIDFieldMap[$setPlacementRemoteID] ) ) $nodeAssignment->setAttribute( 'sort_field', $remoteIDFieldMap[$setPlacementRemoteID] ); if ( isset( $remoteIDOrderMap[$setPlacementRemoteID] ) ) $nodeAssignment->setAttribute( 'sort_order', $remoteIDOrderMap[$setPlacementRemoteID] ); $nodeAssignment->setAttribute( 'parent_node', $setPlacementNodeID ); $nodeAssignment->sync(); $hasAssignment = true; break; } } if ( !$hasAssignment ) { eZDebugSetting::writeDebug( 'kernel-content-edit', "Adding to node $setPlacementNodeID", 'node_edit' ); $sortField = null; $sortOrder = null; if ( isset( $remoteIDFieldMap[$setPlacementRemoteID] ) ) $sortField = $remoteIDFieldMap[$setPlacementRemoteID]; if ( isset( $remoteIDOrderMap[$setPlacementRemoteID] ) ) $sortOrder = $remoteIDOrderMap[$setPlacementRemoteID]; $version->assignToNode( $setPlacementNodeID, 0, 0, $sortField, $sortOrder, $setPlacementRemoteID ); } } $nodeAssignments = eZNodeAssignment::fetchForObject( $object->attribute( 'id' ), $version->attribute( 'version' ) ); } $sortOrderMap = false; if ( $http->hasPostVariable( 'SortOrderMap' ) ) $sortOrderMap = $http->postVariable( 'SortOrderMap' ); $sortFieldMap = false; if ( $http->hasPostVariable( 'SortFieldMap' ) ) $sortFieldMap = $http->postVariable( 'SortFieldMap' ); // $assigedNodes = eZContentObjectTreeNode::fetchByContentObjectID( $object->attribute('id') ); foreach ( $nodeAssignments as $nodeAssignment ) { eZDebugSetting::writeDebug( 'kernel-content-edit', $nodeAssignment, "nodeAssignment" ); if ( $sortFieldMap !== false ) { if ( isset( $sortFieldMap[$nodeAssignment->attribute( 'id' )] ) ) $nodeAssignment->setAttribute( 'sort_field', $sortFieldMap[$nodeAssignment->attribute( 'id' )] ); } if ( $sortOrderMap !== false ) { $sortOrder = 1; if ( isset( $sortOrderMap[$nodeAssignment->attribute( 'id' )] ) and $sortOrderMap[$nodeAssignment->attribute( 'id' )] == 1 ) $sortOrder = $sortOrderMap[$nodeAssignment->attribute( 'id' )]; else $sortOrder = 0; $nodeAssignment->setAttribute( 'sort_order', $sortOrder ); } if ( $nodeAssignment->attribute( 'is_main' ) == 1 and $nodeAssignment->attribute( 'parent_node' ) != $mainNodeID ) { $nodeAssignment->setAttribute( 'is_main', 0 ); } else if ( $nodeAssignment->attribute( 'is_main' ) == 0 and $nodeAssignment->attribute( 'parent_node' ) == $mainNodeID ) { $nodeAssignment->setAttribute( 'is_main', 1 ); } $nodeAssignment->store(); } $db->commit(); }
public static function publishNode($parentNodeID, $objectID, $versionNum, $mainNodeID) { $object = eZContentObject::fetch($objectID); $nodeAssignment = eZNodeAssignment::fetch($objectID, $versionNum, $parentNodeID); $version = $object->version($versionNum); $fromNodeID = $nodeAssignment->attribute('from_node_id'); $originalObjectID = $nodeAssignment->attribute('contentobject_id'); $nodeID = $nodeAssignment->attribute('parent_node'); $opCode = $nodeAssignment->attribute('op_code'); $parentNode = eZContentObjectTreeNode::fetch($nodeID); // if parent doesn't exist, return. See issue #18320 if (!$parentNode instanceof eZContentObjectTreeNode) { eZDebug::writeError("Parent node doesn't exist. object id: {$objectID}, node_assignment id: " . $nodeAssignment->attribute('id'), __METHOD__); return; } $parentNodeID = $parentNode->attribute('node_id'); $existingNode = null; $db = eZDB::instance(); $db->begin(); if (strlen($nodeAssignment->attribute('parent_remote_id')) > 0) { $existingNode = eZContentObjectTreeNode::fetchByRemoteID($nodeAssignment->attribute('parent_remote_id')); } if (!$existingNode) { } $existingNode = eZContentObjectTreeNode::findNode($nodeID, $object->attribute('id'), true); $updateSectionID = false; // now we check the op_code to see what to do if (($opCode & 1) == eZNodeAssignment::OP_CODE_NOP) { // There is nothing to do so just return $db->commit(); if ($mainNodeID == false) { return $object->attribute('main_node_id'); } return; } $updateFields = false; if ($opCode == eZNodeAssignment::OP_CODE_MOVE || $opCode == eZNodeAssignment::OP_CODE_CREATE) { // if ( $fromNodeID == 0 || $fromNodeID == -1) if ($opCode == eZNodeAssignment::OP_CODE_CREATE || $opCode == eZNodeAssignment::OP_CODE_SET) { // If the node already exists it means we have a conflict (for 'CREATE'). // We resolve this by leaving node-assignment data be. if ($existingNode == null) { $parentNode = eZContentObjectTreeNode::fetch($nodeID); $user = eZUser::currentUser(); if (!eZSys::isShellExecution() and !$user->isAnonymous()) { eZContentBrowseRecent::createNew($user->id(), $parentNode->attribute('node_id'), $parentNode->attribute('name')); } $updateFields = true; $existingNode = $parentNode->addChild($object->attribute('id'), true); if ($fromNodeID == -1) { $updateSectionID = true; } } elseif ($opCode == eZNodeAssignment::OP_CODE_SET) { $updateFields = true; } } elseif ($opCode == eZNodeAssignment::OP_CODE_MOVE) { if ($fromNodeID == 0 || $fromNodeID == -1) { eZDebug::writeError("NodeAssignment '" . $nodeAssignment->attribute('id') . "' is marked with op_code='{$opCode}' but has no data in from_node_id. Cannot use it for moving node.", __METHOD__); } else { // clear cache for old placement. $additionalNodeIDList = array($fromNodeID); eZContentCacheManager::clearContentCacheIfNeeded($objectID, $versionNum, $additionalNodeIDList); $originalNode = eZContentObjectTreeNode::fetchNode($originalObjectID, $fromNodeID); if ($originalNode->attribute('main_node_id') == $originalNode->attribute('node_id')) { $updateSectionID = true; } $originalNode->move($parentNodeID); $existingNode = eZContentObjectTreeNode::fetchNode($originalObjectID, $parentNodeID); $updateFields = true; } } } elseif ($opCode == eZNodeAssignment::OP_CODE_REMOVE) { $db->commit(); return; } if ($updateFields) { if (strlen($nodeAssignment->attribute('parent_remote_id')) > 0) { $existingNode->setAttribute('remote_id', $nodeAssignment->attribute('parent_remote_id')); } $existingNode->setAttribute('sort_field', $nodeAssignment->attribute('sort_field')); $existingNode->setAttribute('sort_order', $nodeAssignment->attribute('sort_order')); } $existingNode->setAttribute('contentobject_is_published', 1); eZDebug::createAccumulatorGroup('nice_urls_total', 'Nice urls'); if ($mainNodeID > 0) { $existingNodeID = $existingNode->attribute('node_id'); if ($existingNodeID != $mainNodeID) { eZContentBrowseRecent::updateNodeID($existingNodeID, $mainNodeID); } $existingNode->setAttribute('main_node_id', $mainNodeID); } else { $existingNode->setAttribute('main_node_id', $existingNode->attribute('node_id')); } $existingNode->store(); if ($updateSectionID) { eZContentOperationCollection::updateSectionID($objectID, $versionNum); } $db->commit(); if ($mainNodeID == false) { return $existingNode->attribute('node_id'); } }
static function deleteNodeWhereParent($node, $id) { eZContentObjectTreeNode::removeNode(eZContentObjectTreeNode::findNode($node, $id)); }