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); }
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; }