Example #1
0
 function handler_autocomplete($page, $type = null, $sub_id = 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
     //   ...
     pl_content_headers("text/plain");
     $q = preg_replace(array('/\\*+$/', '/([\\^\\$\\[\\]])/', '/\\*/'), array('', '\\\\\\1', '.*'), Get::t('term'));
     if (!$q) {
         exit;
     }
     if (!is_null($sub_id)) {
         $query = $q . "\t" . $sub_id;
     } else {
         $query = $q;
     }
     // Try to look in cached results.
     $cached = false;
     $cache = XDB::query('SELECT  result
                            FROM  search_autocomplete
                           WHERE  name = {?} AND query = {?} AND generated > NOW() - INTERVAL 1 DAY', $type, $query);
     if ($cache->numRows() > 0) {
         $cached = true;
         $data = explode("\n", $cache->fetchOneCell());
         $list = array();
         foreach ($data as $line) {
             if ($line != '') {
                 $aux = explode("\t", $line);
                 $item = array('field' => $aux[0], 'nb' => $aux[1], 'id' => $aux[2]);
                 $item['value'] = self::format_autocomplete($item);
                 array_push($list, $item);
             }
         }
     } else {
         $enums = array('binet_text' => DirEnum::BINETS, 'groupex_text' => DirEnum::GROUPESX, 'section_text' => DirEnum::SECTIONS, 'networking_type_text' => DirEnum::NETWORKS, 'locality_text' => DirEnum::LOCALITIES, 'country_text' => DirEnum::COUNTRIES, 'entreprise' => DirEnum::COMPANIES, 'jobterm_text' => DirEnum::JOBTERMS, 'description' => DirEnum::JOBDESCRIPTION, 'nationalite_text' => DirEnum::NATIONALITIES, 'school_text' => DirEnum::EDUSCHOOLS);
         if (!array_key_exists($type, $enums)) {
             exit;
         }
         if (is_null($sub_id)) {
             $list = DirEnum::getAutoComplete($enums[$type], $q);
         } else {
             $list = DirEnum::getAutoComplete($enums[$type], $q, $sub_id);
         }
         $to_cache = '';
         foreach ($list as &$item) {
             $to_cache .= $item['field'] . "\t" . $item['nb'] . "\t" . $item['id'] . "\n";
             $item['value'] = self::format_autocomplete($item);
         }
     }
     $count = count($list);
     if ($count == DirEnumeration::AUTOCOMPLETE_LIMIT) {
         $list[] = array('value' => '…', 'field' => '', 'nb' => 0, 'id' => -1);
     } elseif ($count == 0) {
         $list[] = array('value' => 'Aucun camarade trouvé pour ' . $q . '.', 'field' => '', 'nb' => 0, 'id' => -1);
     }
     if (!$cached) {
         XDB::query('INSERT INTO  search_autocomplete (name, query, result, generated)
                          VALUES  ({?}, {?}, {?}, NOW())
         ON DUPLICATE KEY UPDATE  result = VALUES(result), generated = VALUES(generated)', $type, $query, $to_cache);
     }
     echo json_encode($list);
     exit;
 }