Merge
authorStéphane Jacob <sj@m4x.org>
Fri, 15 Oct 2010 11:22:51 +0000 (13:22 +0200)
committerStéphane Jacob <sj@m4x.org>
Fri, 15 Oct 2010 11:23:34 +0000 (13:23 +0200)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
upgrade/1.0.1/README
upgrade/1.0.1/merge.php [new file with mode: 0755]
upgrade/merge-0.0.1/01_emails.sql [deleted file]
upgrade/merge-0.0.1/03_corps.sql [deleted file]
upgrade/merge-0.0.1/06_merge_nationalities.sql [deleted file]
upgrade/merge-0.0.1/07_education.php [deleted file]
upgrade/merge-0.0.1/connect.db.inc.php [deleted symlink]

index 80846c3..1dd917e 100644 (file)
@@ -1 +1,2 @@
 99_jobs.sql must be run after php scripts.
+merge.php must not be run during the release. This script is only for merge purpose.
diff --git a/upgrade/1.0.1/merge.php b/upgrade/1.0.1/merge.php
new file mode 100755 (executable)
index 0000000..80286dd
--- /dev/null
@@ -0,0 +1,293 @@
+#!/usr/bin/php5
+<?php
+require_once 'connect.db.inc.php';
+require_once '../../classes/address.php';
+require_once '../../classes/phone.php';
+
+$globals->debug = 0; // Do not store backtraces.
+
+/* Drops temporary tables and views used to checked if the merge was possible. */
+XDB::rawExecute('DROP VIEW IF EXISTS fusionax_xorg_anciens');
+XDB::rawExecute('DROP VIEW IF EXISTS fusionax_deceased');
+XDB::rawExecute('DROP VIEW IF EXISTS fusionax_promo');
+XDB::rawExecute('DROP TABLE IF EXISTS fusionax_import');
+
+/* Includes entreprises we do not have into profile_job_enum. */
+XDB::rawExecute('INSERT INTO  profile_job_enum (name, acronym, AX_code)
+                      SELECT  f.Raison_sociale, f.Sigle, f.Code_etab
+                        FROM  fusionax_entreprises AS f
+                       WHERE  NOT EXISTS (SELECT  *
+                                            FROM  profile_job_enum AS j
+                                           WHERE  j.name = f.Raison_sociale OR j.name = f.Sigle OR f.Code_etab = j.AX_code)');
+XDB::rawExecute('DROP TABLE IF EXISTS fusionax_entreprises');
+
+/* Includes jobs we do not have into profile_job_enum. */
+$jobsAX = XDB::rawIterator('SELECT  p.pid, pje.name, pje.id, IF(f.Annuaire = 1, \'ax\', \'private\') AS pub, p.ax_id,
+                                    IF(f.Raison_sociale, CONCAT(f.Raison_sociale, CONCAT(\' \', f.Libelle_fonctio), f.Libelle_fonctio) AS description
+                              FROM  fusionax_activities AS f
+                        INNER JOIN  profile_job_enum    AS pje ON (pje.AX_code = f.Code_etab)
+                        INNER JOIN  profiles            AS p   ON (f.id_ancien = p.ax_id)
+                          ORDER BY  p.pid');
+$jobsXorg = XDB::rawIterator('SELECT  p.pid, pj.id, pje.name, pje.acronym
+                                FROM  profile_job         AS pj
+                          INNER JOIN  profile_job_enum    AS pje ON (pje.id = pj.jobid)
+                          INNER JOIN  profiles            AS p   ON (p.pid = pj.pid)
+                          INNER JOIN  fusionax_activities AS f   ON (f.id_ancien = p.ax_id)
+                            ORDER BY  p.pid, pj.id');
+$jobXorg = $jobsXorg->next();
+while ($jobAX = $jobsAX->next()) {
+    $already = false;
+    $id = 0;
+    while ($jobXorg['pid'] == $jobAX['pid']) {
+        if ($jobXorg['name'] == $jobAX['name'] || $jobXorg['acronym'] == $jobAX['name']) {
+            $jobXorg = $jobsXorg->next();
+            $jobAX = $jobsAX->next();
+            $already = true;
+        }
+        list($pid, $id, $name, $acronym) = $jobXorg;
+    }
+    if (!$already) {
+        ++$id;
+        XDB::execute('INSERT INTO  profile_job (id, pid, jobid, description, pub)
+                           VALUES  {?}, {?}, {?}, {?}',
+                     $id, $jobsAX['pid'], $jobsAX['id'], $jobsAX['description'], $jobsAX['pub']);
+        $res = XDB::query("SELECT  CONCAT(Ligne1, IF(Ligne2 != '', CONCAT('\n', Ligne2), ''),
+                                              IF(Ligne3 != '', CONCAT('\n', Ligne3), ''),
+                                              '\n', IF(code_postal, code_postal, zip_cedex), ' ', zip_cedex) AS address,
+                                   tel, fax
+                             FROM  fusionax_adresses
+                            WHERE  Type_adr = 'E' and id_ancien = {?}", $jobsAX['ax_id']);
+        $res = $res->fetchOneRow();
+        $phone = new Phone(array('display' => $res['tel'], 'link_id' => $id, 'pid' => $jobsAX['pid'], 'type' => 'fixed', 'link_type' => Phone::LINK_JOB, 'pub' => $jobsAX['pub']));
+        $fax = new Phone(array('display' => $res['fax'], 'link_id' => $id, 'pid' => $jobsAX['pid'], 'type' => 'fax', 'link_type' => Phone::LINK_JOB, 'pub' => $jobsAX['pub']));
+        $address = new Address(array('type' => Address:LINK_JOB, 'text' => $res['address'], 'pid' => $jobsAX['pid'], 'id' => $id));
+        $phone->save();
+        $fax->save();
+        $address->save();
+        if ($id > 1) {
+            XDB::execute("UPDATE  profile_merge_issues
+                             SET  issues = IF(issues, CONCAT(issues, ',', 'job'), 'job')
+                           WHERE  pid = {?}", $jobsAX['pid']);
+        }
+    }
+}
+XDB::rawExecute('DROP TABLE IF EXISTS fusionax_activities');
+XDB::rawExecute('DELETE FROM fusionax_adresses WHERE  Type_adr = \'E\'');
+
+/* Retrieves information from fusionax_anciens: promo, nationality, corps, email, phone, deathdate */
+/* Updates uncertain promotions, but when we are we are right. */
+XDB::rawExecute("UPDATE  profile_merge_issues
+                    SET  issues = IF(issues, CONCAT(issues, ',', 'promo'), 'promo'), entry_year_ax = f.promotion_etude
+                  WHERE  EXISTS (SELECT  *
+                                   FROM  profiles          AS p
+                             INNER JOIN  profile_display   AS pd ON (p.pid = pd.pid)
+                             INNER JOIN  profile_education AS pe ON (p.pid = pe.pid)
+                             INNER JOIN  fusionax_anciens  AS f  ON (p.ax_id = f.ax_id)
+                                  WHERE  pd.promo != CONCAT('X', f.promotion_etude)
+                                         AND !(f.promotion_etude = pe.entry_year + 1 AND pe.grad_year = pe.entry_year + 4))
+                         AND pid NOT IN (18399,21099,40616)");
+
+/* Updates nationality. */
+XDB::rawExecute('ALTER TABLE geoloc_pays ADD INDEX (license_plate);');
+XDB::rawExecute('UPDATE  profiles         AS p
+             INNER JOIN  fusionax_anciens AS f ON (p.ax_id = f.ax_id)
+             INNER JOIN  geoloc_countries AS g ON (g.licensePlate = f.Code_nationalite)
+                    SET  p.nationality1 = g.a2
+                  WHERE  p.nationality1 IS NULL;');
+XDB::rawExecute('UPDATE  profiles         AS p
+             INNER JOIN  fusionax_anciens AS f ON (p.ax_id = f.ax_id)
+             INNER JOIN  geoloc_countries AS g ON (g.licensePlate = f.Code_nationalite)
+                    SET  p.nationality2 = g.a2
+                  WHERE  p.nationality1 != g.a2 AND p.nationality2 IS NULL;');
+XDB::rawExecute('UPDATE  profiles         AS p
+             INNER JOIN  fusionax_anciens AS f ON (p.ax_id = f.ax_id)
+             INNER JOIN  geoloc_countries AS g ON (g.licensePlate = f.Code_nationalite)
+                    SET  p.nationality3 = g.a2
+                  WHERE  p.nationality1 != g.a2 AND p.nationality2 != g.a2 AND p.nationality3 IS NULL;');
+XDB::rawExecute('ALTER TABLE geoloc_pays DROP INDEX (license_plate)');
+
+/* Updates corps. */
+XDB::rawExecute('REPLACE IGNORE INTO  profile_corps (pid, original_corpsid, current_corpsid, rankid, corps_pub)
+                              SELECT  p.pid, c.id, c.id, r.id, \'ax\'
+                                FROM  profiles AS p
+                          INNER JOIN  fusionax_anciens        AS f ON (p.ax_id = f.ax_id)
+                          INNER JOIN  profile_corps_enum      AS c ON (f.corps_sortie = c.abbreviation)
+                          INNER JOIN  profile_corps_rank_enum AS r ON (f.grade = r.abbreviation)
+                               WHERE  NOT EXISTS (SELECT  *
+                                                    FROM  profile_corps AS pc
+                                                   WHERE  p.pid = pc.pid AND pc.original_corpsid != 1)');
+XDB::rawExecute("UPDATE  profile_corps      AS c
+             INNER JOIN  profile_corps_enum AS e ON (c.original_corpsid = e.id)
+              LEFT JOIN  profile_corps_enum AS a ON (a.name = 'Aucun (anc. démissionnaire)')
+                    SET  c.original_corpsid = a.id
+                  WHERE  e.name = 'Ancien élève étranger'");
+XDB::rawExecute("UPDATE  profile_corps_enum
+                    SET  name = 'Aucun'
+                  WHERE  name = 'Aucun (anc. démissionnaire)'");
+XDB::rawExecute("DELETE FROM  profile_corps_enum
+                       WHERE  name = 'Ancien élève étranger'");
+
+/* Updates email_directory. */
+XDB::rawExecute("INSERT IGNORE INTO  profile_directory (pid, email_directory)
+                             SELECT  p.pid, f.Mel_usage
+                               FROM  fusionax_anciens AS f
+                         INNER JOIN  profiles         AS p ON (p.ax_id = f.ax_id)
+                              WHERE  f.Mel_publiable != '0' AND f.Mel_usage != ''");
+XDB::rawExecute("INSERT IGNORE INTO  register_marketing (uid, email, type)
+                             SELECT  ap.uid, f.Mel_usage, 'ax'
+                               FROM  fusionax_anciens AS f
+                         INNER JOIN  profiles         AS p  ON (p.ax_id = f.ax_id)
+                         INNER JOIN  account_profiles AS ap ON (ap.pid = p.pid AND FIND_IN_SET('owner', perms))
+                          LEFT JOIN  emails           AS e  ON (e.uid = ap.uid AND e.flags = 'active')
+                              WHERE  f.Mel_usage != '' AND f.Mel_usage NOT LIKE '%@polytechnique.edu'
+                                     AND f.Mel_usage NOT LIKE '%@polytechnique.org' AND f.Mel_usage NOT LIKE '%@m4x.org'
+                                     AND f.Mel_usage NOT LIKE '%@melix.%' AND e.email IS NULL");
+
+/* Updates phone. */
+$phonesXorg = Phone::iterate(array(), array('user'));
+$phonesAX = XDB::rawIterator("SELECT  p.pid, f.tel_mobile AS display, 'user' AS link_type, 'mobile' AS type, 'ax' AS pub
+                                FROM  fusionax_anciens AS f
+                          INNER JOIN  profiles         AS p ON (f.ax_id = p.ax_id)
+                               WHERE  f.tel_mobile IS NOT NULL
+                            ORDER BY  p.pid");
+$phoneXorg = $phonesXorg->next();
+while ($phoneAX = new Phone($phonesAX->next())) {
+    $already = false;
+    $id = 0;
+    $phoneAX->format();
+    while ($phoneXorg->pid() == $phoneAX->pid()) {
+        if ($phoneXorg->display == $phoneAX->display) {
+            $already = true;
+        }
+        ++$id;
+        $phoneXorg = $phonesXorg->next();
+    }
+    if (!$already) {
+        $phoneAX->setId($id);
+        $phoneAX->save();
+        if ($id > 0) {
+            XDB::execute("UPDATE  profile_merge_issues
+                             SET  issues = IF(issues, CONCAT(issues, ',', 'phone'), 'phone')
+                           WHERE  pid = {?}", $phoneAX->pid());
+        }
+    }
+}
+
+/* Retrieves different deathdates. */
+XDB::rawExecute("UPDATE  profile_merge_issues AS pi
+                    SET  issues = IF(issues, CONCAT(issues, ',', 'deathdate'), 'deathdate'), deathdate_ax = f.Date_deces
+             INNER JOIN  profiles         AS p ON (pi.pid = p.pid)
+             INNER JOIN  fusionax_anciens AS f ON (f.ax_id = p.ax_id)
+                  WHERE  p.deathdate != f.Date_deces");
+XDB::rawExecute('DROP TABLE IF EXISTS fusionax_anciens');
+
+/* Retrieves addresses from AX database (one address per user maximum). */
+$addressesAX = XDB::rawIterator("SELECT  CONCAT(Ligne1, IF(Ligne2 != '', CONCAT('\n', Ligne2), ''),
+                                                IF(Ligne3 != '', CONCAT('\n', Ligne3), ''),
+                                                '\n', IF(code_postal, code_postal, zip_cedex), ' ', zip_cedex) AS text,
+                                         f.tel, f.fax, p.pid, 'home' AS type, 'ax' AS pub
+                                   FROM  fusionax_adresses AS f
+                             INNER JOIN  profiles          AS p ON (f.id_ancien = p.ax_id)
+                                  WHERE  f.Type_adr = 'E' and f.id_ancien = {?} AND Ligne1 != ''
+                               ORDER BY  p.pid");
+$addressesXorg = Address::iterate(array(), array('home'));
+$addressXorg = $addressesXorg->next();
+while ($addressAX = new Address($addressesAX->next())) {
+    $already = false;
+    $id = 0;
+    $addressAX->format();
+    $addressAX->phones[0] = array('display' => $addressAX->tel, 'type' => 'fixed');
+    $addressAX->phones[1] = array('display' => $addressAX->fax, 'type' => 'fax');
+    while ($addressXorg->pid == $addressAX->pid) {
+        if ($addressXorg->text == $addressAX->text) {
+            $already = true;
+        }
+        ++$id;
+        $addressXorg = $addressesXorg->next();
+    }
+    if (!$already) {
+        $addressAX->setId($id);
+        $addressAX->save();
+        if ($id > 0) {
+            XDB::execute("UPDATE  profile_merge_issues
+                             SET  issues = IF(issues, CONCAT(issues, ',', 'address'), 'address')
+                           WHERE  pid = {?}", $addressAX->pid);
+        }
+    }
+}
+XDB::rawExecute('DROP TABLE IF EXISTS fusionax_adresses');
+
+/* Retrieves education from AX database. This is the hardest part since AX only kept education as an unformated string. */
+// {{{ First, we need to build a few lists.
+$degree_list = $level_list = $university_list = $field_list = array();
+$res = XDB::rawIterator('SELECT  id, abbreviation AS name
+                           FROM  profile_education_degree_enum
+                       ORDER BY  id');
+while ($res as $item->next()) {
+    $degree_list[$item[1]] = $item[0];
+}
+$res = XDB::rawIterator('SELECT  level, abbreviation AS name
+                           FROM  profile_education_degree_enum
+                       ORDER BY  id');
+while ($res as $item->next()) {
+    $level_list[$item[1]] = $item[0];
+}
+$res = XDB::rawIterator("SELECT  id, IF(abbreviation = '', name, abbreviation) AS name
+                           FROM  profile_education_enum
+                       ORDER BY  id");
+while ($res as $item->next()) {
+    $university_list[$item[1]] = $item[0];
+}
+$res = XDB::rawIterator('SELECT  id, field AS name
+                           FROM  profile_education_field_enum
+                       ORDER BY  id');
+while ($res as $item->next()) {
+    $field_list[$item[1]] = $item[0];
+}
+// }}}
+$edusXorg = XDB::rawIterator("SELECT  p.pid, d.abbreviation AS degree, IF(e.abbreviation = '', e.name, e.abbreviation) AS university,
+                                      pe.program, pe.id AS no
+                                FROM  profile_education             AS pe
+                          INNER JOIN  profiles                      AS p ON (pe.pid = p.pid)
+                          INNER JOIN  fusionax_formations           AS f ON (f.id_ancien = p.ax_id)
+                          INNER JOIN  profile_education_enum        AS e ON (pe.eduid = e.id)
+                          INNER JOIN  profile_education_degree_enum AS d ON (pe.degreeid = d.id)
+                               WHERE  NOT FIND_IN_SET('primary', pe.flags)
+                            ORDER BY  p.pid, pe.id");
+$edusAX = XDB::rawIterator("SELECT  p.pid, f.Intitule_diplome AS degree, f.Intitule_formation AS university, f.Descr_formation AS program
+                              FROM  fusionax_formations AS f
+                        INNER JOIN  profiles            AS p ON (f.id_ancien = p.ax_id)
+                          ORDER BY  p.pid");
+$eduXorg = $edusXorg->next();
+while ($eduAX = $edusAX->next()) {
+    $id = 0;
+    while ($eduXorg['pid'] == $eduAX['pid']) {
+        if ($eduXorg['university'] == $eduAX['university'] && $level_list[$eduXorg['degree']] == $level_list[$eduAX['degree']]) {
+            $already = true;
+        }
+        ++$id;
+        $eduXorg = $edusXorg->next();
+    }
+    if (isset($field_list[$eduAX['program']])) {
+        $fieldid = $field_list[$eduAX['program']];
+        $program = null;
+    } else {
+        $fieldid = null;
+        $program = $eduAX['program'];
+    }
+    if (!$already) {
+        XDB::execute('INSERT INTO  profile_education (pid, degreeid, eduid, program, fieldid, id)
+                           VALUES  {?}, {?}, {?}, {?}, {?}, {?}',
+                     $eduAX['pid'], $degree_list[$eduAX['degree']], $university_list[$eduAX['university']],
+                     $program, $fieldid, $id);
+        if ($id > 0) {
+            XDB::execute("UPDATE  profile_merge_issues
+                             SET  issues = IF(issues, CONCAT(issues, ',', 'education'), 'education')
+                           WHERE  pid = {?}", $addressAX->pid);
+        }
+    }
+}
+XDB::rawExecute('DROP TABLE IF EXISTS fusionax_formations');
+
+/* vim:set et sw=4 sts=4 ts=4: */
+?>
diff --git a/upgrade/merge-0.0.1/01_emails.sql b/upgrade/merge-0.0.1/01_emails.sql
deleted file mode 100644 (file)
index 55de747..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-INSERT INTO  profile_directory (uid, email_directory)
-     SELECT  user_id, Mel_usage
-       FROM  fusionax_anciens AS ax
- INNER JOIN  auth_user_md5    AS u ON (ax.id_ancien = u.matricule_ax)
-      WHERE  Mel_publiable != '0' AND Mel_usage != '';
-
-INSERT IGNORE INTO  register_marketing (uid, email, type)
-            SELECT  user_id, Mel_usage, 'ax'
-              FROM  fusionax_anciens AS ax
-        INNER JOIN  auth_user_md5    AS u ON (ax.id_ancien = u.matricule_ax)
-         LEFT JOIN  emails           AS e ON (e.uid = u.user_id AND e.flags = 'active')
-             WHERE  Mel_usage != '' AND
-                    Mel_usage NOT LIKE '%@polytechnique.edu' AND
-                    Mel_usage NOT LIKE '%@polytechnique.org' AND
-                    Mel_usage NOT LIKE '%@m4x.org' AND
-                    Mel_usage NOT LIKE '%@melix.%' AND
-                    e.email IS NULL;
-
--- vim:set syntax=mysql:
diff --git a/upgrade/merge-0.0.1/03_corps.sql b/upgrade/merge-0.0.1/03_corps.sql
deleted file mode 100644 (file)
index 6b2ca09..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-INSERT IGNORE INTO  profile_corps (uid, original_corpsid, current_corpsid, rankid, corps_pub)
-            SELECT  u.user_id, c.id, c.id, r.id, 'ax'
-              FROM  auth_user_md5           AS u
-        INNER JOIN  fusionax_anciens        AS f ON (u.matricule_ax = f.id_ancien)
-        INNER JOIN  profile_corps_enum      AS c ON (f.corps_sortie = c.abbreviation)
-        INNER JOIN  profile_corps_rank_enum AS r ON (f.grade = r.abbreviation);
-
-    UPDATE  profile_corps      AS c
-INNER JOIN  profile_corps_enum AS e ON (c.original_corpsid = e.id)
- LEFT JOIN  profile_corps_enum AS a ON (a.name = "Aucun (anc. démissionnaire)")
-       SET  c.original_corpsid = a.id
-     WHERE  e.name = "Ancien élève étranger";
-
-UPDATE  profile_corps_enum
-   SET  name = "Aucun"
- WHERE  name = "Aucun (anc. démissionnaire)";
-
-DELETE FROM  profile_corps_enum
-      WHERE  name = "Ancien élève étranger";
-
---  vim:set syntax=mysql:
diff --git a/upgrade/merge-0.0.1/06_merge_nationalities.sql b/upgrade/merge-0.0.1/06_merge_nationalities.sql
deleted file mode 100644 (file)
index 52f7383..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-ALTER TABLE geoloc_pays ADD INDEX (license_plate);
-
-   UPDATE  auth_user_md5    AS u
-LEFT JOIN  fusionax_anciens AS f ON (u.matricule_ax = f.id_ancien)
-LEFT JOIN  geoloc_pays      AS g ON (g.license_plate = f.Code_nationalite)
-      SET  u.nationalite = g.a2
-    WHERE  u.nationalite IS NULL;
-
-   UPDATE  auth_user_md5    AS u
-LEFT JOIN  fusionax_anciens AS f ON (u.matricule_ax = f.id_ancien)
-LEFT JOIN  geoloc_pays      AS g ON (g.license_plate = f.Code_nationalite)
-      SET  u.nationalite2 = g.a2
-    WHERE  u.nationalite != g.a2 AND u.nationalite2 IS NULL;
-
-   UPDATE  auth_user_md5    AS u
-LEFT JOIN  fusionax_anciens AS f ON (u.matricule_ax = f.id_ancien)
-LEFT JOIN  geoloc_pays      AS g ON (g.license_plate = f.Code_nationalite)
-      SET  u.nationalite3 = g.a2
-    WHERE  u.nationalite != g.a2 AND u.nationalite2 != g.a2 AND u.nationalite3 IS NULL;
-
-ALTER TABLE geoloc_pays DROP INDEX (license_plate);
-
--- vim:set syntax=mysql:
diff --git a/upgrade/merge-0.0.1/07_education.php b/upgrade/merge-0.0.1/07_education.php
deleted file mode 100755 (executable)
index 6941b14..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-#!/usr/bin/php5
-<?php
-require_once 'connect.db.inc.php';
-
-$globals->debug = 0; //do not store backtraces
-
-// get degree list
-$res = XDB::iterator("SELECT  id, abbreviation AS name
-                        FROM  profile_education_degree_enum
-                    ORDER BY  id");
-foreach ($res as $item) {
-    $degree_list[$item[1]] = $item[0];
-}
-
-// get degree's level list
-$res = XDB::iterator("SELECT  id, level AS name
-                        FROM  profile_education_degree_enum
-                    ORDER BY  id");
-foreach ($res as $item) {
-    $level_list [$item[1]] = $item[0];
-}
-
-// get university list
-$res = XDB::iterator("SELECT  id, IF(abbreviation = '', name, abbreviation) AS name
-                        FROM  profile_education_enum
-                    ORDER BY  id");
-foreach ($res as $item) {
-    $university_list [$item[1]] = $item[0];
-}
-
-// get field list
-$res = XDB::iterator("SELECT  id, field AS name
-                        FROM  profile_education_field_enum
-                    ORDER BY  id");
-foreach ($res as $item) {
-    $field_list [$item[1]] = $item[0];
-}
-
-// get Xorg education data
-$res = XDB::query("SELECT  p.uid, d.abbreviation AS degree, IF(e.abbreviation = '', e.name, e.abbreviation) AS university, p.program, p.id AS no
-                     FROM  profile_education             AS p
-               INNER JOIN  profile_education_enum        AS e ON (p.eduid = e.id)
-               INNER JOIN  profile_education_degree_enum AS d ON (p.degreeid = d.id)
-                    WHERE  p.id != 100
-                 ORDER BY  p.uid");
-$xorg_edu = $res->fetchAllAssoc();
-
-// get AX education data
-$res = XDB::iterator("SELECT  u.user_id AS uid, f.Intitule_diplome AS degree, f.Intitule_formation AS university,
-                              CONCAT(Descr_formation, ' ', tmp_1, ' ', tmp_2, ' ', tmp_3, ' ', tmp_4) AS program
-                        FROM  fusionax_formations   AS f
-                  INNER JOIN  fusionax_xorg_anciens AS u ON (f.id_ancien = u.matricule_ax)
-                    ORDER BY  u.user_id");
-$ax_edu = $res->fetchAllAssoc();
-
-// merge education data
-$nb_merge_succes = 0;
-$nb_total = 0;
-$xorg = next($xorg_edu);
-while ($ax = next($ax_edu)) {
-    array_walk($ax, 'trim');
-    if (($ax['degree'] == '') && ($ax['university'] = '')) {
-        continue;
-    }
-    while ($xorg['uid'] && ($xorg['uid'] < $ax['uid'])) {
-        $xorg = next($xorg_edu);
-    }
-
-    $no = 0;
-    if($xorg['uid'] == $ax['uid']) {
-        $uid = $xorg['uid'];
-        $i = 0;
-
-        while (($xorg['uid'] == $uid) && (!merge($ax, $xorg))) {
-            $xorg = next($xorg_edu);
-            $i++;
-            $no++;
-        }
-        while ($xorg['uid'] == $uid) {
-            $xorg = next($xorg_edu);
-            $no++;
-        }
-
-        if ($i > 0) {
-            $i = $no;
-        } else {
-            $i = $no - 1;
-        }
-        while ($i != 0) {
-            $xorg = prev($xorg_edu);
-            $i--;
-        }
-        if ($ax['no']) {
-            $no = $ax['no'];
-            $nb_merge_succes++;
-        }
-    }
-    adapt_ax($ax);
-    XDB::execute("REPLACE INTO  profile_education (uid, degreeid, eduid, program, fieldid, id)
-                        VALUES  {?}, {?}, {?}, {?}, {?}, {?}",
-                 $ax['uid'], $ax['degree'], $ax['university'], $ax['program'], $ax['field'], $no);
-    $nb_total++;
-    if (($nb_total % 1000) == 0) {
-        echo ".";
-    }
-}
-
-echo "\n";
-echo "$nb_merge_succes educations were succesfully merged among $nb_total entries.\n";
-
-// auxilliary functions
-
-// replaces AX data by corresponding id in Xorg database
-function adapt_ax(&$ax)
-{
-    if ($field_list[$ax['program']]) {
-        $ax['field'] = $field_list[$ax['program']];
-        $ax['program'] = null;
-    }
-    $ax['degree'] = $degree_list[$ax['degree']];
-    $ax['university'] = $university_list[$ax['university']];
-}
-
-// tries to merge two educations into ax and returns 1 in case of merge
-function merge(&$ax, $xorg)
-{
-    if ($ax['degree'] == '') {
-        if ($ax['university'] != $xorg['university']) {
-            return 0;
-        }
-        $ax['degree'] = $xorg['degree'];
-        $ax['university'] = $xorg['university'];
-    } else {
-        if ($ax['university'] == '') {
-            if (($level_list[$ax['degree']] == $level_list[$xorg['degree']]) || ($xorg['degree'] == "Dipl.") || ($ax['degree'] == "Dipl.")) {
-                if ($xorg['degree'] != "Dipl.") {
-                    $ax['degree'] = $xorg['degree'];
-                }
-                $ax['university'] = $xorg['university'];
-            } else {
-                return 0;
-            }
-        } else {
-            if (($ax['university'] == $xorg['university']) &&
-                (($level_list[$ax['degree']] == $level_list[$xorg['degree']]) || ($xorg['degree'] == "Dipl.") || ($ax['degree'] == "Dipl."))) {
-                if ($xorg['degree'] != "Dipl.") {
-                    $ax['degree'] = $xorg['degree'];
-                }
-            } else {
-                return 0;
-            }
-        }
-    }
-    if ($xorg['program']) {
-        $ax['field'] = $field_list[$ax['program']];
-        $ax['program'] = $xorg['program'];
-    }
-    $ax['no'] = $xorg['no'];
-    return 1;
-}
-
-/* vim:set et sw=4 sts=4 ts=4: */
-?>
diff --git a/upgrade/merge-0.0.1/connect.db.inc.php b/upgrade/merge-0.0.1/connect.db.inc.php
deleted file mode 120000 (symlink)
index 442fab7..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../../bin/connect.db.inc.php
\ No newline at end of file