mise en page
authorPascal Corpet <pascal.corpet@m4x.org>
Mon, 12 Nov 2007 21:07:36 +0000 (22:07 +0100)
committerPascal Corpet <pascal.corpet@m4x.org>
Mon, 12 Nov 2007 21:07:36 +0000 (22:07 +0100)
modules/fusionax.php
templates/fusionax/ids.tpl
templates/fusionax/listFusion.tpl
upgrade/0.9.16/01_fusionax.sql

index 41a0578..543f66c 100644 (file)
@@ -25,7 +25,7 @@ class FusionAxModule extends PLModule{
     {
         return array(
             'fusionax'          => $this->make_hook('index', AUTH_MDP, 'admin'),
-            'fusionax/import'   => $this->make_hook('import', AUTH_MDP, 'admin'),
+            'fusionax/import'   => $this->make_hook('import', AUTH_MDP,'admin'),
             'fusionax/ids'      => $this->make_hook('ids', AUTH_MDP, 'admin'),
             'fusionax/misc'     => $this->make_hook('misc', AUTH_MDP, 'admin'),
         );
@@ -36,8 +36,11 @@ class FusionAxModule extends PLModule{
         global $globals;
         $page->changeTpl('fusionax/index.tpl');
         $page->assign('xorg_title','Polytechnique.org - Fusion des annuaires');
-        if (isset($globals->fusionax) && isset($globals->fusionax->LastUpdate)) {
-            $page->assign('lastimport', date("d-m-Y",$globals->fusionax->LastUpdate));
+        if (isset($globals->fusionax) && 
+            isset($globals->fusionax->LastUpdate)) {
+            $page->assign(
+                'lastimport', 
+                date("d-m-Y",$globals->fusionax->LastUpdate));
         } 
     }
     
@@ -48,11 +51,16 @@ class FusionAxModule extends PLModule{
             $page->changeTpl('fusionax/import.tpl');
             $page->addJsLink('jquery.js');
             global $globals;
-            if (isset($globals->fusionax) && isset($globals->fusionax->LastUpdate)) {
-                $page->assign('lastimport', "le ".date("d/m/Y à H:i",$globals->fusionax->LastUpdate));
+            if (isset($globals->fusionax) &&
+                isset($globals->fusionax->LastUpdate)) {
+                $page->assign(
+                    'lastimport',
+                    "le ".date("d/m/Y à H:i",$globals->fusionax->LastUpdate));
             }
             if (!file_exists(dirname(__FILE__).'/../configs/ax_xorg_rsa')) {
-                $page->assign('keymissing', realpath(dirname(__FILE__).'/../configs/').'/ax_xorg_rsa');
+                $page->assign(
+                    'keymissing',
+                    realpath(dirname(__FILE__).'/../configs/').'/ax_xorg_rsa');
             }
             return;
         }
@@ -71,9 +79,13 @@ class FusionAxModule extends PLModule{
             unlink($tmpdir);
             mkdir($tmpdir);
             chmod($tmpdir, 0700);
-            // copie la clef d'authentification (paire de clef RSA dont la partie publique est sur polytechniciens.com)
-            if (!copy(dirname(__FILE__).'/../configs/ax_xorg_rsa',$tmpdir.'/ax_xorg_rsa'))
-                $report[] = 'Impossible de copier la clef pour se logger sur le serveur AX';
+            // copie la clef d'authentification (paire de clef RSA dont la
+            // partie publique est sur polytechniciens.com)
+            if (!copy(
+                dirname(__FILE__).'/../configs/ax_xorg_rsa',
+                $tmpdir.'/ax_xorg_rsa'))
+                $report[] = 'Impossible de copier la clef pour se logger '.
+                    'au serveur AX';
             chmod($tmpdir.'/ax_xorg_rsa', 0600);
         }
         
@@ -82,8 +94,9 @@ class FusionAxModule extends PLModule{
         chdir($tmpdir);
         
         if ($action == 'launch') {
-            // lancement : connexion en ssh et récupération du fichier depuis polyechniciens.com
-            // décompression de l'archive et séparation en fichiers par tables
+            // lancement : connexion en ssh et récupération du fichier depuis
+            // polyechniciens.com, décompression de l'archive et séparation en
+            // fichiers par tables
             exec($modulepath.'import-ax.sh', $report);
             $report[] = utf8_decode('Récupération du fichier terminé.');
             $report[] = 'Import dans la base en cours...';
@@ -118,7 +131,8 @@ class FusionAxModule extends PLModule{
                 $nextfile = 0;
             }
             if (!isset($filesSQL[$nextfile])) {
-                // tous les fichiers ont été exécutés, on passe à l'étape suivante
+                // tous les fichiers ont été exécutés, on passe à l'étape
+                // suivante
                 $next = 'clean';
             } else {
                 // on passe au fichier suivant
@@ -131,7 +145,9 @@ class FusionAxModule extends PLModule{
             $report[] = 'Fin de l\'import';
             global $globals;
             // met à jour la date de dernier import
-            $globals->change_dynamic_config(array('LastUpdate' => time()), 'FusionAx');
+            $globals->change_dynamic_config(
+                array('LastUpdate' => time()),
+                'FusionAx');
         }
         $tmpdir = getcwd();
         chdir($olddir);
@@ -140,7 +156,8 @@ class FusionAxModule extends PLModule{
             echo "$('#fusionax_import').append('".utf8_encode($t)."<br/>');\n";
         if (isset($next)) {
             // lance le prochain script s'il y en a un
-            echo "$.getScript('fusionax/import/".$next."?tmpdir=".urlencode($tmpdir)."');";
+            echo "$.getScript('fusionax/import/".$next."?tmpdir=".
+                urlencode($tmpdir)."');";
         }
         // exit pour ne pas afficher la page template par défaut
         exit;
@@ -153,12 +170,21 @@ class FusionAxModule extends PLModule{
      */          
     private static function link_by_ids($user_id, $matricule_ax)
     {
-        if (!XDB::execute("UPDATE `fusionax_import` AS i INNER JOIN `auth_user_md5` AS u 
-            SET u.`matricule_ax` = i.`id_ancien`, i.`user_id` = u.`user_id`, i.`date_match_id` = NOW()
+        if (!XDB::execute("
+        UPDATE fusionax_import AS i 
+            INNER JOIN fusionax_xorg_anciens AS u 
+            SET
+                u.matricule_ax = i.id_ancien,
+                i.user_id = u.user_id,
+                i.date_match_id = NOW()
             WHERE
-            i.`id_ancien` = {?} AND u.`user_id` = {?} AND (
-                u.`matricule_ax` != {?} OR u.`matricule_ax` IS NULL OR
-                i.`user_id` != {?} OR i.`user_id` IS NULL)", $matricule_ax, $user_id, $matricule_ax, $user_id))
+            i.id_ancien = {?} AND u.user_id = {?} AND (
+                u.matricule_ax != {?} OR u.matricule_ax IS NULL OR
+                i.user_id != {?} OR i.user_id IS NULL)",
+            $matricule_ax,
+            $user_id,
+            $matricule_ax,
+            $user_id))
         {
             return 0;
         }
@@ -168,67 +194,79 @@ class FusionAxModule extends PLModule{
     /** Recherche automatique d'anciens à lier entre les deux annuaires
      * @param limit nombre d'anciens à trouver au max
      * @param sure si true, ne trouve que des anciens qui sont quasi sûrs
-     * @return un XOrgDBIterator sur les entrées avec prenom, nom, promo, user_id, id_ancien et nom_ax     
+     * @return un XOrgDBIterator sur les entrées avec display_name, promo,
+     * user_id, id_ancien et display_name_ax
      */              
     private static function find_easy_to_link($limit = 10, $sure = false)
     {
-        $easy_to_link = XDB::iterator("SELECT 
-            xorg.`prenom`, xorg.`nom`, xorg.`promo`, xorg.`user_id`, ax.`id_ancien`,
-            CONCAT(ax.`prenom`,' ',ax.`nom_complet`,' (X ',ax.`promotion_etude`,')') AS nom_ax,
+        $easy_to_link = XDB::iterator("
+        SELECT 
+            xorg.display_name, xorg.promo, xorg.user_id, ax.id_ancien,
+            CONCAT(ax.prenom,' ',ax.nom_complet,' (X ',ax.promotion_etude,')')
+                 AS display_name_ax,
             COUNT(*) AS nbMatches
-            FROM `fusionax_anciens` AS ax
-            INNER JOIN `fusionax_import` AS i ON (i.`id_ancien` = ax.`id_ancien` AND i.`user_id` IS NULL)
-            LEFT JOIN `auth_user_md5` AS xorg ON (
-                xorg.`matricule_ax` IS NULL AND 
-                ax.`Nom_complet` = xorg.`nom` AND
-                ax.`prenom` = xorg.`prenom` AND
-                xorg.`promo` = ax.`promotion_etude`)
-            GROUP BY xorg.`user_id`
-            HAVING
-                xorg.`user_id` IS NOT NULL AND
-                nbMatches = 1
+        FROM fusionax_anciens AS ax
+        INNER JOIN fusionax_import AS i ON (
+            i.id_ancien = ax.id_ancien AND i.user_id IS NULL)
+        LEFT JOIN fusionax_xorg_anciens AS xorg ON (
+            xorg.matricule_ax IS NULL AND 
+            ax.Nom_complet = xorg.nom AND
+            ax.prenom = xorg.prenom AND
+            xorg.promo = ax.promotion_etude)
+        GROUP BY xorg.user_id
+        HAVING
+            xorg.user_id IS NOT NULL AND
+            nbMatches = 1
             ".($limit?('LIMIT '.$limit):''));
         if ($easy_to_link->total() > 0 || $sure) {
             return $easy_to_link;
         }
-        return XDB::iterator("SELECT 
-            xorg.`prenom`, xorg.`nom`, xorg.`promo`, xorg.`user_id`, ax.`id_ancien`,
-            CONCAT(ax.`prenom`,' ',ax.`nom_complet`,' (X ',ax.`promotion_etude`,')') AS nom_ax,
+        return XDB::iterator(" 
+        SELECT 
+            xorg.display_name, xorg.promo, xorg.user_id, ax.id_ancien,
+            CONCAT(ax.prenom,' ',ax.nom_complet,' (X ',ax.promotion_etude,')')
+                 AS display_name_ax,
             COUNT(*) AS nbMatches
-            FROM `fusionax_anciens` AS ax
-            INNER JOIN `fusionax_import` AS i ON (i.`id_ancien` = ax.`id_ancien` AND i.`user_id` IS NULL)
-            LEFT JOIN `auth_user_md5` AS xorg ON (
-                xorg.`matricule_ax` IS NULL AND 
-                (ax.`Nom_complet` = xorg.`nom`
-                     OR ax.`Nom_complet` LIKE CONCAT(xorg.`nom`,' %')
-                     OR ax.`Nom_complet` LIKE CONCAT(xorg.`nom`,'-%')
-                     OR ax.`Nom_usuel` = xorg.`nom`
-                     OR xorg.`nom` LIKE CONCAT('% ',ax.`Nom_complet`)) AND
-                xorg.`promo` < ax.`promotion_etude` + 2 AND
-                xorg.`promo` > ax.`promotion_etude` - 2)
-            GROUP BY xorg.`user_id`
-            HAVING
-                xorg.`user_id` IS NOT NULL AND
-                nbMatches = 1
-            ".($limit?('LIMIT '.$limit):''));
+        FROM fusionax_anciens AS ax
+        INNER JOIN fusionax_import AS i ON (
+            i.id_ancien = ax.id_ancien AND i.user_id IS NULL)
+        LEFT JOIN fusionax_xorg_anciens AS xorg ON (
+            xorg.matricule_ax IS NULL AND 
+            (ax.Nom_complet = xorg.nom
+                 OR ax.Nom_complet LIKE CONCAT(xorg.nom,' %')
+                 OR ax.Nom_complet LIKE CONCAT(xorg.nom,'-%')
+                 OR ax.Nom_usuel = xorg.nom
+                 OR xorg.nom LIKE CONCAT('% ',ax.Nom_complet)) AND
+            xorg.promo < ax.promotion_etude + 2 AND
+            xorg.promo > ax.promotion_etude - 2)
+        GROUP BY xorg.user_id
+        HAVING
+            xorg.user_id IS NOT NULL AND
+            nbMatches = 1
+        ".($limit?('LIMIT '.$limit):''));
     }
     
     /** Module de mise en correspondance les ids */
-    function handler_ids(&$page, $part = 'main', $user_id = null, $matricule_ax = null)
+    function handler_ids(
+        &$page,
+        $part = 'main',
+        $user_id = null,
+        $matricule_ax = null)
     {
         global $globals;
-        $globals->change_dynamic_config(array('LastUpdate' => time()), 'FusionAX');
         $page->addJsLink('jquery.js');
         
-        $page->assign('xorg_title','Polytechnique.org - Fusion des annuaires - Mise en correspondance simple');
+        $page->assign(
+            'xorg_title',
+            'Polytechnique.org - Fusion - Mise en correspondance simple');
         if ($part == 'missingInAX')
         {
             // locate all persons from this database that are not in AX's
             $page->changeTpl('fusionax/idsMissingInAx.tpl');
-            $missingInAX = XDB::iterator("SELECT *
-                FROM `auth_user_md5` AS u
-                    LEFT JOIN `aliases` AS a  ON(a.`id` = u.`user_id` AND FIND_IN_SET('bestalias', a.`flags`))
-                    WHERE u.`matricule_ax` IS NULL
+            $missingInAX = XDB::iterator("SELECT 
+                u.promo, u.user_id, u.display_name
+                FROM fusionax_xorg_anciens AS u
+                    WHERE u.matricule_ax IS NULL
                     LIMIT 20");
             $page->assign('missingInAX', $missingInAX);
             return;
@@ -237,10 +275,13 @@ class FusionAxModule extends PLModule{
         {
             // locate all persons from AX's database that are not here
             $page->changeTpl('fusionax/idsMissingInXorg.tpl');
-            $missingInXorg = XDB::iterator("SELECT `promotion_etude` AS promo, `prenom`, `Nom_usuel` AS nom, `id_ancien` 
-                FROM `fusionax_import` 
-                    INNER JOIN `fusionax_anciens` AS a USING (`id_ancien`)
-                    WHERE `fusionax_import`.`user_id` IS NULL
+            $missingInXorg = XDB::iterator("SELECT
+                a.promotion_etude AS promo,
+                CONCAT(a.prenom, ' ',a.Nom_usuel) AS display_name,
+                a.id_ancien 
+                FROM fusionax_import 
+                    INNER JOIN fusionax_anciens AS a USING (id_ancien)
+                    WHERE fusionax_import.user_id IS NULL
                     LIMIT 20");
             $page->assign('missingInXorg', $missingInXorg);
             return;
@@ -269,15 +310,23 @@ class FusionAxModule extends PLModule{
         }
         {
             $page->changeTpl('fusionax/ids.tpl');
-            $missingInAX = XDB::query("SELECT COUNT(*) FROM `auth_user_md5` WHERE `matricule_ax` IS NULL");
+            $missingInAX = XDB::query(
+                'SELECT COUNT(*)
+                FROM fusionax_xorg_anciens AS u
+                WHERE u.matricule_ax IS NULL');
             if ($missingInAX)
             {
                 $page->assign('nbMissingInAX', $missingInAX->fetchOneCell());
             }
-            $missingInXorg = XDB::query("SELECT COUNT(*) FROM `fusionax_import` WHERE `user_id` IS NULL");
+            $missingInXorg = XDB::query(
+                'SELECT COUNT(*)
+                FROM fusionax_import AS i
+                WHERE i.user_id IS NULL');
             if ($missingInXorg)
             {
-                $page->assign('nbMissingInXorg', $missingInXorg->fetchOneCell());
+                $page->assign(
+                    'nbMissingInXorg',
+                    $missingInXorg->fetchOneCell());
             }
             $easyToLink = FusionAxModule::find_easy_to_link(10);
             if ($easyToLink->total() > 0)
@@ -291,11 +340,29 @@ class FusionAxModule extends PLModule{
     {
         $page->changeTpl('fusionax/misc.tpl');
         // deceased
-        $deceasedErrorsSql = XDB::query('SELECT COUNT(*) FROM `fusionax_deceased`');
+        $deceasedErrorsSql = XDB::query(
+            'SELECT COUNT(*) FROM fusionax_deceased');
         $page->assign('deceasedErrors',$deceasedErrorsSql->fetchOneCell());
-        $page->assign('deceasedMissingInXorg',XDB::iterator('SELECT `user_id`,`id_ancien`,`nom`,`prenom`,`promo`,`deces_ax` FROM `fusionax_deceased` WHERE `deces_xorg` = "0000-00-00" LIMIT 10'));
-        $page->assign('deceasedMissingInAX',XDB::iterator('SELECT `user_id`,`id_ancien`,`nom`,`prenom`,`promo`,`deces_xorg` FROM `fusionax_deceased` WHERE `deces_ax` = "0000-00-00" LIMIT 10'));
-        $page->assign('deceasedDifferent',XDB::iterator('SELECT ``user_id`,`id_ancien`,`nom`,`prenom`,`promo`,`deces_ax`,`deces_xorg` FROM `fusionax_deceased` WHERE `deces_xorg` != "0000-00-00" AND `deces_ax` != "0000-00-00" LIMIT 10'));
+        $page->assign('deceasedMissingInXorg',XDB::iterator(
+            'SELECT
+                d.user_id,d.id_ancien,d.nom,d.prenom,d.promo,d.deces_ax
+            FROM fusionax_deceased AS d
+            WHERE d.deces_xorg = "0000-00-00"
+            LIMIT 10'));
+        $page->assign('deceasedMissingInAX',XDB::iterator(
+            'SELECT
+                d.user_id,d.id_ancien,d.nom,d.prenom,d.promo,d.deces_xorg
+            FROM fusionax_deceased AD d
+            WHERE d.deces_ax = "0000-00-00"
+            LIMIT 10'));
+        $page->assign('deceasedDifferent',XDB::iterator(
+            'SELECT
+                d.user_id,d.id_ancien,d.nom,d.prenom,d.promo,
+                d.deces_ax,d.deces_xorg
+            FROM fusionax_deceased AS d
+            WHERE d.deces_xorg != "0000-00-00" AND d.deces_ax != "0000-00-00"
+            LIMIT 10'));
     }
 }
+
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:?>
index c14a9f2..fb6df30 100644 (file)
@@ -50,7 +50,7 @@ trouver une correspondance entre les personnes renseignés dans ces annuaires.</
 <h3>Mise en correspondance automatique</h3>
 {if $easyToLink}
 <p>Ces anciens sont probablement les mêmes (à peu près mêmes nom, prénom, promo)</p>
-{include file="fusionax/listFusion.tpl" fusionList=$easyToLink fusionAction="fusionax/ids/link" name="lier" field1="nom_ax" namefield1="Ancien AX"}
+{include file="fusionax/listFusion.tpl" fusionList=$easyToLink fusionAction="fusionax/ids/link" name="lier" field1="display_name_ax" namefield1="Ancien AX"}
 <p><a href="fusionax/ids/linknext">Lier toutes les fiches affichées</a> <span id="fusion-reload" style="display:none"> - <a href="fusionax/ids#autolink">Trouver d'autres correspondances</a></span></p>
 <script type="text/javascript">
 {literal}
index bf9a6d1..cd362f6 100644 (file)
@@ -37,7 +37,7 @@
 {if $fusionList}
 {iterate from=$fusionList item=c}
     <tr class="{cycle values="pair,impair"}">
-        <td>{$c.prenom} {$c.nom} (X {$c.promo})</td>
+        <td>{$c.display_name} (X {$c.promo})</td>
         <td style="text-align:center">
             {if $c.user_id}<a href="admin/user/{$c.user_id}" class="popup2">{icon name="user_suit" title="Administrer utilisateur"}</a>{/if}
             {if $c.id_ancien}<a href="http://www.polytechniciens.com/?page=AX_FICHE_ANCIEN&amp;anc_id={$c.id_ancien}" class="popup2">{icon name="user_gray" title="fiche AX"}</a>{/if}
index 3cff12c..13a0414 100644 (file)
@@ -2,10 +2,10 @@ CREATE TABLE IF NOT EXISTS `profile_names_display` (
   `user_id` int(11) NOT NULL COMMENT 'id of alumni',
   `display` varchar(100) NOT NULL COMMENT 'name to display',
   `sort` varchar(100) NOT NULL COMMENT 'name used for sorting',
-  `reason` set('default','yourself','profile','list') NOT NULL COMMENT 'where to display it',
   `firstname` varchar(50) NOT NULL COMMENT 'first name',
   `lastname` varchar(50) NOT NULL COMMENT 'last name',
-  PRIMARY KEY  (`user_id`,`display`),
+  `yourself` varchar(100) NOT NULL COMMENT 'name we used to speak to him/her',
+  PRIMARY KEY  (`user_id`),
   KEY `sort` (`sort`)
 ) CHARSET=utf8 COMMENT='Alumnis'' names to display';
 
@@ -14,21 +14,28 @@ INSERT INTO `profile_names_display` (
         `user_id`, 
         CONCAT(`prenom`, ' ',IF(`nom_usage` != '',CONCAT(`nom_usage`,' (',`nom`,')'),`nom`)), 
         CONCAT(IF(`nom_usage` != '',`nom_usage`,`nom`),' ',`prenom`),
-        'default',
         `prenom`,
-        IF(`nom_usage` != '',`nom_usage`,`nom`)
+        IF(`nom_usage` != '',`nom_usage`,`nom`),
+        `prenom`
         FROM `auth_user_md5`);
-INSERT INTO `profile_names_display` (SELECT `user_id`, `prenom`, `prenom`, 'yourself', `prenom`, `nom` FROM `auth_user_md5`); 
 
 CREATE TABLE IF NOT EXISTS `profile_names_search` (
   `user_id` int(11) NOT NULL COMMENT 'id of alumni',
   `search_name` varchar(50) NOT NULL COMMENT 'name to search for',
   `name_type` enum('firstname','lastname','surname') NOT NULL default 'lastname' COMMENT 'type of name',
   `search_score` smallint(6) NOT NULL COMMENT 'used to sort search results',
-  PRIMARY KEY  (`nametype`,`name`,`user_id`),
+  PRIMARY KEY  (`name_type`,`search_name`,`user_id`),
   KEY `user_id` (`user_id`)
 ) CHARSET=utf8 COMMENT='Names of alumni (search table)';
 
+CREATE OR REPLACE ALGORITHM=MERGE VIEW fusionax_xorg_anciens AS 
+    SELECT
+        u.user_id, u.matricule_ax, u.promo,
+        n.display AS display_name, n.sort AS sort_name,
+        u.nom, u.prenom
+    FROM `auth_user_md5` AS u
+    INNER JOIN `profile_names_display` AS n ON ( n.user_id = u.user_id );
+
 INSERT INTO `profile_names_search` ( SELECT `user_id`, `nom`, 'lastname', 10 FROM `auth_user_md5` WHERE `nom` != '');
 INSERT INTO `profile_names_search` ( SELECT `user_id`, `nom_usage`, 'lastname', 10 FROM `auth_user_md5` WHERE `nom` != `nom_usage` AND `nom_usage` != '');
 INSERT INTO `profile_names_search` ( SELECT `user_id`, `nom_ini`, 'lastname', 7 FROM `auth_user_md5` WHERE `nom` != `nom_ini` AND `nom_ini` != '' AND `nom_ini` != `nom_usage`);