{
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'),
);
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));
}
}
$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;
}
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);
}
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...';
$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
$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);
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;
*/
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;
}
/** 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;
{
// 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;
}
{
$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)
{
$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:?>
`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';
`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`);