Adds script for phones and addresses formatting after the merge.
[platal.git] / upgrade / 1.0.1 / merge_issues.php
1 #!/usr/bin/php5
2 <?php
3 // WARNING: this script takes a few weeks to be executed completly, thus run it into a screen.
4
5 require_once 'connect.db.inc.php';
6 require_once '../../classes/phone.php';
7 require_once '../../classes/address.php';
8
9 $globals->debug = 0; // Do not store backtraces.
10
11 echo "Formats non formated phones.\n";
12 $it = XDB::rawIterator("SELECT search_tel AS search, display_tel AS display, comment, link_id,
13 tel_type AS type, link_type, tel_id AS id, pid, pub
14 FROM profile_phones
15 WHERE search_tel = '' OR search_tel IS NULL
16 ORDER BY pid, link_id, tel_id");
17 while ($phone = new Phone($it->next())) {
18 $phone->delete();
19 $phone->save();
20 }
21
22 echo "Deletes duplicated phones.\n";
23 $it = XDB::rawIterator("SELECT search_tel AS search, display_tel AS display, comment, link_id,
24 tel_type AS type, link_type, tel_id AS id, pid, pub
25 FROM profile_phones
26 WHERE link_type = 'user'
27 ORDER BY pid, tel_id");
28 $phones = array();
29 $duplicates = array();
30 $phone = new Phone($it->next());
31 $pid = $phone->pid();
32 $phones[] = $phone;
33 $count = 1;
34 while ($phone = new Phone($it->next())) {
35 if ($phone->pid() == $pid) {
36 $phone[] = $phone;
37 ++$count;
38 } else {
39 if ($count != 1) {
40 for ($i = 0; $i < $count; ++$i) {
41 for ($j = $i + 1; $j < $count; ++$j) {
42 if ($phones[$i]->search() == $phones[$j]->search()) {
43 $duplicates[$i] = true;
44 }
45 }
46 }
47 foreach ($duplicates as $key => $bool) {
48 unset($phones[$key]);
49 }
50 if (count($phones) != $count) {
51 Phone::deletePhones($pid, 'user');
52 $id = 0;
53 foreach ($phones as $phone) {
54 $phone->setId($id);
55 $phone->save();
56 ++$id;
57 }
58 XDB::execute('UPDATE profile_merge_issues
59 SET issues = REPLACE(issues, \'phone\', \'\')
60 WHERE pid = {?}', $pid);
61 }
62 unset($duplicates);
63 }
64 unset($phones);
65 $pid = $phone->pid();
66 $phones[] = $phone;
67 $count = 1;
68 }
69 }
70
71 echo "Tries to geocode addresses (due a bug in the previous release, all addresses must run once again).\n";
72 $it = XDB::rawIterator('SELECT *
73 FROM profile_addresses
74 ORDER BY pid, jobid, type, id');
75 $pid = 0;
76 $jobid = 0;
77 while ($address = $it->next()) {
78 $address->format(array(true, true));
79 $address->delete();
80 $address->save();
81 if (!($pid == $address->pid && $jobid == $address->jobid)) {
82 $pid = $address->pid;
83 $jobid = $address->jobid;
84 sleep(60);
85 }
86 }
87
88 echo "Deletes duplicated addresses.\n";
89 $it = XDB::rawIterator("SELECT *
90 FROM profile_addresses
91 WHERE type = 'home'
92 ORDER BY pid, id");
93 $addresses = array();
94 $duplicates = array();
95 $address = new Address($it->next());
96 $pid = $address->pid;
97 $addresses[] = $address;
98 $count = 1;
99 while ($address = new Address($it->next())) {
100 if ($address->pid == $pid) {
101 $address[] = $address;
102 ++$count;
103 } else {
104 if ($count != 1) {
105 for ($i = 0; $i < $count; ++$i) {
106 for ($j = $i + 1; $j < $count; ++$j) {
107 if ($addresses[$i]->text == $addresses[$j]->text) {
108 $duplicates[$i] = true;
109 }
110 }
111 }
112 foreach ($duplicates as $key => $bool) {
113 unset($addresses[$key]);
114 }
115 if (count($addresses) != $count) {
116 Address::deleteAddresses($pid, 'home');
117 $id = 0;
118 foreach ($addresses as $address) {
119 $address->setId($id);
120 $address->save();
121 ++$id;
122 }
123 XDB::execute('UPDATE profile_merge_issues
124 SET issues = REPLACE(issues, \'address\', \'\')
125 WHERE pid = {?}', $pid);
126 }
127 unset($duplicates);
128 }
129 unset($addresses);
130 $pid = $address->pid;
131 $addresses[] = $address;
132 $count = 1;
133 }
134 }
135
136 /* vim:set et sw=4 sts=4 ts=4: */
137 ?>