function nodequeue_api_autocomplete in Nodequeue 7.2
Same name and namespace in other branches
- 5.2 nodequeue.module \nodequeue_api_autocomplete()
- 6.2 nodequeue.module \nodequeue_api_autocomplete()
- 7.3 nodequeue.module \nodequeue_api_autocomplete()
Fetch a list of nodes available to a given subqueue for autocomplete.
Parameters
$queue: The queue that owns the subqueue
$subqueue: The subqueue
$string: The string being matched.
Return value
array An keyed array $nid => $title
2 calls to nodequeue_api_autocomplete()
File
- ./
nodequeue.module, line 2201 - Maintains queues of nodes in arbitrary order.
Code
function nodequeue_api_autocomplete($queue, $subqueue, $string) {
$matches = array();
if (empty($string)) {
return $matches;
}
$query = db_select('node', 'n')
->addTag('node_access')
->fields('n', array(
'nid',
'tnid',
'title',
))
->range(0, variable_get('nodequeue_autocomplete_limit', 10));
if (!empty($queue->types)) {
$query
->condition('n.type', $queue->types, 'IN');
}
global $user;
if (!user_access('administer nodes', $user)) {
$query
->condition(db_or()
->condition('n.status', 1)
->condition('n.uid', $user->uid));
}
// Run a match to see if they're specifying by nid.
$preg_matches = array();
$match = preg_match('/\\[nid: (\\d+)\\]/', $string, $preg_matches);
if (!$match) {
$match = preg_match('/^nid: (\\d+)/', $string, $preg_matches);
}
if ($match) {
// If it found a nid via specification, reduce our resultset to just that nid.
$query
->condition('n.nid', $preg_matches[1]);
}
else {
// Build the constant parts of the query.
$query
->where('LOWER(n.title) LIKE LOWER(:string)', array(
':string' => '%' . db_like($string) . '%',
));
}
$query
->addMetaData('queue', $queue);
$query
->addMetaData('subqueue', $subqueue);
$query
->addTag('nodequeue_api_autocomplete');
$query
->addTag('i18n_select');
$result = $query
->execute();
// Call to hook_nodequeue_api_autocomplete.
$matches = module_invoke_all('nodequeue_api_autocomplete', $queue, $subqueue, $string, $result);
if (!empty($matches)) {
return $matches;
}
foreach ($result as $node) {
$id = nodequeue_get_content_id($queue, $node);
$matches[$node->nid] = check_plain($node->title) . " [nid: {$id}]";
}
return $matches;
}