function move($newParentNodeID, $nodeID = 0)
 {
     if ($nodeID == 0) {
         $node = $this;
         $nodeID = $node->attribute('node_id');
     } else {
         $node = eZContentObjectTreeNode::fetch($nodeID);
     }
     $oldPath = $node->attribute('path_string');
     $oldParentNodeID = $node->attribute('parent_node_id');
     $newParentNodeID = (int) $newParentNodeID;
     if ($oldParentNodeID != $newParentNodeID) {
         $node->updateAndStoreModified();
         // Who moves which content should be logged.
         $object = $node->object();
         eZAudit::writeAudit('content-move', array('Node ID' => $node->attribute('node_id'), 'Old parent node ID' => $oldParentNodeID, 'New parent node ID' => $newParentNodeID, 'Object ID' => $object->attribute('id'), 'Content Name' => $object->attribute('name'), 'Comment' => 'Moved the node to the given node: eZContentObjectTreeNode::move()'));
         $newParentNode = eZContentObjectTreeNode::fetch($newParentNodeID);
         $newParentPath = $newParentNode->attribute('path_string');
         $newParentDepth = $newParentNode->attribute('depth');
         $newPath = $newParentPath . $nodeID;
         $oldDepth = $node->attribute('depth');
         $oldPathLength = strlen($oldPath);
         $moveQuery = "UPDATE\n                                 ezcontentobject_tree\n                          SET\n                                 parent_node_id = {$newParentNodeID}\n                          WHERE\n                                 node_id = {$nodeID}";
         $db = eZDB::instance();
         $subStringString = $db->subString('path_string', $oldPathLength);
         $newPathString = $db->concatString(array("'{$newPath}'", $subStringString));
         $moveQuery1 = "UPDATE\n                                 ezcontentobject_tree\n                           SET\n                                 path_identification_string = " . $db->concatString(array("'" . $db->escapeString($newParentNode->PathIdentificationString) . "'", $db->subString("path_identification_string", mb_strlen($node->PathIdentificationString) + 1))) . ",\n                                 path_string = {$newPathString},\n                                 depth = depth + {$newParentDepth} - {$oldDepth} + 1\n                           WHERE\n                                 path_string LIKE '{$oldPath}%'";
         $db->begin();
         $db->query($moveQuery);
         $db->query($moveQuery1);
         /// role system clean up
         // Clean up policies and limitations
         $expireRoleCache = false;
         $limitationsToFix = eZPolicyLimitation::findByType('SubTree', $node->attribute('path_string'), false);
         if (count($limitationsToFix) > 0) {
             $limitationIDString = $db->generateSQLINStatement($limitationsToFix, 'limitation_id');
             $subStringString = $db->subString('value', $oldPathLength);
             $newValue = $db->concatString(array("'{$newPath}'", $subStringString));
             $query = "UPDATE\n                                ezpolicy_limitation_value\n                          SET\n                                value = {$newValue}\n                          WHERE\n                                value LIKE '{$oldPath}%' AND {$limitationIDString}";
             $db->query($query);
             $expireRoleCache = true;
         }
         // clean up limitations on role assignment level
         $countRows = $db->arrayQuery("SELECT COUNT(*) AS row_count FROM ezuser_role WHERE limit_identifier='Subtree' AND limit_value LIKE '{$oldPath}%'");
         $assignmentsToFixCount = $countRows[0]['row_count'];
         if ($assignmentsToFixCount > 0) {
             $subStringString = $db->subString('limit_value', $oldPathLength);
             $newValue = $db->concatString(array("'{$newPath}'", $subStringString));
             $db->query("UPDATE\n                                ezuser_role\n                             SET\n                                limit_value = {$newValue}\n                             WHERE\n                                limit_identifier='Subtree' AND limit_value LIKE '{$oldPath}%'");
             $expireRoleCache = true;
         }
         if ($expireRoleCache) {
             eZRole::expireCache();
         }
         // Update "is_invisible" node attribute.
         $newNode = eZContentObjectTreeNode::fetch($nodeID);
         eZContentObjectTreeNode::updateNodeVisibility($newNode, $newParentNode);
         $db->commit();
     }
 }
Exemplo n.º 2
0
     $selectedNodeIDArray = $http->postVariable('SelectedNodeIDArray');
     if (count($selectedNodeIDArray) == 1) {
         $limitValue = $selectedNodeIDArray[0];
     }
     $Module->redirectTo('/role/assign/' . $roleID . '/' . $limitIdent . '/' . $limitValue);
 } else {
     if ($http->hasPostVariable('BrowseActionName') and $http->postVariable('BrowseActionName') == 'AssignRole') {
         $selectedObjectIDArray = $http->postVariable('SelectedObjectIDArray');
         $role = eZRole::fetch($roleID);
         $db = eZDB::instance();
         $db->begin();
         foreach ($selectedObjectIDArray as $objectID) {
             $role->assignToUser($objectID, $limitIdent, $limitValue);
         }
         // Clear role caches.
         eZRole::expireCache();
         $db->commit();
         if (count($selectedObjectIDArray) > 0) {
             eZContentCacheManager::clearAllContentCache();
         }
         /* Clean up policy cache */
         eZUser::cleanupCache();
         $Module->redirectTo('/role/view/' . $roleID);
     } else {
         if (is_string($limitIdent) && !isset($limitValue)) {
             switch ($limitIdent) {
                 case 'subtree':
                     eZContentBrowse::browse(array('action_name' => 'SelectObjectRelationNode', 'from_page' => '/role/assign/' . $roleID . '/' . $limitIdent, 'cancel_page' => '/role/view/' . $roleID), $Module);
                     return;
                     break;
                 case 'section':
Exemplo n.º 3
0
 static function cleanupByNode($node)
 {
     // Clean up role assignments with limitations related to this object
     $db = eZDB::instance();
     $db->begin();
     $pathString = $node->attribute('path_string');
     $nodeID = $node->attribute('node_id');
     $db->query("DELETE FROM ezuser_role\n                     WHERE limit_value LIKE '{$pathString}%' AND limit_identifier='Subtree'");
     // Clean up subtree limitations related to this object
     $limitationsToFix = eZPolicyLimitation::findByType('SubTree', $node->attribute('path_string'), true, true);
     foreach ($limitationsToFix as $limitation) {
         $values = $limitation->attribute('values');
         $valueCount = count($values);
         if ($valueCount > 0) {
             foreach ($values as $value) {
                 if (strpos($value->attribute('value'), $node->attribute('path_string')) === 0) {
                     $value->remove();
                     $valueCount--;
                 }
             }
         }
         if ($valueCount == 0) {
             $policy = eZPolicy::fetch($limitation->attribute('policy_id'));
             if (is_object($policy)) {
                 $policy->removeThis();
             }
         }
     }
     $limitationsToFixNode = eZPolicyLimitation::findByType('Node', $node->attribute('node_id'));
     foreach ($limitationsToFixNode as $limitation) {
         $values = $limitation->attribute('values');
         $valueCount = count($values);
         if ($valueCount > 0) {
             foreach ($values as $value) {
                 if ($value->attribute('value') == $node->attribute('node_id')) {
                     $value->remove();
                     $valueCount--;
                 }
             }
         }
         if ($valueCount == 0) {
             $policy = eZPolicy::fetch($limitation->attribute('policy_id'));
             if (is_object($policy)) {
                 $policy->removeThis();
             }
         }
     }
     eZRole::expireCache();
     $db->commit();
 }