+ $enums = array(
+ 'binetTxt' => DirEnum::BINETS,
+ 'groupexTxt' => DirEnum::GROUPESX,
+ 'sectionTxt' => DirEnum::SECTIONS,
+ 'networking_typeTxt' => DirEnum::NETWORKS,
+ 'city' => DirEnum::LOCALITIES,
+ 'countryTxt' => DirEnum::COUNTRIES,
+ 'entreprise' => DirEnum::COMPANIES,
+ 'jobtermTxt' => DirEnum::JOBTERMS,
+ 'description' => DirEnum::JOBDESCRIPTION,
+ 'nationaliteTxt' => DirEnum::NATIONALITIES,
+ 'schoolTxt' => DirEnum::EDUSCHOOLS,
+ );
+ if (!array_key_exists($type, $enums)) {
+ exit();
+ }
+
+ $enum = $enums[$type];
+
+ $list = DirEnum::getAutoComplete($enum, $q);
+ $nbResults = 0;
+ $res = "";
+ while ($result = $list->next()) {
+ $nbResults++;
+ if ($nbResults == 11) {
+ $res .= $q."|-1\n";
+ } else {
+ $res .= $result['field'].'|';
+ if (isset($result['nb'])) {
+ $res .= $result['nb'];
+ }
+ if (isset($result['id'])) {
+ $res .= '|'.$result['id'];
+ }
+ $res .= "\n";
+ }
+ }
+ if ($nbResults == 0) {
+ $res = $q."|-2\n";
+ }
+ XDB::query('INSERT INTO search_autocomplete (name, query, result, generated)
+ VALUES ({?}, {?}, {?}, NOW())
+ ON DUPLICATE KEY UPDATE result = VALUES(result), generated = VALUES(generated)',
+ $type, $q, $res);
+ echo $res;
+ exit();
+ }
+
+ function handler_list($page, $type = null, $idVal = null)
+ {
+ $page->assign('name', $type);
+ $page->assign('with_text_value', true);
+ $page->assign('onchange', "document.forms.recherche.{$type}Txt.value = this.options[this.selectedIndex].text");
+
+ // Give the list of all values possible of type and builds a select input for it
+ $ids = null;
+
+ switch ($type) {
+ case 'binet':
+ $ids = DirEnum::getOptionsIter(DirEnum::BINETS);
+ break;
+ case 'networking_type':
+ $ids = DirEnum::getOptionsIter(DirEnum::NETWORKS);
+ break;
+ case 'country':
+ $ids = DirEnum::getOptionsIter(DirEnum::COUNTRIES);
+ $page->assign('onchange', 'changeCountry(this.value)');
+ break;
+ case 'diploma':
+ if (Env::has('school') && Env::i('school') != 0) {
+ $ids = DirEnum::getOptionsIter(DirEnum::EDUDEGREES, Env::i('school'));
+ } else {
+ $ids = DirEnum::getOptionsIter(DirEnum::EDUDEGREES);
+ }
+ break;
+ case 'groupex':
+ $ids = DirEnum::getOptionsIter(DirEnum::GROUPESX);
+ break;
+ case 'nationalite':
+ $ids = DirEnum::getOptionsIter(DirEnum::NATIONALITIES);
+ break;
+ case 'administrativearea':
+ if (Env::has('country')) {
+ $ids = DirEnum::getOptionsIter(DirEnum::ADMINAREAS, Env::v('country'));
+ } else {
+ $ids = DirEnum::getOptionsIter(DirEnum::ADMINAREAS);
+ }
+ $page->assign('onchange', 'changeAdministrativeArea(this.value)');
+ break;
+ case 'subadministrativearea':
+ if (Env::has('administrativearea')) {
+ $ids = DirEnum::getOptionsIter(DirEnum::SUBADMINAREAS, Env::v('administrativearea'));
+ } else {
+ $ids = DirEnum::getOptionsIter(DirEnum::SUBADMINAREAS);
+ }
+ break;
+ case 'school':
+ $ids = DirEnum::getOptionsIter(DirEnum::EDUSCHOOLS);
+ $page->assign('onchange', 'changeSchool(this.value)');
+ break;
+ case 'section':
+ $ids = DirEnum::getOptionsIter(DirEnum::SECTIONS);
+ break;
+ case 'jobterm':
+ if (Env::has('jtid')) {
+ JobTerms::ajaxGetBranch($page, JobTerms::ONLY_JOBS);
+ return;
+ } else {
+ pl_content_headers('text/xml');
+ echo '<div>'; // global container so that response is valid xml
+ echo '<input name="jobtermTxt" type="text" style="display:none" size="32" />';
+ echo '<input name="jobterm" type="hidden"/>';
+ echo '<div class="term_tree"></div>'; // container where to create the tree
+ echo '<script type="text/javascript" src="javascript/jquery.jstree.js"></script>';
+ echo '<script type="text/javascript" src="javascript/jobtermstree.js"></script>';
+ echo '<script type="text/javascript">createJobTermsTree(".term_tree", "search/list/jobterm", "search", "searchForJobTerm");</script>';
+ echo '</div>';
+ exit();
+ }
+ default: exit();
+ }
+ if (isset($idVal)) {
+ pl_content_headers("text/plain");
+ echo $ids[$idVal];
+ exit();
+ }
+ pl_content_headers("text/xml");
+ $page->changeTpl('include/field.select.tpl', NO_SKIN);
+ $page->assign('list', $ids);