public function __construct() { global $globals; parent::__construct(); // Set the default page $this->changeTpl('platal/index.tpl'); if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { $this->addJsLink('json2.js'); } $this->addJsLink('jquery.xorg.js'); $this->addJsLink('overlib.js'); $this->addJsLink('core.js'); $this->addJsLink('xorg.js'); if ($globals->core->sentry_js_dsn) { $this->addJsLink('raven.min.js'); } $this->setTitle('le site des élèves et anciens élèves de l\'École polytechnique'); if (S::logged() && S::user()->checkPerms('admin')) { $types = array(S::user()->type); $perms = DirEnum::getOptions(DirEnum::ACCOUNTTYPES); ksort($perms); foreach ($perms as $type => $perm) { if (!empty($perm) && $type != $types[0]) { $types[] = $type; } } $this->assign('account_types_list', $types); $skins = DirEnum::getOptions(DirEnum::SKINS); asort($skins); $this->assign('skin_list', $skins); } }
public function getText($value) { $medalsList = DirEnum::getOptions(DirEnum::MEDALS); $medals = array(); foreach ($value as $id => $medal) { $medals[] = $medalsList[$id]; } return implode(', ', $medals); }
protected function buildEntry($pf) { global $globals; $pf = $pf['value']; $entry = new PlVCardEntry($pf->firstNames(), $pf->lastNames(), null, null, $pf->nickname); $user = $pf->owner(); // Free text $freetext = '(' . $pf->promo . ')'; if ($this->freetext) { $freetext .= "\n" . $this->freetext; } $entry->set('NOTE', $freetext); if ($pf->mobile) { $entry->addTel(null, $pf->mobile, false, true, true, false, true, true); } // Emails if (!is_null($user)) { $entry->addMail(null, $user->bestalias, true); if ($user->forlife != $user->bestalias) { $entry->addMail(null, $user->forlife); } if ($user->forlife_alternate != $user->bestalias) { $entry->addMail(null, $user->forlife_alternate); } } // Homes $adrs = $pf->iterAddresses(Profile::ADDRESS_PERSO); while ($adr = $adrs->next()) { if (!$adr->postalCode || !$adr->locality || !$adr->country) { $group = $entry->addHome($adr->text, null, null, null, null, $adr->administrativeArea, null, $adr->hasFlag('current'), $adr->hasFlag('mail'), $adr->hasFlag('mail')); } else { $group = $entry->addHome(trim(Geocoder::getFirstLines($adr->text, $adr->postalCode, 4)), null, null, $adr->postalCode, $adr->locality, $adr->administrativeArea, $adr->country, $adr->hasFlag('current'), $adr->hasFlag('mail'), $adr->hasFlag('mail')); } foreach ($adr->phones() as $phone) { if ($phone->link_type == Phone::TYPE_FIXED) { $entry->addTel($group, $phone->display, false, true, true, false, false, $adr->hasFlag('current') && empty($pf->mobile)); } else { if ($phone->link_type == Phone::TYPE_FAX) { $entry->addTel($group, $phone->display, true, false, false, false, false, false); } } } } // Pro $jobs = $pf->getJobs(); foreach ($jobs as $job) { $terms_array = array(); foreach ($job->terms as $term) { $terms_array[] = $term->full_name; } $terms = implode(', ', $terms_array); if ($job->address) { if (!$job->address->postalCode || !$job->address->locality || !$job->address->country) { $group = $entry->addWork($job->company->name, null, $job->description, $terms, $job->address->text, null, null, null, null, $job->address->administrativeArea, null); } else { $group = $entry->addWork($job->company->name, null, $job->description, $terms, trim(Geocoder::getFirstLines($job->address->text, $job->address->postalCode, 4)), null, null, $job->address->postalCode, $job->address->locality, $job->address->administrativeArea, $job->address->country); } } else { $group = $entry->addWork($job->company->name, null, $job->description, $terms, null, null, null, null, null, null, null); } if ($job->user_email) { $entry->addMail($group, $job->user_email); } foreach ($job->phones as $phone) { if ($phone->type == Phone::TYPE_MOBILE) { $entry->addTel($group, $phone->display, false, true, true, false, true); } else { if ($phone->type == Phone::TYPE_FAX) { $entry->addTel($group, $phone->display, true); } else { $entry->addTel($group, $phone->display, false, true, true); } } } } // Melix if (!is_null($user)) { $alias = $user->emailAlias(); if (!is_null($alias) && $pf->alias_pub == 'public') { $entry->addMail(null, $alias); } } // Custom fields if (!is_null($user)) { $groups = $user->groups(true, true); if (count($groups)) { $gn = DirEnum::getOptions(DirEnum::GROUPESX); $gns = array(); foreach (array_keys($groups) as $gid) { $gns[$gid] = $gn[$gid]; } $entry->set('X-GROUPS', join(', ', $gns)); } } $binets = $pf->getBinets(); if (count($binets)) { $bn = DirEnum::getOptions(DirEnum::BINETS); $bns = array(); foreach ($binets as $bid) { $bns[$bid] = $bn[$bid]; } $entry->set('X-BINETS', join(', ', $bns)); } if (!empty($pf->section)) { $entry->set('X-SECTION', $pf->section); } // Photo if ($this->photos) { $res = XDB::query("SELECT attach, attachmime\n FROM profile_photos\n WHERE pid = {?} AND pub IN ('public', {?})", $pf->id(), $this->visibility->level()); if ($res->numRows()) { list($data, $type) = $res->fetchOneRow(); $entry->setPhoto($data, strtoupper($type)); } } return $entry; }
/** Import de l'annuaire de l'AX depuis l'export situé dans le home de jacou */ function handler_import($page, $action = 'index', $file = '') { global $globals; if ($action == 'index') { $page->changeTpl('fusionax/import.tpl'); return; } // toutes les actions sont faites en ajax en utilisant jquery header('Content-type: text/javascript; charset=utf-8'); // log des actions $report = array(); $modulepath = realpath(dirname(__FILE__) . '/fusionax/') . '/'; $spoolpath = realpath(dirname(__FILE__) . '/../spool/fusionax/') . '/'; if ($action == 'launch') { if ($file == '') { $report[] = 'Nom de fichier non renseigné.'; } elseif (!file_exists(dirname(__FILE__) . '/../spool/fusionax/' . $file)) { $report[] = 'Le fichier ne se situe pas au bon endroit.'; } else { // séparation de l'archive en fichiers par tables $file = $spoolpath . $file; // Split export into specialised files exec('grep "^AD" ' . $file . ' > ' . $spoolpath . 'Adresses.txt'); exec('grep "^AN" ' . $file . ' > ' . $spoolpath . 'Anciens.txt'); exec('grep "^FO.[0-9]\\{4\\}[MD][0-9]\\{3\\}.Etudiant" ' . $file . ' > ' . $spoolpath . 'Formations_MD.txt'); exec('grep "^FO.[0-9]\\{4\\}[MD][0-9]\\{3\\}.Doct. de" ' . $file . ' >> ' . $spoolpath . 'Formations_MD.txt'); exec('grep "^FO" ' . $file . ' > ' . $spoolpath . 'Formations.txt'); exec('grep "^AC" ' . $file . ' > ' . $spoolpath . 'Activites.txt'); exec('grep "^EN" ' . $file . ' > ' . $spoolpath . 'Entreprises.txt'); exec($modulepath . 'formation.pl'); exec('mv -f ' . $spoolpath . 'Formations_out.txt ' . $spoolpath . 'Formations.txt'); exec('mv -f ' . $spoolpath . 'Formations_MD_out.txt ' . $spoolpath . 'Formations_MD.txt'); $report[] = 'Fichier parsé.'; $report[] = 'Import dans la base en cours...'; XDB::execute("UPDATE profiles\n SET ax_id = NULL\n WHERE ax_id = ''"); $next = 'integrateSQL'; } } elseif ($action == 'integrateSQL') { // intégration des données dans la base MySQL // liste des fichiers sql à exécuter $filesSQL = array(0 => 'Activites.sql', 1 => 'Adresses.sql', 2 => 'Anciens.sql', 3 => 'Formations.sql', 4 => 'Entreprises.sql', 5 => 'Formations_MD.sql'); if ($file != '') { // récupère le contenu du fichier sql $queries = explode(';', file_get_contents($modulepath . $filesSQL[$file])); $db = mysqli_init(); $db->options(MYSQLI_OPT_LOCAL_INFILE, true); $db->real_connect($globals->dbhost, $globals->dbuser, $globals->dbpwd, $globals->dbdb); $db->autocommit(true); $db->set_charset($globals->dbcharset); foreach ($queries as $q) { if (trim($q)) { // coupe le fichier en requêtes individuelles if (substr($q, 0, 2) == '--') { // affiche les commentaires dans le report $lines = explode("\n", $q); $l = $lines[0]; $report[] = addslashes($l); } // exécute la requête $res = $db->query(str_replace('{?}', $spoolpath, $q)); if ($res === false) { throw new XDBException($q, $db->error); } } } $db->close(); // trouve le prochain fichier à exécuter $nextfile = $file + 1; } else { $nextfile = 0; } if ($nextfile > 5) { // tous les fichiers ont été exécutés, on passe à l'étape suivante $next = 'adds1920'; } else { // on passe au fichier suivant $next = 'integrateSQL/' . $nextfile; } } elseif ($action == 'adds1920') { // Adds promotion 1920 from AX db. $report[] = 'Ajout de la promotion 1920'; $res = XDB::iterator('SELECT prenom, Nom_complet, ax_id FROM fusionax_anciens WHERE promotion_etude = 1920;'); $eduSchools = DirEnum::getOptions(DirEnum::EDUSCHOOLS); $eduSchools = array_flip($eduSchools); $eduDegrees = DirEnum::getOptions(DirEnum::EDUDEGREES); $eduDegrees = array_flip($eduDegrees); $degreeid = $eduDegrees[Profile::DEGREE_X]; $entry_year = 1920; $grad_year = 1923; $promo = 'X1920'; $hrpromo = '1920'; $sex = 'male'; $xorgId = 19200000; $type = 'x'; while ($new = $res->next()) { $firstname = $new['prenom']; $lastname = $new['Nom_complet']; $ax_id = $new['ax_id']; $hrid = User::makeHrid($firstname, $lastname, $hrpromo); $res1 = XDB::query('SELECT COUNT(*) FROM accounts WHERE hruid = {?}', $hrid); $res2 = XDB::query('SELECT COUNT(*) FROM profiles WHERE hrpid = {?}', $hrid); if (is_null($hrid) || $res1->fetchOneCell() > 0 || $res2->fetchOneCell() > 0) { $report[] = $ax_id . ' non ajouté'; } $fullName = $firstname . ' ' . $lastname; $directoryName = $lastname . ' ' . $firstname; ++$xorgId; XDB::execute('INSERT INTO profiles (hrpid, xorg_id, ax_id, sex) VALUES ({?}, {?}, {?}, {?})', $hrid, $xorgId, $ax_id, $sex); $pid = XDB::insertId(); XDB::execute('INSERT INTO profile_public_names (pid, lastname_initial, firstname_initial, lastname_main, firstname_main) VALUES ({?}, {?}, {?}, {?}, {?})', $pid, $lastname, $firstname, $lastname, $firstname); XDB::execute('INSERT INTO profile_display (pid, yourself, public_name, private_name, directory_name, short_name, sort_name, promo) VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})', $pid, $firstname, $fullName, $fullName, $directoryName, $fullName, $directoryName, $promo); XDB::execute('INSERT INTO profile_education (pid, eduid, degreeid, entry_year, grad_year, flags) VALUES ({?}, {?}, {?}, {?}, {?}, {?})', $pid, $eduSchools[Profile::EDU_X], $degreeid, $entry_year, $grad_year, 'primary'); XDB::execute('INSERT INTO accounts (hruid, type, is_admin, state, full_name, directory_name, display_name, lastname, firstname, sex) VALUES ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})', $hrid, $type, 0, 'pending', $fullName, $directoryName, $firstname, $lastname, $firstname, $sex); $uid = XDB::insertId(); XDB::execute('INSERT INTO account_profiles (uid, pid, perms) VALUES ({?}, {?}, {?})', $uid, $pid, 'owner'); } $report[] = 'Promo 1920 ajoutée.'; $next = 'view'; } elseif ($action == 'view') { XDB::execute('CREATE OR REPLACE ALGORITHM=MERGE VIEW fusionax_xorg_anciens AS SELECT p.pid, p.ax_id, pd.promo, pd.private_name, pd.public_name, pd.sort_name, pd.short_name, pd.directory_name FROM profiles AS p INNER JOIN profile_display AS pd ON (pd.pid = p.pid)'); $next = 'clean'; } elseif ($action == 'clean') { // nettoyage du fichier temporaire //exec('rm -Rf ' . $spoolpath); $report[] = 'Import finit.'; } foreach ($report as $t) { // affiche les lignes de report echo "\$('#fusionax').append('" . $t . "<br/>');\n"; } if (isset($next)) { // lance le prochain script s'il y en a un echo "\$.getScript('fusionax/import/" . $next . "');"; } // exit pour ne pas afficher la page template par défaut exit; }
function handler_add_secondary_edu($page) { $page->changeTpl('admin/add_secondary_edu.tpl'); if (!(Post::has('verify') || Post::has('add'))) { return; } elseif (!Post::has('people')) { $page->trigWarning("Aucune information n'a été fournie."); return; } require_once 'name.func.inc.php'; $lines = explode("\n", Post::t('people')); $separator = Post::t('separator'); $degree = Post::v('degree'); $promotion = Post::i('promotion'); $schoolsList = array_flip(DirEnum::getOptions(DirEnum::EDUSCHOOLS)); $degreesList = array_flip(DirEnum::getOptions(DirEnum::EDUDEGREES)); $edu_id = $schoolsList[Profile::EDU_X]; $degree_id = $degreesList[$degree]; $res = array('incomplete' => array(), 'empty' => array(), 'multiple' => array(), 'already' => array(), 'new' => array()); $old_pids = array(); $new_pids = array(); foreach ($lines as $line) { $line = trim($line); $line_array = explode($separator, $line); array_walk($line_array, 'trim'); if (count($line_array) != 3) { $page->trigError("La ligne « {$line} » est incomplète."); $res['incomplete'][] = $line; continue; } $cond = new PFC_And(new UFC_NameTokens(split_name_for_search($line_array[0]), array(), false, false, Profile::LASTNAME)); $cond->addChild(new UFC_NameTokens(split_name_for_search($line_array[1]), array(), false, false, Profile::FIRSTNAME)); $cond->addChild(new UFC_Promo('=', UserFilter::DISPLAY, $line_array[2])); $uf = new UserFilter($cond); $pid = $uf->getPIDs(); $count = count($pid); if ($count == 0) { $page->trigError("La ligne « {$line} » ne correspond à aucun profil existant."); $res['empty'][] = $line; continue; } elseif ($count > 1) { $page->trigError("La ligne « {$line} » correspond à plusieurs profils existant."); $res['multiple'][] = $line; continue; } else { $count = XDB::fetchOneCell('SELECT COUNT(*) AS count FROM profile_education WHERE pid = {?} AND eduid = {?} AND degreeid = {?}', $pid, $edu_id, $degree_id); if ($count == 1) { $res['already'][] = $line; $old_pids[] = $pid[0]; } else { $res['new'][] = $line; $new_pids[] = $pid[0]; } } } $display = array(); foreach ($res as $type => $res_type) { if (count($res_type) > 0) { $display = array_merge($display, array('--------------------' . $type . ':'), $res_type); } } $page->assign('people', implode("\n", $display)); $page->assign('promotion', $promotion); $page->assign('degree', $degree); if (Post::has('add')) { $entry_year = $promotion - Profile::educationDuration($degree); if (Post::b('force_addition')) { $pids = array_unique(array_merge($old_pids, $new_pids)); } else { $pids = array_unique($new_pids); // Updates years. if (count($old_pids)) { XDB::execute('UPDATE profile_education SET entry_year = {?}, grad_year = {?}, promo_year = {?} WHERE pid IN {?} AND eduid = {?} AND degreeid = {?}', $entry_year, $promotion, $promotion, $old_pids, $edu_id, $degree_id); } } // Precomputes values common to all users. $select = XDB::format('MAX(id) + 1, pid, {?}, {?}, {?}, {?}, {?}, \'secondary\'', $edu_id, $degree_id, $entry_year, $promotion, $promotion); XDB::startTransaction(); foreach ($pids as $pid) { XDB::execute('INSERT INTO profile_education (id, pid, eduid, degreeid, entry_year, grad_year, promo_year, flags) SELECT ' . $select . ' FROM profile_education WHERE pid = {?} GROUP BY pid', $pid); } XDB::commit(); } }
public function getText($value) { static $pubs = array('public' => 'publique', 'ax' => 'annuaire papier', 'private' => 'privé', 'hidden' => 'administrateurs'); $corpsList = DirEnum::getOptions(DirEnum::ORIGINCORPS); $rankList = DirEnum::getOptions(DirEnum::CORPSRANKS); return $corpsList[$value['current']] . ', ' . $corpsList[$value['rank']] . ' (' . 'corps d\'origine : ' . $corpsList[$value['original']] . ', affichage ' . $pubs[$value['pub']] . ')'; }
public function getText($value) { $fieldsList = DirEnum::getOptions(DirEnum::EDUFIELDS); $educations = array(); foreach ($value as $item) { $details = array($this->cycles[$item['degreeid']]); if ($item['program']) { $details[] = '« ' . $item['program'] . ' »'; } if ($item['fieldid']) { $details[] = $fieldsList[$item['fieldid']]; } } return implode(', ', $educations); }
/** * Retrieve the name of the corps which has been done. * * Note: this function first tries getCorps(), and if this field is blank * tries to find an education which degree is "Corps". * * Returns an empty string if nothing has been found. */ public function getCorpsName() { $corps = $this->getCorps(); if ($corps && $corps->current) { $corpsList = DirEnum::getOptions(DirEnum::CURRENTCORPS); return $corpsList[$corps->current]; } foreach ($this->getExtraEducations() as $edu) { if (!strcasecmp($edu->degree, 'Corps')) { if ($edu->school_short) { return $edu->school_short; } elseif ($edu->school) { return $edu->school; } } } return ''; }
function handler_broken_addr($page) { require_once 'emails.inc.php'; $page->changeTpl('emails/broken_addr.tpl'); if (Env::has('sort_broken')) { S::assert_xsrf_token(); $list = trim(Env::v('list')); if ($list == '') { $page->trigError('La liste est vide.'); } else { $valid_emails = array(); $invalid_emails = array(); $broken_list = explode("\n", $list); sort($broken_list); foreach ($broken_list as $orig_email) { $orig_email = trim($orig_email); if ($orig_email != '') { $email = valide_email($orig_email); if (empty($email) || $email == '@') { $invalid_emails[] = trim($orig_email) . ': invalid email'; } elseif (!in_array($email, $valid_emails)) { $nb = XDB::fetchOneCell('SELECT COUNT(*) FROM email_redirect_account WHERE redirect = {?}', $email); if ($nb > 0) { $valid_emails[] = $email; } else { $invalid_emails[] = $orig_email . ': no such redirection'; } } } } $page->assign('valid_emails', $valid_emails); $page->assign('invalid_emails', $invalid_emails); } } if (Env::has('process_broken')) { S::assert_xsrf_token(); $list = trim(Env::v('list')); if ($list == '') { $page->trigError('La liste est vide.'); } else { require_once 'notifs.inc.php'; $broken_user_list = array(); $broken_user_email_count = array(); $broken_user_profiles = array(); $broken_list = explode("\n", $list); sort($broken_list); foreach ($broken_list as $email) { $email = trim($email); $userobj = null; if ($user = mark_broken_email($email, true)) { $userobj = User::getSilentWithUID($user['uid']); } if (is_null($userobj)) { continue; } $profile = $userobj->profile(); if (is_null($profile)) { continue; } if ($user['nb_mails'] > 0 && $user['notify']) { $mail = new PlMailer('emails/broken.mail.tpl'); $mail->setTo($userobj); $mail->assign('user', $user); $mail->assign('email', $email); $mail->send(); } else { WatchProfileUpdate::register($profile, 'broken'); } $pid = $profile->id(); if (!isset($broken_user_list[$pid])) { $broken_user_list[$pid] = array($email); } else { $broken_user_list[$pid][] = $email; } $broken_user_email_count[$pid] = $user['nb_mails']; $broken_user_profiles[$pid] = $profile; } XDB::execute('UPDATE email_redirect_account SET broken_level = broken_level - 1 WHERE flags = \'active\' AND broken_level > 1 AND DATE_ADD(last, INTERVAL 1 MONTH) < CURDATE()'); XDB::execute('UPDATE email_redirect_account SET broken_level = 0 WHERE flags = \'active\' AND broken_level = 1 AND DATE_ADD(last, INTERVAL 1 YEAR) < CURDATE()'); // Sort $broken_user_list with (promo, sortname, pid) $sortable_array = array(); foreach ($broken_user_list as $pid => $mails) { $profile = $broken_user_profiles[$pid]; $sortable_array[$pid] = array($profile->promo(), $profile->sortName(), $pid); } asort($sortable_array); // Output the list of users with recently broken addresses, // along with the count of valid redirections. pl_cached_content_headers('text/x-csv', null, 1, 'broken.csv'); $csv = fopen('php://output', 'w'); fputcsv($csv, array('nom', 'promo', 'bounces', 'nbmails', 'url', 'corps', 'job', 'networking'), ';'); $corpsList = DirEnum::getOptions(DirEnum::CURRENTCORPS); foreach (array_keys($sortable_array) as $pid) { $mails = $broken_user_list[$pid]; $profile = $broken_user_profiles[$pid]; $current_corps = $profile->getCorpsName(); $jobs = $profile->getJobs(); $companies = array(); foreach ($jobs as $job) { $companies[] = $job->company->name; } $networkings = $profile->getNetworking(Profile::NETWORKING_ALL); $networking_list = array(); foreach ($networkings as $networking) { $networking_list[] = $networking['address']; } fputcsv($csv, array($profile->fullName(), $profile->promo(), join(',', $mails), $broken_user_email_count[$pid], 'https://www.polytechnique.org/marketing/broken/' . $profile->hrid(), $current_corps, implode(',', $companies), implode(',', $networking_list)), ';'); } fclose($csv); exit; } } }
public function getText($value) { $sectionsList = DirEnum::getOptions(DirEnum::SECTIONS); return $sectionsList[$value]; }
private static function profile_to_contact($p) { $contact = array('Prénom' => $p->firstName(), 'Nom' => $p->lastName(), 'Notes' => '(' . $p->promo . ')', 'Tél. mobile' => $p->mobile, 'Anniversaire' => $p->birthdate, 'Surnom' => $p->nickname); // Homes $adrs = $p->iterAddresses(Profile::ADDRESS_PERSO); if ($adr = $adrs->next()) { Outlook::add_address($adr, $contact, 'domicile'); } if ($adr = $adrs->next()) { Outlook::add_address($adr, $contact, 'autre'); } // Pro $adrs = $p->iterAddresses(Profile::ADDRESS_PRO); if ($adr = $adrs->next()) { Outlook::add_address($adr, $contact, 'bureau'); } $mainjob = $p->getMainJob(); if ($mainjob && $mainjob->company) { $contact['Société '] = $mainjob->company->name; } if (!empty($p->section)) { $contact['Utilisateur 2'] = 'Section : ' . $p->section; } if ($p->isFemale()) { $contact['Sexe'] = 'Féminin'; } else { $contact['Sexe'] = 'Masculin'; } $binets = $p->getBinets(); if (count($binets)) { $bn = DirEnum::getOptions(DirEnum::BINETS); $bns = array(); foreach (array_keys($binets) as $bid) { if (!empty($bn[$bid])) { $bns[$bid] = $bn[$bid]; } } if (count($bns) > 0) { $contact['Utilisateur 3'] = 'Binets : ' . join(', ', $bns); } } $user = $p->owner(); if ($user) { $contact['Adresse de messagerie'] = $user->bestalias; $contact['Nom complet de l\'adresse de messagerie'] = $p->fullName() . ' <' . $user->bestalias . '>'; if ($user->bestalias != $user->forlife) { $contact['Adresse de messagerie 3'] = $user->forlife; $contact['Nom complet de l\'adresse de messagerie 3'] = $p->fullName() . ' <' . $user->forlife . '>'; } $groups = $user->groups(); if (count($groups)) { $gn = DirEnum::getOptions(DirEnum::GROUPESX); $gns = array(); foreach (array_keys($groups) as $gid) { if (!empty($gn[$gid])) { $gns[$gid] = $gn[$gid]; } } if (count($gns) > 0) { $contact['Utilisateur 1'] = 'Groupes X : ' . join(', ', $gns); } } } return $contact; }
/** $model is the way of presenting the results: minifiche, trombi, geoloc. */ function handler_advanced($page, $model = null, $byletter = null) { global $globals; $page->addJsLink('jquery.ui.xorg.js'); $page->addJsLink('search.js'); $page->assign('advanced', 1); $networks = DirEnum::getOptions(DirEnum::NETWORKS); $networks[-1] = 'Tous types'; $networks[0] = '-'; ksort($networks); $page->assign('networking_types', $networks); $origin_corps_list = DirEnum::getOptions(DirEnum::ORIGINCORPS); $current_corps_list = DirEnum::getOptions(DirEnum::CURRENTCORPS); $corps_rank_list = DirEnum::getOptions(DirEnum::CORPSRANKS); $origin_corps_list[0] = '-'; $current_corps_list[0] = '-'; $corps_rank_list[0] = '-'; ksort($origin_corps_list); ksort($current_corps_list); ksort($corps_rank_list); $page->assign('origin_corps_list', $origin_corps_list); $page->assign('current_corps_list', $current_corps_list); $page->assign('corps_rank_list', $corps_rank_list); if (!Env::has('rechercher') && $model != 'geoloc') { $this->form_prepare(); } else { if (!Env::has('page')) { S::logger()->log('search', 'adv=' . var_export($_GET, true)); } require_once 'userset.inc.php'; // Enable X.org fields for X.org admins, and AX fields for AX secretaries. $view = new AdvancedSearchSet(S::admin(), S::user()->checkPerms(User::PERM_EDIT_DIRECTORY)); if (!$view->isValid()) { $this->form_prepare(); $page->trigError('Recherche invalide.'); } else { $view->addMod('minifiche', 'Mini-fiches', true, array('starts_with' => $byletter)); $view->addMod('trombi', 'Trombinoscope', false, array('with_promo' => true)); $view->addMod('map', 'Planisphère'); if (S::user()->checkPerms(User::PERM_EDIT_DIRECTORY) || S::admin()) { $view->addMod('addresses', 'Adresses postales', false); } $view->apply('search/adv', $page, $model); $nb_tot = $view->count(); if ($nb_tot > $globals->search->private_max) { $this->form_prepare(); if ($model != 'addresses' && (S::user()->checkPerms(User::PERM_EDIT_DIRECTORY) || S::admin())) { $page->assign('suggestAddresses', true); } $page->trigError('Recherche trop générale.'); } else { if ($nb_tot == 0) { $this->form_prepare(); $page->trigError('Il n\'existe personne correspondant à ces critères dans la base !'); } } } } $page->changeTpl('search/index.tpl', $model == 'mini' ? SIMPLE : SKINNED); $page->assign('public_directory', 0); }