Fusion AX : mise en correspondance des ids
authorPascal Corpet <pascal.corpet@m4x.org>
Sat, 3 Nov 2007 17:34:14 +0000 (18:34 +0100)
committerPascal Corpet <pascal.corpet@m4x.org>
Sat, 3 Nov 2007 17:34:14 +0000 (18:34 +0100)
modules/fusionax.php
templates/fusionax/ids.tpl
templates/fusionax/listFusion.tpl
templates/fusionax/misc.tpl

index 01c7021..ffb2b22 100644 (file)
@@ -146,6 +146,11 @@ class FusionAxModule extends PLModule{
         exit;
     }
     
+    /** Lier les identifiants d'un ancien dans les deux annuaires
+     * @param user_id identifiant dans l'annuaire X.org
+     * @param matricule_ax identifiant dans l'annuaire de l'AX
+     * @return 0 si la liaison a échoué, 1 sinon
+     */          
     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 
@@ -160,8 +165,32 @@ class FusionAxModule extends PLModule{
         return XDB::affectedRows() / 2;  
     }
     
-    private static function find_easy_to_link($limit = 10)
+    /** 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     
+     */              
+    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,
+            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
+            ".($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,
@@ -173,10 +202,9 @@ class FusionAxModule extends PLModule{
                 (ax.Nom_complet = xorg.nom
                      OR ax.Nom_complet LIKE CONCAT(xorg.nom,' %')
                      OR ax.Nom_complet LIKE CONCAT(xorg.nom,'-%')
-                     OR xorg.nom LIKE CONCAT('%-',ax.Nom_usuel)
                      OR ax.Nom_usuel = xorg.nom) AND
-                xorg.promo < ax.promotion_etude + 5 AND
-                xorg.promo > ax.promotion_etude - 5)
+                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
@@ -184,10 +212,12 @@ class FusionAxModule extends PLModule{
             ".($limit?('LIMIT '.$limit):''));
     }
     
+    /** Module de mise en correspondance les ids */
     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');
         if ($part == 'missingInAX')
@@ -217,6 +247,7 @@ class FusionAxModule extends PLModule{
         if ($part == 'link')
         {
             FusionAxModule::link_by_ids($user_id,$matricule_ax);
+            exit;
         }
         if ($part == 'linknext')
         {
@@ -225,6 +256,7 @@ class FusionAxModule extends PLModule{
             {
                 FusionAxModule::link_by_ids($l['user_id'],$l['id_ancien']);
             }
+            pl_redirect('fusionax/ids#autolink');
         }
         if ($part == 'linkall')
         {
@@ -259,9 +291,9 @@ class FusionAxModule extends PLModule{
         // 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,Date_décès FROM fusionax_deceased WHERE deces = "0000-00-00" LIMIT 10'));
-        $page->assign('deceasedMissingInAX',XDB::iterator('SELECT user_id,id_ancien,nom,prenom,promo,deces FROM fusionax_deceased WHERE Date_décès = "0000-00-00" LIMIT 10'));
-        $page->assign('deceasedDifferent',XDB::iterator('SELECT user_id,id_ancien,nom,prenom,promo,Date_décès,deces FROM fusionax_deceased WHERE deces != "0000-00-00" AND Date_décès != "0000-00-00" LIMIT 10'));
+        $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'));
     }
 }
 // vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8:?>
index aa12867..c14a9f2 100644 (file)
@@ -46,11 +46,32 @@ trouver une correspondance entre les personnes renseignés dans ces annuaires.</
 </form>
 
 <p></p>
-<h3 id="autolink" name="autolink">Mise en correspondance automatique</h3>
+<div id="autolink" name="autolink">
+<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"}
-<p><a href="fusionax/ids/linknext">Lier toutes les fiches affichées</a></p>
+<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}
+//<!--
+$(document).ready(function() {
+    $('#autolink a.fusion-action').click(function(a){
+        $.get(a.currentTarget.href,{},function(){
+            $(a.currentTarget).hide();
+            $('#fusion-reload').show();
+            $('#fusion-reload a').click(function(a) {
+                document.location = a.currentTarget.href;
+                document.location.reload();
+            }); 
+        });
+        return false;
+    });
+});
+//-->
+{/literal}
+</script>
 {else}
 <p>Aucune correspondance automatique n'a été trouvée (mêmes nom, prénom, promo d'étude).</p>
 {/if}
+</div>
index b922cdc..bf9a6d1 100644 (file)
@@ -49,7 +49,7 @@
         <td>{$c.$field2}</td>
         {/if}
         {if $fusionAction}
-        <td><a href="{$fusionAction}/{$c.user_id}/{$c.id_ancien}">{$name}</a></td>
+        <td><a class="fusion-action" href="{$fusionAction}/{$c.user_id}/{$c.id_ancien}">{$name}</a></td>
         {/if}
     </tr>
 {/iterate}
index f2ff9c2..de6b539 100644 (file)
@@ -31,15 +31,15 @@ décès.</p>
 
 <p>Anciens déclarés décédés dans l'annuaire AX mais pas sur Xorg</p>
 
-{include file='fusionax/listFusion.tpl' fusionList=$deceasedMissingInXorg field1='Date_décès' namefield1='Décès AX'}
+{include file='fusionax/listFusion.tpl' fusionList=$deceasedMissingInXorg field1='deces_ax' namefield1='Décès AX'}
 
 <p>Anciens déclarés décédés dans l'annuaire Xorg mais pas chez l'AX</p>
 
-{include file='fusionax/listFusion.tpl' fusionList=$deceasedMissingInAX field1='deces' namefield1='Décès X.org'}
+{include file='fusionax/listFusion.tpl' fusionList=$deceasedMissingInAX field1='deces_xorg' namefield1='Décès X.org'}
 
 <p>Anciens déclarés décédés dans les deux annuaires mais pas avec la même date</p>
 
-{include file='fusionax/listFusion.tpl' fusionList=$deceasedDifferent field1='deces' field2='Date_décès' namefield1='Décès X.org' namefield2='Décès AX'}
+{include file='fusionax/listFusion.tpl' fusionList=$deceasedDifferent field1='deces_xorg' field2='deces_ax' namefield1='Décès X.org' namefield2='Décès AX'}
 
 {else}