X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=modules%2Ffusionax.php;h=892b3934e3ddda5379cdc1ad422ec3fdcae3923e;hb=96b778a679b261235ede8c5c4e7356680f4e5895;hp=cf6f9ecdaa53eabb2180a4a795f5a62d88a49b9b;hpb=149360d4415a12797d7047995e9bcf608a4ced34;p=platal.git diff --git a/modules/fusionax.php b/modules/fusionax.php index cf6f9ec..892b393 100644 --- a/modules/fusionax.php +++ b/modules/fusionax.php @@ -1,6 +1,6 @@ assign('nbMissmatchingPromosTotal', $nbMissmatchingPromos); } - function handler_names($page, $action = '') + private function format($string) + { + return preg_replace('/(\s+|\-)/', '', $string); + } + + private function retrieve_firstnames() + { + $res = XDB::rawFetchAllAssoc('SELECT p.pid, p.ax_id, p.hrpid, + f.prenom, ppn.firstname_initial, ppn.firstname_main, ppn.firstname_ordinary + 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)'); + + $issues = array(); + foreach ($res as $item) { + if (!($item['firstname_ordinary'] != '' || $item['firstname_main'] != $item['firstname_initial'])) { + $ax = $this->format(mb_strtolower(replace_accent($item['prenom']))); + $xorg = $this->format(mb_strtolower(replace_accent($item['firstname_main']))); + if ($ax != $xorg) { + $issues[] = $item; + } + } + } + + return $issues; + } + + function handler_names($page, $action = '', $csv = false) { $page->changeTpl('fusionax/names.tpl'); - $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(*) - 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 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) - 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) - 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', $res); + 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') { + $ax_patro = "(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))"; + $ax_ordinary = "(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))"; + $ax_full = "(f.Nom_complet NOT IN (ppn.lastname_initial, ppn.lastname_main, ppn.lastname_marital, ppn.lastname_ordinary))"; + + 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 + 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); + + 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'), ';'); + 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(*) + 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 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) + 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) + 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 handler_edu($page, $action = '') @@ -841,5 +958,5 @@ class FusionAxModule extends PLModule } } -// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8: ?>