Example #1
0
 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);
 }
Example #2
0
 function handler_cacert($page)
 {
     pl_cached_content_headers("application/x-x509-ca-cert");
     readfile("/etc/ssl/xorgCA/cacert.pem");
     exit;
 }
Example #3
0
 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;
 }
Example #4
0
 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);
 }
Example #5
0
function init_igoogle_xml($template)
{
    Platal::page()->changeTpl($template, NO_SKIN);
    pl_cached_content_headers("application/xml", "utf-8");
}
Example #6
0
 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;
         }
     }
 }
Example #7
0
 function handler_css($page)
 {
     pl_cached_content_headers("text/css");
     readfile('../htdocs/css/bandeau.css');
     exit;
 }
Example #8
0
 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;
 }
Example #9
0
 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;
 }
Example #10
0
 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;
 }
Example #11
0
 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;
 }
Example #12
0
 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);
 }