+ $page->changeTpl('search/index.tpl', $action == 'mini' ? SIMPLE : SKINNED);
+ $page->addJsLink('ajax.js');
+ $page->assign('public_directory',0);
+ }
+
+ function handler_autocomplete(&$page, $type = null)
+ {
+ // Autocompletion : according to type required, return
+ // a list of results matching with the number of matches.
+ // The output format is :
+ // result1|nb1
+ // result2|nb2
+ // ...
+ header('Content-Type: text/plain; charset="UTF-8"');
+ $q = preg_replace(array('/\*+$/', // always look for $q*
+ '/([\^\$\[\]])/', // escape special regexp char
+ '/\*/'), // replace joker by regexp joker
+ array('',
+ '\\\\\1',
+ '.*'),
+ $_REQUEST['q']);
+ if (!$q) exit();
+
+ // try to look in cached results
+ $cache = XDB::query('SELECT `result`
+ FROM `search_autocomplete`
+ WHERE `name` = {?} AND
+ `query` = {?} AND
+ `generated` > NOW() - INTERVAL 1 DAY',
+ $type, $q);
+ if ($res = $cache->fetchOneCell()) {
+ echo $res;
+ die();
+ }
+
+ // default search
+ $q = preg_quote($q);
+ $unique = '`user_id`';
+ $db = '`auth_user_md5`';
+ $realid = false;
+ $beginwith = true;
+ $field2 = false;
+ $qsearch = $q;
+
+ switch ($type) {
+ case 'binetTxt':
+ $db = '`binets_def` INNER JOIN
+ `binets_ins` ON(`binets_def`.`id` = `binets_ins`.`binet_id`)';
+ $field='`binets_def`.`text`';
+ if (strlen($q) > 2)
+ $beginwith = false;
+ $realid = '`binets_def`.`id`';
+ break;
+ case 'city':
+ $db = '`geoloc_city` INNER JOIN
+ `adresses` ON(`geoloc_city`.`id` = `adresses`.`cityid`)';
+ $unique='`uid`';
+ $field='`geoloc_city`.`name`';
+ break;
+ case 'countryTxt':
+ $db = '`geoloc_pays` INNER JOIN
+ `adresses` ON(`geoloc_pays`.`a2` = `adresses`.`country`)';
+ $unique='`uid`';
+ $field = '`geoloc_pays`.`pays`';
+ $field2 = '`geoloc_pays`.`country`';
+ $realid='`geoloc_pays`.`a2`';
+ break;
+ case 'entreprise':
+ $db = '`entreprises`';
+ $field = '`entreprise`';
+ $unique='`uid`';
+ break;
+ case '`firstname`':
+ $field = '`prenom`';
+ $q = '(^|[ \\-])'.$q;
+ $beginwith = false;
+ break;
+ case 'fonctionTxt':
+ $db = '`fonctions_def` INNER JOIN
+ `entreprises` ON(`entreprises`.`fonction` = `fonctions_def`.`id`)';
+ $field = '`fonction_fr`';
+ $unique = '`uid`';
+ $realid = '`fonctions_def`.`id`';
+ $qsearch = '(^|[ /\\-])'.$q;
+ $beginwith = false;
+ break;
+ case 'groupexTxt':
+ $db = '`groupesx_def` INNER JOIN
+ `groupesx_ins` ON(`groupesx_def`.`id` = `groupesx_ins`.`gid`)';
+ $field='`groupesx_def`.`text`';
+ if (strlen($q) > 2)
+ $beginwith = false;
+ $realid = '`groupesx_def`.`id`';
+ $unique = '`guid`';
+ break;
+ case 'name':
+ $field = '`nom`';
+ $field2 = '`nom_usage`';
+ $qsearch = '(^|[ \\-])'.$q;
+ $beginwith = false;
+ break;
+ case 'nationaliteTxt':
+ $db = '`geoloc_pays` INNER JOIN
+ `auth_user_md5` ON(`geoloc_pays`.`a2` = `auth_user_md5`.`nationalite`)';
+ $field = 'IF(`geoloc_pays`.`nat`=\'\',
+ `geoloc_pays`.`pays`,
+ `geoloc_pays`.`nat`)';
+ $realid = '`geoloc_pays`.`a2`';
+ break;
+ case 'nickname':
+ $field = '`profile_nick`';
+ $db = '`auth_user_quick`';
+ $qsearch = '(^|[ \\-])'.$q;
+ $beginwith = false;
+ break;
+ case 'poste':
+ $db = '`entreprises`';
+ $field = '`poste`';
+ $unique='`uid`';
+ break;
+ case 'schoolTxt':
+ $db = '`applis_def` INNER JOIN
+ `applis_ins` ON(`applis_def`.`id` = `applis_ins`.`aid`)';
+ $field='`applis_def`.`text`';
+ $unique = '`uid`';
+ $realid = '`applis_def`.`id`';
+ if (strlen($q) > 2)
+ $beginwith = false;
+ break;
+ case 'secteurTxt':
+ $db = '`emploi_secteur` INNER JOIN
+ `entreprises` ON(`entreprises`.`secteur` = `emploi_secteur`.`id`)';
+ $field = '`emploi_secteur`.`label`';
+ $realid = '`emploi_secteur`.`id`';
+ $unique = '`uid`';
+ $beginwith = false;
+ break;
+ case 'sectionTxt':
+ $db = '`sections` INNER JOIN
+ `auth_user_md5` ON(`auth_user_md5`.`section` = `sections`.`id`)';
+ $field = '`sections`.`text`';
+ $realid = '`sections`.`id`';
+ $beginwith = false;
+ break;
+ default: exit();