eZpedia : The Free eZ Publish CMS Documentation Encyclopedia

Snippet: PHP Snippet Add Location to Object / Add Usergroup to User

Table of contents:

This is compatible with eZ Publish 4.

Compatibility

This example works with eZ Publish 4.x

About

This function allows adding a location to an extisting object even adds a usergroup to an existing user. The Code was taken and modified from kernel/content/action.php where it says " if ( $module->isCurrentAction( 'AddAssignment' ) )"

Example

/**
  * Adds User to the chosen Usergroup
  * objectID=UserobjectID
  * newNodeID=usergroupNodeID
  * @param integer $objectID
  * @param unknown_type $newNodeID
  */
 function addLocation($objectID,$newNodeID)
 {
  //$selectedNodeIDArray = eZContentBrowse::result( 'AddNodeAssignment' );
  eZDebug::writeDebug("LocationAdd: objectID".$objectID."\nnewNodeID: ".$newNodeID);
   $object = eZContentObject::fetch( $objectID );
   $nodeID = $object->attribute("main_node_id");
   //$version = $object->currentVersion();
  $ini = eZINI::instance();
  $userClassID = $ini->variable( "UserSettings", "UserClassID" );
  // $node = eZContentObjectTreeNode::fetch( $nodeID );
  $selectedNodeIDArray = array($newNodeID);
        $node = eZContentObjectTreeNode::fetch( $selectedNodeIDArray[0] );
 
  if ( !is_array( $selectedNodeIDArray ) )
            $selectedNodeIDArray = array();
 
        $nodeAssignmentList = eZNodeAssignment::fetchForObject( $objectID, $object->attribute( 'current_version' ), 0, false );
        $assignedNodes = $object->assignedNodes();
 
        $parentNodeIDArray = array();
        $setMainNode = false;
        $hasMainNode = false;
        foreach ( $assignedNodes as $assignedNode )
        {
            if ( $assignedNode->attribute( 'is_main' ) )
                $hasMainNode = true;
 
            $append = false;
            foreach ( $nodeAssignmentList as $nodeAssignment )
            {
                if ( $nodeAssignment['parent_node'] == $assignedNode->attribute( 'parent_node_id' ) )
                {
                    $append = true;
                    break;
                }
            }
            if ( $append )
            {
                $parentNodeIDArray[] = $assignedNode->attribute( 'parent_node_id' );
            }
        }
        if ( !$hasMainNode )
            $setMainNode = true;
 
        $existingNode = eZContentObjectTreeNode::fetch( $nodeID );
        $mainNodeID = $existingNode->attribute( 'main_node_id' );
        $objectName = $object->attribute( 'name' );
 
        $db = eZDB::instance();
        $db->begin();
        $locationAdded = false;
        $node = eZContentObjectTreeNode::fetch( $nodeID );
        foreach ( $selectedNodeIDArray as $selectedNodeID )
        {
            if ( !in_array( $selectedNodeID, $parentNodeIDArray ) )
            {
                $parentNode = eZContentObjectTreeNode::fetch( $selectedNodeID );
                $parentNodeObject = $parentNode->attribute( 'object' );
 
                /*$canCreate = ( ( $parentNode->checkAccess( 'create', $class->attribute( 'id' ), $parentNodeObject->attribute( 'contentclass_id' ) ) == 1 ) ||
                               ( $parentNode->canAddLocation() && $node->canRead() ) );*/
                $canCreate=true;
 
                if ( $canCreate )
                {
                    $insertedNode = $object->addLocation( $selectedNodeID, true );
 
                    // Now set is as published and fix main_node_id
                    $insertedNode->setAttribute( 'contentobject_is_published', 1 );
                    $insertedNode->setAttribute( 'main_node_id', $node->attribute( 'main_node_id' ) );
                    $insertedNode->setAttribute( 'contentobject_version', $node->attribute( 'contentobject_version' ) );
                    // Make sure the url alias is set updated.
                    $insertedNode->updateSubTreePath();
                    $insertedNode->sync();
 
                    $locationAdded = true;
                }
            }
        }
        if ( $locationAdded )
        {
            if ( $object->attribute( 'contentclass_id' ) == $userClassID )
            {
                eZUser::cleanupCache();
            }
        }
        $db->commit();
 
        //include_once( 'kernel/classes/ezcontentcachemanager.php' );
        eZContentCacheManager::clearContentCacheIfNeeded( $objectID );
 
 }

Article provided by eZpedia

All text is available under the terms of the GNU Free Documentation License

Powered by eZ Publish Community Project 4.2011

Hosted by Swiss eZ Publish partner YMC