diff --git a/node_reference/node_reference.module b/node_reference/node_reference.module index 726ad3a..dd0d152 100644 --- a/node_reference/node_reference.module +++ b/node_reference/node_reference.module @@ -239,7 +239,7 @@ function node_reference_field_prepare_view($entity_type, $entities, $field, $ins $missing_ids = array_diff($ids, array_keys($fetched_nodes)); if (!empty($missing_ids)) { $query = db_select('node', 'n') - ->fields('n') + ->fields('n', array('nid')) ->addTag('node_access'); $condition = db_and() ->condition('n.nid', $missing_ids, 'IN') @@ -255,7 +255,8 @@ function node_reference_field_prepare_view($entity_type, $entities, $field, $ins } } $query->condition($condition); - $fetched_nodes += $query->execute()->fetchAllAssoc('nid'); + $nids = $query->execute()->fetchCol(); + $fetched_nodes = node_load_multiple($nids); } foreach ($items as $id => $entity_items) { @@ -393,18 +394,19 @@ function node_reference_field_formatter_view($entity_type, $entity, $field, $ins foreach ($items as $delta => $item) { if ($item['access']) { $node = $item['node']; + $title = entity_label('node', $node); if ($display['type'] == 'node_reference_default') { $uri = entity_uri('node', $node); $result[$delta] = array( '#type' => 'link', - '#title' => $node->title, + '#title' => $title, '#href' => $uri['path'], '#options' => $uri['options'], ); } else { $result[$delta] = array( - '#markup' => check_plain($node->title), + '#markup' => check_plain($title), ); } if (!$node->status) { @@ -465,7 +467,7 @@ function node_reference_field_formatter_view($entity_type, $entity, $field, $ins $uri = entity_uri('node', $node); $result[$delta] = array( '#type' => 'link', - '#title' => $node->title, + '#title' => entity_label('node', $node), '#href' => $uri['path'], '#options' => $uri['options'], ); @@ -570,16 +572,9 @@ function node_reference_autocomplete_value($element, $input = FALSE, $form_state // "node title [nid:n]". $nid = $element['#default_value']; if (!empty($nid)) { - $q = db_select('node', 'n'); - $node_title_alias = $q->addField('n', 'title'); - $q->addTag('node_access') - ->condition('n.nid', $nid) - ->range(0, 1); - $result = $q->execute(); // @todo If no result (node doesn't exist or no access). - $value = $result->fetchField(); - $value .= ' [nid:' . $nid . ']'; - return $value; + $node = node_load($nid); + return entity_label('node', $node) . " [nid:$nid]"; } } } @@ -759,9 +754,7 @@ function _node_reference_potential_references_standard($field, $options) { } $query = db_select('node', 'n'); - $node_nid_alias = $query->addField('n', 'nid'); - $node_title_alias = $query->addField('n', 'title', 'node_title'); - $node_type_alias = $query->addField('n', 'type', 'node_type'); + $query->fields('n', array('nid', 'title', 'type')); $query->addTag('node_access'); $query->addMetaData('id', ' _node_reference_potential_references_standard'); @@ -794,16 +787,18 @@ function _node_reference_potential_references_standard($field, $options) { $query->range(0, $options['limit']); } - $query - ->orderBy($node_title_alias) - ->orderBy($node_type_alias); + $query->orderBy('n.title'); + $query->orderBy('n.type'); + + $nids = $query->execute()->fetchCol(); + $nodes = node_load_multiple($nids); - $result = $query->execute()->fetchAll(); $references = array(); - foreach ($result as $node) { + foreach ($nodes as $node) { + $title = entity_label('node', $node); $references[$node->nid] = array( - 'title' => $node->node_title, - 'rendered' => check_plain($node->node_title), + 'title' => $title, + 'rendered' => check_plain($title), ); } return $references; diff --git a/user_reference/user_reference.module b/user_reference/user_reference.module index e1b226f..7f48f62 100644 --- a/user_reference/user_reference.module +++ b/user_reference/user_reference.module @@ -254,27 +254,30 @@ function user_reference_field_formatter_view($entity_type, $entity, $field, $ins // @todo Optimisation: use hook_field_formatter_prepare_view() to load // user names or full user entities in 'multiple' mode. - // Collect the list of user ids. + // Collect the list of user ids and account objects. $uids = array(); foreach ($items as $delta => $item) { $uids[$item['uid']] = $item['uid']; } + $accounts = user_load_multiple($uids); switch ($display['type']) { case 'user_reference_default': case 'user_reference_plain': - $titles = _user_reference_get_user_names($uids); foreach ($items as $delta => $item) { if ($display['type'] == 'user_reference_default') { + $uri = entity_uri('user', $accounts[$item['uid']]); + $title = entity_label('user', $accounts[$item['uid']]); $result[$delta] = array( '#type' => 'link', - '#title' => $titles[$item['uid']], - '#href' => 'user/' . $item['uid'], + '#title' => $title, + '#href' => $uri['path'], + '#options' => $uri['options'], ); } else { $result[$delta] = array( - '#markup' => check_plain($titles[$item['uid']]), + '#markup' => check_plain($title), ); } } @@ -285,40 +288,6 @@ function user_reference_field_formatter_view($entity_type, $entity, $field, $ins } /** - * Helper function for widgets and formatters. - * - * Store user names collected in the curent request. - */ -function _user_reference_get_user_names($uids, $known_titles = array()) { - $titles = &drupal_static(__FUNCTION__, array()); - - // Save titles we receive. - $titles += $known_titles; - - // Collect nids to retrieve from database. - $uids_query = array(); - foreach ($uids as $uid) { - if (!isset($titles[$uid])) { - $uids_query[] = $uid; - } - } - if ($uids_query) { - $query = db_select('users', 'u') - ->fields('u', array('uid', 'name')) - ->condition('u.uid', $uids); - $titles += $query->execute()->fetchAllKeyed(); - } - - // Build the results array. - $return = array(); - foreach ($uids as $uid) { - $return[$uid] = isset($titles[$uid]) ? $titles[$uid] : ''; - } - - return $return; -} - -/** * Implements hook_field_widget_info(). */ function user_reference_field_widget_info() { @@ -405,16 +374,9 @@ function user_reference_autocomplete_value($element, $input = FALSE, $form_state // "user name [uid:n]". $uid = $element['#default_value']; if (!empty($uid)) { - $q = db_select('users', 'u'); - $q->addField('u', 'name'); - - $q->condition('u.uid', $uid) - ->range(0, 1); - $result = $q->execute(); // @todo If no result (user doesn't exist). - $value = $result->fetchField(); - $value .= ' [uid:' . $uid . ']'; - return $value; + $account = user_load($uid); + return entity_label('user', $account) . " [uid:$uid]"; } } } @@ -437,8 +399,8 @@ function user_reference_autocomplete_validate($element, &$form_state, $form) { // the uid. list(, $name, $uid) = $matches; if (!empty($name)) { - $names = _user_reference_get_user_names(array($uid)); - if ($name != $names[$uid]) { + $account = user_load($uid); + if ($name != format_username($account)) { form_error($element, t('%name: name mismatch. Please check your selection.', array('%name' => $instance['label']))); } } @@ -589,11 +551,9 @@ function _user_reference_potential_references_standard($field, $options) { return array(); } - $query = db_select('users', 'u') - ->addMetaData('id', ' _user_reference_potential_references_standard') - // Select the whole record, so that format_username() has enough - // information. - ->fields('u'); + $query = db_select('users', 'u'); + $query->fields('u', array('uid', 'name')); + $query->addMetaData('id', ' _user_reference_potential_references_standard'); // Enable this filter only if any statuses checked (and not both). if (count($filter_status) == 1) { @@ -635,12 +595,15 @@ function _user_reference_potential_references_standard($field, $options) { } $query->orderBy('u.name'); - $result = $query->execute()->fetchAll(); + $uids = $query->execute()->fetchCol(); + $accounts = user_load_multiple($uids); + $references = array(); - foreach ($result as $account) { + foreach ($accounts as $account) { + $title = entity_label('user', $account); $references[$account->uid] = array( - 'title' => $account->name, - 'rendered' => check_plain(format_username($account)), + 'title' => $title, + 'rendered' => check_plain($title), ); } return $references;