Retrieves ax last modification date if more recent than ours.
[platal.git] / upgrade / 1.0.1 / merge.php
CommitLineData
6b9e0135
SJ
1#!/usr/bin/php5
2<?php
3require_once 'connect.db.inc.php';
6b9e0135
SJ
4
5$globals->debug = 0; // Do not store backtraces.
f8c2bf68 6XDB::startTransaction();
6b9e0135 7
f8c2bf68 8// Drops temporary tables and views used to checked if the merge was possible.
6b9e0135
SJ
9XDB::rawExecute('DROP VIEW IF EXISTS fusionax_xorg_anciens');
10XDB::rawExecute('DROP VIEW IF EXISTS fusionax_deceased');
11XDB::rawExecute('DROP VIEW IF EXISTS fusionax_promo');
12XDB::rawExecute('DROP TABLE IF EXISTS fusionax_import');
13
a48b23c3
SJ
14// Fills pid fields in all table, to avoid to many joins.
15foreach (array('fusionax_activites', 'fusionax_adresses', 'fusionax_anciens', 'fusionax_formations') as $table) {
16 XDB::rawExecute("UPDATE $table AS f
17 INNER JOIN profiles AS p ON (f.ax_id = p.ax_id)
18 SET f.pid = p.pid");
19 XDB::rawExecute("DELETE FROM $table WHERE pid IS NULL");
20}
21
723d4c6b
SJ
22echo "Update timestamp.\n";
23XDB::rawExecute("UPDATE profiles AS p
24 SET p.last_change = GREATEST(COALESCE((SELECT MAX(Date_maj) FROM fusionax_anciens AS f WHERE f.pid = p.pid), '0000-00-00'),
25 COALESCE((SELECT MAX(Date_maj) FROM fusionax_activites AS f WHERE f.pid = p.pid), '0000-00-00'),
26 COALESCE((SELECT MAX(Date_maj) FROM fusionax_adresses AS f WHERE f.pid = p.pid), '0000-00-00'),
27 COALESCE((SELECT MAX(Date_maj) FROM fusionax_formations AS f WHERE f.pid = p.pid), '0000-00-00'),
28 COALESCE(p.last_change, '0000-00-00'))");
29
f8c2bf68
SJ
30// Includes entreprises we do not have into profile_job_enum.
31// We first retrieve AX code, then add missing compagnies.
32echo "Starts jobs inclusions.\n";
a48b23c3
SJ
33XDB::rawExecute('ALTER TABLE profile_job_enum ADD INDEX (name(20))');
34XDB::rawExecute('ALTER TABLE profile_job_enum ADD INDEX (acronym(20))');
35XDB::rawExecute('ALTER TABLE profile_job_enum ADD INDEX (AX_code)');
f8c2bf68
SJ
36XDB::rawExecute("UPDATE profile_job_enum, fusionax_entreprises
37 SET profile_job_enum.AX_code = fusionax_entreprises.Code_etab
38 WHERE (profile_job_enum.name = fusionax_entreprises.Raison_sociale AND profile_job_enum.name != '' AND fusionax_entreprises.Raison_sociale != '')
39 OR (profile_job_enum.name = fusionax_entreprises.Sigle AND profile_job_enum.name != '' AND fusionax_entreprises.Sigle != '')
40 OR (profile_job_enum.acronym = fusionax_entreprises.Sigle AND profile_job_enum.acronym != '' AND fusionax_entreprises.Sigle != '')
41 OR (profile_job_enum.acronym = fusionax_entreprises.Raison_sociale AND profile_job_enum.acronym != '' AND fusionax_entreprises.Raison_sociale != '')");
42XDB::rawExecute("INSERT IGNORE INTO profile_job_enum (name, acronym, AX_code)
43 SELECT f.Raison_sociale, f.Sigle, f.Code_etab
44 FROM fusionax_entreprises AS f
45 WHERE f.Raison_sociale != ''
46 AND NOT EXISTS (SELECT *
47 FROM profile_job_enum AS j
48 WHERE f.Code_etab = j.AX_code)");
6b9e0135 49
f8c2bf68
SJ
50// Includes jobs we do not have into profile_job_enum.
51// There are 3 cases:
52// - the job is incomplete (ie no compagny name) : this is an issue,
53// - the job is complete but the profile already has a job or more : this is an issue,
54// - the job is complete and the the profile has no previous job : there is no issue.
a48b23c3 55// We delete obvious duplicates and avoid multiple joins.
f8c2bf68
SJ
56XDB::rawExecute("DELETE f
57 FROM fusionax_activites AS f
f8c2bf68 58 INNER JOIN profile_job_enum AS pe ON (pe.AX_code = f.Code_etab)
a48b23c3
SJ
59 INNER JOIN profile_job AS pj ON (f.pid = pj.pid AND pj.jobid = pe.id)");
60foreach (array('fusionax_activites', 'fusionax_adresses') as $table) {
61 XDB::rawExecute("UPDATE $table AS f
62 INNER JOIN profile_job_enum AS pe ON (f.Code_etab = pe.AX_code)
63 SET f.jobid = pe.id");
64}
65XDB::rawExecute('ALTER TABLE profile_job_enum DROP INDEX name');
66XDB::rawExecute('ALTER TABLE profile_job_enum DROP INDEX acronym');
67XDB::rawExecute('ALTER TABLE profile_job_enum DROP INDEX AX_code');
68XDB::rawExecute('DROP TABLE IF EXISTS fusionax_entreprises');
f8c2bf68
SJ
69
70// We first update the issues table.
f27cbbb3
SJ
71XDB::rawExecute("INSERT IGNORE INTO profile_merge_issues (pid, issues)
72 SELECT DISTINCT(f.pid), 'job'
73 FROM fusionax_activites AS f
74 WHERE f.jobid IS NULL OR EXISTS (SELECT *
75 FROM profile_job AS pj
76 WHERE pj.pid = f.pid)");
a48b23c3 77// We then add new jobs.
f8c2bf68
SJ
78$id = 0;
79$continue = 1;
80while ($continue > 0) {
81 XDB::rawExecute("INSERT IGNORE INTO profile_job (id, pid, jobid, pub, description)
a48b23c3
SJ
82 SELECT $id, pid, jobid, IF(Annuaire = 1, 'ax', 'private'), description
83 FROM fusionax_activites");
f8c2bf68 84 XDB::rawExecute("DELETE f
a48b23c3 85 FROM fusionax_activites AS f
f27cbbb3
SJ
86 INNER JOIN profile_job AS pj ON (f.pid = pj.pid AND pj.id = $id AND pj.description = f.description)
87 WHERE pj.jobid = f.jobid OR (pj.jobid IS NULL AND f.jobid IS NULL)");
f8c2bf68 88 $continue = XDB::affectedRows();
247b7728 89 ++$id;
6b9e0135 90}
a48b23c3 91XDB::rawExecute('DROP TABLE IF EXISTS fusionax_activites');
f8c2bf68
SJ
92// We also have to add related phones and addresses.
93XDB::rawExecute("INSERT IGNORE INTO profile_addresses (type, pid, id, text)
a48b23c3 94 SELECT 'job', f.pid, pj.id, f.text
f8c2bf68 95 FROM fusionax_adresses AS f
a48b23c3 96 INNER JOIN profile_job AS pj ON (f.pid = pj.pid AND pj.jobid = f.jobid)
f8c2bf68
SJ
97 WHERE f.Type_adr = 'E' AND f.text IS NOT NULL");
98XDB::rawExecute("INSERT IGNORE INTO profile_phones (link_type, link_id, tel_id, tel_type, pid, display_tel)
a48b23c3 99 SELECT 'pro', pj.id, 0, 'fixed', f.pid, f.tel
f8c2bf68 100 FROM fusionax_adresses AS f
a48b23c3 101 INNER JOIN profile_job AS pj ON (f.pid = pj.pid AND pj.jobid = f.jobid)
f8c2bf68
SJ
102 WHERE f.Type_adr = 'E' AND f.tel != ''");
103XDB::rawExecute("INSERT IGNORE INTO profile_phones (link_type, link_id, tel_id, tel_type, pid, display_tel)
a48b23c3 104 SELECT 'pro', pj.id, IF(f.tel = '', 0, 1), 'fax', f.pid, f.fax
f8c2bf68 105 FROM fusionax_adresses AS f
a48b23c3 106 INNER JOIN profile_job AS pj ON (f.pid = pj.pid AND pj.jobid = f.jobid)
f8c2bf68 107 WHERE f.Type_adr = 'E' AND f.fax != ''");
a48b23c3 108XDB::rawExecute("DELETE FROM fusionax_adresses WHERE Type_adr = 'E'");
f8c2bf68 109echo "Jobs inclusions finished.\n";
6b9e0135 110
f8c2bf68
SJ
111// Retrieves information from fusionax_anciens: promo, nationality, corps, email, phone, deathdate.
112// Updates uncertain promotions, but when we are we are right.
113echo "Starts various informations inclusions.\n";
a48b23c3 114XDB::rawExecute("UPDATE profile_merge_issues AS pm, fusionax_anciens AS f, profile_display AS pd, profile_education AS pe
f8c2bf68 115 SET pm.issues = IF(pm.issues, CONCAT(pm.issues, ',', 'promo'), 'promo'), pm.entry_year_ax = f.promotion_etude
a48b23c3
SJ
116 WHERE pm.pid = f.pid AND f.pid NOT IN (18399,21099,40616)
117 AND pd.pid = f.pid AND pe.pid = f.pid AND FIND_IN_SET('primary', pe.flags)
f8c2bf68
SJ
118 AND pd.promo != CONCAT('X', f.promotion_etude)
119 AND !(f.promotion_etude = pe.entry_year + 1 AND pe.grad_year = pe.entry_year + 4)");
a48b23c3 120
f8c2bf68 121XDB::rawExecute("INSERT IGNORE INTO profile_merge_issues (pid, issues, entry_year_ax)
a48b23c3
SJ
122 SELECT f.pid, 'promo', f.promotion_etude
123 FROM fusionax_anciens AS f
124 INNER JOIN profile_display AS pd ON (f.pid = pd.pid)
125 INNER JOIN profile_education AS pe ON (f.pid = pe.pid)
126 WHERE pd.promo != CONCAT('X', f.promotion_etude) AND f.pid NOT IN (18399,21099,40616)
f8c2bf68 127 AND !(f.promotion_etude = pe.entry_year + 1 AND pe.grad_year = pe.entry_year + 4)");
6b9e0135 128
f8c2bf68
SJ
129// Updates nationality.
130XDB::rawExecute('ALTER TABLE geoloc_countries ADD INDEX (licensePlate)');
6b9e0135 131XDB::rawExecute('UPDATE profiles AS p
a48b23c3 132 INNER JOIN fusionax_anciens AS f ON (p.pid = f.pid)
d187b7cc 133 INNER JOIN geoloc_countries AS g ON (g.licensePlate = f.Code_nationalite AND g.nationalityFR IS NOT NULL)
f8c2bf68
SJ
134 SET p.nationality1 = g.iso_3166_1_a2
135 WHERE p.nationality1 IS NULL');
6b9e0135 136XDB::rawExecute('UPDATE profiles AS p
a48b23c3 137 INNER JOIN fusionax_anciens AS f ON (p.pid = f.pid)
d187b7cc 138 INNER JOIN geoloc_countries AS g ON (g.licensePlate = f.Code_nationalite AND g.nationalityFR IS NOT NULL)
f8c2bf68
SJ
139 SET p.nationality2 = g.iso_3166_1_a2
140 WHERE p.nationality1 != g.iso_3166_1_a2 AND p.nationality2 IS NULL');
6b9e0135 141XDB::rawExecute('UPDATE profiles AS p
a48b23c3 142 INNER JOIN fusionax_anciens AS f ON (p.pid = f.pid)
d187b7cc 143 INNER JOIN geoloc_countries AS g ON (g.licensePlate = f.Code_nationalite AND g.nationalityFR IS NOT NULL)
f8c2bf68
SJ
144 SET p.nationality3 = g.iso_3166_1_a2
145 WHERE p.nationality1 != g.iso_3166_1_a2 AND p.nationality2 != g.iso_3166_1_a2 AND p.nationality3 IS NULL');
146XDB::rawExecute('ALTER TABLE geoloc_countries DROP INDEX licensePlate');
6b9e0135 147
f8c2bf68 148// Updates corps.
723d4c6b
SJ
149XDB::rawExecute('UPDATE profile_corps AS pc
150 INNER JOIN fusionax_anciens AS f ON (f.pid = pc.pid)
151 INNER JOIN profile_corps_enum AS c ON (f.corps_sortie = c.abbreviation)
152 SET pc.original_corpsid = c.id');
f8c2bf68 153XDB::rawExecute("INSERT IGNORE INTO profile_corps (pid, original_corpsid, current_corpsid, rankid, corps_pub)
a48b23c3
SJ
154 SELECT f.pid, c.id, c.id, r.id, 'ax'
155 FROM fusionax_anciens AS f
f8c2bf68
SJ
156 INNER JOIN profile_corps_enum AS c ON (f.corps_sortie = c.abbreviation)
157 INNER JOIN profile_corps_rank_enum AS r ON (f.grade = r.abbreviation)
158 WHERE NOT EXISTS (SELECT *
159 FROM profile_corps AS pc
a48b23c3 160 WHERE f.pid = pc.pid AND pc.original_corpsid != 1)");
6b9e0135
SJ
161XDB::rawExecute("UPDATE profile_corps AS c
162 INNER JOIN profile_corps_enum AS e ON (c.original_corpsid = e.id)
163 LEFT JOIN profile_corps_enum AS a ON (a.name = 'Aucun (anc. démissionnaire)')
164 SET c.original_corpsid = a.id
165 WHERE e.name = 'Ancien élève étranger'");
166XDB::rawExecute("UPDATE profile_corps_enum
167 SET name = 'Aucun'
168 WHERE name = 'Aucun (anc. démissionnaire)'");
169XDB::rawExecute("DELETE FROM profile_corps_enum
170 WHERE name = 'Ancien élève étranger'");
171
f8c2bf68
SJ
172// Updates email_directory.
173XDB::rawExecute("UPDATE profiles AS p
a48b23c3 174 INNER JOIN fusionax_anciens AS f ON (p.pid = f.pid)
f8c2bf68 175 SET p.email_directory = f.Mel_usage
a48b23c3 176 WHERE f.Mel_publiable = 1 AND f.Mel_usage != '' AND p.email_directory IS NULL");
6b9e0135
SJ
177XDB::rawExecute("INSERT IGNORE INTO register_marketing (uid, email, type)
178 SELECT ap.uid, f.Mel_usage, 'ax'
179 FROM fusionax_anciens AS f
a48b23c3 180 INNER JOIN account_profiles AS ap ON (ap.pid = f.pid AND FIND_IN_SET('owner', perms))
6b9e0135
SJ
181 LEFT JOIN emails AS e ON (e.uid = ap.uid AND e.flags = 'active')
182 WHERE f.Mel_usage != '' AND f.Mel_usage NOT LIKE '%@polytechnique.edu'
183 AND f.Mel_usage NOT LIKE '%@polytechnique.org' AND f.Mel_usage NOT LIKE '%@m4x.org'
184 AND f.Mel_usage NOT LIKE '%@melix.%' AND e.email IS NULL");
185
f8c2bf68
SJ
186// Retrieves different deathdates.
187XDB::rawExecute("UPDATE profile_merge_issues AS pm
188 INNER JOIN profiles AS p ON (pm.pid = p.pid)
a48b23c3 189 INNER JOIN fusionax_anciens AS f ON (f.pid = p.pid)
f8c2bf68 190 SET pm.issues = IF(pm.issues, CONCAT(pm.issues, ',', 'deathdate'), 'deathdate'), pm.deathdate_ax = f.Date_deces
6b9e0135 191 WHERE p.deathdate != f.Date_deces");
f8c2bf68 192XDB::rawExecute("INSERT IGNORE INTO profile_merge_issues (pid, issues, deathdate_ax)
a48b23c3 193 SELECT f.pid, 'deathdate', f.Date_deces
f8c2bf68 194 FROM fusionax_anciens AS f
a48b23c3 195 INNER JOIN profiles AS p ON (f.pid = p.pid)
f8c2bf68
SJ
196 WHERE p.deathdate != f.Date_deces");
197echo "Various informations inclusions finished.\n";
198
199// Updates phone.
200// We consider there is conflict if a profile has a phone in both databases.
201echo "Starts phones inclusions.\n";
202XDB::rawExecute("UPDATE profile_merge_issues AS pm
a48b23c3
SJ
203 INNER JOIN fusionax_anciens AS f ON (f.pid = pm.pid)
204 INNER JOIN profile_phones AS pp ON (pp.pid = f.pid AND pp.link_type = 'user' AND pp.tel_id = 0)
f8c2bf68
SJ
205 SET pm.issues = IF(pm.issues, CONCAT(pm.issues, ',', 'phone'), 'phone')
206 WHERE f.tel_mobile != ''");
207XDB::rawExecute("INSERT IGNORE INTO profile_merge_issues (pid, issues)
a48b23c3 208 SELECT f.pid, 'phone'
f8c2bf68 209 FROM fusionax_anciens AS f
a48b23c3
SJ
210 INNER JOIN profile_phones AS pp ON (pp.pid = f.pid AND pp.link_type = 'user' AND pp.tel_id = 0)
211 WHERE f.tel_mobile != '' AND f.Mob_publiable = 1");
f8c2bf68
SJ
212
213XDB::rawExecute("INSERT INTO profile_phones (pid, link_type, tel_id, tel_type, display_tel, pub)
a48b23c3 214 SELECT f.pid, 'user', 0, 'mobile', f.tel_mobile, 'ax'
f8c2bf68 215 FROM fusionax_anciens AS f
f8c2bf68
SJ
216 WHERE NOT EXISTS (SELECT *
217 FROM profile_phones AS pp
a48b23c3
SJ
218 WHERE pp.pid = f.pid AND pp.link_type = 'user' AND pp.tel_id = 0)
219 AND f.tel_mobile != '' AND f.Mob_publiable = 1");
f8c2bf68 220XDB::rawExecute("INSERT INTO profile_phones (pid, link_type, tel_id, tel_type, display_tel, pub)
a48b23c3 221 SELECT f.pid, 'user', MAX(pp.tel_id) + 1, 'mobile', f.tel_mobile, 'ax'
f8c2bf68 222 FROM fusionax_anciens AS f
a48b23c3
SJ
223 INNER JOIN profile_phones AS pp ON (pp.pid = f.pid AND pp.link_type = 'user')
224 WHERE f.tel_mobile != '' AND f.Mob_publiable = 1
225 GROUP BY f.pid");
6b9e0135 226XDB::rawExecute('DROP TABLE IF EXISTS fusionax_anciens');
f8c2bf68 227echo "Phones inclusions finished.\n";
6b9e0135 228
f8c2bf68
SJ
229// Retrieves addresses from AX database (one address per preofile maximum).
230echo "Starts addresses inclusions.\n";
231XDB::rawExecute('ALTER TABLE profile_addresses ADD INDEX (text(20))');
232XDB::rawExecute("DELETE f
233 FROM fusionax_adresses AS f
a48b23c3 234 INNER JOIN profile_addresses AS pa ON (pa.pid = f.pid AND pa.type = 'home')
f8c2bf68 235 WHERE pa.text = f.text");
325af12b
SJ
236// Deletes addresses of unknown type.
237XDB::rawExecute("DELETE FROM fusionax_adresses
238 WHERE Type_adr != 'E' AND Type_adr != 'P'");
239
f8c2bf68 240XDB::rawExecute("UPDATE profile_merge_issues AS pm
a48b23c3
SJ
241 INNER JOIN fusionax_adresses AS f ON (f.pid = pm.pid)
242 INNER JOIN profile_addresses AS pa ON (pa.pid = f.pid AND pa.type = 'home' AND pa.id = 0)
f8c2bf68
SJ
243 SET pm.issues = IF(pm.issues, CONCAT(pm.issues, ',', 'address'), 'address')
244 WHERE f.text IS NOT NULL");
245XDB::rawExecute("INSERT IGNORE INTO profile_merge_issues (pid, issues)
a48b23c3 246 SELECT f.pid, 'address'
f8c2bf68 247 FROM fusionax_adresses AS f
a48b23c3 248 INNER JOIN profile_addresses AS pa ON (pa.pid = f.pid AND pa.type = 'home' AND pa.id = 0)
f8c2bf68
SJ
249 WHERE f.text IS NOT NULL");
250
251XDB::rawExecute("INSERT INTO profile_addresses (pid, type, id, pub, text)
a48b23c3 252 SELECT f.pid, 'home', IF(pa.id IS NULL , 0, MAX(pa.id) + 1), 'ax', f.text
f8c2bf68 253 FROM fusionax_adresses AS f
a48b23c3 254 LEFT JOIN profile_addresses AS pa ON (pa.pid = f.pid AND pa.type = 'home')
f8c2bf68 255 WHERE f.text IS NOT NULL
a48b23c3 256 GROUP BY f.pid");
f8c2bf68 257XDB::rawExecute("INSERT INTO profile_phones (pid, link_type, tel_id, tel_type, display_tel, pub, link_id)
a48b23c3 258 SELECT f.pid, 'address', IF(pp.tel_id IS NULL, 0, MAX(pp.tel_id) + 1), 'fixed', f.tel, 'ax', pa.id
f8c2bf68 259 FROM fusionax_adresses AS f
a48b23c3
SJ
260 INNER JOIN profile_addresses AS pa ON (pa.pid = f.pid AND pa.type = 'home' AND f.text = pa.text)
261 LEFT JOIN profile_phones AS pp ON (pp.pid = f.pid AND pp.link_type = 'address' AND pp.link_id = pa.id)
325af12b 262 WHERE f.tel != ''
a48b23c3 263 GROUP BY f.pid");
f8c2bf68 264XDB::rawExecute("INSERT INTO profile_phones (pid, link_type, tel_id, tel_type, display_tel, pub, link_id)
a48b23c3 265 SELECT f.pid, 'address', IF(pp.tel_id IS NULL, 0, MAX(pp.tel_id) + 1), 'fax', f.fax, 'ax', pa.id
f8c2bf68 266 FROM fusionax_adresses AS f
a48b23c3
SJ
267 INNER JOIN profile_addresses AS pa ON (pa.pid = f.pid AND pa.type = 'home' AND f.text = pa.text)
268 LEFT JOIN profile_phones AS pp ON (pp.pid = f.pid AND pp.link_type = 'address' AND pp.link_id = pa.id)
325af12b 269 WHERE f.fax != ''
a48b23c3 270 GROUP BY f.pid");
f8c2bf68 271XDB::rawExecute('ALTER TABLE profile_addresses DROP INDEX text');
6b9e0135 272XDB::rawExecute('DROP TABLE IF EXISTS fusionax_adresses');
f8c2bf68 273echo "Addresses inclusions finished.\n";
6b9e0135 274
f8c2bf68
SJ
275// Retrieves education from AX database. This is the hardest part since AX only kept education as an unformated string.
276echo "Starts educations inclusions.\n";
323813b3
SJ
277// Deletes empty educations.
278XDB::rawExecute("DELETE FROM fusionax_formations
279 WHERE Intitule_formation = '' AND Intitule_diplome = '' AND Descr_formation = ''");
325af12b 280// Insert ids into fusionax_formations to prevent many joins.
1dd21852
SJ
281XDB::rawExecute('ALTER TABLE profile_education_enum ADD INDEX (name(60))');
282XDB::rawExecute('ALTER TABLE profile_education_degree_enum ADD INDEX (abbreviation(60))');
325af12b
SJ
283XDB::rawExecute('UPDATE fusionax_formations AS f
284 LEFT JOIN profile_education_enum AS pe ON (pe.name = f.Intitule_formation)
285 LEFT JOIN profile_education_degree_enum AS pd ON (pd.abbreviation = f.Intitule_diplome)
286 LEFT JOIN profile_education_field_enum AS pf ON (pf.field = f.Descr_formation)
287 SET f.eduid = pe.id, f.degreeid = pd.id, f.fieldid = pf.id');
1dd21852
SJ
288XDB::rawExecute('ALTER TABLE profile_education_enum DROP INDEX name');
289XDB::rawExecute('ALTER TABLE profile_education_degree_enum DROP INDEX abbreviation');
325af12b
SJ
290// Updates non complete educations.
291XDB::rawExecute("UPDATE profile_education AS e
a48b23c3 292 INNER JOIN fusionax_formations AS f ON (f.pid = e.pid)
325af12b
SJ
293 INNER JOIN profile_education_degree_enum AS pd ON (e.degreeid = pd.id)
294 INNER JOIN profile_education_degree_enum AS fd ON (f.degreeid = fd.id)
295 SET e.eduid = f.eduid
296 WHERE NOT FIND_IN_SET('primary', e.flags) AND e.eduid IS NULL AND pd.level = fd.level");
297XDB::rawExecute("UPDATE profile_education AS e
a48b23c3 298 INNER JOIN fusionax_formations AS f ON (f.pid = e.pid)
325af12b
SJ
299 SET e.degreeid = f.degreeid
300 WHERE NOT FIND_IN_SET('primary', e.flags) AND e.degreeid IS NULL AND e.eduid = f.eduid");
301// Deletes duplicates.
302XDB::rawExecute("DELETE f
303 FROM fusionax_formations AS f
325af12b 304 INNER JOIN profile_education_degree_enum AS fd ON (fd.abbreviation = f.Intitule_diplome)
a48b23c3 305 INNER JOIN profile_education AS e ON (e.pid = f.pid AND NOT FIND_IN_SET('primary', e.flags))
325af12b
SJ
306 INNER JOIN profile_education_degree_enum AS pd ON (pd.id = e.degreeid)
307 WHERE f.eduid = e.eduid AND fd.level = pd.level");
308// Updates merge_issues table.
309XDB::rawExecute("UPDATE profile_merge_issues AS pm
a48b23c3 310 INNER JOIN fusionax_formations AS f ON (f.pid = pm.pid)
325af12b
SJ
311 SET pm.issues = IF(pm.issues, CONCAT(pm.issues, ',', 'education'), 'education')");
312XDB::rawExecute("INSERT IGNORE INTO profile_merge_issues (pid, issues)
a48b23c3
SJ
313 SELECT pid, 'education'
314 FROM fusionax_formations");
325af12b
SJ
315
316$id = 0;
317$continue = 1;
318while ($continue > 0) {
319 XDB::rawExecute("INSERT IGNORE INTO profile_education (id, pid, eduid, degreeid, fieldid, program)
a48b23c3
SJ
320 SELECT $id, pid, eduid, degreeid, fieldid, Descr_formation
321 FROM fusionax_formations");
325af12b
SJ
322 XDB::rawExecute("DELETE f
323 FROM fusionax_formations AS f
1dd21852
SJ
324 INNER JOIN profile_education AS pe ON (pe.pid = f.pid AND pe.id = $id)
325 WHERE (pe.eduid = f.eduid OR (pe.eduid IS NULL AND f.eduid IS NULL))
326 AND (pe.degreeid = f.degreeid OR (pe.degreeid IS NULL AND f.degreeid IS NULL))
327 AND (pe.fieldid = f.fieldid OR (pe.fieldid IS NULL AND f.fieldid IS NULL))
328 AND (pe.program = f.Descr_formation OR (pe.program IS NULL AND f.Descr_formation IS NULL))");
325af12b 329 $continue = XDB::affectedRows();
247b7728 330 ++$id;
6b9e0135 331}
325af12b
SJ
332// Updates merge_issues table (eduid and degreeid should never be empty).
333XDB::rawExecute("UPDATE profile_merge_issues AS pm
334 INNER JOIN profile_education AS pe ON (pe.pid = pm.pid)
335 SET pm.issues = CONCAT(pm.issues, ',', 'education')
336 WHERE NOT FIND_IN_SET('education', pm.issues) AND (pe.eduid = '' OR pe.eduid IS NULL OR pe.degreeid = '' OR pe.degreeid IS NULL)");
337XDB::rawExecute("INSERT IGNORE INTO profile_merge_issues (pid, issues)
338 SELECT pid, 'education'
339 FROM profile_education
340 WHERE eduid = '' OR eduid IS NULL OR degreeid = '' OR degreeid IS NULL");
341
6b9e0135 342XDB::rawExecute('DROP TABLE IF EXISTS fusionax_formations');
f8c2bf68
SJ
343echo "Educations inclusions finished.\n";
344
345echo "All inclusions are done.\n";
346
347XDB::commit();
6b9e0135
SJ
348
349/* vim:set et sw=4 sts=4 ts=4: */
350?>