Merge remote branch 'origin/xorg/maint' into xorg/master
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 12 Feb 2011 11:19:38 +0000 (12:19 +0100)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Sat, 12 Feb 2011 11:19:38 +0000 (12:19 +0100)
Conflicts:
templates/xnetgrp/membres-edit.tpl

Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
24 files changed:
classes/address.php
classes/phone.php
classes/profilevisibility.php
include/newsletter.inc.php
include/reminder/nl.inc.php
include/validations/nl.inc.php
modules/fusionax/formation.pl
modules/lists/lists.inc.php
modules/profile/addresses.inc.php
modules/profile/jobs.inc.php
modules/xnetgrp.php
templates/admin/user.tpl
templates/include/flags.radio.tpl
templates/include/form.valid.edit-entreprises.tpl
templates/marketing/broken.tpl
templates/marketing/private.tpl
templates/marketing/public.tpl
templates/platal/recovery.tpl
templates/profile/jobs.job.tpl
templates/register/step3.tpl
templates/xnetevents/subscribe.tpl
templates/xnetgrp/mail.tpl
templates/xnetgrp/membres-edit.tpl
upgrade/1.0.2/xx_data_update_01.sql [new file with mode: 0644]

index 6c1880b..6634f47 100644 (file)
@@ -584,9 +584,14 @@ class Address
             }
         }
         $this->text = trim($this->text);
+        $this->phones = Phone::formatFormArray($this->phones, $this->error, new ProfileVisibility($this->pub));
         if ($this->removed == 1) {
-            $this->text = '';
-            return true;
+            if (S::user()->checkPerms('directory_ax') && Phone::hasPrivate($this->phones)) {
+                Platal::page()->trigWarning("L'adresse ne peut être supprimée car elle contient des informations pour lesquelles vous n'avez le droit d'édition.");
+            } else  {
+                $this->text = '';
+                return true;
+            }
         }
 
         if ($format['requireGeocoding'] || $this->changed == 1) {
@@ -609,7 +614,6 @@ class Address
             $this->countryId = null;
         }
         $this->geocodeChosen = null;
-        $this->phones = Phone::formatFormArray($this->phones, $this->error, new ProfileVisibility($this->pub));
         if ($format['postalText']) {
             $this->formatPostalAddress();
         }
@@ -719,13 +723,13 @@ class Address
                 Geocoder::getAreaId($this, $area);
             }
 
-            XDB::execute('INSERT INTO  profile_addresses (pid, jobid, type, id, flags, accuracy,
-                                                          text, postalText, postalCode, localityId,
-                                                          subAdministrativeAreaId, administrativeAreaId,
-                                                          countryId, latitude, longitude, pub, comment,
-                                                          north, south, east, west)
-                               VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?},
-                                        {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
+            XDB::execute('INSERT IGNORE INTO  profile_addresses (pid, jobid, type, id, flags, accuracy,
+                                                                 text, postalText, postalCode, localityId,
+                                                                 subAdministrativeAreaId, administrativeAreaId,
+                                                                 countryId, latitude, longitude, pub, comment,
+                                                                 north, south, east, west)
+                                      VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?},
+                                               {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
                          $this->pid, $this->jobid, $this->type, $this->id, $this->flags, $this->accuracy,
                          $this->text, $this->postalText, $this->postalCode, $this->localityId,
                          $this->subAdministrativeAreaId, $this->administrativeAreaId,
@@ -767,22 +771,24 @@ class Address
      * @param $data: an array of form formatted addresses.
      * @param $pid, $type, $linkid: pid, type and id concerned by the update.
      */
-    static public function saveFromArray(array $data, $pid, $type = self::LINK_PROFILE, $linkid = null)
+    static public function saveFromArray(array $data, $pid, $type = self::LINK_PROFILE, $linkid = null, $savePrivate = true)
     {
         foreach ($data as $id => $value) {
-            if (!is_null($linkid)) {
-                $value['id'] = $linkid;
-            } else {
-                $value['id'] = $id;
-            }
-            if (!is_null($pid)) {
-                $value['pid'] = $pid;
-            }
-            if (!is_null($type)) {
-                $value['type'] = $type;
+            if ($value['pub'] != 'private' || $savePrivate) {
+                if (!is_null($linkid)) {
+                    $value['id'] = $linkid;
+                } else {
+                    $value['id'] = $id;
+                }
+                if (!is_null($pid)) {
+                    $value['pid'] = $pid;
+                }
+                if (!is_null($type)) {
+                    $value['type'] = $type;
+                }
+                $address = new Address($value);
+                $address->save();
             }
-            $address = new Address($value);
-            $address->save();
         }
     }
 
@@ -824,7 +830,9 @@ class Address
             }
         }
 
-        return self::formArrayWalk($data, 'toFormArray', $success, true);
+        $addresses = self::formArrayWalk($data, 'toFormArray', $success, true);
+        usort($addresses, 'ProfileVisibility::comparePublicity');
+        return $addresses;
     }
 
     static public function formArrayToString(array $data)
@@ -832,6 +840,16 @@ class Address
         return implode(', ', self::formArrayWalk($data, 'toString'));
     }
 
+    static public function hasPrivate(array $addresses)
+    {
+        foreach ($addresses as $address) {
+            if ($address['pub'] == 'private') {
+                return true;
+            }
+        }
+        return false;
+    }
+
     static public function iterate(array $pids = array(), array $types = array(),
                                    array $jobids = array(), array $pubs = array())
     {
index 8a63d66..34d7db9 100644 (file)
@@ -276,9 +276,9 @@ class Phone
     {
         $this->format();
         if (!$this->isEmpty()) {
-            XDB::execute('INSERT INTO  profile_phones (pid, link_type, link_id, tel_id, tel_type,
-                                                       search_tel, display_tel, pub, comment)
-                               VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
+            XDB::execute('INSERT IGNORE INTO  profile_phones (pid, link_type, link_id, tel_id, tel_type,
+                                                              search_tel, display_tel, pub, comment)
+                                      VALUES  ({?}, {?}, {?}, {?}, {?}, {?}, {?}, {?}, {?})',
                          $this->pid, $this->link_type, $this->link_id, $this->id, $this->type,
                          $this->search, $this->display, $this->pub, $this->comment);
         }
@@ -350,7 +350,9 @@ class Phone
     // Formats an array of form phones into an array of form formatted phones.
     static public function formatFormArray(array $data, &$success = true, $maxPublicity = null)
     {
-        return self::formArrayWalk($data, 'toFormArray', $success, true, $maxPublicity);
+        $phones = self::formArrayWalk($data, 'toFormArray', $success, true, $maxPublicity);
+        usort($phones, 'ProfileVisibility::comparePublicity');
+        return $phones;
     }
 
     static public function formArrayToString(array $data)
@@ -358,6 +360,16 @@ class Phone
         return implode(', ', self::formArrayWalk($data, 'toString'));
     }
 
+    static public function hasPrivate(array $phones)
+    {
+        foreach ($phones as $phone) {
+            if ($phone['pub'] == 'private') {
+                return true;
+            }
+        }
+        return false;
+    }
+
     static public function iterate(array $pids = array(), array $link_types = array(),
                                    array $link_ids = array(), array $pubs = array())
     {
index e7dbbd4..cf5687d 100644 (file)
@@ -31,9 +31,13 @@ class ProfileVisibility
 
     private $level;
 
-    public function __construct($level = null)
+    public function __construct($level = null, $force = false)
     {
-        $this->setLevel($level);
+        if ($force) {
+            $this->forceLevel($level);
+        } else {
+            $this->setLevel($level);
+        }
     }
 
     public function setLevel($level = self::VIS_PUBLIC)
@@ -62,6 +66,15 @@ class ProfileVisibility
         }
     }
 
+    public function forceLevel($level)
+    {
+        if ($level != self::VIS_PRIVATE && $level != self::VIS_AX && $level != self::VIS_PUBLIC) {
+            Platal::page()->kill('Invalid visibility: ' . $level);
+        }
+
+        $this->level = $level;
+    }
+
     public function level()
     {
         if ($this->level == null) {
@@ -80,6 +93,14 @@ class ProfileVisibility
     {
         return in_array($visibility, $this->levels());
     }
+
+    static public function comparePublicity($a, $b)
+    {
+        $a_pub = new ProfileVisibility($a['pub'], true);
+        $b_pub = new ProfileVisibility($b['pub'], true);
+
+        return !$a_pub->isVisible($b_pub->level());
+    }
 }
 
 
index 1f42a2d..da97493 100644 (file)
@@ -231,16 +231,20 @@ class NewsLetter
     }
 
     /** Return the latest pending issue of the newsletter.
+     * @p $create Whether to create an empty issue if no pending issue exist.
      * @return Either null, or a NL object.
      */
