View source
<?php
include_once 'search_autocomplete.admin.inc';
function search_autocomplete_autocomplete($string = '') {
global $language;
$matches = array();
$word_items = array();
$node_items = array();
$user_items = array();
$taxo_items = array();
$comment_items = array();
static $max_sug = 0;
$fid = arg(1);
$query = search_parse_query($string);
$word = $query[1][0];
$result = db_fetch_array(db_query('SELECT min_char FROM {search_autocomplete_forms} f WHERE f.fid = %d', $fid));
if (drupal_strlen($word) < $result['min_char']) {
drupal_json($matches);
return;
}
$results = db_query('SELECT * FROM {search_autocomplete_suggestions} s WHERE s.sug_fid = %d AND s.sug_enabled = 1', $fid);
while ($item = db_fetch_array($results)) {
$query = $item['sug_query'];
$prefix = t($item['sug_prefix']);
$params = array(
':like_word' => "'%s'",
':curr_lang' => $language->language,
);
$query = strtr($query, $params);
$suggestions = db_query($query, '%' . $word . '%');
while ($obj = db_fetch_object($suggestions)) {
$sug_obj_vals = array_values(get_object_vars($obj));
$sug_elem = array_shift($sug_obj_vals);
$sug_link_vals = array_values(get_object_vars($obj));
$sug_link = array_pop($sug_link_vals);
$sug = html_entity_decode(check_plain($sug_elem), ENT_QUOTES);
$sug_url = html_entity_decode(check_plain($sug_link), ENT_QUOTES);
$sug_pref = trim($prefix) . ' ' . $sug;
$matches[trim($sug_pref)] = url(trim($sug_url));
}
}
drupal_json($matches);
}
function search_autocomplete_init() {
global $base_url;
global $language;
if (user_access('use Search Autocomplete')) {
$settings = array();
if (db_table_exists('search_autocomplete_forms')) {
$results = db_query('SELECT * FROM {search_autocomplete_forms} WHERE enabled=1');
while ($match = db_fetch_array($results)) {
$form_id = 'form' . $match['fid'];
$params = array(
':lang_code' => $language->language,
':lang_prefix' => $language->prefix,
':lang_domain' => $language->domain,
);
search_autocomplete_replaceArguments($match['selector'], $params);
drupal_add_js(array(
'search_autocomplete' => array(
$form_id => array(
'selector' => $match['selector'],
'minChars' => $match['min_char'],
'max_sug' => $match['max_sug'],
'url' => url('search_autocomplete/' . $match['fid']) . '/autocomplete',
'fid' => $match['fid'],
),
),
), 'setting');
}
if ($results) {
drupal_add_css(drupal_get_path('module', 'search_autocomplete') . '/css/jquery.autocomplete.css');
drupal_add_js(drupal_get_path('module', 'search_autocomplete') . '/js/jquery.autocomplete.js');
}
}
}
}
function search_autocomplete_replaceArguments(&$input, &$args) {
$modified = FALSE;
foreach ($args as $key => $data) {
$input = preg_replace('#' . $key . '#', $data, $input);
$modified = TRUE;
}
return $modified;
}