? forum ? node_load_multiple.patch ? node_multiple_load.patch ? password_checker_8.patch.1 ? static_tree.patch.1 ? taxonomy-synonym-cache_0.patch.txt ? taxonomy_isset_plus_test.patch.1 ? term_hooks_0.patch.1 ? modules/node/.node.module.swo ? modules/node/.node.module.swp ? modules/node/content_types.js ? modules/poll/.poll.module.swo ? modules/simpletest/tests/file_test.info ? modules/simpletest/tests/file_test.module ? modules/taxonomy/taxonomy_vocabulary_load.patch ? modules/translation/translation_test.patch ? modules/user/user.admin.js ? sites/all/modules ? sites/default/files ? sites/default/hello ? sites/default/settings.php Index: modules/book/book.module =================================================================== RCS file: /cvs/drupal/drupal/modules/book/book.module,v retrieving revision 1.472 diff -u -p -r1.472 book.module --- modules/book/book.module 13 Oct 2008 19:59:41 -0000 1.472 +++ modules/book/book.module 25 Oct 2008 00:59:46 -0000 @@ -682,16 +682,16 @@ function book_build_active_trail($book_l /** * Implementation of hook_nodeapi_load(). */ -function book_nodeapi_load(&$node, $teaser, $page) { +function book_nodeapi_load(&$nodes) { // Note - we cannot use book_link_load() because it will call node_load(). - $info['book'] = db_fetch_array(db_query('SELECT * FROM {book} b INNER JOIN {menu_links} ml ON b.mlid = ml.mlid WHERE b.nid = %d', $node->nid)); - - if ($info['book']) { - $info['book']['href'] = $info['book']['link_path']; - $info['book']['title'] = $info['book']['link_title']; - $info['book']['options'] = unserialize($info['book']['options']); - - return $info; + $result = db_query('SELECT * FROM {book} b INNER JOIN {menu_links} ml ON b.mlid = ml.mlid WHERE b.nid IN(:nids)', array(':nids' => implode(', ', array_keys($nodes))), array('fetch' => PDO::FETCH_ASSOC)); + if ($result) { + foreach ($result as $record) { + $nodes[$record['nid']]->book = $record; + $nodes[$record['nid']]->book['href'] = $record['link_path']; + $nodes[$record['nid']]->book['title'] = $record['link_title']; + $nodes[$record['nid']]->book['options'] = unserialize($record['options']); + } } } Index: modules/book/book.test =================================================================== RCS file: /cvs/drupal/drupal/modules/book/book.test,v retrieving revision 1.3 diff -u -p -r1.3 book.test --- modules/book/book.test 15 May 2008 21:19:24 -0000 1.3 +++ modules/book/book.test 25 Oct 2008 00:59:46 -0000 @@ -152,7 +152,7 @@ class BookTestCase extends DrupalWebTest } // Check to make sure the book node was created. - $node = node_load(array('title' => $edit['title'])); + $node = array_shift(node_multiple_load(NULL, array('title' => $edit['title']))); $this->assertNotNull(($node === FALSE ? NULL : $node), t('Book node found in database.')); $number++; Index: modules/comment/comment.module =================================================================== RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v retrieving revision 1.659 diff -u -p -r1.659 comment.module --- modules/comment/comment.module 14 Oct 2008 20:39:42 -0000 1.659 +++ modules/comment/comment.module 25 Oct 2008 00:59:47 -0000 @@ -566,11 +566,35 @@ function comment_form_alter(&$form, $for /** * Implementation of hook_nodeapi_load(). */ -function comment_nodeapi_load(&$node, $arg = 0) { - if ($node->comment != COMMENT_NODE_DISABLED) { - return db_fetch_array(db_query("SELECT last_comment_timestamp, last_comment_name, comment_count FROM {node_comment_statistics} WHERE nid = %d", $node->nid)); +function comment_nodeapi_load(&$nodes) { + $comments_disabled = array(); + $comments_enabled = array(); + + foreach ($nodes as $node) { + if ($node->comment != COMMENT_NODE_DISABLED) { + $comments_enabled[] = $node->nid; + } + else { + $comments_disabled[] = $node->nid; + } + } + + // If comments are enabled, fetch information from {node_comment_statistics}. + if (!empty($comments_enabled)) { + $result = db_query("SELECT nid, last_comment_timestamp, last_comment_name, comment_count FROM {node_comment_statistics} WHERE nid IN(:nids)", array(':nids' => implode(', ', $comments_enabled))); + foreach ($result as $row) { + $nodes[$row->nid]->last_comment_timestamp = $row->last_comment_timestamp; + $nodes[$row->nid]->last_comment_name = $row->last_comment_name; + $nodes[$row->nid]->comment_count = $row->comment_count; + } + } + if (empty($comments_disabled)) { + foreach ($comments_disabled as $nid) { + $nodes[$nid]->last_comment_timestamp = $nodes[$nid]->created; + $nodes[$nid]->last_comment_name = ''; + $nodes[$nid]->comment_count = 0; + } } - return array('last_comment_timestamp' => $node->created, 'last_comment_name' => '', 'comment_count' => 0); } /** Index: modules/dblog/dblog.test =================================================================== RCS file: /cvs/drupal/drupal/modules/dblog/dblog.test,v retrieving revision 1.9 diff -u -p -r1.9 dblog.test --- modules/dblog/dblog.test 17 Sep 2008 07:11:56 -0000 1.9 +++ modules/dblog/dblog.test 25 Oct 2008 00:59:48 -0000 @@ -265,7 +265,7 @@ class DBLogTestCase extends DrupalWebTes $this->drupalPost('node/add/' . $type, $edit, t('Save')); $this->assertResponse(200); // Retrieve node object. - $node = node_load(array('title' => $title)); + $node = array_shift(node_multiple_load(NULL, array('title' => $title))); $this->assertTrue($node != null, t('Node @title was loaded', array('@title' => $title))); // Edit node. $edit = $this->getContentUpdate($type); Index: modules/filter/filter.test =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.test,v retrieving revision 1.8 diff -u -p -r1.8 filter.test --- modules/filter/filter.test 12 Oct 2008 04:30:06 -0000 1.8 +++ modules/filter/filter.test 25 Oct 2008 00:59:48 -0000 @@ -117,7 +117,7 @@ class FilterAdminTestCase extends Drupal $this->drupalPost('node/add/page', $edit, t('Save')); $this->assertRaw(t('Page %title has been created.', array('%title' => $edit['title'])), t('Filtered node created.')); - $node = node_load(array('title' => $edit['title'])); + $node = array_shift(node_multiple_load(NULL, array('title' => $edit['title']))); $this->assertTrue($node, t('Node found in database.')); $this->drupalGet('node/' . $node->nid); Index: modules/forum/forum.module =================================================================== RCS file: /cvs/drupal/drupal/modules/forum/forum.module,v retrieving revision 1.471 diff -u -p -r1.471 forum.module --- modules/forum/forum.module 24 Oct 2008 19:03:12 -0000 1.471 +++ modules/forum/forum.module 25 Oct 2008 00:59:48 -0000 @@ -341,11 +341,27 @@ function forum_nodeapi_delete(&$node, $t /** * Implementation of hook_nodeapi_load(). */ -function forum_nodeapi_load(&$node, $teaser, $page) { +function forum_nodeapi_load(&$nodes, $types) { $vid = variable_get('forum_nav_vocabulary', ''); - $vocabulary = taxonomy_vocabulary_load($vid); - if (_forum_nodeapi_check_node_type($node, $vocabulary)) { - return db_fetch_array(db_query('SELECT tid AS forum_tid FROM {forum} WHERE vid = %d', $node->vid)); + // If no forum vocabulary is set up, return. + if (!$vocabulary = taxonomy_vocabulary_load($vid)) { + return; + } + // If none of the node types are enabled for the forum vocabulary, return. + elseif (!$types = array_diff($types, $vocabulary->nodes)) { + return; + } + else { + $vids = array(); + foreach ($nodes as $node) { + if (in_array($node->type, $vocabulary->nodes)) { + $vids[] = $node->vid; + } + } + $result = db_query("SELECT nid, tid FROM {forum} WHERE vid IN(:vids)", array(':vids' => implode(', ', array_keys($vids)))); + foreach ($result as $record) { + $nodes[$record->nid]->forum_tid = $record->tid; + } } } @@ -452,15 +468,6 @@ function forum_form_alter(&$form, $form_ } /** - * Implementation of hook_load(). - */ -function forum_load($node) { - $forum = db_fetch_object(db_query('SELECT * FROM {term_node} WHERE vid = %d', $node->vid)); - - return $forum; -} - -/** * Implementation of hook_block(). * * Generates a block containing the currently active forum topics and the Index: modules/forum/forum.test =================================================================== RCS file: /cvs/drupal/drupal/modules/forum/forum.test,v retrieving revision 1.5 diff -u -p -r1.5 forum.test --- modules/forum/forum.test 12 Oct 2008 01:01:44 -0000 1.5 +++ modules/forum/forum.test 25 Oct 2008 00:59:49 -0000 @@ -241,7 +241,7 @@ class ForumTestCase extends DrupalWebTes } // Retrieve node object. - $node = node_load(array('title' => $title), null, true); // Are these last two parameters necessary? + $node = array_shift(node_multiple_load(NULL, array('title' => $title))); $this->assertTrue($node != null, t('Node @title was loaded', array('@title' => $title))); // View forum topic. Index: modules/node/node.module =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.module,v retrieving revision 1.988 diff -u -p -r1.988 node.module --- modules/node/node.module 13 Oct 2008 00:33:03 -0000 1.988 +++ modules/node/node.module 25 Oct 2008 00:59:52 -0000 @@ -726,93 +726,152 @@ function node_invoke_nodeapi(&$node, $op } /** - * Load a node object from the database. + * Load node objects from the database. * - * @param $param - * Either the nid of the node or an array of conditions to match against in the database query - * @param $revision - * Which numbered revision to load. Defaults to the current version. + * @param $nids + * An array of nids. + * @param $conditions + * An array of conditions on the {node} table in the form $field => value. * @param $reset * Whether to reset the internal node_load cache. * * @return - * A fully-populated node object. + * An array of node objects indexed by nid. */ -function node_load($param = array(), $revision = NULL, $reset = NULL) { - static $nodes = array(); +function node_multiple_load($nids = array(), $conditions = array(), $revision = NULL, $reset = FALSE) { + static $cache = array(); if ($reset) { - $nodes = array(); + $cache = array(); } - $cachable = ($revision == NULL); - $arguments = array(); - if (is_numeric($param)) { - if ($cachable) { - // Is the node statically cached? - if (isset($nodes[$param])) { - return is_object($nodes[$param]) ? clone $nodes[$param] : $nodes[$param]; + $nodes = array(); + + // Load any available nodes from the cache and exclude them from the + // database query. + if (!empty($nids) && empty($revision)) { + foreach ($nids as $nid) { + if (isset($cache[$nid])) { + $nodes[$nid] = $cache[$nid]; + unset($nids[$nid]); } } - $cond = 'n.nid = %d'; - $arguments[] = $param; } - elseif (is_array($param)) { - // Turn the conditions into a query. - foreach ($param as $key => $value) { - $cond[] = 'n.' . db_escape_table($key) . " = '%s'"; - $arguments[] = $value; + + // Remove nodes from the array if they don't match a condition in $conditions. + if (!empty($conditions)) { + foreach ($nodes as $node) { + foreach ($conditions as $key => $value) { + if ($node->$key != $value) { + unset($nodes[$nid]); + } + } } - $cond = implode(' AND ', $cond); - } - else { - return FALSE; } - // Retrieve a field list based on the site's schema. - $fields = drupal_schema_fields_sql('node', 'n'); - $fields = array_merge($fields, drupal_schema_fields_sql('node_revisions', 'r')); - $fields = array_merge($fields, array('u.name', 'u.picture', 'u.data')); - // Remove fields not needed in the query: n.vid and r.nid are redundant, - // n.title is unnecessary because the node title comes from the - // node_revisions table. We'll keep r.vid, r.title, and n.nid. - $fields = array_diff($fields, array('n.vid', 'n.title', 'r.nid')); - $fields = implode(', ', $fields); - // Rename timestamp field for clarity. - $fields = str_replace('r.timestamp', 'r.timestamp AS revision_timestamp', $fields); - // Change name of revision uid so it doesn't conflict with n.uid. - $fields = str_replace('r.uid', 'r.uid AS revision_uid', $fields); - - // Retrieve the node. - // No db_rewrite_sql is applied so as to get complete indexing for search. - if ($revision) { - array_unshift($arguments, $revision); - $node = db_fetch_object(db_query('SELECT ' . $fields . ' FROM {node} n INNER JOIN {users} u ON u.uid = n.uid INNER JOIN {node_revisions} r ON r.nid = n.nid AND r.vid = %d WHERE ' . $cond, $arguments)); - } - else { - $node = db_fetch_object(db_query('SELECT ' . $fields . ' FROM {node} n INNER JOIN {users} u ON u.uid = n.uid INNER JOIN {node_revisions} r ON r.vid = n.vid WHERE ' . $cond, $arguments)); - } + // Fetch any nodes not statically cached from the database. + if (!empty($nids) || !empty($conditions)) { + // Fetch any nodes not statically cached from the database. + $query = db_select('node', 'n'); + if (empty($revision)) { + $query->join('node_revisions', 'r', 'r.vid = n.vid'); + } + else { + $query->join('node_revisions', 'r', 'r.nid = n.nid AND r.vid = :vid', array(':vid' => $revision)); + } + $query->join('users', 'u', 'u.uid = n.uid'); - if ($node && $node->nid) { - // Call the node specific callback (if any) and piggy-back the - // results to the node or overwrite some values. - if ($extra = node_invoke($node, 'load')) { - foreach ($extra as $key => $value) { - $node->$key = $value; - } + // Add fields from the {node} table. + $node_fields = drupal_schema_fields_sql('node'); + + // vid and title are provided by node_revisions, so remove them. + unset($node_fields['vid']); + unset($node_fields['title']); + foreach ($node_fields as $field) { + $query->addField('n', $field, $field); + } + + // Add fields from the {node_revisions} table. + $node_revision_fields = drupal_schema_fields_sql('node_revisions'); + + // nid is provided by node, so remove it. + unset($node_revision_fields['nid']); + + // Add timestamp as revisions_timestamp. + unset($node_revision_fields['timestamp']); + $query->addField('r', 'timestamp', 'revision_timestamp'); + foreach ($node_revision_fields as $field) { + $query->addField('r', $field, $field); + } + + // Add fields from the {users} table. + $user_fields = array('name', 'picture', 'data'); + foreach ($user_fields as $field) { + $query->addField('u', $field, $field); + } + + if (!empty($nids)) { + $query->condition('n.nid', $nids, 'IN'); } - if ($extra = node_invoke_nodeapi($node, 'load')) { - foreach ($extra as $key => $value) { - $node->$key = $value; + if (!empty($conditions)) { + foreach ($conditions as $field => $value) { + $query->condition('n.' . $field, $value); } } - if ($cachable) { - $nodes[$node->nid] = is_object($node) ? clone $node : $node; + + $result = $query->execute(); + + foreach ($result AS $node) { + $nodes[$node->nid] = $node; } } - return $node; + // Create an array of nodes for each content type and pass this to the + // node type specific callback. + $typed_nodes = array(); + foreach ($nodes as $nid => $node) { + $typed_nodes[$node->type][$nid] = &$node; + } + + // Call node type specific callbacks on each typed array of nodes. + foreach ($typed_nodes as $type => $nodes_of_type) { + if (node_hook($type, 'load')) { + $function = node_get_types('base', $type) . '_load'; + call_user_func($function, $nodes_of_type); + } + } + + // Call hook_nodeapi_load(), pass the node types so modules can return early + // if not acting on types in the array. + foreach(module_implements('nodeapi_load') as $module) { + $function = $module . '_nodeapi_load'; + call_user_func($function, &$nodes, array_keys($typed_nodes)); + } + if (empty($revision)) { + $cache += $nodes; + } + return $nodes; +} + +/** + * Load a node object from the database. + * + * @param $nid + * The node id. + * @param $reset + * Whether to reset the internal node_load cache. + * + * @return + * A fully-populated node object. + */ +function node_load($nid, $revision = NULL, $reset = FALSE) { + if ($node = node_multiple_load(array($nid), array(), $revision, $reset)) { + return $node[$nid]; + } + else { + return FALSE; + } } /** Index: modules/node/node.test =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.test,v retrieving revision 1.7 diff -u -p -r1.7 node.test --- modules/node/node.test 11 Oct 2008 18:29:20 -0000 1.7 +++ modules/node/node.test 25 Oct 2008 00:59:52 -0000 @@ -273,7 +273,7 @@ class PageEditTestCase extends DrupalWeb $this->drupalPost('node/add/page', $edit, t('Save')); // Check that the node exists in the database. - $node = node_load(array('title' => $edit['title'])); + $node = array_shift(node_multiple_load(NULL, array('title' => $edit['title']))); $this->assertTrue($node, t('Node found in database.')); // Check that "edit" link points to correct page. @@ -379,7 +379,7 @@ class PageCreationTestCase extends Drupa $this->assertRaw(t('!post %title has been created.', array('!post' => 'Page', '%title' => $edit['title'])), t('Page created.')); // Check that the node exists in the database. - $node = node_load(array('title' => $edit['title'])); + $node = array_shift(node_multiple_load(NULL, array('title' => $edit['title']))); $this->assertTrue($node, t('Node found in database.')); } } Index: modules/path/path.module =================================================================== RCS file: /cvs/drupal/drupal/modules/path/path.module,v retrieving revision 1.149 diff -u -p -r1.149 path.module --- modules/path/path.module 12 Oct 2008 04:30:06 -0000 1.149 +++ modules/path/path.module 25 Oct 2008 00:59:52 -0000 @@ -135,12 +135,14 @@ function path_nodeapi_validate(&$node, $ /** * Implementation of hook_nodeapi_load(). */ -function path_nodeapi_load(&$node, $arg) { - $language = isset($node->language) ? $node->language : ''; - $path = 'node/' . $node->nid; - $alias = drupal_get_path_alias($path, $language); - if ($path != $alias) { - $node->path = $alias; +function path_nodeapi_load(&$nodes) { + foreach($nodes as $node) { + $language = isset($node->language) ? $node->language : ''; + $path = 'node/' . $node->nid; + $alias = drupal_get_path_alias($path, $language); + if ($path != $alias) { + $node->path = $alias; + } } } Index: modules/path/path.test =================================================================== RCS file: /cvs/drupal/drupal/modules/path/path.test,v retrieving revision 1.4 diff -u -p -r1.4 path.test --- modules/path/path.test 13 Oct 2008 20:57:19 -0000 1.4 +++ modules/path/path.test 25 Oct 2008 00:59:52 -0000 @@ -131,7 +131,7 @@ class PathTestCase extends DrupalWebTest $this->drupalPost('node/add/page', $edit, t('Save')); // Check to make sure the node was created. - $node = node_load(array('title' => $edit['title'])); + $node = array_shift(node_multiple_load(NULL, array('title' => $edit['title']))); $this->assertNotNull(($node === FALSE ? NULL : $node), 'Node found in database. %s'); @@ -188,7 +188,7 @@ class PathLanguageTestCase extends Drupa $this->drupalPost('node/add/page', $edit, t('Save')); // Check to make sure the node was created. - $english_node = node_load(array('title' => $edit['title'])); + $english_node = array_shift(node_multiple_load(NULL, array('title' => $edit['title']))); $this->assertTrue(($english_node), 'Node found in database.'); // Confirm that the alias works. @@ -209,7 +209,7 @@ class PathLanguageTestCase extends Drupa // Ensure the node was created. // Check to make sure the node was created. - $french_node = node_load(array('title' => $edit['title'])); + $french_node = array_shift(node_multiple_load(NULL, array('title' => $edit['title']))); $this->assertTrue(($french_node), 'Node found in database.'); // Confirm that the alias works. Index: modules/poll/poll.module =================================================================== RCS file: /cvs/drupal/drupal/modules/poll/poll.module,v retrieving revision 1.277 diff -u -p -r1.277 poll.module --- modules/poll/poll.module 12 Oct 2008 04:30:07 -0000 1.277 +++ modules/poll/poll.module 25 Oct 2008 00:59:52 -0000 @@ -151,7 +151,7 @@ function poll_block($op = 'list', $delta $sql = db_rewrite_sql("SELECT MAX(n.created) FROM {node} n INNER JOIN {poll} p ON p.nid = n.nid WHERE n.status = 1 AND p.active = 1"); $timestamp = db_result(db_query($sql)); if ($timestamp) { - $poll = node_load(array('type' => 'poll', 'created' => $timestamp, 'status' => 1)); + $poll = array_shift(node_multiple_load(NULL, array('type' => 'poll', 'created' => $timestamp, 'status' => 1))); if ($poll->nid) { $poll = poll_view($poll, TRUE, FALSE, TRUE); @@ -451,35 +451,38 @@ function poll_validate($node) { /** * Implementation of hook_load(). */ -function poll_load($node) { +function poll_load(&$nodes) { global $user; + foreach ($nodes as $node) { + $poll = db_query("SELECT runtime, active FROM {poll} WHERE nid = :nid", array(':nid' => $node->nid))->fetch(); - $poll = db_fetch_object(db_query("SELECT runtime, active FROM {poll} WHERE nid = %d", $node->nid)); - - // Load the appropriate choices into the $poll object. - $result = db_query("SELECT chid, chtext, chvotes, weight FROM {poll_choices} WHERE nid = %d ORDER BY weight", $node->nid); - while ($choice = db_fetch_array($result)) { - $poll->choice[$choice['chid']] = $choice; - } - - // Determine whether or not this user is allowed to vote. - $poll->allowvotes = FALSE; - if (user_access('vote on polls') && $poll->active) { - if ($user->uid) { - $result = db_fetch_object(db_query('SELECT chid FROM {poll_votes} WHERE nid = %d AND uid = %d', $node->nid, $user->uid)); - } - else { - $result = db_fetch_object(db_query("SELECT chid FROM {poll_votes} WHERE nid = %d AND hostname = '%s'", $node->nid, ip_address())); - } - if (isset($result->chid)) { - $poll->vote = $result->chid; + // Load the appropriate choices into the $poll object. + $result = db_query("SELECT chid, chtext, chvotes, weight FROM {poll_choices} WHERE nid = :nid ORDER BY weight", array(':nid' => $node->nid), array('fetch' => PDO::FETCH_ASSOC)); + foreach ($result as $record) { + $poll->choice[$record['chid']] = $record; } - else { - $poll->vote = -1; - $poll->allowvotes = TRUE; + + // Determine whether or not this user is allowed to vote. + $poll->allowvotes = FALSE; + if (user_access('vote on polls') && $poll->active) { + if ($user->uid) { + $result = db_query('SELECT chid FROM {poll_votes} WHERE nid = :nid AND uid = :uid', array(':nid' => $node->nid, ':uid' => $user->uid))->fetch(); + } + else { + $result = db_query("SELECT chid FROM {poll_votes} WHERE nid = :nid AND hostname = :hostname", array(':nid' => $node->nid, ':hostname' => ip_address()))->fetch; + } + if (isset($result->chid)) { + $poll->vote = $result->chid; + } + else { + $poll->vote = -1; + $poll->allowvotes = TRUE; + } } + foreach ($poll as $key => $value) { + $nodes[$node->nid]->$key = $value; + } } - return $poll; } /** Index: modules/poll/poll.test =================================================================== RCS file: /cvs/drupal/drupal/modules/poll/poll.test,v retrieving revision 1.5 diff -u -p -r1.5 poll.test --- modules/poll/poll.test 5 Aug 2008 18:07:14 -0000 1.5 +++ modules/poll/poll.test 25 Oct 2008 00:59:52 -0000 @@ -40,7 +40,7 @@ class PollTestCase extends DrupalWebTest } $this->drupalPost(NULL, $edit, t('Save')); - $node = node_load(array('title' => $title)); + $node = array_shift(node_multiple_load(NULL, array('title' => $title))); $this->assertRaw(t('@type %title has been created.', array('@type' => node_get_types('name', 'poll'), '%title' => $title)), 'Poll has been created.'); $this->assertTrue($node->nid, t('Poll has been found in the database')); Index: modules/taxonomy/taxonomy.module =================================================================== RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v retrieving revision 1.434 diff -u -p -r1.434 taxonomy.module --- modules/taxonomy/taxonomy.module 12 Oct 2008 04:30:08 -0000 1.434 +++ modules/taxonomy/taxonomy.module 25 Oct 2008 00:59:52 -0000 @@ -1196,9 +1196,10 @@ function taxonomy_render_nodes($result) /** * Implementation of hook_nodeapi_load(). */ -function taxonomy_nodeapi_load($node, $arg = 0) { - $output['taxonomy'] = taxonomy_node_get_terms($node); - return $output; +function taxonomy_nodeapi_load($nodes) { + foreach ($nodes as $node) { + $node->taxonomy = taxonomy_node_get_terms($node); + } } /** Index: modules/taxonomy/taxonomy.test =================================================================== RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.test,v retrieving revision 1.8 diff -u -p -r1.8 taxonomy.test --- modules/taxonomy/taxonomy.test 24 Sep 2008 18:42:00 -0000 1.8 +++ modules/taxonomy/taxonomy.test 25 Oct 2008 00:59:53 -0000 @@ -466,7 +466,7 @@ class TaxonomyTestNodeApiTestCase extend $patternArray['body text'] = $body; $patternArray['title'] = $title; - $node = node_load(array('title' => $title)); + $node = array_shift(node_multiple_load(NULL, array('title' => $title))); $this->drupalGet("node/$node->nid"); foreach($patternArray as $name => $termPattern) { @@ -509,7 +509,7 @@ class TaxonomyTestNodeApiTestCase extend } // Checking database fields. - $node = node_load(array('title' => $title)); + $node = array_shift(node_multiple_load(NULL, array('title' => $title))); $result = db_query('SELECT tid FROM {term_node} WHERE vid = %d', $node->vid); while ($nodeRow = db_fetch_array($result)) { $this->assertTrue(in_array($nodeRow['tid'], $parent), t('Checking database field.')); Index: modules/translation/translation.test =================================================================== RCS file: /cvs/drupal/drupal/modules/translation/translation.test,v retrieving revision 1.3 diff -u -p -r1.3 translation.test --- modules/translation/translation.test 30 May 2008 07:30:53 -0000 1.3 +++ modules/translation/translation.test 25 Oct 2008 00:59:53 -0000 @@ -119,7 +119,7 @@ class TranslationTestCase extends Drupal $this->assertRaw(t('Page %title has been created.', array('%title' => $edit['title'])), t('Page created.')); // Check to make sure the node was created. - $node = node_load(array('title' => $edit['title'])); + $node = array_shift(node_multiple_load(NULL, array('title' => $edit['title']))); $this->assertTrue($node, t('Node found in database.')); return $node; @@ -143,7 +143,7 @@ class TranslationTestCase extends Drupal $this->assertRaw(t('Page %title has been created.', array('%title' => $edit['title'])), t('Translation created.')); // Check to make sure that translation was successfull. - $node = node_load(array('title' => $edit['title'])); + $node = array_shift(node_multiple_load(NULL, array('title' => $edit['title']))); $this->assertTrue($node, t('Node found in database.')); return $node; Index: modules/upload/upload.module =================================================================== RCS file: /cvs/drupal/drupal/modules/upload/upload.module,v retrieving revision 1.213 diff -u -p -r1.213 upload.module --- modules/upload/upload.module 12 Oct 2008 02:42:56 -0000 1.213 +++ modules/upload/upload.module 25 Oct 2008 00:59:53 -0000 @@ -304,10 +304,11 @@ function upload_file_delete(&$file) { /** * Implementation of hook_nodeapi_load(). */ -function upload_nodeapi_load(&$node, $teaser) { - if (variable_get("upload_$node->type", 1) == 1) { - $output = array('files' => upload_load($node)); - return $output; +function upload_nodeapi_load(&$nodes, $types) { + foreach ($nodes as $node) { + if (variable_get("upload_$node->type", 1) == 1) { + $node->files = upload_load($node); + } } }