=%d and nid <=%d ORDER BY nid",$start,$end); while ($node = db_fetch_object($result)) { rebuild_access_for_node($node); } } else { // not using any node_access modules. add the default grant. db_query("INSERT INTO {node_access} VALUES (0, 0, 'all', 1, 0, 0)"); } cache_clear_all(); } function rebuild_access_for_node($node) { db_query("DELETE FROM {node_access} where nid=%d",$node->nid); $loaded_node = node_load($node->nid, NULL, TRUE); // To preserve database integrity, only aquire grants if the node // loads successfully. if (!empty($loaded_node)) { //node_access_acquire_grants(node_load($node->nid, NULL, TRUE)); node_access_acquire_grants(node_load($node->nid,NULL,TRUE)); } } function _rebuild(){ if (!ini_get('safe_mode')) { set_time_limit(0); } $count = db_result(db_query("SELECT count(*) FROM {node}")); $result = db_query("SELECT nid FROM {node} ORDER BY nid"); $i = 0; $nids = array(); $node = db_fetch_object($result); while ($node) { $next_node = db_fetch_object($result); $i += 1.0; $x = ($i*100)/$count; echo "Regenerating access for node: ".$node->nid.". ".$x."% \n"; $nids[] = $node->nid; if(count($nids) >= 100 or !$next_node){ $start = array_shift($nids); $end = array_pop($nids); if(!$end) $end = $start; $nids = array(); exec("php node_access_rebuild.php $start $end"); } $node = $next_node; //rebuild_access_for_node($node); } echo "finnished rebuilding node access grants \n"; /** *TODO: check that all nodes have line in node_access: * select count(n.nid) from node n where (select count(na.nid) from node_access na where na.nid=n.nid) <= 0; */ } if($argv[1] and $argv[2]) { $node = new stdClass(); $start = $argv[1]; $end = $argv[2]; node_access_rebuild_custom($start,$end); } else { _rebuild(); }