function handler_ical(PlPage $page, PlUser $user) { require_once 'ical.inc.php'; $page->changeTpl('carnet/calendar.tpl', NO_SKIN); $page->register_function('display_ical', 'display_ical'); $filter = new UserFilter(new UFC_Contact($user)); $profiles = $filter->iterProfiles(); $page->assign('events', PlIteratorUtils::map($profiles, array($this, 'buildBirthRef'))); pl_cached_content_headers('text/calendar', 1); }
function handler_cacert($page) { pl_cached_content_headers("application/x-x509-ca-cert"); readfile("/etc/ssl/xorgCA/cacert.pem"); exit; }
function handler_csv(PlPage $page, $liste = null) { if (is_null($liste)) { return PL_NOT_FOUND; } $this->is_group_admin($page); $mlist = $this->prepare_list($liste); $members = $mlist->getMembers(); $list = list_fetch_basic_info(list_extract_members($members[1])); pl_cached_content_headers('text/x-csv', 'iso-8859-1', 1); echo utf8_decode("Nom;Prénom;Promotion\n"); echo utf8_decode(implode("\n", $list)); exit; }
function handler_names($page, $action = '', $csv = false) { $page->changeTpl('fusionax/names.tpl'); if ($action == 'first') { $res = $this->retrieve_firstnames(); if ($csv) { pl_cached_content_headers('text/x-csv', 'utf-8', 1, 'firstnames.csv'); $csv = fopen('php://output', 'w'); fputcsv($csv, array('pid', 'ax_id', 'hrpid', 'AX', 'initial', 'principal', 'ordinaire'), ';'); foreach ($res as $item) { fputcsv($csv, $item, ';'); } fclose($csv); exit; } else { $page->assign('firstnameIssues', $res); } } elseif ($action == 'last' || $action == 'last3' || $action == 'last2' || $action == 'last1') { // Define some variables to build queries function sql_trim_partic($sqlstring) { $sqlstring = 'TRIM(LEADING \'d\\\'\' FROM ' . $sqlstring . ')'; $sqlstring = 'TRIM(LEADING \'D\\\'\' FROM ' . $sqlstring . ')'; $sqlstring = 'TRIM(LEADING \'de \' FROM ' . $sqlstring . ')'; $sqlstring = 'TRIM(LEADING \'De \' FROM ' . $sqlstring . ')'; $sqlstring = 'TRIM(LEADING \'du \' FROM ' . $sqlstring . ')'; $sqlstring = 'TRIM(LEADING \'Du \' FROM ' . $sqlstring . ')'; return $sqlstring; } //$field_ax_patro = 'IF(f.partic_patro, CONCAT(f.partic_patro, CONCAT(\' \', f.Nom_patronymique)), f.Nom_patronymique)'; //$field_ax_usuel = 'IF(f.partic_nom, CONCAT(f.partic_nom, CONCAT(\' \', f.Nom_usuel)), f.Nom_usuel)'; $fields_p_list = '(' . \sql_trim_partic('ppn.lastname_initial') . ', ' . \sql_trim_partic('ppn.lastname_main') . ', ' . \sql_trim_partic('ppn.lastname_marital') . ', ' . \sql_trim_partic('ppn.lastname_ordinary') . ')'; $ax_patro = '(' . sql_trim_partic('f.Nom_patronymique') . ' NOT IN ' . $fields_p_list . ')'; $ax_ordinary = '(' . sql_trim_partic('f.Nom_usuel') . ' NOT IN ' . $fields_p_list . ')'; $ax_full = '(' . sql_trim_partic('f.Nom_complet') . ' NOT IN ' . $fields_p_list . ')'; switch ($action) { case 'last': $where = $ax_patro . ' OR ' . $ax_ordinary . ' OR ' . $ax_full; break; case 'last3': $where = $ax_patro . ' AND ' . $ax_ordinary . ' AND ' . $ax_full; break; case 'last2': $where = '(' . $ax_patro . ' AND ' . $ax_ordinary . ' AND NOT ' . $ax_full . ') OR (' . $ax_patro . ' AND NOT ' . $ax_ordinary . ' AND ' . $ax_full . ') OR (' . 'NOT ' . $ax_patro . ' AND ' . $ax_ordinary . ' AND ' . $ax_full . ')'; break; case 'last1': $where = '(' . $ax_patro . ' AND NOT ' . $ax_ordinary . ' AND NOT ' . $ax_full . ') OR (' . 'NOT ' . $ax_patro . ' AND NOT ' . $ax_ordinary . ' AND ' . $ax_full . ') OR (' . 'NOT ' . $ax_patro . ' AND ' . $ax_ordinary . ' AND NOT ' . $ax_full . ')'; break; } $res = XDB::rawFetchAllAssoc('SELECT p.pid, p.ax_id, p.hrpid, f.Nom_patronymique, f.Nom_usuel, f.Nom_complet, ppn.lastname_initial, ppn.lastname_main, ppn.lastname_marital, ppn.lastname_ordinary, ' . $ax_patro . ' AS cond_patro, ' . $ax_ordinary . ' AS cond_ordinary, ' . $ax_full . ' AS cond_full FROM fusionax_anciens AS f INNER JOIN profiles AS p ON (f.ax_id = p.ax_id) INNER JOIN profile_public_names AS ppn ON (p.pid = ppn.pid) WHERE ' . $where . ' ORDER BY p.ax_id'); if ($csv) { function format($string) { $string = preg_replace('/\\-/', ' ', $string); return preg_replace('/\\s+/', ' ', $string); } pl_cached_content_headers('text/x-csv', 'utf-8', 1, 'lastnames.csv'); $csv = fopen('php://output', 'w'); fputcsv($csv, array('pid', 'ax_id', 'hrpid', 'AX patro', 'AX usuel', 'AX complet', 'initial', 'principal', 'marital', 'ordinaire', 'pb patro', 'pb usuel', 'pb complet'), ';'); foreach ($res as $item) { $ax = array('Nom_patronymique' => format(mb_strtolower(replace_accent($item['Nom_patronymique']))), 'Nom_usuel' => format(mb_strtolower(replace_accent($item['Nom_usuel']))), 'Nom_complet' => format(mb_strtolower(replace_accent($item['Nom_complet'])))); $xorg = array('lastname_initial' => format(mb_strtolower(replace_accent($item['lastname_initial']))), 'lastname_main' => format(mb_strtolower(replace_accent($item['lastname_main']))), 'lastname_ordinary' => format(mb_strtolower(replace_accent($item['lastname_ordinary'])))); if (!in_array($ax['Nom_patronymique'], $xorg) || !in_array($ax['Nom_usuel'], $xorg) || !in_array($ax['Nom_complet'], $xorg)) { fputcsv($csv, $item, ';'); } } fclose($csv); exit; } else { $page->assign('lastnameIssues', $res); $page->assign('total', count($res)); $page->assign('issuesTypes', array('last' => "1, 2 ou 3 noms de l'AX manquant", 'last1' => "1 nom de l'AX manquant", 'last2' => "2 noms de l'AX manquant", 'last3' => "3 noms de l'AX manquant")); } } else { $res = XDB::query('SELECT COUNT(*) FROM fusionax_anciens AS f INNER JOIN profiles AS p ON (f.ax_id = p.ax_id)'); $page->assign('total', $res->fetchOneCell()); $res = XDB::rawFetchOneCell("SELECT COUNT(*)\n FROM fusionax_anciens AS f\n INNER JOIN profiles AS p ON (f.ax_id = p.ax_id)\n INNER JOIN profile_public_names AS ppn ON (p.pid = ppn.pid)\n WHERE IF(f.partic_patro, CONCAT(f.partic_patro, CONCAT(' ', f.Nom_patronymique)), f.Nom_patronymique) NOT IN (ppn.lastname_initial, ppn.lastname_main, ppn.lastname_marital, ppn.lastname_ordinary)\n OR IF(f.partic_nom, CONCAT(f.partic_nom, CONCAT(' ', f.Nom_usuel)), f.Nom_usuel) NOT IN (ppn.lastname_initial, ppn.lastname_main, ppn.lastname_marital, ppn.lastname_ordinary)\n OR f.Nom_complet NOT IN (ppn.lastname_initial, ppn.lastname_main, ppn.lastname_marital, ppn.lastname_ordinary)"); $page->assign('lastnameIssues', $res); $res = XDB::rawFetchOneCell('SELECT COUNT(*) FROM fusionax_anciens AS f INNER JOIN profiles AS p ON (f.ax_id = p.ax_id) INNER JOIN profile_public_names AS ppn ON (p.pid = ppn.pid) WHERE f.prenom NOT IN (ppn.firstname_initial, ppn.firstname_main, ppn.firstname_ordinary)'); $page->assign('firstnameIssues', count($this->retrieve_firstnames())); } $page->assign('action', $action); }
function init_igoogle_xml($template) { Platal::page()->changeTpl($template, NO_SKIN); pl_cached_content_headers("application/xml", "utf-8"); }
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; } } }
function handler_css($page) { pl_cached_content_headers("text/css"); readfile('../htdocs/css/bandeau.css'); exit; }
public function apply(PlPage $page) { if ($this->set instanceof UserSet) { $uids = $this->set->getIds(new PlLimit()); $pids = Profile::getPIDsFromUIDs($uids); } else { $pids = $this->set->getIds(new PlLimit()); } $visibility = Visibility::defaultForRead(Visibility::VIEW_AX); pl_cached_content_headers('text/x-csv', 'iso-8859-1', 1, 'adresses.csv'); $csv = fopen('php://output', 'w'); fputcsv($csv, array('AX_ID', 'PROMOTION', 'CIVILITE', 'NOM', 'PRENOM', 'SOCIETE', 'ADRESSE', 'ADRESSE1', 'ADRESSE2', 'ADRESSE3', 'CP', 'EMAIL', 'NHABITE_PLUS_A_LADRESSE'), ';'); if (!empty($pids)) { $res = XDB::query("SELECT p.ax_id, pd.promo, p.title,\n IF (pn.firstname_ordinary = '', UPPER(pn.firstname_main), UPPER(pn.firstname_ordinary)) AS firstname,\n IF (pn.lastname_ordinary = '', UPPER(pn.lastname_main), UPPER(pn.lastname_ordinary)) AS lastname,\n UPPER(pje.name), pa.postalText, pa.postal_code_fr AS postal_code, p.email_directory,\n IF (FIND_IN_SET('deliveryIssue', pa.flags), 'oui', '') AS delivery_issue\n FROM profile_addresses AS pa\n INNER JOIN profiles AS p ON (pa.pid = p.pid)\n INNER JOIN profile_display AS pd ON (pd.pid = pa.pid)\n INNER JOIN profile_public_names AS pn ON (pn.pid = pa.pid)\n LEFT JOIN profile_job AS pj ON (pj.pid = pa.pid\n AND pj.id = IF(pa.type = 'job', pa.id, NULL))\n LEFT JOIN profile_job_enum AS pje ON (pj.jobid = pje.id)\n WHERE pa.pid IN {?} AND FIND_IN_SET('dn_best_mail', pa.flags)", $pids); foreach ($res->fetchAllRow() as $item) { list($axid, $promo, $title, $lastname, $firstname, $company, $full_address, $zipcode, $email, $delivery_issue) = array_map('utf8_decode', $item); $lines = self::split_address($full_address); fputcsv($csv, array($axid, $promo, $title, $lastname, $firstname, $company, $full_address, $lines[0], $lines[1], $lines[2], $zipcode, $email, $delivery_issue), ';'); } } fclose($csv); exit; }
function handler_csv($page, $filename = null) { global $globals; if (is_null($filename)) { $filename = $globals->asso('diminutif') . '.csv'; } $users = $globals->asso()->getMembersFilter(null, new UFO_Name())->getUsers(); $admin = may_update(); pl_cached_content_headers('text/x-csv', 'iso-8859-1', 1); echo utf8_decode("Nom;Prénom;Sexe;Promotion;Commentaire"); if ($admin) { echo utf8_decode(";Société;Poste\n"); } else { echo utf8_decode("\n"); } foreach ($users as $user) { $line = $user->lastName() . ';' . $user->firstName() . ';' . ($user->isFemale() ? 'F' : 'M') . ';' . $user->promo() . ';' . strtr($user->group_comm, ';', ','); if ($admin) { if ($user->hasProfile()) { $line .= ';' . $user->profile()->getMainJob()->company->name . ';' . $user->profile()->getMainJob()->description; } else { $line .= ';;'; } } echo utf8_decode($line) . "\n"; } exit; }
function handler_payment_csv($page, $pid = null) { if (is_null($pid)) { pl_redirect('payment'); } if (substr($pid, -4) == '.vcf') { $pid = substr($pid, 0, strlen($pid) - 4); } $res = XDB::fetchAllAssoc('SELECT uid, IF(ts_confirmed = \'0000-00-00\', 0, ts_confirmed) AS date, comment, amount FROM payment_transactions WHERE ref = {?} ORDER BY ts_confirmed', $pid); if (is_null($res)) { pl_redirect('payment'); } $users = User::getBulkUsersWithUIDs($res, 'uid', 'user'); $sum = 0; pl_cached_content_headers('text/x-csv', 'iso-8859-1', 1); $csv = fopen('php://output', 'w'); fputcsv($csv, array('Date', 'Nom', utf8_decode('Prénom'), 'Sexe', 'Promotion', 'Email', 'Commentaire', 'Montant'), ';'); foreach ($users as $item) { $user = $item['user']; $sum += $item['amount']; fputcsv($csv, array(format_datetime($item['date'], '%d/%m/%y'), utf8_decode($user->lastName()), utf8_decode($user->firstName()), $user->isFemale() ? 'F' : 'M', $user->promo(), $user->ForlifeEmail(), utf8_decode($item['comment']), strtr($item['amount'], '.', ',') . ' EUR'), ';'); } fputcsv($csv, array(date('d/m/y'), 'Total', '', '', '', '', '', strtr($sum, '.', ',') . ' EUR'), ';'); fclose($csv); exit; }
function handler_csv($page, $eid = null, $item_id = null) { $this->load('xnetevents.inc.php'); if (!is_numeric($item_id)) { $item_id = null; } $evt = get_event_detail($eid, $item_id); if (!$evt) { return PL_NOT_FOUND; } pl_cached_content_headers('text/x-csv', 'iso-8859-1', 1); $page->changeTpl('xnetevents/csv.tpl', NO_SKIN); $admin = may_update(); $tri = Env::v('order') == 'alpha' ? UserFilter::sortByPromo() : UserFilter::sortByName(); $all = !Env::v('item_id', false); $participants = get_event_participants($evt, $item_id, $tri); $title = 'Nom;Prénom;Promotion;Email'; if ($admin) { $title .= ';Société;Poste'; } if ($all) { foreach ($evt['moments'] as $moment) { $title .= ';' . $moment['titre']; } } if ($admin && $evt['money']) { $title .= ';À payer;'; if ($evt['paiement_id']) { $title .= 'Télépaiement;Liquide/Chèque;'; } $title .= 'Payé'; } else { $title .= ';Nombre'; } echo utf8_decode($title) . "\n"; if ($participants) { foreach ($participants as $participant) { $user = $participant['user']; $line = $user->lastName() . ';' . $user->firstName() . ';' . $user->promo() . ';' . $user->bestEmail(); if ($admin && $user->hasProfile()) { $line .= ';' . $user->profile()->getMainJob()->company->name . ';' . $user->profile()->getMainJob()->description; } else { $line .= ';;'; } if ($all) { foreach ($evt['moments'] as $moment) { $line .= ';' . $participant[$moment['item_id']]; } } if ($admin && $evt['money']) { $line .= ';' . $participant['montant'] . ';'; if ($evt['paiement_id']) { $line .= $participant['telepayment'] . ';' . $participant['adminpaid'] . ';'; } $line .= $participant['paid']; } else { $line .= ';' . $participant['nb']; } echo utf8_decode($line) . "\n"; } } exit; }
function handler_grades_js($page) { pl_cached_content_headers("text/javascript", "utf-8"); $page->changeTpl('profile/grades.js.tpl', NO_SKIN); $res = XDB::iterator("SELECT *\n FROM profile_medal_grade_enum\n ORDER BY mid, pos"); $grades = array(); while ($tmp = $res->next()) { $grades[$tmp['mid']][] = $tmp; } $page->assign('grades', $grades); $res = XDB::iterator("SELECT *, FIND_IN_SET('validation', flags) AS validate\n FROM profile_medal_enum\n ORDER BY type, text"); $mlist = array(); while ($tmp = $res->next()) { $mlist[$tmp['type']][] = $tmp; } $page->assign('medal_list', $mlist); }