예제 #1
0
파일: lists.php 프로젝트: Ekleog/platal
 function handler_aaliases($page, $alias = null)
 {
     global $globals;
     require_once 'emails.inc.php';
     $page->setTitle('Administration - Aliases');
     if (Post::has('new_alias')) {
         pl_redirect('admin/aliases/' . Post::t('new_alias') . '@' . $globals->mail->domain);
     }
     // If no alias, list them all.
     if (is_null($alias)) {
         $page->changeTpl('lists/admin_aliases.tpl');
         $page->assign('aliases', array_merge(iterate_list_alias($globals->mail->domain), iterate_list_alias($globals->mail->domain2)));
         return;
     }
     list($local_part, $domain) = explode('@', $alias);
     if (!($globals->mail->domain == $domain || $globals->mail->domain2 == $domain) || !preg_match("/^[a-zA-Z0-9\\-\\.]*\$/", $local_part)) {
         $page->trigErrorRedirect('Le nom de l\'alias est erroné.', $globals->asso('diminutif') . 'admin/aliases');
     }
     // Now we can perform the action.
     if (Post::has('del_alias')) {
         S::assert_xsrf_token();
         delete_list_alias($local_part, $domain);
         $page->trigSuccessRedirect($alias . ' supprimé.', 'admin/aliases');
     }
     if (Post::has('add_member')) {
         S::assert_xsrf_token();
         if (add_to_list_alias(Post::t('add_member'), $local_part, $domain)) {
             $page->trigSuccess('Ajout réussit.');
         } else {
             $page->trigError('Ajout infructueux.');
         }
     }
     if (Get::has('del_member')) {
         S::assert_xsrf_token();
         if (delete_from_list_alias(Get::t('del_member'), $local_part, $domain)) {
             $page->trigSuccess('Suppression réussie.');
         } else {
             $page->trigError('Suppression infructueuse.');
         }
     }
     $page->changeTpl('lists/admin_edit_alias.tpl');
     $page->assign('members', list_alias_members($local_part, $domain));
     $page->assign('alias', $alias);
 }
예제 #2
0
파일: search.php 프로젝트: Ekleog/platal
 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;
 }