-    public function getPendingIssue()
+    public function getPendingIssue($create = false)
     {
         $res = XDB::query('SELECT  MAX(id)
                              FROM  newsletter_issues
                             WHERE  nlid = {?} AND state = \'new\'',
                             $this->id);
-        if ($res->numRows()) {
-            $id = $res->fetchOneCell();
+        $id = $res->fetchOneCell();
+        if ($id != null) {
+            return new NLIssue($id, $this);
+        } else if ($create) {
+            $id = $this->createPending();
             return new NLIssue($id, $this);
         } else {
             return null;
index 03b8ef2..73f1cd8 100644 (file)
@@ -25,7 +25,7 @@ class ReminderNl extends Reminder
     {
         if ($action == 'yes') {
             require_once 'newsletter.inc.php';
-            NewsLetter::subscribe();
+            NewsLetter::forGroup(NewsLetter::GROUP_XORG)->subscribe();
             $this->UpdateOnYes();
         }
 
@@ -52,7 +52,7 @@ class ReminderNl extends Reminder
     public static function IsCandidate(User &$user, $candidate)
     {
         require_once 'newsletter.inc.php';
-        $isSubscribed = NewsLetter::subscriptionState();
+        $isSubscribed = NewsLetter::forGroup(NewsLetter::GROUP_XORG)->subscriptionState();
         if ($isSubscribed) {
             Reminder::MarkCandidateAsAccepted($user->id(), $candidate);
         }
index 0a385ac..2c17f2b 100644 (file)
@@ -106,7 +106,7 @@ class NLReq extends Validate
 
     public function commit()
     {
-        $nl = NewsLetter::forGroup(NewsLetter::GROUP_XORG)->getPendingIssue();
+        $nl = NewsLetter::forGroup(NewsLetter::GROUP_XORG)->getPendingIssue(true);
         $nl->saveArticle($this->art);
         return true;
     }
index d10ce65..b401883 100755 (executable)
@@ -61,6 +61,10 @@ while (<FILE>)
   s/^.*\tFO\t\w{8}\tSFAF CIIA$//;
   s/^.*\tFO\t\w{8}\tINSEE$//;
   s/^.*\tFO\t\w{8}\tEconomiste Statisticien$//;
+  s/^.*\tFO\t\w{8}\tProgramme International de l'Ec Polytechnique$//;
+  s/^.*\tFO\t\w{8}\tInst d'Optique théorique et appliquée$//;
+  s/^.*\tFO\t\w{8}\tExpert-Comptable$//;
+  s/^.*\tFO\t\w{8}\tDoct de l'Ec polytechniqueHumanité & Sc sociales$//;
   s/^\n//;
   # Places education in third place as if it is not reconized, it will only be stored as a description.
   s/^(.*\tFO\t\w{8}\t)/\1\t\t/;
@@ -73,16 +77,21 @@ while (<FILE>)
   s/\t\t\tIngENSIMAG$/\tENSIMAG\tIng.\t/;
   s/\t\t\tIngESTP$/\tESTP\tIng.\t/;
   s/\t\t\tIng IEG$/\tENSIEG\tIng.\t/;
+  s/\t\t\tDEA Ponts$/\tPonts\tDEA\t/;
+  s/\t\t\tMScPonts$/\tPonts\tMSc\t/;
+  s/\t\t\tMSc Ponts$/\tPonts\tMSc\t/;
   s/\t\t\tMIB Ponts$/\tPonts\tMIB\t/;
   s/\t\t\tMPA Ponts$/\tPonts\tMBA\t/;
   s/\t\t\tMBA Ponts et Chaussées$/\tPonts\tMBA\t/;
   s/\t\t\tMBA Ponts$/\tPonts\tMBA\t/;
+  s/\t\t\tMBA Ponts Paris$/\tPonts\tMBA\t/;
   s/\t\t\tMaster PC$/\tPonts\tM\t/;
   s/\t\t\tENPC$/\tPonts\tIng.\t/;
   s/\t\t\tMIB ENPC$/\tPonts\tMIB\t/;
   s/\t\t\tMBA ENPC$/\tPonts\tMBA\t/;
   s/\t\t\tMaster ENPC Action publique$/\tPonts\tM\tAction publique/;
   s/\t\t\tIngcivPC$/\tPonts\tIng.\t/;
+  s/\t\t\tDoct ENPC$/\tPonts\tPhD\t/;
   s/\t\t\tIngSupelec$/\tSupélec\tIng.\t/;
   s/\t\t\tIngESE$/\tSupélec\tIng.\t/;
   s/\t\t\tESE$/\tSupélec\tIng.\t/;
@@ -101,18 +110,24 @@ while (<FILE>)
   s/\t\t\tIng AgroParisTech$/\tAgroParisTech\tIng.\t/;
   s/\t\t\tAgro Paris Tech$/\tAgroParisTech\tIng.\t/;
   s/\t\t\tDEA EERN$/\tAgroParisTech\tDEA\tEERN/;
+  s/\t\t\tDEA Agro Paris$/\tAgroParisTech\tDEA\t/;
   s/\t\t\tDEA EERN Economie de l'Environnement$/\tAgroParisTech\tDEA\tEERN Economie de l'Environnement/;
   s/\t\t\tMaster AgroParisTech$/\tAgroParisTech\tM\t/;
   s/\t\t\tIngENST Bretagne$/\tTélécom Bretagne\tIng.\t/;
   s/\t\t\tIngENST$/\tTélécom\tIng.\t/;
   s/\t\t\tENSTP$/\tTélécom\tIng.\t/;
   s/\t\t\tIngcivTéléc$/\tTélécom\tIng.\t/;
+  s/\t\t\tDEA ENST PhysAppliquée "Lasers et Matière"$/\tTélécom\tDEA\tPhysique appliquée - Lasers et Matière/;
   s/\t\t\tMastère SSIR de l'ENST$/\tTélécom\tM\tSSIR/;
   s/\t\t\tMSc Télécom Jussieu$/\tTélécom\tMSc\t/;
   s/\t\t\tMaster CAR ENST$/\tTélécom\tM\tCAR/;
+  s/\t\t\tDoctENST en Informatique et Réseaux$/\tTélécom\tPhD\tInformatique/;
   s/\t\t\tDoctENST$/\tTélécom\tPhD\t/;
   s/\t\t\tPhDTéléc$/\tTélécom\tPhD\t/;
   s/\t\t\tPhD Télécom$/\tTélécom\tPhD\t/;
+  s/\t\t\tPhD ENST$/\tTélécom\tPhD\t/;
+  s/\t\t\tPhD Téléc$/\tTélécom\tPhD\t/;
+  s/\t\t\tEcole Nationale Supérieure du Pétrole et des Moteurs$/\tENSPM\tIng.\t/;
   s/\t\t\tIngENSPM$/\tENSPM\tIng.\t/;
   s/\t\t\tIngIFP$/\tENSPM\tIng.\t/;
   s/\t\t\tIngENSPM Options Moteurs$/\tENSPM\tIng.\tOptions Moteurs/;
@@ -150,6 +165,7 @@ while (<FILE>)
   s/\t\t\tDoctorat Supaéro$/\tSUPAERO\tPhD\t/;
   s/\t\t\tSupAéro : PhD$/\tSUPAERO\tPhD\t/;
   s/\t\t\tPhD Supaéro$/\tSUPAERO\tPhD\t/;
+  s/\t\t\tDoct SupAéro$/\tSUPAERO\tPhD\t/;
   s/\t\t\tIngcivGM$/\tÉcole Nationale Supérieure du Génie Maritime\tIng.\t/;
   s/\t\t\tENSGM$/\tÉcole Nationale Supérieure du Génie Maritime\tIng.\t/;
   s/\t\t\tIngcivENSTA$/\tENSTA\tIng.\t/;
@@ -169,6 +185,7 @@ while (<FILE>)
   s/\t\t\tIng ISCM$/\tISMCM Saint-Ouen\tIng.\t/;
   s/\t\t\tISMCM Saint-Ouen$/\tISMCM Saint-Ouen\tIng.\t/;
   s/\t\t\tIng ENSIEG$/\tENSIEG\tIng.\t/;
+  s/\t\t\tÉcole Nationale de la Statistique et de l'Administration Économique ParisTech$/\tENSAE\tIng.\t/;
   s/\t\t\tCESS de l'ENSAÉ$/\tENSAE\tIng.\t/;
   s/\t\t\tENSAE$/\tENSAE\tIng.\t/;
   s/\t\t\tIng ENSAE$/\tENSAE\tIng.\t/;
@@ -180,9 +197,12 @@ while (<FILE>)
   s/\t\t\tDoctENSAE$/\tENSAE\tPhD\t/;
   s/\t\t\tIng de l'Institut Polytechnique de Grenoble$/\tGrenoble INP\tIng.\t/;
   s/\t\t\tDEA INPG$/\tGrenoble INP\tDEA\t/;
+  s/\t\t\tIng INPG$/\tGrenoble INP\tIng.\t/;
   s/\t\t\tDoctINPG$/\tGrenoble INP\tPhD\t/;
   s/\t\t\tPhD INPG$/\tGrenoble INP\tPhD\t/;
   s/\t\t\tPhD : INPG$/\tGrenoble INP\tPhD\t/;
+  s/\t\t\tMSc Toulouse School of Economics$/\tTSE\tMSc\t/;
+  s/\t\t\tPhD Toulouse School of Economics$/\tTSE\tPhD\t/;
   s/\t\t\tDEA IHM INPT$/\tINP Toulouse\tDEA\tIHM/;
   s/\t\t\tDocteur INP Toulouse maths info$/\tINP Toulouse\tPhD\tMathématiques Informatique/;
   s/\t\t\tDEA INPL$/\tINPL\tDEA\t/;
@@ -194,6 +214,7 @@ while (<FILE>)
   s/\t\t\tESPCI Ecole Sup Phys et de Chimie Industrielles$/\tESPCI\t\t/;
   s/\t\t\tIngESPCI$/\tESPCI\tIng.\t/;
   s/\t\t\tIng ESPCI$/\tESPCI\tIng.\t/;
+  s/\t\t\tIng ESPCI ParisTech$/\tESPCI\tIng.\t/;
   s/\t\t\tIngENSEEIHT$/\tENSEEIHT\tIng.\t/;
   s/\t\t\tIngENSEEIHT Informatique$/\tENSEEIHT\tIng.\tInformatique/;
   s/\t\t\tIngENSEEIHT Toulouse$/\tENSEEIHT\tIng.\t/;
@@ -202,8 +223,10 @@ while (<FILE>)
   s/\t\t\tDoctECP$/\tCentrale Paris\tPhD\t/;
   s/\t\t\tDEA TACS ENS Cachan$/\tENS Cachan\tDEA\tTACS/;
   s/\t\t\tDEA ENS Cachan$/\tENS Cachan\tDEA\t/;
+  s/\t\t\tDEA Normal Sup Cachan$/\tENS Cachan\tDEA\t/;
   s/\t\t\tENS Cachan$/\tENS Cachan\tM\t/;
   s/\t\t\tMSc ENS Cachan$/\tENS Cachan\tMSc\t/;
+  s/\t\t\tMSc Normale Sup Cachan$/\tENS Cachan\tMSc\t/;
   s/\t\t\tDoct\ ENS CACHAN Math Appliquée$/\tENS Cachan\tPhD\tMathématiques Appliquées/;
   s/\t\t\tPhD ENS Cachan$/\tENS Cachan\tPhD\t/;
   s/\t\t\tPhD Cachan$/\tENS Cachan\tPhD\t/;
@@ -212,8 +235,10 @@ while (<FILE>)
   s/\t\t\tENS Lyon$/\tENS Lyon\tM\t/;
   s/\t\t\tDoct ENS Lyon$/\tENS Lyon\tPhD\t/;
   s/\t\t\tDoctorat ENS Lyon$/\tENS Lyon\tPhD\t/;
+  s/\t\t\tDEA Normale Sup$/\tENS Ulm\tDEA\t/;
   s/\t\t\tDEA : ENS$/\tENS Ulm\tDEA\t/;
   s/\t\t\tDEA ENS$/\tENS Ulm\tDEA\t/;
+  s/\t\t\tDEA Informatique ENS$/\tENS Ulm\tDEA\tInformatique/;
   s/\t\t\tENS Ulm DEA$/\tENS Ulm\tDEA\t/;
   s/\t\t\tDEA ENS Ulm$/\tENS Ulm\tDEA\t/;
   s/\t\t\tDEA : ENS Ulm$/\tENS Ulm\tDEA\t/;
@@ -222,6 +247,7 @@ while (<FILE>)
   s/\t\t\tENS Ulm :DEA$/\tENS Ulm\tDEA\t/;
   s/\t\t\tENS$/\tENS Ulm\tM\t/;
   s/\t\t\tENS Ulm$/\tENS Ulm\tM\t/;
+  s/\t\t\tMSc Normale Sup$/\tENS Ulm\tMSc\t/;
   s/\t\t\tMSc ENS Ulm$/\tENS Ulm\tMSc\t/;
   s/\t\t\tMSc ENS$/\tENS Ulm\tMSc\t/;
   s/\t\t\tMS ENS Ulm$/\tENS Ulm\tMSc\t/;
@@ -259,6 +285,7 @@ while (<FILE>)
   s/\t\t\tMBA Collède des Ing$/\tCDI\tMBA\t/;
   s/\t\t\tCDI$/\tCDI\tMBA\t/;
   s/\t\t\tMBA CDI$/\tCDI\tMBA\t/;
+  s/\t\t\tDES Sc IAE Grenoble$/\tIAE de Grenoble\tDESS\t/;
   s/\t\t\tMBA Institut d'Administration des Entreprises$/\tIAE de Paris\tMBA\t/;
   s/\t\t\tMBA IAE$/\tIAE de Paris\tMBA\t/;
   s/\t\t\tMS IAE$/\tIAE de Paris\tMSc\t/;
@@ -275,12 +302,14 @@ while (<FILE>)
   s/\t\t\tMBA Centre de Perfect aux Affaires$/\tCPA de Paris\tMBA\t/;
   s/\t\t\tMBA Centre de Perfection aux Affaires$/\tCPA de Paris\tMBA\t/;
   s/\t\t\tCPA$/\tCPA de Paris\tMBA\t/;
+  s/\t\t\tCPA de Paris$/\tCPA de Paris\tMBA\t/;
   s/\t\t\tCPA 73\/2$/\tCPA de Paris\tMBA\t/;
   s/\t\t\tMBA CPA$/\tCPA de Paris\tMBA\t/;
   s/\t\t\tMBA CPA$/\tCPA de Paris\tMBA\t/;
   s/\t\t\tCPA Lyon$/\tCPA de Lyon\tMBA\t/;
   s/\t\t\tCPA Nord$/\tCPA du Nord\tMBA\t/;
   s/\t\t\tIHEDN$/\tIHEDN\tDipl.\t/;
+  s/\t\t\tMastère ENA$/\tENA\tM\t/;
   s/\t\t\tENA$/\tENA\tDipl.\t/;
   s/\t\t\tAncElENA$/\tENA\tDipl.\t/;
   s/\t\t\tDEA Economie EHESS-ENSAE$/\tEHESS\tDEA\tÉconomie/;
@@ -289,13 +318,14 @@ while (<FILE>)
   s/\t\t\tEHESS DEA$/\tEHESS\tDEA\t/;
   s/\t\t\tEHESS$/\tEHESS\tDEA\t/;
   s/\t\t\tMS EHESS$/\tEHESS\tMSc\t/;
+  s/\t\t\tMs EHESS$/\tEHESS\tMSc\t/;
   s/\t\t\tEHESS Master II Art & Langage$/\tEHESS\tM\tArt et Langage/;
   s/\t\t\tDoct3e cycle EHESS$/\tEHESS\tPhD\t/;
   s/\t\t\tDoct EHESS Sc cognitives$/\tEHESS\tPhD\tSciences cognitives/;
   s/\t\t\tEHESS : PhD$/\tEHESS\tPhD\t/;
   s/\t\t\tEHESS Phd$/\tEHESS\tPhD\t/;
   s/\t\t\tPhD EHESS$/\tEHESS\tPhD\t/;
-  s/\t\t\tDoctorat HEC Finance$/\tHEC\tPhD\tFinance/;
+  s/\t\t\tPhD de l'EHESS$/\tEHESS\tPhD\t/;
   s/\t\t\tDESS CAAE Univ Paris I$/\tPanthéon-Sorbonne\tDESS\t/;
   s/\t\t\tDEA MMME Sorbonne$/\tPanthéon-Sorbonne\tDEA\tModélisation et Méthodes Mathématiques en Économie/;
   s/\t\t\tDEA MMME$/\tPanthéon-Sorbonne\tDEA\tModélisation et Méthodes Mathématiques en Économie/;
@@ -309,7 +339,9 @@ while (<FILE>)
   s/\t\t\tDEA Univ Paris 1er$/\tPanthéon-Sorbonne\tDEA\t/;
   s/\t\t\tDEA Univ Paris I Panthéon-Sorbonne$/\tPanthéon-Sorbonne\tDEA\t/;
   s/\t\t\tDEA Economie Paris I$/\tPanthéon-Sorbonne\tDEA\tÉconomie/;
+  s/\t\t\tDEA Economie Univ Paris I$/\tPanthéon-Sorbonne\tDEA\tÉconomie/;
   s/\t\t\tMaster COSI Univ Paris I La Sorbonne$/\tPanthéon-Sorbonne\tM\tCOSI/;
+  s/\t\t\tMaster COSI Univ Paris I$/\tPanthéon-Sorbonne\tM\tCOSI/;
   s/\t\t\tMS Univ Paris 1$/\tPanthéon-Sorbonne\tMSc\t/;
   s/\t\t\tMS Univ Paris I Panthéon Sorbonne$/\tPanthéon-Sorbonne\tMSc\t/;
   s/\t\t\tMSc Univ Paris I$/\tPanthéon-Sorbonne\tMSc\t/;
@@ -325,15 +357,22 @@ while (<FILE>)
   s/\t\t\tDEA Univ Paris II Panthéon - Assas$/\tAssas\tDEA\t/;
   s/\t\t\tDEA Univ Paris II$/\tAssas\tDEA\t/;
   s/\t\t\tMS Univ Paris 2$/\tAssas\tMSc\t/;
+  s/\t\t\tMSc Univ Paris II$/\tAssas\tMSc\t/;
+  s/\t\t\tPhD Univ Paris II$/\tAssas\tPhD\t/;
   s/\t\t\tDEA Univ Paris IV$/\tParis-Sorbonne\tDEA\t/;
+  s/\t\t\tDEA Univ Paris 4$/\tParis-Sorbonne\tDEA\t/;
+  s/\t\t\tMSc Univ Paris IV$/\tParis-Sorbonne\tMSc\t/;
   s/\t\t\tDoct Paris IV Histoire Moderne$/\tParis-Sorbonne\tPhD\tHistoire Moderne/;
   s/\t\t\tDoctUnivParis IV$/\tParis-Sorbonne\tPhD\t/;
   s/\t\t\tPhD Univ Paris 4$/\tParis-Sorbonne\tPhD\t/;
-  s/\t\t\tDEA Univ Paris V$/\tParis-Sorbonne\tDEA\t/;
-  s/\t\t\tDEA Univ Paris 5$/\tParis-Sorbonne\tDEA\t/;
+  s/\t\t\tDEA Univ Paris V$/\tParis-Descartes\tDEA\t/;
+  s/\t\t\tDEA Univ Paris 5$/\tParis-Descartes\tDEA\t/;
+  s/\t\t\tMSc Univ Paris V$/\tParis-Descartes\tMSc\t/;
   s/\t\t\tDoctUnivParis V$/\tParis-Descartes\tPhD\t/;
   s/\t\t\tPhD Univ Paris V$/\tParis-Descartes\tPhD\t/;
   s/\t\t\tPhD Univ Paris 5$/\tParis-Descartes\tPhD\t/;
+  s/\t\t\tDEA Acoustique musicale Univ Paris VI$/\tUPMC\tDEA\tAcoustique musicale/;
+  s/\t\t\tDEA de Biologie Univ Paris VI$/\tUPMC\tDEA\tBiologie/;
   s/\t\t\tDEA Univ Paris 6$/\tUPMC\tDEA\t/;
   s/\t\t\tDEA Univ Paris VI Jussieu$/\tUPMC\tDEA\t/;
   s/\t\t\tDEA OJME Paris VI$/\tUPMC\t\tOJME/;
@@ -349,6 +388,7 @@ while (<FILE>)
   s/\t\t\tDEA Probab & Applications Paris 6$/\tUPMC\tDEA\tProbabilités et applications/;
   s/\t\t\tDEA Stat Univ Paris 6$/\tUPMC\tDEA\tStatistiques/;
   s/\t\t\tDEA Paris 6$/\tUPMC\tDEA\t/;
+  s/\t\t\tDiplôme d'Études Approfondies Université Pierre-et-Marie-Curie Paris-VI$/\tUPMC\tDEA\t/;
   s/\t\t\tDEA univ Paris VI$/\tUPMC\tDEA\t/;
   s/\t\t\tDEA Probabilités et Finance Paris VI$/\tUPMC\tDEA\tProbabilités et Finance/;
   s/\t\t\tDEA Sc des Matériaux Paris VI$/\tUPMC\tDEA\tSciences des matériaux/;
@@ -370,6 +410,7 @@ while (<FILE>)
   s/\t\t\tMS Univ Paris VI Pierre & Marie Curie$/\tUPMC\tMSc\t/;
   s/\t\t\tDoctUnivParis VI en Ecologie$/\tUPMC\tPhD\tÉcologie/;
   s/\t\t\tDoct Chimie Univ Paris VI$/\tUPMC\tPhD\tChimie/;
+  s/\t\t\tDocten Chimie Univ Paris VI$/\tUPMC\tPhD\tChimie/;
   s/\t\t\tDoctUnivParis VI$/\tUPMC\tPhD\t/;
   s/\t\t\tDoctès Sc Informatique\/Micro-électronique Univ Paris VI$/\tUPMC\tPhD\tInformatique Micro-électronique/;
   s/\t\t\tDocten Informatique \- Paris 6$/\tUPMC\tPhD\tInformatique/;
@@ -392,6 +433,8 @@ while (<FILE>)
   s/\t\t\tThése UnivParis VI SpécPhysique des Solides$/\tUPMC\tPhD\tPhysique des Solides/;
   s/\t\t\tDEUG Japonais Paris VII$/\tParis-Diderot\tDEUG\tJaponnais/;
   s/\t\t\tDEA Univ Paris 7$/\tParis-Diderot\tDEA\t/;
+  s/\t\t\tDEA UnivParis VII$/\tParis-Diderot\tDEA\t/;
+  s/\t\t\tDEA Paris VII$/\tParis-Diderot\tDEA\t/;
   s/\t\t\tDEA Télédétection Paris VII$/\tParis-Diderot\tDEA\tTélédétection/;
   s/\t\t\tDEA Jussieu Paris 7$/\tParis-Diderot\tDEA\t/;
   s/\t\t\tDEA Univ Paris VII$/\tParis-Diderot\tDEA\t/;
@@ -402,11 +445,13 @@ while (<FILE>)
   s/\t\t\tDEA Univ paris VII Diderot-Jussieu$/\tParis-Diderot\tDEA\t/;
   s/\t\t\tMSc Univ Paris VII$/\tParis-Diderot\tMSc\t/;
   s/\t\t\tMS Univ Paris VII$/\tParis-Diderot\tMSc\t/;
+  s/\t\t\tMSc Paris VII$/\tParis-Diderot\tMSc\t/;
   s/\t\t\tDoctUnivParis VII$/\tParis-Diderot\tPhD\t/;
   s/\t\t\tDoct Physique des Solides Univ Paris VII$/\tParis-Diderot\tPhD\tPhysique des Solides/;
   s/\t\t\tDoct3È Cycle Univ Paris 7$/\tParis-Diderot\tPhD\t/;
   s/\t\t\tThèse de DoctUnivParis VII$/\tParis-Diderot\tPhD\t/;
   s/\t\t\tPhD Univ Paris 7$/\tParis-Diderot\tPhD\t/;
+  s/\t\t\tPhD UnivParis VII$/\tParis-Diderot\tPhD\t/;
   s/\t\t\tPhD Univ Paris 7$/\tParis-Diderot\tPhD\t/;
   s/\t\t\tPhD Univ Paris VII$/\tParis-Diderot\tPhD\t/;
   s/\t\t\tPhD Univ Paris 8$/\tVincennes-Saint-Denis\tPhD\t/;
@@ -428,6 +473,7 @@ while (<FILE>)
   s/\t\t\tDEA Univ Paris IX$/\tDauphine\tDEA\t/;
   s/\t\t\tDEA Paris Dauphine$/\tDauphine\tDEA\t/;
   s/\t\t\tMSc Univ Paris IX$/\tDauphine\tMSc\t/;
+  s/\t\t\tMSc Paris IX$/\tDauphine\tMSc\t/;
   s/\t\t\tDoctUniv Paris IX$/\tDauphine\tPhD\t/;
   s/\t\t\tDoctUnivParis Dauphine$/\tDauphine\tPhD\t/;
   s/\t\t\tDoctUnivParis IX$/\tDauphine\tPhD\t/;
@@ -483,6 +529,7 @@ while (<FILE>)
   s/\t\t\tDocten Droit des Affaires Univ Paris 12$/\tParis-Val de Marne\tPhD\tDroit des Affaires/;
   s/\t\t\tPhD Univ Paris 12$/\tParis-Val de Marne\tPhD\t/;
   s/\t\t\tPhD Univ Paris XII$/\tParis-Val de Marne\tPhD\t/;
+  s/\t\t\tDoctès ScPhys Univ Paris XIII$/\tParis-Nord\tPhD\tPhysique/;
   s/\t\t\tDoctUnivParis-Nord$/\tParis-Nord\tPhD\t/;
   s/\t\t\tPhD Univ Paris 13$/\tParis-Nord\tPhD\t/;
   s/\t\t\tPhD Univ Paris XIII$/\tParis-Nord\tPhD\t/;
@@ -492,22 +539,31 @@ while (<FILE>)
   s/\t\t\tDoct Univ Toulouse III$/\tUniversité Paul-Sabatier\tPhD\t/;
   s/\t\t\tPhD Univ Paul Sabatier Toulouse$/\tUniversité Paul-Sabatier\tPhD\t/;
   s/\t\t\tPhD Univ Toulouse III$/\tUniversité Paul-Sabatier\tPhD\t/;
+  s/\t\t\tPhD Université Paul Sabatier Toulouse$/\tUniversité Paul-Sabatier\tPhD\t/;
   s/\t\t\tMSc Univ Grenoble I$/\tUJF\tMSc\t/;
+  s/\t\t\tPhD Univ Grenoble I$/\tUJF\tPhD\t/;
   s/\t\t\tDEA Informatique Univ de Grenoble$/\tUJF\tDEA\tInformatique/;
   s/\t\t\tDoctUnivGrenoble$/\tUJF\tPhD\t/;
   s/\t\t\tPhD Grenoble$/\tUJF\tPhD\t/;
+  s/\t\t\tDES Sc Informatique USTL$/\tUniversité Lille I\tDESS\tInformatique/;
+  s/\t\t\tMSc Univ Lyon I$/\tUniversité Claude Bernard\tMSc\t/;
   s/\t\t\tDoctUnivLyon I$/\tUniversité Claude Bernard\tPhD\t/;
   s/\t\t\tDoct Univ Lyon I$/\tUniversité Claude Bernard\tPhD\t/;
   s/\t\t\tDoct Université Lyon I$/\tUniversité Claude Bernard\tPhD\t/;
   s/\t\t\tDESGE Lyon III$/\tUniversité Jean-Moulin\tDESS\tDESGE/;
   s/\t\t\tDoct Aix Marseille II$/\tUniversité de la Méditerranée\tPhD\t/;
+  s/\t\t\tDocten Physique Univ Aix-Marseille I$/\tUniversité de Provence\tPhD\tPhysique/;
+  s/\t\t\tPhD Univ Aix-Marseille I$/\tUniversité de Provence\tPhD\t/;
   s/\t\t\tDoctUnivde Rennes$/\tUniversité de Rennes 1\tPhD\t/;
   s/\t\t\tLic Théologie & Sc des religions Univ Strasbourg$/\tUDS\tLic.\tThéologie Science des religion/;
   s/\t\t\tDoct Univ Strasbourg$/\tUDS\tPhD\t/;
   s/\t\t\tDocten Informatique et Applications de l'Univ de Caen$/\tUCBN\tPhD\tInformatique/;
   s/\t\t\tDEA IGP Bordeaux$/\tUniversité de Bordeaux\tDEA\tIGP/;
+  s/\t\t\tMSc Univ Bordeaux$/\tUniversité de Bordeaux\tMSc\t/;
+  s/\t\t\tPhD Univ Bordeaux$/\tUniversité de Bordeaux\tPhD\t/;
   s/\t\t\tHDR UBO$/\tUBO\tHDR\t/;
   s/\t\t\tThèse UTC$/\tUTC\tPhD\t/;
+  s/\t\t\tMBA Inst européen d'Adm des Affaires$/\tINSEAD\tMBA\t/;
   s/\t\t\tMBA Institut Européen d'Administration des Affaires$/\tINSEAD\tMBA\t/;
   s/\t\t\tMBA Inst Europ d'Adm des Aff$/\tINSEAD\tMBA\t/;
   s/\t\t\tINSEAD : MBA$/\tINSEAD\tMBA\t/;
@@ -516,6 +572,7 @@ while (<FILE>)
   s/\t\t\tINSEAD - AMP$/\tINSEAD\tMBA\tAMP/;
   s/\t\t\tMBA INSEAD$/\tINSEAD\tMBA\t/;
   s/\t\t\tINSEAD$/\tINSEAD\tMBA\t/;
+  s/\t\t\tINSEAD Adv Management Prog$/\tINSEAD\tMBA\t/;
   s/\t\t\tScPo Gestion et Stratégie des Entreprises$/\tSciences Po\tDipl.\tGestion et Stratégie des Entreprises/;
   s/\t\t\tScPo Economie$/\tSciences Po\tDipl.\tÉconomie/;
   s/\t\t\tIEP$/\tSciences Po\tDipl.\t/;
@@ -528,6 +585,9 @@ while (<FILE>)
   s/\t\t\tMS IEP Paris$/\tSciences Po\tMSc\t/;
   s/\t\t\tMS IEP$/\tSciences Po\tMSc\t/;
   s/\t\t\tMSc IEP$/\tSciences Po\tMSc\t/;
+  s/\t\t\tMs IEP$/\tSciences Po\tMSc\t/;
+  s/\t\t\tMSc Sc Po$/\tSciences Po\tMSc\t/;
+  s/\t\t\tMSc Institut d'Etudes Politiques de Paris$/\tSciences Po\tMSc\t/;
   s/\t\t\tEAPB Ecole Architecture Paris Belleville$/\tENSAPB\tDipl.\t/;
   s/\t\t\tEAPLV Ecole Architecture Paris La Villette$/\tENSAPLV\tDipl.\t/;
   s/\t\t\tEAVT Ecole d'Architecture de Marne la vallée$/\tEAVT\tDipl.\t/;
@@ -538,6 +598,7 @@ while (<FILE>)
   s/\t\t\tCEPE$/\tCEPE\tDipl.\t/;
   s/\t\t\tCEPE Ecole Pratique des Hautes Etudes$/\tCEPE\tDipl.\t/;
   s/\t\t\tECE$/\tECE\tIng.\t/;
+  s/\t\t\tChear-SN45$/\tCHEAr\tDipl.\tSN45/;
   s/\t\t\tCHEAR$/\tCHEAr\tDipl.\t/;
   s/\t\t\tCHEA$/\tCHEAr\tDipl.\t/;
   s/\t\t\tIHEDN-CHEAR$/\tCHEAr\tDipl.\tIHEDN/;
@@ -562,19 +623,26 @@ while (<FILE>)
   s/\t\t\tHEC : MS$/\tHEC\tMSc\t/;
   s/\t\t\tMaster HEC Finance$/\tHEC\tM\tFinance/;
   s/\t\t\tMS X-HEC Finance$/\tHEC\tMSc\tFinance/;
+  s/\t\t\tMSc HEC Finance Internationale$/\tHEC\tMSc\tFinance Internationale/;
   s/\t\t\tMBA CPA-HEC$/\tHEC\tMBA\tCPA/;
+  s/\t\t\tHEC Paris Business School$/\tHEC\tMBA\t/;
+  s/\t\t\tExecutive MBA à HEC$/\tHEC\tMBA\t/;
   s/\t\t\tExecutive MBA HEC$/\tHEC\tMBA\t/;
   s/\t\t\tMastère Gestion Financière HEC$/\tHEC\tM\tGestion Financière/;
   s/\t\t\tMBA HEC\/CPA$/\tHEC\tMBA\t/;
   s/\t\t\tHEC Entrepreneurs$/\tHEC\tM\tEntrepreneurs/;
   s/\t\t\tHEC Execut Management \/ CPA$/\tHEC\tMBA\t/;
   s/\t\t\tMSc HEC Start Management$/\tHEC\tMSc\tManagement/;
+  s/\t\t\tDoctorat HEC Finance$/\tHEC\tPhD\tFinance/;
+  s/\t\t\tPhD HEC Montréal Administration$/\tHEC\tPhD\t/;
   s/\t\t\tCEIPI$/\tCEIPI\tDipl.\t/;
   s/\t\t\tCEDEP cycle 43$/\tCEDEP\tDipl.\t/;
   s/\t\t\tCEDEP$/\tCEDEP\tDipl.\t/;
+  s/\t\t\tEcole du Personnel Navigant d'Essais et de Réception$/\tEPNER\tDipl.\t/;
   s/\t\t\tEPNER$/\tEPNER\tDipl.\t/;
   s/\t\t\tIFSBM$/\tIFSBM\tDipl.\t/;
   s/\t\t\tESG$/\tESG Paris\tDipl.\t/;
+  s/\t\t\tMBA ESCP-Europe$/\tESCP-EAP\tMBA\t/;
   s/\t\t\tMBA ESCP$/\tESCP-EAP\tMBA\t/;
   s/\t\t\tMBA ESCP-EAP$/\tESCP-EAP\tMBA\t/;
   s/\t\t\tMBA ESCP EAP$/\tESCP-EAP\tMBA\t/;
@@ -596,10 +664,13 @@ while (<FILE>)
   s/\t\t\tIHEDN 26° session$/\tIHEDN\tDipl.\t/;
   s/\t\t\tIHEE$/\tIHEE\tDipl.\t/;
   s/\t\t\tEcole de l'Air$/\tÉcole de l'Air\tDipl.\t/;
+  s/\t\t\tEcole de l'air$/\tÉcole de l'Air\tDipl.\t/;
   s/\t\t\tIHESI$/\tINHES\tDipl.\t/;
+  s/\t\t\tINHESJ$/\tINHES\tDipl.\t/;
   s/\t\t\tAFITEP$/\tAFITEP\tDipl.\t/;
 
   # Foreign universities.
+  s/\t\t\tCertif Program in Syst Engineering MIT$/\tMIT\tLic.\tSystem Engineering/;
   s/\t\t\tMS MIT$/\tMIT\tMSc\t/;
   s/\t\t\tMBA MIT$/\tMIT\tMBA\t/;
   s/\t\t\tMS MIT TPP$/\tMIT\tMSc\tTTP/;
@@ -647,6 +718,7 @@ while (<FILE>)
   s/\t\t\tMBA Purdue$/\tPurdue University\tMBA\t/;
   s/\t\t\tPhD Purdue$/\tPurdue University\tPhD\t/;
   s/\t\t\tDoctd'ArchitectUniversRome$/\tUniversity of Rome\tPhD\tArchitecture/;
+  s/\t\t\tMSc Chimie ETH Zurich$/\tETH Zürich\tMSc\tChimie/;
   s/\t\t\tMSc Univ ETH Zurich$/\tETH Zürich\tMSc\t/;
   s/\t\t\tMSc Eidgenossische Tech Hochschule Zurich$/\tETH Zürich\tMSc\t/;
   s/\t\t\tMSc Eidgenossische Tech Hochschule Zurich$/\tETH Zürich\tMSc\t/;
@@ -654,16 +726,22 @@ while (<FILE>)
   s/\t\t\tMSc Eidgenössische Technische Hochschule Zürich$/\tETH Zürich\tMSc\t/;
   s/\t\t\tDoctEcPolytZurich$/\tETH Zürich\tPhD\t/;
   s/\t\t\tDoct Eidgenössische Technische Hochschule Zürich$/\tETH Zürich\tPhD\t/;
+  s/\t\t\tPhD Eidgenössische Technische Hochschule Zürich$/\tETH Zürich\tPhD\t/;
   s/\t\t\tMS Univ Zürich$/\tUniversität Zürich\tMSc\t/;
   s/\t\t\tDoct Univ Zurich$/\tUniversität Zürich\tPhD\t/;
   s/\t\t\tIng EP Fédérale Lausanne$/\tEPFL\tIng.\t/;
   s/\t\t\tIng Ecole Polytechnique Lausanne$/\tEPFL\tIng.\t/;
   s/\t\t\tIng EP Lausanne$/\tEPFL\tIng.\t/;
+  s/\t\t\tIng Ecole Polytechnique fédérale de Lausanne$/\tEPFL\tIng.\t/;
+  s/\t\t\tIng École Polytechnique Fédérale de Lausanne$/\tEPFL\tIng.\t/;
+  s/\t\t\tIng EP fédérale de Lausanne$/\tEPFL\tIng.\t/;
   s/\t\t\tMSc Ecole polytechnique fédérale de Lausanne$/\tEPFL\tMSc\t/;
+  s/\t\t\tMSc EP fédérale de Lausanne$/\tEPFL\tMSc\t/;
   s/\t\t\tEP Fédérale Lausanne$/\tEPFL\tM\t/;
   s/\t\t\tcycle postgrade EPFL option Finance$/\tEPFL\tM\tFinance/;
   s/\t\t\tEPFL Génie Mécanique$/\tEPFL\tM\t/;
   s/\t\t\tDoct Ecole polytechnique fédérale de Lausanne$/\tEPFL\tPhD\t/;
+  s/\t\t\tDoct EP Fédérale Lausanne$/\tEPFL\tPhD\t/;
   s/\t\t\tPhD Univ Lausanne$/\tUNIL\tPhD\t/;
   s/\t\t\tMBA Institute for Management Development$/\tIMD\tMBA\t/;
   s/\t\t\tIMD Lausanne$/\tIMD\tMBA\t/;
@@ -678,8 +756,10 @@ while (<FILE>)
   s/\t\t\tMS Wisconsin USA$/\tUW-Madison\tMSc\t/;
   s/\t\t\tMBA Univ Wisconsin-Madison$/\tUW-Madison\tMBA\t/;
   s/\t\t\tMS Wisconsin Madison$/\tUW-Madison\tMSc\t/;
+  s/\t\t\tMSc Univ of Wisconsin-Madison$/\tUW-Madison\tMSc\t/;
   s/\t\t\tPhD Wisconsin$/\tUW-Madison\tPhD\t/;
   s/\t\t\tMS Berkeley$/\tBerkeley\tMSc\t/;
+  s/\t\t\tMSc University of California, Berkeley$/\tBerkeley\tMSc\t/;
   s/\t\t\tMEcoUcBerkeley$/\tBerkeley\tME\t/;
   s/\t\t\tMEcoAgricBerkeley$/\tBerkeley\tME\t/;
   s/\t\t\tUC Berkeley$/\tBerkeley\tM\t/;
@@ -731,10 +811,13 @@ while (<FILE>)
   s/\t\t\tPhD Salt Lake City$/\tUniversity of Utah\tPhD\t/;
   s/\t\t\tBA Univ Cornell$/\tCornell\tBA\t/;
   s/\t\t\tMS Cornell NY$/\tCornell\tMSc\t/;
+  s/\t\t\tMSc Cornell University$/\tCornell\tMSc\t/;
+  s/\t\t\tMSc Cornell Univ$/\tCornell\tMSc\t/;
   s/\t\t\tMBA Cornell University$/\tCornell\tMBA\t/;
   s/\t\t\tM Eng Cornell University$/\tCornell\tMEng\t/;
   s/\t\t\tME Univ Cornell$/\tCornell\tME\t/;
   s/\t\t\tPhD Cornell Ithaca$/\tCornell\tPhD\t/;
+  s/\t\t\tPhD Cornell University$/\tCornell\tPhD\t/;
   s/\t\t\tMS Computer ScUcla$/\tUCLA\tMSc\tInformatique/;
   s/\t\t\tMBA HEC\/Ucla$/\tUCLA\tMBA\t/;
   s/\t\t\tMS Ucla$/\tUCLA\tMSc\t/;
@@ -764,16 +847,22 @@ while (<FILE>)
   s/\t\t\tMS Columbia$/\tColumbia University\tMSc\t/;
   s/\t\t\tMSEE Columbia Univ$/\tColumbia University\tM\tMSEE/;
   s/\t\t\tMBA Univ Columbia$/\tColumbia University\tMBA\t/;
+  s/\t\t\tColumbia Business School - Senior Executive Program$/\tolumbia\tMBA\tSenior Executive Program/;
   s/\t\t\tMFSE Columbia Univ$/\tColumbia University\tM\tMFSE/;
   s/\t\t\tMSc Univ Columbia$/\tColumbia University\tMSc\t/;
+  s/\t\t\tMS Columbia New-York$/\tColumbia\tMSc\t/;
   s/\t\t\tPhD Columbia$/\tColumbia University\tPhD\t/;
   s/\t\t\tMS Univ British Columbia$/\tUBC\tMSc\t/;
   s/\t\t\tMSc Univ British Columbia$/\tUBC\tMSc\t/;
+  s/\t\t\tMIA Columbia$/\tColumbia\tMIA\t/;
+  s/\t\t\tMIA Columbia University$/\tColumbia\tMIA\t/;
+  s/\t\t\tMIA Columbia Univ$/\tColumbia\tMIA\t/;
   s/\t\t\tMBA Chicago$/\tUniversity of Chicago\tMBA\t/;
   s/\t\t\tMsChicago$/\tUniversity of Chicago\tMSc\t/;
   s/\t\t\tMSc Univ Chicago$/\tUniversity of Chicago\tMSc\t/;
   s/\t\t\tPhD EconomChicago$/\tUniversity of Chicago\tPhD\tÉconomie/;
   s/\t\t\tPhD Univ Chicago$/\tUniversity of Chicago\tPhD\t/;
+  s/\t\t\tPhD Univ of Chicago$/\tUniversity of Chicago\tPhD\t/;
   s/\t\t\tMS Imperial College$/\tImperial College\tMSc\t/;
   s/\t\t\tMS Imperial College Londres$/\tImperial College\tMSc\t/;
   s/\t\t\tMSc Imperial College$/\tImperial College\tMSc\t/;
@@ -783,8 +872,20 @@ while (<FILE>)
   s/\t\t\tM Sc Imperial College$/\tImperial College\tMSc\t/;
   s/\t\t\tMSc in Advanced Mechanical Engin \, Imperial College Londres$/\tImperial College\tMSc\tAdvanced Mechanical Engineering/;
   s/\t\t\tMSc Impreial College of London$/\tImperial College\tMSc\t/;
+  s/\t\t\tMSc Imperial College London$/\tImperial College\tMSc\t/;
+  s/\t\t\tPhD Imperial College of London$/\tImperial College\tPhD\t/;
   s/\t\t\tMSc Impérial Collège$/\tImperial College\tMSc\t/;
   s/\t\t\tPhD Imperial College$/\tImperial College\tPhD\t/;
+  s/\t\t\tMSc The London School of Eco & Political Science$/\tLSE\tMSc\t/;
+  s/\t\t\tMSc The London School of Eco & Political Sc$/\tLSE\tMSc\t/;
+  s/\t\t\tMSc The London School of Economics and Political Science$/\tLSE\tMSc\t/;
+  s/\t\t\tMSc London School of Eco & Political Sc$/\tLSE\tMSc\t/;
+  s/\t\t\tMSc The London School of Eco & Political Sc$/\tLSE\tMSc\t/;
+  s/\t\t\tSc The London School of Eco & Political Sc$/\tLSE\tMSc\t/;
+  s/\t\t\tMS London School of Eco & Political Sc$/\tLSE\tMSc\t/;
+  s/\t\t\tMSc The London School of Economics & Political Sc$/\tLSE\tMSc\t/;
+  s/\t\t\tMSc London School of Eco & Political Sc$/\tLSE\tMSc\t/;
+  s/\t\t\tMScLondon School of Eco & Political Sc$/\tLSE\tMSc\t/;
   s/\t\t\tMS London School of Economics$/\tLSE\tMSc\t/;
   s/\t\t\tMScLondon School of Economics$/\tLSE\tMSc\t/;
   s/\t\t\tMSc London School of Economics & Political Science$/\tLSE\tMSc\t/;
@@ -802,7 +903,9 @@ while (<FILE>)
   s/\t\t\tMS LSE$/\tLSE\tMSc\t/;
   s/\t\t\tPhD London School Econ& Polit Sc$/\tLSE\tPhD\t/;
   s/\t\t\tPhD London School of Econ$/\tLSE\tPhD\t/;
+  s/\t\t\tMaster de Philosophie UCLy$/\tUCL\tMPhil\tPhilosophie/;
   s/\t\t\tMSc Univ College of London$/\tUCL\tMSc\t/;
+  s/\t\t\tMSc Urban Regneration, Bartlett School$/\tUCL\tMSc\tThe Bartlett - Urban Regneration/;
   s/\t\t\tUniversity CollLondres$/\tUCL\tM\t/;
   s/\t\t\tMS Signal et Communications Londres$/\tUCL\tMSc\tSignal et Communications/;
   s/\t\t\tPhD London Royaume uni$/\tUCL\tPhD\t/;
@@ -821,6 +924,7 @@ while (<FILE>)
   s/\t\t\tPhD Caltech$/\tCalTech\tPhD\t/;
   s/\t\t\tPhD CalTech$/\tCalTech\tPhD\t/;
   s/\t\t\tMSc Univ Northwestern$/\tNU\tMSc\t/;
+  s/\t\t\tMSc Northwestern Univ$/\tNU\tPhD\t/;
   s/\t\t\tPhD Northwestern University$/\tNU\tPhD\t/;
   s/\t\t\tMScNY$/\tNYU\tMSc\t/;
   s/\t\t\tMS Schenectady NY$/\tNYU\tMSc\t/;
@@ -836,6 +940,9 @@ while (<FILE>)
   s/\t\t\tMS New york$/\tNYU\tMSc\t/;
   s/\t\t\tPhD Univ New York$/\tNYU\tPhD\t/;
   s/\t\t\tPhD Watson School of Biological Sciences$/\tWSBS\tPhD\tBiologie/;
+  s/\t\t\tM Eng McGill Univ$/\tMcGill\tMEng\t/;
+  s/\t\t\tMSc McGill Univ$/\tMcGill\tMSc\t/;
+  s/\t\t\tMSc en Mécanique McGill$/\tMcGill\tMSc\tMécanique/;
   s/\t\t\tMS McGill University$/\tMcGill\tMSc\t/;
   s/\t\t\tMaster of Management McGill University$/\tMcGill\tMM\t/;
   s/\t\t\tMS Univ McGill$/\tMcGill\tMSc\t/;
@@ -853,6 +960,7 @@ while (<FILE>)
   s/\t\t\tMSc Princeton$/\tPrinceton\tMSc\t/;
   s/\t\t\tMS Univ Princeton$/\tPrinceton\tMSc\t/;
   s/\t\t\tMS Princeton$/\tPrinceton\tMSc\t/;
+  s/\t\t\tMSc Princeton Univ$/\tPrinceton\tMSc\t/;
   s/\t\t\tMS Univ Princeton$/\tPrinceton\tMSc\t/;
   s/\t\t\tMSc Univ Princeton$/\tPrinceton\tMSc\t/;
   s/\t\t\tMS in Finance Princeton$/\tPrinceton\tMSc\tFinance/;
@@ -885,6 +993,7 @@ while (<FILE>)
   s/\t\t\tIng EP Montréal$/\tEPM\tIng.\t/;
   s/\t\t\tIng Ecole polytechnique de Montréal$/\tEPM\tIng.\t/;
   s/\t\t\tEP Montréal Ing$/\tEPM\tIng.\t/;
+  s/\t\t\tPhD EcPolytMontreal$/\tEPM\tPhD\t/;
   s/\t\t\tIng Univ RWTH-Aachen$/\tRWTH\tIng.\t/;
   s/\t\t\tIng Univ RWTH-AAchen$/\tRWTH\tIng.\t/;
   s/\t\t\tRWTH Aachen$/\tRWTH\tM\t/;
@@ -914,12 +1023,14 @@ while (<FILE>)
   s/\t\t\tME Univ Oxford$/\tOxford\tME\t/;
   s/\t\t\tMSc Univ of Oxford$/\tOxford\tMSc\t/;
   s/\t\t\tPhD Univ Oxford$/\tOxford\tPhD\t/;
+  s/\t\t\tPhD Oxford$/\tOxford\tPhD\t/;
   s/\t\t\tPhD Boulder$/\tCU\tPhD\t/;
   s/\t\t\tMS Singapour$/\tNUS\tMSc\t/;
   s/\t\t\tMSc Nat Univ of Singapore$/\tNUS\tMSc\t/;
   s/\t\t\tMSc National Univ of Singapore$/\tNUS\tMSc\t/;
   s/\t\t\tMSc National University of Singapour$/\tNUS\tMSc\t/;
   s/\t\t\tPhD Univ Singapour$/\tNUS\tPhD\t/;
+  s/\t\t\tPhD National Univ of Singapore$/\tNUS\tPhD\t/;
   s/\t\t\tMBA Carnegie Mellon$/\tCMU\tMBA\t/;
   s/\t\t\tMS Carnegie Mellon$/\tCMU\tMSc\t/;
   s/\t\t\tMS ComputCarnégie Mellon Univ$/\tCMU\tMSc\tInformatique/;
@@ -927,10 +1038,12 @@ while (<FILE>)
   s/\t\t\tMSc Univ NTNU$/\tNTNU\tMSc\t/;
   s/\t\t\tPhD NTNU$/\tNTNU\tPhD\t/;
   s/\t\t\tMS Georgia Tech$/\tGeorgia Tech\tMSc\t/;
+  s/\t\t\tMSc Georgia Inst of Technology$/\tGeorgia Tech\tMSc\t/;
   s/\t\t\tMS Univ Georgia$/\tGeorgia Tech\tMSc\t/;
   s/\t\t\tMSc Georgia Tech$/\tGeorgia Tech\tMSc\t/;
   s/\t\t\tMSc GeorgiaTech$/\tGeorgia Tech\tMSc\t/;
   s/\t\t\tPhD GeorgiaTech$/\tGeorgia Tech\tPhD\t/;
+  s/\t\t\tPhD Georgia Inst of Technology$/\tGeorgia Tech\tPhD\t/;
   s/\t\t\tPhD Univ Surrey$/\tUniversity of Surrey\tPhD\t/;
   s/\t\t\tMS Kyoto$/\tKyoto University\tMSc\t/;
   s/\t\t\tPhD Univ Kyoto$/\tKyoto University\tPhD\t/;
@@ -940,20 +1053,26 @@ while (<FILE>)
   s/\t\t\tMSc Univ of Tokyo$/\tTodai\tMSc\t/;
   s/\t\t\tPhD UnivTokyo$/\tTodai\tPhD\t/;
   s/\t\t\tPhD Univ Tokyo$/\tTodai\tPhD\t/;
+  s/\t\t\tPhD Univ of Tokyo$/\tTodai\tPhD\t/;
   s/\t\t\tPhD Tokyo Institute of Technology$/\tTokyo Tech\tPhD\t/;
+  s/\t\t\tMSc Technische Universität Darmstadt$/\tTU Darmstadt\tMSc\t/;
   s/\t\t\tIngDiplUniversité Stuttgart$/\tUniversität Stuttgart\tIng.\t/;
   s/\t\t\tIng Stuttgart$/\tUniversität Stuttgart\tIng.\t/;
   s/\t\t\tIng diplomé Fac d'Aéronautique de Stuttgart$/\tUniversität Stuttgart\tIng.\tAéronautique/;
   s/\t\t\tME Univ Stuttgart$/\tUniversität Stuttgart\tME\t/;
+  s/\t\t\tMSc Univ de Stuttgart$/\tUniversität Stuttgart\tMSc\t/;
   s/\t\t\tMSc Univ Stuttgart$/\tUniversität Stuttgart\tMSc\t/;
   s/\t\t\tMS Univ Stuttgart$/\tUniversität Stuttgart\tMSc\t/;
   s/\t\t\tDiplome de la Empire Test Pilot's School$/\tETPS\tDipl.\t/;
+  s/\t\t\tMBA Escuela Sup de Adm y Dir de Empresas$/\tESADE\tMBA\t/;
   s/\t\t\tIngde Caminos de Madrid$/\tUPM\tIng.\t/;
   s/\t\t\tIngeniero Industrial UPM Madrid$/\tUPM\tIng.\t/;
   s/\t\t\tEscuela Sup de Ing de Caminos Canales y Puertos$/\tUPM\tIng.\t/;
   s/\t\t\tMS Univ Madrid$/\tUPM\tMSc\t/;
+  s/\t\t\tMSc Universidad Politècnica de Madrid$/\tUPM\tMSc\t/;
   s/\t\t\tUniv Madrid$/\tUPM\tM\t/;
   s/\t\t\tME Univ Madrid$/\tUPM\tME\t/;
+  s/\t\t\tME Ingeniero Industrial UPM Madrid$/\tUPM\tME\t/;
   s/\t\t\tME UnivMadrid$/\tUPM\tME\t/;
   s/\t\t\tMS Madrid$/\tUPM\tMSc\t/;
   s/\t\t\tETSII Madrid$/\tUPM\tM\tETSSI/;
@@ -968,6 +1087,7 @@ while (<FILE>)
   s/\t\t\tMBA Kellogg School of Management$/\tKellogg\tMBA\t/;
   s/\t\t\tMBA Kellogg school of Management$/\tKellogg\tMBA\t/;
   s/\t\t\tInvestment Banking Program-Kellog School of Management$/\tKellogg\tMBA\tInvestment Banking Program/;
+  s/\t\t\tPhD Kellogg School of Management$/\tKellogg\tPhD\t/;
   s/\t\t\tMS Houston$/\tUH\tMSc\t/;
   s/\t\t\tEngineer Kentucky$/\tUK\tIng.\tEngineer/;
   s/\t\t\tEP Gdansk Pologne$/\tUniwersytet Gdański\tM\t/;
@@ -985,6 +1105,9 @@ while (<FILE>)
   s/\t\t\tMS München$/\tTU München\tMSc\t/;
   s/\t\t\tMSc Univ TU Munich$/\tTU München\tMSc\t/;
   s/\t\t\tME Univ TU Munich$/\tTU München\tME\t/;
+  s/\t\t\tMSc Technische Universität München$/\tTU München\tMSc\t/;
+  s/\t\t\tPhD Ludwig-Maximilians-Universität München$/\tUniversität München\tPhD\t/;
+  s/\t\t\tDiplom-Volkswirt Univ Mayence - Allemagne$/\tJGU\tME\t/;
   s/\t\t\tMS Ottawa$/\tOU\tMSc\t/;
   s/\t\t\tMPhilSheffield$/\tUniversity of Sheffield\tMPhil\t/;
   s/\t\t\tMS Urbana$/\tUrbana University\tMSc\t/;
@@ -1002,11 +1125,14 @@ while (<FILE>)
   s/\t\t\tCollège d'Europe Natolin Varsovie$/\tCollege of Europe\tMBA\tNatolin Varsovie/;
   s/\t\t\tCFA$/\tCFA Institute\tMBA\t/;
   s/\t\t\tChartered Financial Analyst$/\tCFA Institute\tMBA\tFinancial Analyst/;
+  s/\t\t\tChartered Financial Analyst Institute$/\tCFA Institute\tMBA\tFinancial Analyst/;
   s/\t\t\tChartered Institute of Management Accountant$/\tCIMA\tMBA\t/;
   s/\t\t\tNaval Postgraduate School$/\tNPS\tDipl.\t/;
   s/\t\t\tMBA Rotterdam School of Management$/\tRSM\tMBA\t/;
   s/\t\t\tME Univ Torino$/\tUNITO\tME\t/;
+  s/\t\t\tPhD Univ degli Studi di Torino$/\tUNITO\tPhD\t/;
   s/\t\t\tMSc Petroleum Engineering \- TU Delft$/\tTU Delft\tMSc\tPetroleum Engineering/;
+  s/\t\t\tMSc Technische Universiteit Delft$/\tTU Delft\tMSc\t/;
   s/\t\t\tMS Univ TU Delft$/\tTU Delft\tMSc\t/;
   s/\t\t\tMSc Univ TU Delft$/\tTU Delft\tMSc\t/;
   s/\t\t\tMSc Karlsruhe$/\tUniversität Karlsruhe\t\t/;
@@ -1021,23 +1147,32 @@ while (<FILE>)
   s/\t\t\tMS Politecnico di Milano$/\tPolitecnico di Milano\tMSc\t/;
   s/\t\t\tMSc Politecnico di Milano$/\tPolitecnico di Milano\tMSc\t/;
   s/\t\t\tME Univ TU Berlin$/\tTU Berlin\tME\t/;
+  s/\t\t\tME Univ Commerciale Luigi Bocconi Milan$/\tUniversità Bocconi\tMSc\t/;
   s/\t\t\tMSc Univ Bocconi$/\tUniversità Bocconi\tMSc\t/;
   s/\t\t\tMSc Univ Bocconi$/\tUniversità Bocconi\tMSc\t/;
+  s/\t\t\tMSc Università Commerciale Luigi Bocconi$/\tUniversità Bocconi\tMSc\t/;
   s/\t\t\tMSc Univ Pompeu Fabra$/\tUPF\tMSc\t/;
   s/\t\t\tMS Univ Pompeu Fabra$/\tUPF\tMSc\t/;
   s/\t\t\tMSc Pompeu Fabra$/\tUPF\tMSc\t/;
   s/\t\t\tMSc Univ Southampton$/\tUniversity of Southampton\tMSc\t/;
   s/\t\t\tMS Southampton$/\tUniversity of Southampton\tMSc\t/;
   s/\t\t\tMSc Univ Tsinghua$/\tTHU\tMSc\t/;
+  s/\t\t\tMSc Tsinghua Univ$/\tTHU\tMSc\t/;
   s/\t\t\tMS Univ Tsinghua$/\tTHU\tMSc\t/;
   s/\t\t\tMS Univ Chalmers$/\tChalmers\tMSc\t/;
+  s/\t\t\tMS Univ Chalmers Tekniska Högskola$/\tChalmers\tMSc\t/;
   s/\t\t\tOIV Wine Industry Management$/\tOIV\tMSc\t/;
   s/\t\t\tMS Indian Institutes of Technology$/\tIITs\tMSc\t/;
   s/\t\t\tMSc Univ Technion$/\tTechnion\tMSc\t/;
   s/\t\t\tMSc Kungliga Tekniska Högskolan$/\tKTH\tMSc\t/;
   s/\t\t\tMS Univ Stockholm$/\tStockholms Universitet\tMSc\t/;
+  s/\t\t\tMSc Bauman Moscow State Technical Univ$/\tBauman MSTU\tMSc\t/;
+  s/\t\t\tMSc Novosibirsk State Univ$/\tNSU\tMSc\t/;
 
   # Diploma missing.
+  s/\t\t\tUniv Mc Gill Montréal$/\tMcGill\t\t/;
+  s/\t\t\tEcole polytechnique fédérale de Lausanne$/\tEPFL\t\t/;
+  s/\t\t\tEcole polytechnique Fédérale de Lausanne$/\tEPFL\t\t/;
   s/\t\t\tUniv Syracuse USA$/\tSU\t\t/;
   s/\t\t\tHarvard$/\tHarvard\t\t/;
   s/\t\t\tTexas A&M University$/\tTAMU\t\t/;
@@ -1049,8 +1184,10 @@ while (<FILE>)
   s/\t\t\tISUP$/\tUPMC\t\tISUP/;
   s/\t\t\tBauman Univ Moscou$/\tBauman MSTU\t\t/;
   s/\t\t\tUniv Leiden$/\tUniversiteit Leiden\t\t/;
+  s/\t\t\tDiplome Univ Leiden$/\tUniversiteit Leiden\t\t/;
   s/\t\t\tBusiness School Dartmouth$/\tDartmouth College\t\t/;
   s/\t\t\tBocconi University Milan$/\tUniversità Bocconi\t\t/;
+  s/\t\t\tÉcole des Hautes Études en Sciences Sociales$/\tEHESS\t\t/;
 
   # University missing.
   s/\t\t\tBTS Technique agricole$/\t\tBTS\tTechnique agricole/;
@@ -1076,6 +1213,7 @@ while (<FILE>)
   s/\t\t\tLic canonique en théologie$/\t\tLic.\tThéologie/;
   s/\t\t\tLicence d'Histde l'Art$/\t\tLic.\tHistoire de l'art/;
   s/\t\t\tLicence Philosophie$/\t\tLic.\tPhilosophie/;
+  s/\t\t\tLicence d'Anglais$/\t\tLic.\tAnglais/;
   s/\t\t\tMaîtrise ScEcon$/\t\tMaîtr.\tÉconomie/;
   s/\t\t\tMa(î|i)trise en (.*)$/\t\tMaîtr.\t\2/;
   s/\t\t\tMa(î|i)trise ès (.*)$/\t\tMaîtr.\t\2/;
@@ -1097,6 +1235,7 @@ while (<FILE>)
   s/\t\t\tDESS dével culturel et dir de projet$/\t\tDESS\tDéveloppement culturel et direction de projets/;
   s/\t\t\tDESS Management Paris$/\t\tDESS\tManagement/;
   s/\t\t\tDESS Défense Stratégies & Dynamiques ind$/\t\tDESS\tDéfense Stratégies & Dynamiques indépendantes/;
+  s/\t\t\tDEA Systèmes de Télécommunications Numériques$/\t\tDEA\tSystèmes de Télécommunications Numériques/;
   s/\t\t\tDEA$/\t\tDEA\t/;
   s/\t\t\tDEA Univ$/\t\tDEA\t/;
   s/\t\t\tDEA d'Histoire$/\t\tDEA\tHistoire/;
@@ -1366,6 +1505,7 @@ while (<FILE>)
   s/\t\t\tDoct Phys des Solides$/\t\tPhD\tPhysique des solides/;
   s/\t\t\tDoctorat en Biologie$/\t\tPhD\tBiologie/;
   s/\t\t\tDoct en Sc Cognitives$/\t\tPhD\tSciences cognitives/;
+  s/\t\t\tDoct en Cryptologie$/\t\tPhD\tCryptologie/;
   s/\t\t\tDoctorat Physique Solides$/\t\tPhD\tPhysique des solides/;
   s/\t\t\tDoctorat en Sc biomédicales$/\t\tPhD\tSciences biomédicales/;
   s/\t\t\tDoctès Sc Immunologie$/\t\tPhD\tImmunologie/;
@@ -1417,6 +1557,8 @@ while (<FILE>)
   s/\t\t\tPhD Electrical Engineering$/\t\tPhD\tIngénierie électrique/;
   s/\t\t\tPhD Information theory$/\t\tPhD\tThéorie de l'information/;
   s/\t\t\tPhD Electrical Engin & Computer Science$/\t\tPhD\tIngénierie électrique Informatique/;
+  s/\t\t\tPhD Ingénieur$/\t\tPhD\t/;
+  s/\t\t\tPhD micro-nanofluidique$/\t\tPhD\tMicro-nanofluidique/;
   s/\t\t\tThèse d'Astrophysique$/\t\tPhD\tAstrophysique/;
   s/\t\t\tThèse Maths$/\t\tPhD\tMathématiques/;
   s/\t\t\tThèse Océano Physique$/\t\tPhD\tOcéanographie Physique/;
@@ -1520,6 +1662,7 @@ while (<FILE>)
   s/\t\t\tMS Management Aéroportuaire$/\t\tMSc\tManagement Aéroportuaire/;
   s/\t\t\tMS spécialisé en sécurité des syst d'inform$/\t\tMSc\tSécurité des système d'information/;
   s/\t\t\tMScin applied Mathematics$/\t\tMSc\tMathématiques appliquées/;
+  s/\t\t\tMSc Inst Français de gestion$/\t\tMSc\tGestion/;
   s/\t\t\tEMBA 2005$/\t\tMBA\t/;
   s/\t\t\tMaster Droit des affaires Int & Eur$/\t\tM\tDroit des affaires Intérieures et Européennes/;
   s/\t\t\tMaster de Management par les compétences et organisations$/\t\tM\tManagement par les compétences et organisations/;
@@ -1534,6 +1677,19 @@ while (<FILE>)
   s/\t\t\tDES de Neurologie$/\t\tDESS\tNeurologie/;
   s/\t\t\tMs Affaires Internationales$/\t\tMSc\tAffaires Internationales/;
   s/\t\t\tMaster de Recherche Santé Publique$/\t\tM\tSanté Publique/;
+  s/\t\t\tMaster européen RH$/\t\tM\tRessources humaines/;
+  s/\t\t\tMSc Matériaux Genre des Procédés$/\t\tMSc\tMatériaux Genre des Procédés/;
+  s/\t\t\tMaster Professionnel en Droit de l'Entreprise$/\t\tM\tDroit de l'Entreprise/;
+  s/\t\t\tMSc IFG - Mastère Manager un Centre de Responsabilités$/\t\tMSc\tManager un Centre de Responsabilités/;
+  s/\t\t\tPhD en Philosophie$/\t\tPhD\tPhilosophie/;
+  s/\t\t\tThèse en Mathématiques$/\t\tPhD\tMathématiques/;
+  s/\t\t\tMaster en droit privé$/\t\tM\tDroit privé/;
+  s/\t\t\tLicence LEA Anglais-Russe$/\t\tLic.\tLEA Anglais-Russe/;
+  s/\t\t\tDocteur en opto-électronique$/\t\tPhD\tOpto-électronique/;
+  s/\t\t\tDEA Economie ind$/\t\tDEA\tÉconomie/;
+  s/\t\t\tMSc General Management$/\t\tMSc\tGeneral Management/;
+  s/\t\t\tAgrégation de Mathématiques$/\t\tAgr.\tMathématiques/;
+  s/\t\t\tDocten Math Appliquées$/\t\tPhD\tMathématiques appliquées/;
 
   # Both diploma and university missing
   s/\t\t\tDipl Expert Compt$/\t\t\tExpertise comptable/;
@@ -1622,7 +1778,7 @@ while (<FILE>)
   #s/^.*\tFO\t\w{8}\t\t\tInst Auguste Comte$//;
   #s/^.*\tFO\t\w{8}\t\t\tUSMC Command & Staff College$//;
   #s/^.*\tFO\t\w{8}\t\t\tISNSE Argunne National Laboratory USA$//;
-  ## # Formatted stuff.
+  # # Formatted stuff.
   #s/^.*\tFO\t\w{8}((\t|\t\t)[a-zA-Z1-9'\.éèêùüàäïîşńÉÈÊÙÀÜÄÏÎŞŃ \-\(\)]+)\t.*//;
   # # Removes empty lines.
   s/^\n//;
index 94eb931..cfda3c1 100644 (file)
@@ -41,14 +41,14 @@ function list_sort_owners($members, $tri_promo = true)
             if (!$category) {
                 $category = 'extérieurs';
             }
-            $membres[$key][$name . $member] = array('name' => $name, 'email' => $member, 'category' => $category,
-                                                    'uid' => $uid, 'lost' => $user->lost, 'hasProfile' => $hasProfile);
+            $membres[$key][$name] = array('name' => $name, 'email' => $member, 'category' => $category,
+                                          'uid' => $uid, 'lost' => $user->lost, 'hasProfile' => $hasProfile);
         }
     }
 
     ksort($membres);
-    foreach($membres as $membre)  {
-        ksort($membre);
+    foreach($membres as &$membre)  {
+        uksort($membre, strcasecmp);
     }
     return $membres;
 }
index de92fda..ca02810 100644 (file)
@@ -43,9 +43,11 @@ class ProfileSettingAddresses implements ProfileSetting
 
     public function save(ProfilePage &$page, $field, $value)
     {
-        Phone::deletePhones($page->pid(), Phone::LINK_ADDRESS, null, S::user()->isMe($page->owner) || S::admin());
-        Address::deleteAddresses($page->pid(), Address::LINK_PROFILE, null, S::user()->isMe($page->owner) || S::admin());
-        Address::saveFromArray($value, $page->pid(), Address::LINK_PROFILE);
+        $deletePrivate = S::user()->isMe($page->owner) || S::admin();
+
+        Phone::deletePhones($page->pid(), Phone::LINK_ADDRESS, null, $deletePrivate);
+        Address::deleteAddresses($page->pid(), Address::LINK_PROFILE, null, $deletePrivate);
+        Address::saveFromArray($value, $page->pid(), Address::LINK_PROFILE, null, $deletePrivate);
         if (S::user()->isMe($page->owner) && count($value) > 1) {
             Platal::page()->trigWarning('Attention, tu as plusieurs adresses sur ton profil. Pense à supprimer celles qui sont obsolètes.');
         }
index cc39c27..e202908 100644 (file)
@@ -224,11 +224,16 @@ class ProfileSettingJob implements ProfileSetting
             }
 
             if (isset($job['removed']) && $job['removed']) {
-                if ($job['name'] == '' && $entreprise && isset($entreprise[$entr_val - 1])) {
-                    $entreprise[$entr_val - 1]->clean();
+                if (S::user()->checkPerms('directory_ax')
+                    && (Phone::hasPrivate($job['w_phone']) || Address::hasPrivate($job['w_address']) || $job['w_email_pub'] == 'private')) {
+                    Platal::page()->trigWarning("L'entreprise ne peut être supprimée car elle contient des informations pour lesquelles vous n'avez le droit d'édition.");
+                } else {
+                    if ($job['name'] == '' && $entreprise && isset($entreprise[$entr_val - 1])) {
+                        $entreprise[$entr_val - 1]->clean();
+                    }
+                    unset($value[$key]);
+                    continue;
                 }
-                unset($value[$key]);
-                continue;
             }
             if (!isset($job['pub']) || !$job['pub']) {
                 $job['pub'] = 'private';
@@ -248,6 +253,7 @@ class ProfileSettingJob implements ProfileSetting
                 $success = ($success && $s);
             }
         }
+        usort($value, 'ProfileVisibility::comparePublicity');
         return $value;
     }
 
@@ -263,7 +269,7 @@ class ProfileSettingJob implements ProfileSetting
         Phone::deletePhones($page->pid(), Phone::LINK_JOB, null, $deletePrivate);
         $terms_values = array();
         foreach ($value as $id => &$job) {
-            if (isset($job['name']) && $job['name']) {
+            if (($job['pub'] != 'private' || $deletePrivate) && (isset($job['name']) && $job['name'])) {
                 if (isset($job['jobid']) && $job['jobid']) {
                     XDB::execute('INSERT INTO  profile_job (pid, id, description, email,
                                                             url, pub, email_pub, jobid)
index 68e0d3d..d64b076 100644 (file)
@@ -901,7 +901,7 @@ class XnetGrpModule extends PLModule
             // Update user info
             $email_changed = (!$user->profile() && strtolower($user->forlifeEmail()) != strtolower(Post::v('email')));
             $from_email = $user->forlifeEmail();
-            if (!$user->profile()) {
+            if ($user->type == 'virtual' || $user->type == 'xnet') {
                 XDB::query('UPDATE  accounts
                                SET  full_name = {?}, directory_name = {?}, display_name = {?},
                                     sex = {?}, email = {?}, type = {?}
index 376191b..c4d880d 100644 (file)
@@ -359,7 +359,7 @@ $(function() {
     {/iterate}
     <tr class="{cycle values="impair,pair"}">
       <td colspan="2" class="detail">
-        <input type="text" name="email" size="29" maxlength="60" value="" />
+        <input type="text" name="email" size="29" maxlength="255" value="" />
       </td>
       <td class="action">
         <input type="hidden" name="uid" value="{$user->id()}" />
@@ -439,7 +439,7 @@ $(function() {
         Ajouter une adresse
       </td>
       <td>
-        <input type="text" name="email" size="29" maxlength="60" value="" />
+        <input type="text" name="email" size="29" maxlength="255" value="" />
       </td>
       <td class="action">
         <input type="hidden" name="uid" value="{$user->id()}" />
index 43ea1b4..6ae22ff 100644 (file)
@@ -23,6 +23,7 @@
 <a href="Xorg/FAQ?display=light#flags" class="popup_800x240">Quelle couleur ?</a>
 {/if}
 {if !t($val)}{assign var=val value='ax'}{/if}
+{if t($disabled)}<input type="hidden" name="{$name}" value="private" />{/if}
 <label><input type="radio" name="{$name}" value="public"{if $val eq 'public'} checked="checked"{/if}
        {if t($disabled)}disabled="disabled"{/if}{if t($mainField)} onchange="updatePublicity('{$mainField}','{$mainId}','{$subField}','{$subId}')"{/if} />
 {icon name="flag_green" title="site public"}
index 530ed5a..ac81a00 100644 (file)
@@ -27,7 +27,7 @@
 <strong>Site web&nbsp;:</strong>
 <input type="text" name="url" size="25" maxlength="200" value="{$valid->url}" /><br />
 <strong>Email&nbsp;:</strong>
-<input type="text" name="email" size="25" maxlength="200" value="{$valid->email}" /><br />
+<input type="text" name="email" size="25" maxlength="255" value="{$valid->email}" /><br />
 <strong>Holding&nbsp;:</strong>
 <input type="text" name="holdingid" size="25" maxlength="200" value="{$valid->holdingid}" /><br />
 <strong>Code NAF&nbsp;:</strong>
index cff2452..c100a05 100644 (file)
@@ -74,7 +74,7 @@
     <tr class="pair">
       <td>Adresse email&nbsp;:</td>
       <td>
-        <input type="text" name="mail" size="30" maxlength="50" value="{$smarty.post.mail}" />
+        <input type="text" name="mail" size="30" maxlength="255" value="{$smarty.post.mail}" />
       </td>
     </tr>
     {if $user->email}
index 60111c1..e593cdc 100644 (file)
@@ -121,7 +121,7 @@ Sa dernière relance date du {$relance|date_format}.
     <tr class="pair">
       <td align="right"><strong>To&nbsp;:</strong></td>
       <td>
-        <input type="text" value="{$rel_to}" name="to" size="40" maxlength="100" />
+        <input type="text" value="{$rel_to}" name="to" size="40" maxlength="255" />
         <input type="submit" name="valider" value="Envoyer" />
       </td>
     </tr>
index eef62ca..7ee81d1 100644 (file)
@@ -81,7 +81,7 @@ peut sans aucun doute l'aider à se décider&nbsp;!
     <tr class="pair">
       <td>Adresse email&nbsp;:</td>
       <td>
-        <input type="text" name="mail" size="30" maxlength="50" />
+        <input type="text" name="mail" size="30" maxlength="255" />
       </td>
     </tr>
     <tr class="impair">
index 255e798..f98ecf0 100644 (file)
@@ -78,7 +78,7 @@ Si tu n'accèdes pas à cet email dans les 6 heures, sollicite un nouveau certif
         <span class="smaller">"prenom.nom" ou "prenom.nom.promo"</span>
       </td>
       <td>
-        <input type="text" size="20" maxlength="50" name="login" />
+        <input type="text" size="20" maxlength="255" name="login" />
       </td>
     </tr>
     <tr>
@@ -95,7 +95,7 @@ Si tu n'accèdes pas à cet email dans les 6 heures, sollicite un nouveau certif
         Adresse email&nbsp;: <span class="smaller">(facultatif)</span>
       </td>
       <td>
-        <input type="text" size="20" maxlength="50" name="email" />
+        <input type="text" size="20" maxlength="255" name="email" />
       </td>
     </tr>
     <tr>
index b1dade3..2b4efc3 100644 (file)
 {else}
 {assign var=hiddenjob value=false}
 {/if}
+{if !hasPerm('directory_private') && ($job.w_address.pub eq 'private') && !empty($job.w_address.text|smarty:nodefaults)}
+{assign var=hiddenaddr value=true}
+{else}
+{assign var=hiddenaddr value=false}
+{/if}
+{if !hasPerm('directory_private') && ($job.w_email_pub eq 'private') && !empty($job.w_email|smarty:nodefaults)}
+{assign var=hiddenemail value=true}
+{else}
+{assign var=hiddenemail value=false}
+{/if}
 <div id="{$jobid}">
   <input type="hidden" name="{$jobpref}[removed]" value="0" />
   <input type="hidden" name="{$jobpref}[new]" value="{if $new}1{else}0{/if}" />
     <tr class="{$entreprise}" style="display: none">
       <td class="titre">Email de contact</td>
       <td>
-        <input type="text" maxlength="60" name="{$jobpref}[hq_email]" />
+        <input type="text" maxlength="255" name="{$jobpref}[hq_email]" />
       </td>
     </tr>
     <tr class="{$entreprise}" style="display: none">
                  name="{$jobpref}[w_url]" value="{$job.w_url}" />
       </td>
     </tr>
-    <tr id="{$jobid}_w_address" class="pair" {if $hiddenjob}style="display: none"{/if}>
+    <tr id="{$jobid}_w_address" class="pair" {if $hiddenjob || $hiddenaddr}style="display: none"{/if}>
       <td colspan="2">
         <div style="float: left">
           <div class="titre">Adresse</div>
         </div>
       </td>
     </tr>
-    {if $hiddenjob}
+    {if $hiddenaddr}
+    <tr class="pair">
+      <td class="titre" colspan="2">Adresse (masquée)</td>
+    </tr>
+    {/if}
+    {if $hiddenjob || $hiddenemail}
     <tr class="pair" {if $hiddenjob}style="display: none"{/if}>
-      <td colspan="2">
+      <td class="titre" colspan="2">
+        {if $hiddenemail}Email professionnel (masqué){/if}
         <input type="hidden" name="{$jobpref}[w_email]" value="{$job.w_email}" />
         <input type="hidden" name="{$jobpref}[w_email_pub]" value="{$job.w_email_pub}" />
       </td>
index ebfe16d..f0396df 100644 (file)
@@ -71,7 +71,7 @@
         <span class="smaller">(adresse de ton choix pour reçevoir tes emails)</span>
       </td>
       <td>
-        <input type="text" size="35" maxlength="50" name="email" value="{$smarty.post.email}" />
+        <input type="text" size="35" maxlength="255" name="email" value="{$smarty.post.email}" />
       </td>
     </tr>
     <tr class="pair">
index 61c7f23..3537fd3 100644 (file)
@@ -94,7 +94,7 @@
       <td>
         {if $event.topay}
         <div class="error">
-          {if !$event.paid}
+          {if $event.paid eq 0}
           Tu dois payer {$event.topay|replace:'.':','}&nbsp;&euro;.
           {elseif $event.paid < $event.topay}
           Tu dois encore payer {math equation="a-b" a=$event.topay b=$event.paid|replace:'.':','}&nbsp;&euro;
index dc33788..1818280 100644 (file)
@@ -59,14 +59,14 @@ masculin ou féminin, par son prénom, ou son nom.
     <tr>
       <td class="titre">Expéditeur&nbsp;:</td>
       <td>
-        <input type="text" name="from" size="55" maxlength="70"
+        <input type="text" name="from" size="55" maxlength="255"
           value="{if $smarty.request.from}{$smarty.request.from}{else}&quot;{$user->fullName()}&quot; &lt;{$user->bestEmail()}&gt;{/if}" />
       </td>
     </tr>
     <tr>
       <td class="titre">Répondre à&nbsp;:</td>
       <td>
-        <input type="text" name="replyto" size="55" maxlength="70" value="{$smarty.request.replyto}" />
+        <input type="text" name="replyto" size="55" maxlength="255" value="{$smarty.request.replyto}" />
       </td>
     </tr>
 
index ca37807..92a3833 100644 (file)
@@ -89,7 +89,7 @@
         </select>
       </td>
     </tr>
-    {if !$user->profile()}
+    {if $user->type eq 'virtual' || $user->type eq 'xnet'}
     <tr class="impair">
       <td class="titre">
         Type d'utilisateur&nbsp;:
         </select>
       </td>
     </tr>
-    {/if}
-    {if !$user->profile() || !$user->perms}
+    {if !$user->perms}
     <tr class="impair">
       <td class="titre">
         Email&nbsp;:
       </td>
     </tr>
     {/if}
+    {/if}
     <tr class="impair">
       <td class="titre">
         Commentaire&nbsp;:
diff --git a/upgrade/1.0.2/xx_data_update_01.sql b/upgrade/1.0.2/xx_data_update_01.sql
new file mode 100644 (file)
index 0000000..bc5ac76
--- /dev/null
@@ -0,0 +1,502 @@
+-- WARNING: Do not modify this script. Make a new one instead.
+
+-- New AX identifiants
+UPDATE profiles SET ax_id = 20100029 WHERE pid = 43956;
+UPDATE profiles SET ax_id = 20100030 WHERE pid = 43959;
+UPDATE profiles SET ax_id = 20100031 WHERE pid = 44079;
+UPDATE profiles SET ax_id = 20100032 WHERE pid = 43961;
+UPDATE profiles SET ax_id = 20100033 WHERE pid = 43964;
+UPDATE profiles SET ax_id = 20100034 WHERE pid = 43965;
+UPDATE profiles SET ax_id = 20100035 WHERE pid = 43966;
+UPDATE profiles SET ax_id = 20100037 WHERE pid = 43968;
+UPDATE profiles SET ax_id = 20100038 WHERE pid = 43969;
+UPDATE profiles SET ax_id = 20100039 WHERE pid = 43970;
+UPDATE profiles SET ax_id = 20100040 WHERE pid = 43971;
+UPDATE profiles SET ax_id = 20100041 WHERE pid = 43972;
+UPDATE profiles SET ax_id = 20100042 WHERE pid = 43973;
+UPDATE profiles SET ax_id = 20100043 WHERE pid = 43974;
+UPDATE profiles SET ax_id = 20100044 WHERE pid = 43976;
+UPDATE profiles SET ax_id = 20100045 WHERE pid = 43977;
+UPDATE profiles SET ax_id = 20100046 WHERE pid = 43978;
+UPDATE profiles SET ax_id = 20100047 WHERE pid = 43979;
+UPDATE profiles SET ax_id = 20100048 WHERE pid = 43980;
+UPDATE profiles SET ax_id = 20100049 WHERE pid = 43981;
+UPDATE profiles SET ax_id = 20100050 WHERE pid = 43983;
+UPDATE profiles SET ax_id = 20100051 WHERE pid = 43984;
+UPDATE profiles SET ax_id = 20100052 WHERE pid = 43985;
+UPDATE profiles SET ax_id = 20100053 WHERE pid = 43986;
+UPDATE profiles SET ax_id = 20100054 WHERE pid = 43987;
+UPDATE profiles SET ax_id = 20100055 WHERE pid = 43988;
+UPDATE profiles SET ax_id = 20100056 WHERE pid = 43989;
+UPDATE profiles SET ax_id = 20100057 WHERE pid = 43990;
+UPDATE profiles SET ax_id = 20100058 WHERE pid = 43991;
+UPDATE profiles SET ax_id = 20100059 WHERE pid = 43993;
+UPDATE profiles SET ax_id = 20100060 WHERE pid = 43994;
+UPDATE profiles SET ax_id = 20100061 WHERE pid = 43997;
+UPDATE profiles SET ax_id = 20100062 WHERE pid = 43998;
+UPDATE profiles SET ax_id = 20100063 WHERE pid = 43999;
+UPDATE profiles SET ax_id = 20100064 WHERE pid = 44000;
+UPDATE profiles SET ax_id = 20100065 WHERE pid = 44002;
+UPDATE profiles SET ax_id = 20100066 WHERE pid = 44003;
+UPDATE profiles SET ax_id = 20100067 WHERE pid = 44004;
+UPDATE profiles SET ax_id = 20100068 WHERE pid = 44005;
+UPDATE profiles SET ax_id = 20100069 WHERE pid = 44006;
+UPDATE profiles SET ax_id = 20100070 WHERE pid = 44010;
+UPDATE profiles SET ax_id = 20100071 WHERE pid = 44011;
+UPDATE profiles SET ax_id = 20100072 WHERE pid = 44012;
+UPDATE profiles SET ax_id = 20100073 WHERE pid = 44013;
+UPDATE profiles SET ax_id = 20100074 WHERE pid = 44014;
+UPDATE profiles SET ax_id = 20100075 WHERE pid = 44015;
+UPDATE profiles SET ax_id = 20100076 WHERE pid = 44016;
+UPDATE profiles SET ax_id = 20100077 WHERE pid = 44017;
+UPDATE profiles SET ax_id = 20100078 WHERE pid = 44018;
+UPDATE profiles SET ax_id = 20100079 WHERE pid = 44019;
+UPDATE profiles SET ax_id = 20100080 WHERE pid = 44021;
+UPDATE profiles SET ax_id = 20100081 WHERE pid = 44022;
+UPDATE profiles SET ax_id = 20100082 WHERE pid = 44023;
+UPDATE profiles SET ax_id = 20100083 WHERE pid = 44024;
+UPDATE profiles SET ax_id = 20100084 WHERE pid = 44025;
+UPDATE profiles SET ax_id = 20100085 WHERE pid = 44026;
+UPDATE profiles SET ax_id = 20100086 WHERE pid = 44028;
+UPDATE profiles SET ax_id = 20100087 WHERE pid = 44029;
+UPDATE profiles SET ax_id = 20100088 WHERE pid = 44030;
+UPDATE profiles SET ax_id = 20100089 WHERE pid = 44031;
+UPDATE profiles SET ax_id = 20100090 WHERE pid = 44032;
+UPDATE profiles SET ax_id = 20100091 WHERE pid = 44033;
+UPDATE profiles SET ax_id = 20100092 WHERE pid = 44034;
+UPDATE profiles SET ax_id = 20100093 WHERE pid = 44035;
+UPDATE profiles SET ax_id = 20100094 WHERE pid = 44036;
+UPDATE profiles SET ax_id = 20100095 WHERE pid = 44037;
+UPDATE profiles SET ax_id = 20100096 WHERE pid = 44038;
+UPDATE profiles SET ax_id = 20100097 WHERE pid = 44040;
+UPDATE profiles SET ax_id = 20100098 WHERE pid = 44042;
+UPDATE profiles SET ax_id = 20100099 WHERE pid = 44043;
+UPDATE profiles SET ax_id = 20100100 WHERE pid = 44044;
+UPDATE profiles SET ax_id = 20100101 WHERE pid = 44045;
+UPDATE profiles SET ax_id = 20100102 WHERE pid = 44046;
+UPDATE profiles SET ax_id = 20100103 WHERE pid = 44047;
+UPDATE profiles SET ax_id = 20100104 WHERE pid = 44048;
+UPDATE profiles SET ax_id = 20100105 WHERE pid = 44049;
+UPDATE profiles SET ax_id = 20100106 WHERE pid = 44050;
+UPDATE profiles SET ax_id = 20100107 WHERE pid = 44051;
+UPDATE profiles SET ax_id = 20100108 WHERE pid = 44053;
+UPDATE profiles SET ax_id = 20100109 WHERE pid = 44054;
+UPDATE profiles SET ax_id = 20100110 WHERE pid = 44055;
+UPDATE profiles SET ax_id = 20100111 WHERE pid = 44056;
+UPDATE profiles SET ax_id = 20100112 WHERE pid = 44057;
+UPDATE profiles SET ax_id = 20100113 WHERE pid = 44058;
+UPDATE profiles SET ax_id = 20100114 WHERE pid = 44060;
+UPDATE profiles SET ax_id = 20100115 WHERE pid = 44062;
+UPDATE profiles SET ax_id = 20100116 WHERE pid = 44063;
+UPDATE profiles SET ax_id = 20100117 WHERE pid = 44064;
+UPDATE profiles SET ax_id = 20100118 WHERE pid = 44065;
+UPDATE profiles SET ax_id = 20100119 WHERE pid = 44087;
+UPDATE profiles SET ax_id = 20100120 WHERE pid = 44066;
+UPDATE profiles SET ax_id = 20100121 WHERE pid = 44067;
+UPDATE profiles SET ax_id = 20100122 WHERE pid = 44068;
+UPDATE profiles SET ax_id = 20100123 WHERE pid = 44069;
+UPDATE profiles SET ax_id = 20100124 WHERE pid = 44070;
+UPDATE profiles SET ax_id = 20100125 WHERE pid = 44071;
+UPDATE profiles SET ax_id = 20100126 WHERE pid = 44072;
+UPDATE profiles SET ax_id = 20100127 WHERE pid = 44073;
+UPDATE profiles SET ax_id = 20100128 WHERE pid = 44074;
+UPDATE profiles SET ax_id = 20100129 WHERE pid = 44075;
+UPDATE profiles SET ax_id = 20100130 WHERE pid = 44076;
+UPDATE profiles SET ax_id = 20100131 WHERE pid = 44077;
+UPDATE profiles SET ax_id = 20100132 WHERE pid = 44078;
+UPDATE profiles SET ax_id = 20100133 WHERE pid = 44080;
+UPDATE profiles SET ax_id = 20100134 WHERE pid = 44082;
+UPDATE profiles SET ax_id = 20100135 WHERE pid = 44083;
+UPDATE profiles SET ax_id = 20100136 WHERE pid = 44084;
+UPDATE profiles SET ax_id = 20100137 WHERE pid = 44085;
+UPDATE profiles SET ax_id = 20100138 WHERE pid = 44086;
+UPDATE profiles SET ax_id = 20100139 WHERE pid = 44094;
+UPDATE profiles SET ax_id = 20100140 WHERE pid = 44095;
+UPDATE profiles SET ax_id = 20100141 WHERE pid = 44096;
+UPDATE profiles SET ax_id = 20100142 WHERE pid = 44097;
+UPDATE profiles SET ax_id = 20100143 WHERE pid = 44098;
+UPDATE profiles SET ax_id = 20100144 WHERE pid = 44099;
+UPDATE profiles SET ax_id = 20100145 WHERE pid = 44100;
+UPDATE profiles SET ax_id = 20100146 WHERE pid = 44101;
+UPDATE profiles SET ax_id = 20100147 WHERE pid = 44102;
+UPDATE profiles SET ax_id = 20100148 WHERE pid = 44103;
+UPDATE profiles SET ax_id = 20100149 WHERE pid = 44105;
+UPDATE profiles SET ax_id = 20100150 WHERE pid = 44106;
+UPDATE profiles SET ax_id = 20100151 WHERE pid = 44107;
+UPDATE profiles SET ax_id = 20100152 WHERE pid = 44108;
+UPDATE profiles SET ax_id = 20100153 WHERE pid = 44109;
+UPDATE profiles SET ax_id = 20100154 WHERE pid = 44110;
+UPDATE profiles SET ax_id = 20100155 WHERE pid = 44111;
+UPDATE profiles SET ax_id = 20100156 WHERE pid = 44112;
+UPDATE profiles SET ax_id = 20100157 WHERE pid = 44113;
+UPDATE profiles SET ax_id = 20100158 WHERE pid = 44114;
+UPDATE profiles SET ax_id = 20100159 WHERE pid = 44115;
+UPDATE profiles SET ax_id = 20100160 WHERE pid = 44116;
+UPDATE profiles SET ax_id = 20100161 WHERE pid = 44117;
+UPDATE profiles SET ax_id = 20100162 WHERE pid = 44118;
+UPDATE profiles SET ax_id = 20100163 WHERE pid = 44119;
+UPDATE profiles SET ax_id = 20100164 WHERE pid = 44120;
+UPDATE profiles SET ax_id = 20100165 WHERE pid = 44122;
+UPDATE profiles SET ax_id = 20100166 WHERE pid = 44123;
+UPDATE profiles SET ax_id = 20100167 WHERE pid = 44125;
+UPDATE profiles SET ax_id = 20100168 WHERE pid = 44127;
+UPDATE profiles SET ax_id = 20100169 WHERE pid = 44126;
+UPDATE profiles SET ax_id = 20100170 WHERE pid = 44128;
+UPDATE profiles SET ax_id = 20100171 WHERE pid = 44129;
+UPDATE profiles SET ax_id = 20100172 WHERE pid = 44130;
+UPDATE profiles SET ax_id = 20100173 WHERE pid = 44131;
+UPDATE profiles SET ax_id = 20100174 WHERE pid = 44132;
+UPDATE profiles SET ax_id = 20100175 WHERE pid = 44133;
+UPDATE profiles SET ax_id = 20100176 WHERE pid = 44134;
+UPDATE profiles SET ax_id = 20100177 WHERE pid = 44135;
+UPDATE profiles SET ax_id = 20100178 WHERE pid = 44136;
+UPDATE profiles SET ax_id = 20100179 WHERE pid = 44137;
+UPDATE profiles SET ax_id = 20100180 WHERE pid = 44138;
+UPDATE profiles SET ax_id = 20100181 WHERE pid = 44140;
+UPDATE profiles SET ax_id = 20100182 WHERE pid = 44141;
+UPDATE profiles SET ax_id = 20100183 WHERE pid = 44142;
+UPDATE profiles SET ax_id = 20100184 WHERE pid = 44143;
+UPDATE profiles SET ax_id = 20100185 WHERE pid = 44144;
+UPDATE profiles SET ax_id = 20100186 WHERE pid = 44145;
+UPDATE profiles SET ax_id = 20100187 WHERE pid = 44146;
+UPDATE profiles SET ax_id = 20100188 WHERE pid = 44147;
+UPDATE profiles SET ax_id = 20100189 WHERE pid = 44148;
+UPDATE profiles SET ax_id = 20100190 WHERE pid = 44149;
+UPDATE profiles SET ax_id = 20100191 WHERE pid = 44150;
+UPDATE profiles SET ax_id = 20100192 WHERE pid = 44151;
+UPDATE profiles SET ax_id = 20100193 WHERE pid = 44152;
+UPDATE profiles SET ax_id = 20100194 WHERE pid = 44153;
+UPDATE profiles SET ax_id = 20100195 WHERE pid = 44154;
+UPDATE profiles SET ax_id = 20100196 WHERE pid = 44155;
+UPDATE profiles SET ax_id = 20100197 WHERE pid = 44156;
+UPDATE profiles SET ax_id = 20100198 WHERE pid = 44157;
+UPDATE profiles SET ax_id = 20100199 WHERE pid = 44158;
+UPDATE profiles SET ax_id = 20100200 WHERE pid = 44159;
+UPDATE profiles SET ax_id = 20100201 WHERE pid = 44160;
+UPDATE profiles SET ax_id = 20100202 WHERE pid = 44161;
+UPDATE profiles SET ax_id = 20100203 WHERE pid = 44162;
+UPDATE profiles SET ax_id = 20100204 WHERE pid = 44164;
+UPDATE profiles SET ax_id = 20100205 WHERE pid = 44166;
+UPDATE profiles SET ax_id = 20100206 WHERE pid = 44167;
+UPDATE profiles SET ax_id = 20100207 WHERE pid = 44168;
+UPDATE profiles SET ax_id = 20100208 WHERE pid = 44169;
+UPDATE profiles SET ax_id = 20100209 WHERE pid = 44172;
+UPDATE profiles SET ax_id = 20100210 WHERE pid = 44173;
+UPDATE profiles SET ax_id = 20100211 WHERE pid = 44174;
+UPDATE profiles SET ax_id = 20100212 WHERE pid = 44175;
+UPDATE profiles SET ax_id = 20100213 WHERE pid = 44176;
+UPDATE profiles SET ax_id = 20100214 WHERE pid = 44177;
+UPDATE profiles SET ax_id = 20100215 WHERE pid = 44178;
+UPDATE profiles SET ax_id = 20100216 WHERE pid = 44179;
+UPDATE profiles SET ax_id = 20100217 WHERE pid = 44180;
+UPDATE profiles SET ax_id = 20100218 WHERE pid = 44181;
+UPDATE profiles SET ax_id = 20100219 WHERE pid = 44182;
+UPDATE profiles SET ax_id = 20100220 WHERE pid = 44183;
+UPDATE profiles SET ax_id = 20100221 WHERE pid = 44184;
+UPDATE profiles SET ax_id = 20100222 WHERE pid = 44185;
+UPDATE profiles SET ax_id = 20100223 WHERE pid = 44186;
+UPDATE profiles SET ax_id = 20100224 WHERE pid = 44187;
+UPDATE profiles SET ax_id = 20100225 WHERE pid = 44188;
+UPDATE profiles SET ax_id = 20100226 WHERE pid = 44190;
+UPDATE profiles SET ax_id = 20100227 WHERE pid = 44191;
+UPDATE profiles SET ax_id = 20100228 WHERE pid = 44192;
+UPDATE profiles SET ax_id = 20100229 WHERE pid = 44194;
+UPDATE profiles SET ax_id = 20100230 WHERE pid = 44195;
+UPDATE profiles SET ax_id = 20100231 WHERE pid = 44196;
+UPDATE profiles SET ax_id = 20100232 WHERE pid = 44198;
+UPDATE profiles SET ax_id = 20100233 WHERE pid = 44199;
+UPDATE profiles SET ax_id = 20100234 WHERE pid = 44200;
+UPDATE profiles SET ax_id = 20100235 WHERE pid = 44201;
+UPDATE profiles SET ax_id = 20100236 WHERE pid = 44203;
+UPDATE profiles SET ax_id = 20100237 WHERE pid = 44204;
+UPDATE profiles SET ax_id = 20100238 WHERE pid = 44205;
+UPDATE profiles SET ax_id = 20100239 WHERE pid = 44206;
+UPDATE profiles SET ax_id = 20100240 WHERE pid = 44207;
+UPDATE profiles SET ax_id = 20100241 WHERE pid = 44208;
+UPDATE profiles SET ax_id = 20100242 WHERE pid = 44210;
+UPDATE profiles SET ax_id = 20100243 WHERE pid = 44213;
+UPDATE profiles SET ax_id = 20100244 WHERE pid = 44215;
+UPDATE profiles SET ax_id = 20100245 WHERE pid = 44216;
+UPDATE profiles SET ax_id = 20100246 WHERE pid = 44217;
+UPDATE profiles SET ax_id = 20100247 WHERE pid = 44218;
+UPDATE profiles SET ax_id = 20100248 WHERE pid = 44219;
+UPDATE profiles SET ax_id = 20100249 WHERE pid = 44220;
+UPDATE profiles SET ax_id = 20100250 WHERE pid = 44221;
+UPDATE profiles SET ax_id = 20100251 WHERE pid = 44222;
+UPDATE profiles SET ax_id = 20100252 WHERE pid = 44088;
+UPDATE profiles SET ax_id = 20100253 WHERE pid = 44223;
+UPDATE profiles SET ax_id = 20100254 WHERE pid = 44224;
+UPDATE profiles SET ax_id = 20100255 WHERE pid = 44225;
+UPDATE profiles SET ax_id = 20100256 WHERE pid = 44226;
+UPDATE profiles SET ax_id = 20100257 WHERE pid = 44214;
+UPDATE profiles SET ax_id = 20100258 WHERE pid = 44227;
+UPDATE profiles SET ax_id = 20100259 WHERE pid = 44228;
+UPDATE profiles SET ax_id = 20100260 WHERE pid = 44229;
+UPDATE profiles SET ax_id = 20100261 WHERE pid = 44230;
+UPDATE profiles SET ax_id = 20100262 WHERE pid = 44231;
+UPDATE profiles SET ax_id = 20100263 WHERE pid = 44232;
+UPDATE profiles SET ax_id = 20100264 WHERE pid = 44233;
+UPDATE profiles SET ax_id = 20100265 WHERE pid = 44234;
+UPDATE profiles SET ax_id = 20100266 WHERE pid = 44235;
+UPDATE profiles SET ax_id = 20100267 WHERE pid = 44237;
+UPDATE profiles SET ax_id = 20100268 WHERE pid = 44238;
+UPDATE profiles SET ax_id = 20100269 WHERE pid = 44239;
+UPDATE profiles SET ax_id = 20100270 WHERE pid = 44240;
+UPDATE profiles SET ax_id = 20100271 WHERE pid = 44241;
+UPDATE profiles SET ax_id = 20100272 WHERE pid = 44089;
+UPDATE profiles SET ax_id = 20100273 WHERE pid = 44242;
+UPDATE profiles SET ax_id = 20100274 WHERE pid = 44243;
+UPDATE profiles SET ax_id = 20100275 WHERE pid = 44244;
+UPDATE profiles SET ax_id = 20100276 WHERE pid = 44245;
+UPDATE profiles SET ax_id = 20100277 WHERE pid = 44250;
+UPDATE profiles SET ax_id = 20100278 WHERE pid = 44251;
+UPDATE profiles SET ax_id = 20100279 WHERE pid = 44252;
+UPDATE profiles SET ax_id = 20100280 WHERE pid = 44253;
+UPDATE profiles SET ax_id = 20100281 WHERE pid = 44254;
+UPDATE profiles SET ax_id = 20100282 WHERE pid = 44255;
+UPDATE profiles SET ax_id = 20100283 WHERE pid = 44256;
+UPDATE profiles SET ax_id = 20100284 WHERE pid = 44257;
+UPDATE profiles SET ax_id = 20100285 WHERE pid = 44258;
+UPDATE profiles SET ax_id = 20100286 WHERE pid = 44259;
+UPDATE profiles SET ax_id = 20100287 WHERE pid = 44090;
+UPDATE profiles SET ax_id = 20100288 WHERE pid = 44261;
+UPDATE profiles SET ax_id = 20100289 WHERE pid = 44262;
+UPDATE profiles SET ax_id = 20100290 WHERE pid = 44263;
+UPDATE profiles SET ax_id = 20100291 WHERE pid = 44264;
+UPDATE profiles SET ax_id = 20100292 WHERE pid = 44265;
+UPDATE profiles SET ax_id = 20100293 WHERE pid = 44266;
+UPDATE profiles SET ax_id = 20100294 WHERE pid = 44267;
+UPDATE profiles SET ax_id = 20100295 WHERE pid = 44268;
+UPDATE profiles SET ax_id = 20100296 WHERE pid = 44270;
+UPDATE profiles SET ax_id = 20100297 WHERE pid = 44271;
+UPDATE profiles SET ax_id = 20100298 WHERE pid = 44272;
+UPDATE profiles SET ax_id = 20100299 WHERE pid = 44273;
+UPDATE profiles SET ax_id = 20100300 WHERE pid = 44274;
+UPDATE profiles SET ax_id = 20100301 WHERE pid = 44275;
+UPDATE profiles SET ax_id = 20100302 WHERE pid = 44091;
+UPDATE profiles SET ax_id = 20100303 WHERE pid = 44276;
+UPDATE profiles SET ax_id = 20100304 WHERE pid = 44277;
+UPDATE profiles SET ax_id = 20100305 WHERE pid = 44278;
+UPDATE profiles SET ax_id = 20100306 WHERE pid = 44279;
+UPDATE profiles SET ax_id = 20100307 WHERE pid = 44280;
+UPDATE profiles SET ax_id = 20100308 WHERE pid = 44281;
+UPDATE profiles SET ax_id = 20100309 WHERE pid = 44282;
+UPDATE profiles SET ax_id = 20100310 WHERE pid = 44283;
+UPDATE profiles SET ax_id = 20100311 WHERE pid = 44284;
+UPDATE profiles SET ax_id = 20100312 WHERE pid = 44285;
+UPDATE profiles SET ax_id = 20100313 WHERE pid = 44287;
+UPDATE profiles SET ax_id = 20100314 WHERE pid = 44286;
+UPDATE profiles SET ax_id = 20100315 WHERE pid = 44288;
+UPDATE profiles SET ax_id = 20100316 WHERE pid = 44289;
+UPDATE profiles SET ax_id = 20100317 WHERE pid = 44291;
+UPDATE profiles SET ax_id = 20100318 WHERE pid = 44292;
+UPDATE profiles SET ax_id = 20100319 WHERE pid = 44296;
+UPDATE profiles SET ax_id = 20100320 WHERE pid = 44297;
+UPDATE profiles SET ax_id = 20100321 WHERE pid = 44298;
+UPDATE profiles SET ax_id = 20100322 WHERE pid = 44299;
+UPDATE profiles SET ax_id = 20100323 WHERE pid = 44301;
+UPDATE profiles SET ax_id = 20100324 WHERE pid = 44302;
+UPDATE profiles SET ax_id = 20100325 WHERE pid = 44304;
+UPDATE profiles SET ax_id = 20100326 WHERE pid = 44305;
+UPDATE profiles SET ax_id = 20100327 WHERE pid = 44306;
+UPDATE profiles SET ax_id = 20100328 WHERE pid = 44307;
+UPDATE profiles SET ax_id = 20100329 WHERE pid = 44308;
+UPDATE profiles SET ax_id = 20100330 WHERE pid = 44309;
+UPDATE profiles SET ax_id = 20100331 WHERE pid = 44310;
+UPDATE profiles SET ax_id = 20100332 WHERE pid = 44311;
+UPDATE profiles SET ax_id = 20100333 WHERE pid = 44312;
+UPDATE profiles SET ax_id = 20100334 WHERE pid = 44313;
+UPDATE profiles SET ax_id = 20100335 WHERE pid = 44314;
+UPDATE profiles SET ax_id = 20100336 WHERE pid = 44315;
+UPDATE profiles SET ax_id = 20100337 WHERE pid = 44316;
+UPDATE profiles SET ax_id = 20100338 WHERE pid = 44317;
+UPDATE profiles SET ax_id = 20100339 WHERE pid = 44318;
+UPDATE profiles SET ax_id = 20100340 WHERE pid = 44319;
+UPDATE profiles SET ax_id = 20100341 WHERE pid = 44320;
+UPDATE profiles SET ax_id = 20100342 WHERE pid = 44321;
+UPDATE profiles SET ax_id = 20100343 WHERE pid = 44322;
+UPDATE profiles SET ax_id = 20100344 WHERE pid = 44323;
+UPDATE profiles SET ax_id = 20100345 WHERE pid = 44324;
+UPDATE profiles SET ax_id = 20100346 WHERE pid = 44325;
+UPDATE profiles SET ax_id = 20100347 WHERE pid = 44326;
+UPDATE profiles SET ax_id = 20100348 WHERE pid = 44327;
+UPDATE profiles SET ax_id = 20100349 WHERE pid = 44328;
+UPDATE profiles SET ax_id = 20100350 WHERE pid = 44329;
+UPDATE profiles SET ax_id = 20100351 WHERE pid = 44330;
+UPDATE profiles SET ax_id = 20100352 WHERE pid = 44331;
+UPDATE profiles SET ax_id = 20100353 WHERE pid = 44332;
+UPDATE profiles SET ax_id = 20100354 WHERE pid = 44333;
+UPDATE profiles SET ax_id = 20100355 WHERE pid = 44334;
+UPDATE profiles SET ax_id = 20100356 WHERE pid = 44335;
+UPDATE profiles SET ax_id = 20100357 WHERE pid = 44336;
+UPDATE profiles SET ax_id = 20100358 WHERE pid = 44337;
+UPDATE profiles SET ax_id = 20100359 WHERE pid = 44338;
+UPDATE profiles SET ax_id = 20100360 WHERE pid = 44339;
+UPDATE profiles SET ax_id = 20100361 WHERE pid = 44340;
+UPDATE profiles SET ax_id = 20100362 WHERE pid = 44341;
+UPDATE profiles SET ax_id = 20100363 WHERE pid = 44342;
+UPDATE profiles SET ax_id = 20100364 WHERE pid = 44343;
+UPDATE profiles SET ax_id = 20100365 WHERE pid = 44345;
+UPDATE profiles SET ax_id = 20100366 WHERE pid = 44346;
+UPDATE profiles SET ax_id = 20100367 WHERE pid = 44347;
+UPDATE profiles SET ax_id = 20100368 WHERE pid = 44348;
+UPDATE profiles SET ax_id = 20100369 WHERE pid = 44349;
+UPDATE profiles SET ax_id = 20100370 WHERE pid = 44350;
+UPDATE profiles SET ax_id = 20100371 WHERE pid = 44351;
+UPDATE profiles SET ax_id = 20100372 WHERE pid = 44352;
+UPDATE profiles SET ax_id = 20100373 WHERE pid = 44353;
+UPDATE profiles SET ax_id = 20100374 WHERE pid = 44354;
+UPDATE profiles SET ax_id = 20100375 WHERE pid = 44355;
+UPDATE profiles SET ax_id = 20100376 WHERE pid = 44356;
+UPDATE profiles SET ax_id = 20100377 WHERE pid = 44357;
+UPDATE profiles SET ax_id = 20100378 WHERE pid = 44358;
+UPDATE profiles SET ax_id = 20100379 WHERE pid = 44359;
+UPDATE profiles SET ax_id = 20100380 WHERE pid = 44362;
+UPDATE profiles SET ax_id = 20100381 WHERE pid = 44363;
+UPDATE profiles SET ax_id = 20100382 WHERE pid = 44364;
+UPDATE profiles SET ax_id = 20100383 WHERE pid = 44366;
+UPDATE profiles SET ax_id = 20100384 WHERE pid = 44367;
+UPDATE profiles SET ax_id = 20100385 WHERE pid = 44092;
+UPDATE profiles SET ax_id = 20100386 WHERE pid = 44368;
+UPDATE profiles SET ax_id = 20100387 WHERE pid = 44369;
+UPDATE profiles SET ax_id = 20100388 WHERE pid = 44093;
+UPDATE profiles SET ax_id = 20100389 WHERE pid = 44370;
+UPDATE profiles SET ax_id = 20100390 WHERE pid = 44371;
+UPDATE profiles SET ax_id = 20100391 WHERE pid = 44372;
+UPDATE profiles SET ax_id = 20100392 WHERE pid = 44373;
+UPDATE profiles SET ax_id = 20100393 WHERE pid = 44374;
+UPDATE profiles SET ax_id = 20100394 WHERE pid = 44377;
+UPDATE profiles SET ax_id = 20100395 WHERE pid = 44378;
+UPDATE profiles SET ax_id = 20100396 WHERE pid = 44379;
+UPDATE profiles SET ax_id = 20100397 WHERE pid = 44380;
+UPDATE profiles SET ax_id = 20100398 WHERE pid = 44382;
+UPDATE profiles SET ax_id = 20100399 WHERE pid = 44361;
+UPDATE profiles SET ax_id = 20100400 WHERE pid = 44383;
+UPDATE profiles SET ax_id = 20100401 WHERE pid = 44384;
+UPDATE profiles SET ax_id = 20100402 WHERE pid = 44385;
+UPDATE profiles SET ax_id = 20100403 WHERE pid = 44386;
+UPDATE profiles SET ax_id = 20100404 WHERE pid = 44388;
+UPDATE profiles SET ax_id = 20100405 WHERE pid = 44389;
+UPDATE profiles SET ax_id = 20100406 WHERE pid = 44390;
+UPDATE profiles SET ax_id = 20100407 WHERE pid = 44392;
+UPDATE profiles SET ax_id = 20100408 WHERE pid = 44393;
+UPDATE profiles SET ax_id = 20100409 WHERE pid = 44394;
+UPDATE profiles SET ax_id = 20100410 WHERE pid = 44395;
+UPDATE profiles SET ax_id = 20100411 WHERE pid = 44398;
+UPDATE profiles SET ax_id = 20100412 WHERE pid = 44399;
+UPDATE profiles SET ax_id = 20100413 WHERE pid = 44400;
+UPDATE profiles SET ax_id = 20100414 WHERE pid = 44401;
+UPDATE profiles SET ax_id = 20100415 WHERE pid = 44402;
+UPDATE profiles SET ax_id = 20100416 WHERE pid = 44403;
+UPDATE profiles SET ax_id = 20100417 WHERE pid = 44404;
+UPDATE profiles SET ax_id = 20100418 WHERE pid = 44405;
+UPDATE profiles SET ax_id = 20100419 WHERE pid = 44406;
+UPDATE profiles SET ax_id = 20100420 WHERE pid = 44411;
+UPDATE profiles SET ax_id = 20100421 WHERE pid = 44412;
+UPDATE profiles SET ax_id = 20100422 WHERE pid = 44413;
+UPDATE profiles SET ax_id = 20100423 WHERE pid = 44414;
+UPDATE profiles SET ax_id = 20100424 WHERE pid = 44415;
+UPDATE profiles SET ax_id = 20100425 WHERE pid = 44417;
+UPDATE profiles SET ax_id = 20100426 WHERE pid = 44420;
+UPDATE profiles SET ax_id = 20100427 WHERE pid = 44423;
+UPDATE profiles SET ax_id = 20100428 WHERE pid = 44428;
+UPDATE profiles SET ax_id = 20100429 WHERE pid = 43957;
+UPDATE profiles SET ax_id = 20100430 WHERE pid = 43958;
+UPDATE profiles SET ax_id = 20100431 WHERE pid = 43960;
+UPDATE profiles SET ax_id = 20100432 WHERE pid = 43962;
+UPDATE profiles SET ax_id = 20100433 WHERE pid = 43963;
+UPDATE profiles SET ax_id = 20100434 WHERE pid = 43975;
+UPDATE profiles SET ax_id = 20100435 WHERE pid = 43982;
+UPDATE profiles SET ax_id = 20100436 WHERE pid = 43992;
+UPDATE profiles SET ax_id = 20100437 WHERE pid = 43995;
+UPDATE profiles SET ax_id = 20100438 WHERE pid = 43996;
+UPDATE profiles SET ax_id = 20100439 WHERE pid = 44001;
+UPDATE profiles SET ax_id = 20100440 WHERE pid = 44007;
+UPDATE profiles SET ax_id = 20100441 WHERE pid = 44008;
+UPDATE profiles SET ax_id = 20100442 WHERE pid = 44009;
+UPDATE profiles SET ax_id = 20100443 WHERE pid = 44020;
+UPDATE profiles SET ax_id = 20100444 WHERE pid = 44027;
+UPDATE profiles SET ax_id = 20100445 WHERE pid = 44039;
+UPDATE profiles SET ax_id = 20100446 WHERE pid = 44041;
+UPDATE profiles SET ax_id = 20100447 WHERE pid = 44052;
+UPDATE profiles SET ax_id = 20100448 WHERE pid = 44059;
+UPDATE profiles SET ax_id = 20100449 WHERE pid = 44061;
+UPDATE profiles SET ax_id = 20100450 WHERE pid = 44081;
+UPDATE profiles SET ax_id = 20100451 WHERE pid = 44104;
+UPDATE profiles SET ax_id = 20100452 WHERE pid = 44121;
+UPDATE profiles SET ax_id = 20100453 WHERE pid = 44124;
+UPDATE profiles SET ax_id = 20100454 WHERE pid = 44139;
+UPDATE profiles SET ax_id = 20100455 WHERE pid = 44163;
+UPDATE profiles SET ax_id = 20100456 WHERE pid = 44165;
+UPDATE profiles SET ax_id = 20100457 WHERE pid = 44170;
+UPDATE profiles SET ax_id = 20100458 WHERE pid = 44171;
+UPDATE profiles SET ax_id = 20100459 WHERE pid = 44189;
+UPDATE profiles SET ax_id = 20100460 WHERE pid = 44193;
+UPDATE profiles SET ax_id = 20100461 WHERE pid = 44197;
+UPDATE profiles SET ax_id = 20100462 WHERE pid = 44202;
+UPDATE profiles SET ax_id = 20100463 WHERE pid = 44209;
+UPDATE profiles SET ax_id = 20100464 WHERE pid = 44211;
+UPDATE profiles SET ax_id = 20100465 WHERE pid = 44212;
+UPDATE profiles SET ax_id = 20100466 WHERE pid = 44236;
+UPDATE profiles SET ax_id = 20100467 WHERE pid = 44247;
+UPDATE profiles SET ax_id = 20100468 WHERE pid = 44246;
+UPDATE profiles SET ax_id = 20100469 WHERE pid = 44248;
+UPDATE profiles SET ax_id = 20100470 WHERE pid = 44249;
+UPDATE profiles SET ax_id = 20100471 WHERE pid = 44260;
+UPDATE profiles SET ax_id = 20100472 WHERE pid = 44269;
+UPDATE profiles SET ax_id = 20100474 WHERE pid = 44290;
+UPDATE profiles SET ax_id = 20100475 WHERE pid = 44293;
+UPDATE profiles SET ax_id = 20100476 WHERE pid = 44294;
+UPDATE profiles SET ax_id = 20100477 WHERE pid = 44295;
+UPDATE profiles SET ax_id = 20100478 WHERE pid = 44300;
+UPDATE profiles SET ax_id = 20100480 WHERE pid = 44303;
+UPDATE profiles SET ax_id = 20100481 WHERE pid = 44344;
+UPDATE profiles SET ax_id = 20100482 WHERE pid = 44360;
+UPDATE profiles SET ax_id = 20100483 WHERE pid = 44365;
+UPDATE profiles SET ax_id = 20100484 WHERE pid = 44375;
+UPDATE profiles SET ax_id = 20100485 WHERE pid = 44376;
+UPDATE profiles SET ax_id = 20100486 WHERE pid = 44381;
+UPDATE profiles SET ax_id = 20100487 WHERE pid = 44387;
+UPDATE profiles SET ax_id = 20100488 WHERE pid = 44391;
+UPDATE profiles SET ax_id = 20100489 WHERE pid = 44396;
+UPDATE profiles SET ax_id = 20100490 WHERE pid = 44397;
+UPDATE profiles SET ax_id = 20100491 WHERE pid = 44407;
+UPDATE profiles SET ax_id = 20100492 WHERE pid = 44408;
+UPDATE profiles SET ax_id = 20100493 WHERE pid = 44409;
+UPDATE profiles SET ax_id = 20100494 WHERE pid = 44410;
+UPDATE profiles SET ax_id = 20100495 WHERE pid = 44416;
+UPDATE profiles SET ax_id = 20100496 WHERE pid = 44418;
+UPDATE profiles SET ax_id = 20100497 WHERE pid = 44419;
+UPDATE profiles SET ax_id = 20100498 WHERE pid = 44421;
+UPDATE profiles SET ax_id = 20100499 WHERE pid = 44422;
+UPDATE profiles SET ax_id = 20100500 WHERE pid = 44424;
+UPDATE profiles SET ax_id = 20100501 WHERE pid = 44425;
+UPDATE profiles SET ax_id = 20100502 WHERE pid = 44426;
+UPDATE profiles SET ax_id = 20100503 WHERE pid = 44427;
+
+-- Updates promo for oranjes who only stated their orajisation to AX.
+-- WARNING: this does not affect the display of their promotion anywhere. It will just allow them to attend events to both promotions.
+-- Also they wiil not need to require a validation if they want to change promo on the site.
+
+UPDATE  profile_education
+   SET  grad_year = grad_year + 1
+   WHERE  FIND_IN_SET('primary', flags) AND pid IN (42018, 42216, 43135, 43216, 42981, 43039, 41827, 42322);
+
+-- Same as before but double orajisation.
+UPDATE  profile_education
+   SET  grad_year = grad_year + 2
+ WHERE  FIND_IN_SET('primary', flags) AND pid = 41291;
+
+-- Fixes erroneous data
+UPDATE  profile_education
+   SET  entry_year = 1951, grad_year = 1954
+ WHERE  FIND_IN_SET('primary', flags) AND pid = 29674;
+UPDATE  profile_display
+   SET  promo = 'X1951'
+ WHERE  pid = 29674;
+
+-- Inserts missing couple (education, degree) required by AX data.
+INSERT IGNORE INTO  profile_education_degree (eduid, degreeid)
+            VALUES  (182, 2);
+
+-- vim:set syntax=mysql:;