function _node_reference_potential_references_standard in References 7.2
Helper function for node_reference_potential_references().
List of referenceable nodes defined by content types.
1 call to _node_reference_potential_references_standard()
- node_reference_potential_references in node_reference/
node_reference.module - Retrieves an array of candidate referenceable nodes.
File
- node_reference/
node_reference.module, line 895 - Defines a field type for referencing one node from another.
Code
function _node_reference_potential_references_standard($field, $options) {
// Avoid useless work.
if (!count($field['settings']['referenceable_types'])) {
return array();
}
$query = db_select('node', 'n');
if (!user_access('bypass node access')) {
// If the user is able to view their own unpublished nodes, allow them to
// see these in addition to published nodes. Check that they actually have
// some unpublished nodes to view before adding the condition.
if (user_access('view own unpublished content') && ($own_unpublished = db_query('SELECT nid FROM {node} WHERE uid = :uid AND status = :status', array(
':uid' => $GLOBALS['user']->uid,
':status' => NODE_NOT_PUBLISHED,
))
->fetchCol())) {
$query
->condition(db_or()
->condition('n.status', NODE_PUBLISHED)
->condition('n.nid', $own_unpublished, 'IN'));
}
else {
// If not, restrict the query to published nodes.
$query
->condition('n.status', NODE_PUBLISHED);
}
$query
->addTag('node_access');
}
$query
->addField('n', 'nid');
$node_title_alias = $query
->addField('n', 'title', 'node_title');
$node_type_alias = $query
->addField('n', 'type', 'node_type');
$query
->addMetaData('id', ' _node_reference_potential_references_standard')
->addMetaData('field', $field)
->addMetaData('options', $options);
if (is_array($field['settings']['referenceable_types'])) {
$query
->condition('n.type', $field['settings']['referenceable_types'], 'IN');
}
if ($options['string'] !== '') {
switch ($options['match']) {
case 'contains':
$query
->condition('n.title', '%' . $options['string'] . '%', 'LIKE');
break;
case 'starts_with':
$query
->condition('n.title', $options['string'] . '%', 'LIKE');
break;
case 'fuzzy':
$words = explode(' ', $options['string']);
foreach ($words as $word) {
$query
->condition('n.title', '%' . $word . '%', 'LIKE');
}
break;
case 'equals':
// No match type or incorrect match type: use "=".
default:
$query
->condition('n.title', $options['string']);
break;
}
}
if ($options['ids']) {
$query
->condition('n.nid', $options['ids'], 'IN');
}
if ($options['limit']) {
$query
->range(0, $options['limit']);
}
$query
->orderBy($node_title_alias)
->orderBy($node_type_alias);
$result = $query
->execute()
->fetchAll();
$references = array();
foreach ($result as $node) {
$references[$node->nid] = array(
'title' => $node->node_title,
'rendered' => check_plain($node->node_title),
);
}
return $references;
}