Properly reorganises merge issues related scripts.
[platal.git] / upgrade / 1.0.1 / merge_issues.php
CommitLineData
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
5require_once 'connect.db.inc.php';
6require_once '../../classes/phone.php';
cee99643 7require_once '../../classes/address.php';
74e1e725
SJ
8
9$globals->debug = 0; // Do not store backtraces.
10
cee99643
SJ
11print "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();
25foreach ($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}
67printf("\r%u / %u", $done, $total);
68print "\n$deleted addresses deleted.\n\n";
69
70print "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;
79while ($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 91printf("\r%u / %u", $i, $total);
0444be72 92print "\nFormating done.\n\n";
74e1e725 93
cee99643 94print "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
107foreach ($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}
147printf("\r%u / %u", $done, $total);
ded51efe
SJ
148print "\n$deleted phones deleted.\n\n";
149
150print "That's all folks!\n";
74e1e725
SJ
151
152/* vim:set et sw=4 sts=4 ts=4: */
153?>