+ function make_field_test($fields, $beginwith) {
+ $tests = array();
+ $tests[] = $fields . ' LIKE CONCAT({?}, \'%\')';
+ if (!$beginwith) {
+ $tests[] = $fields . ' LIKE CONCAT(\'% \', {?}, \'%\')';
+ $tests[] = $fields . ' LIKE CONCAT(\'%-\', {?}, \'%\')';
+ }
+ return '(' . implode(' OR ', $tests) . ')';
+ }
+ $field_select = $field;
+ $field_t = make_field_test($field, $beginwith);
+ if ($field2) {
+ $field2_t = make_field_test($field2, $beginwith);
+ $field_select = 'IF(' . $field_t . ', ' . $field . ', ' . $field2. ')';
+ }
+ $list = XDB::iterator('SELECT ' . $field_select . ' AS field,
+ COUNT(DISTINCT ' . $unique . ') AS nb
+ ' . ($realid ? (', ' . $realid . ' AS id') : '') . '
+ FROM ' . $db . '
+ WHERE ' . $field_t .
+ ($field2 ? (' OR ' . $field2_t) : '') . '
+ GROUP BY ' . $field_select . '
+ ORDER BY nb DESC
+ LIMIT 11',
+ $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch,
+ $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch, $qsearch);
+ $nbResults = 0;
+ $res = "";
+ while ($result = $list->next()) {
+ $nbResults++;
+ if ($nbResults == 11) {
+ $res .= '...|1'."\n";
+ } else {
+ $res .= $result['field'].'|';
+ $res .= $result['nb'];
+ if (isset($result['id'])) {
+ $res .= '|'.$result['id'];
+ }
+ $res .= "\n";
+ }
+ }
+ XDB::query('REPLACE INTO `search_autocomplete`
+ VALUES ({?}, {?}, {?}, NOW())',
+ $type, $q, $res);
+ echo $res;
+ exit();
+ }
+
+ function handler_list(&$page, $type = null, $idVal = null)
+ {
+ // Give the list of all values possible of type and builds a select input for it
+ $field = '`text`';
+ $id = '`id`';
+ $where = '';
+
+ switch ($type) {
+ case 'binet':
+ $db = '`binets_def`';
+ break;
+ case 'country':
+ $db = '`geoloc_pays`';
+ $field = '`pays`';
+ $id = '`a2`';
+ $page->assign('onchange', 'changeCountry(this.value)');
+ break;
+ case 'fonction':
+ $db = '`fonctions_def`';
+ $field = '`fonction_fr`';
+ break;
+ case 'diploma':
+ header('Content-Type: text/xml; charset="UTF-8"');
+ $this->get_diplomas();
+ $page->changeTpl('search/adv.grade.form.tpl', NO_SKIN);
+ return;
+ case 'groupex':
+ $db = 'groupex.asso';
+ $where = " WHERE (cat = 'GroupesX' OR cat = 'Institutions') AND pub = 'public'";
+ $field = 'nom';
+ break;
+ case 'nationalite':
+ $db = '`geoloc_pays` INNER JOIN
+ `auth_user_md5` ON (`geoloc_pays`.`a2` = `auth_user_md5`.`nationalite`)';
+ $field = 'IF(`nat`=\'\', `pays`, `nat`)';
+ $id = '`a2`';
+ break;
+ case 'region':
+ $db = '`geoloc_region`';
+ $field = '`name`';
+ $id = '`region`';
+ if (isset($_REQUEST['country'])) {
+ $where .= ' WHERE `a2` = "'.$_REQUEST['country'].'"';
+ }
+ break;
+ case 'school':
+ $db = '`applis_def`';
+ $page->assign('onchange', 'changeSchool(this.value)');
+ break;
+ case 'section':
+ $db = '`sections`';
+ break;
+ case 'secteur':
+ $db = '`emploi_secteur`';
+ $field = '`label`';
+ break;
+ default: exit();
+ }
+ if (isset($idVal)) {
+ header('Content-Type: text/plain; charset="UTF-8"');
+ $result = XDB::query('SELECT '.$field.' AS field FROM '.$db.' WHERE '.$id.' = {?} LIMIT 1',$idVal);
+ echo $result->fetchOneCell();
+ exit();
+ }
+ header('Content-Type: text/xml; charset="UTF-8"');
+ $page->changeTpl('include/field.select.tpl', NO_SKIN);
+ $page->assign('name', $type);
+ $page->assign('list', XDB::iterator('SELECT '.$field.' AS field,
+ '.$id.' AS id
+ FROM '.$db.$where.'
+ GROUP BY '.$field.'
+ ORDER BY '.$field));
+ $page->assign('with_text_value', true);
+ $page->assign('onchange', "document.forms.recherche.{$type}Txt.value = this.options[this.selectedIndex].text");