Commit | Line | Data |
---|---|---|
74e1e725 SJ |
1 | #!/usr/bin/php5 |
2 | <?php | |
0444be72 | 3 | // WARNING: this script takes a few minutes to be executed completly, thus run it into a screen. |
74e1e725 SJ |
4 | |
5 | require_once 'connect.db.inc.php'; | |
6 | require_once '../../classes/phone.php'; | |
cee99643 | 7 | require_once '../../classes/address.php'; |
74e1e725 SJ |
8 | |
9 | $globals->debug = 0; // Do not store backtraces. | |
10 | ||
cee99643 SJ |
11 | print "Deletes duplicated addresses. (1/3)\n"; |
12 | $pids = XDB::rawFetchColumn("SELECT DISTINCT(pid) | |
13 | FROM profile_addresses AS a1 | |
14 | WHERE type = 'home' AND EXISTS (SELECT * | |
15 | FROM profile_addresses AS a2 | |
16 | WHERE a2.type = 'home' AND a2.pid = a1.pid AND a2.id != a1.id) | |
17 | ORDER BY pid"); | |
18 | $total = count($pids); | |
19 | $done = 0; | |
20 | $aux = 0; | |
21 | $deleted = 0; | |
22 | $addresses = array(); | |
23 | $rawAddresses = array(); | |
24 | $duplicates = array(); | |
25 | foreach ($pids as $pid) { | |
26 | $count = 0; | |
27 | $it = Address::iterate(array($pid), array(Address::LINK_PROFILE), array(0)); | |
28 | while ($item = $it->next()) { | |
29 | $addresses[] = $item; | |
30 | $rawAddresses[] = preg_replace('/[^a-zA-Z0-9]/', '', replace_accent($item->text)); | |
31 | ++$count; | |
32 | } | |
33 | for ($i = 0; $i < $count; ++$i) { | |
34 | for ($j = $i + 1; $j < $count; ++$j) { | |
35 | if ($rawAddresses[$i] == $rawAddresses[$j]) { | |
36 | $duplicates[$i] = true; | |
37 | } | |
38 | } | |
39 | } | |
40 | foreach ($duplicates as $key => $bool) { | |
41 | unset($addresses[$key]); | |
42 | } | |
43 | if (count($addresses) != $count) { | |
44 | $deleted += ($count - count($addresses)); | |
45 | Address::deleteAddresses($pid, 'home'); | |
46 | $id = 0; | |
47 | foreach ($addresses as $address) { | |
48 | $address->setId($id); | |
49 | $address->save(); | |
50 | ++$id; | |
51 | } | |
52 | XDB::execute('UPDATE IGNORE profile_merge_issues | |
53 | SET issues = REPLACE(issues, \'address\', \'\') | |
54 | WHERE pid = {?}', $pid); | |
55 | } | |
56 | unset($rawAddresses); | |
57 | unset($addresses); | |
58 | unset($duplicates); | |
59 | ||
60 | ++$done; | |
61 | ++$aux; | |
62 | if ($aux == 100) { | |
63 | $aux = 0; | |
64 | printf("\r%u / %u", $done, $total); | |
65 | } | |
66 | } | |
67 | printf("\r%u / %u", $done, $total); | |
68 | print "\n$deleted addresses deleted.\n\n"; | |
69 | ||
70 | print "Formats non formated phones. (2/3)\n"; | |
74e1e725 SJ |
71 | $it = XDB::rawIterator("SELECT search_tel AS search, display_tel AS display, comment, link_id, |
72 | tel_type AS type, link_type, tel_id AS id, pid, pub | |
73 | FROM profile_phones | |
74 | WHERE search_tel = '' OR search_tel IS NULL | |
75 | ORDER BY pid, link_id, tel_id"); | |
0444be72 SJ |
76 | $total = $it->total(); |
77 | $i = 0; | |
78 | $j = 0; | |
79 | while ($item = $it->next()) { | |
80 | $phone = new Phone($item); | |
81 | $phone->delete(); | |
82 | $phone->save(); | |
83 | ||
84 | ++$i; | |
85 | ++$j; | |
86 | if ($j == 100) { | |
87 | $j = 0; | |
88 | printf("\r%u / %u", $i, $total); | |
89 | } | |
74e1e725 | 90 | } |
ded51efe | 91 | printf("\r%u / %u", $i, $total); |
0444be72 | 92 | print "\nFormating done.\n\n"; |
74e1e725 | 93 | |
cee99643 | 94 | print "Deletes duplicated phones. (3/3)\n"; |
0444be72 SJ |
95 | $pids = XDB::rawFetchColumn("SELECT DISTINCT(pid) |
96 | FROM profile_phones AS p1 | |
97 | WHERE link_type = 'user' AND EXISTS (SELECT * | |
98 | FROM profile_phones AS p2 | |
99 | WHERE p2.link_type = 'user' AND p2.pid = p1.pid AND p2.tel_id != p1.tel_id) | |
100 | ORDER BY pid"); | |
101 | $total = count($pids); | |
102 | $done = 0; | |
103 | $aux = 0; | |
ded51efe | 104 | $deleted = 0; |
74e1e725 SJ |
105 | $phones = array(); |
106 | $duplicates = array(); | |
0444be72 SJ |
107 | foreach ($pids as $pid) { |
108 | $count = 0; | |
ded51efe | 109 | Phone::iterate(array($pid), array(Phone::LINK_PROFILE), array(0)); |
0444be72 | 110 | while ($item = $it->next()) { |
ded51efe | 111 | $phones[] = $item; |
0444be72 SJ |
112 | ++$count; |
113 | } | |
114 | for ($i = 0; $i < $count; ++$i) { | |
74e1e725 | 115 | for ($j = $i + 1; $j < $count; ++$j) { |
0444be72 SJ |
116 | if ($phones[$i]->search() == $phones[$j]->search()) { |
117 | $duplicates[$i] = true; | |
118 | } | |
74e1e725 | 119 | } |
0444be72 SJ |
120 | } |
121 | foreach ($duplicates as $key => $bool) { | |
74e1e725 | 122 | unset($phones[$key]); |
0444be72 SJ |
123 | } |
124 | if (count($phones) != $count) { | |
ded51efe | 125 | $deleted += ($count - count($phones)); |
74e1e725 SJ |
126 | Phone::deletePhones($pid, 'user'); |
127 | $id = 0; | |
128 | foreach ($phones as $phone) { | |
0444be72 SJ |
129 | $phone->setId($id); |
130 | $phone->save(); | |
131 | ++$id; | |
74e1e725 | 132 | } |
0444be72 SJ |
133 | XDB::execute('UPDATE IGNORE profile_merge_issues |
134 | SET issues = REPLACE(issues, \'phone\', \'\') | |
135 | WHERE pid = {?}', $pid); | |
74e1e725 | 136 | } |
0444be72 | 137 | unset($duplicates); |
74e1e725 | 138 | unset($phones); |
74e1e725 | 139 | |
0444be72 SJ |
140 | ++$done; |
141 | ++$aux; | |
142 | if ($aux == 10) { | |
143 | $aux = 0; | |
144 | printf("\r%u / %u", $done, $total); | |
145 | } | |
146 | } | |
147 | printf("\r%u / %u", $done, $total); | |
ded51efe SJ |
148 | print "\n$deleted phones deleted.\n\n"; |
149 | ||
150 | print "That's all folks!\n"; | |
74e1e725 SJ |
151 | |
152 | /* vim:set et sw=4 sts=4 ts=4: */ | |
153 | ?> |