-
Notifications
You must be signed in to change notification settings - Fork 14
/
elkarte1.0_importer.php
171 lines (153 loc) · 4.05 KB
/
elkarte1.0_importer.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<?php
/**
* @name OpenImporter
* @copyright OpenImporter contributors
* @license BSD http://opensource.org/licenses/BSD-3-Clause
*
* @version 1.0 Alpha
*
* This file contains code based on:
*
* Simple Machines Forum (SMF)
* copyright: 2011 Simple Machines (http://www.simplemachines.org)
* license: BSD, See included LICENSE.TXT for terms and conditions.
*/
/**
* The class contains code that allows the Importer to obtain settings
* from the ElkArte installation.
*/
class elkarte1_0_importer extends Importers\SmfCommonSource
{
/**
* @var string
*/
public $attach_extension = 'elk';
/**
* @return string
*/
public function getName()
{
return 'ElkArte 1.0';
}
}
class elkarte1_0_importer_step1 extends Importers\SmfCommonSourceStep1
{
}
class elkarte1_0_importer_step2 extends Importers\SmfCommonSourceStep2
{
/**
* Repair any wrong number of personal messages
*/
public function substep0()
{
$to_prefix = $this->config->to_prefix;
// Get all members with wrong number of personal messages and fix it
$request = $this->db->query("
SELECT
mem.id_member, COUNT(pmr.id_pm) AS real_num, mem.personal_messages
FROM {$to_prefix}members AS mem
LEFT JOIN {$to_prefix}pm_recipients AS pmr ON (mem.id_member = pmr.id_member AND pmr.deleted = 0)
GROUP BY mem.id_member
HAVING real_num != personal_messages");
while ($row = $this->db->fetch_assoc($request))
{
$this->db->query("
UPDATE {$to_prefix}members
SET personal_messages = $row[real_num]
WHERE id_member = $row[id_member]
LIMIT 1");
pastTime(0);
}
$this->db->free_result($request);
$request = $this->db->query("
SELECT
mem.id_member, COUNT(pmr.id_pm) AS real_num, mem.unread_messages
FROM {$to_prefix}members AS mem
LEFT JOIN {$to_prefix}pm_recipients AS pmr ON (mem.id_member = pmr.id_member AND pmr.deleted = 0 AND pmr.is_read = 0)
GROUP BY mem.id_member
HAVING real_num != unread_messages");
while ($row = $this->db->fetch_assoc($request))
{
$this->db->query("
UPDATE {$to_prefix}members
SET unread_messages = $row[real_num]
WHERE id_member = $row[id_member]
LIMIT 1");
pastTime(0);
}
$this->db->free_result($request);
}
/**
* Count the topic likes based on first message id
*/
public function substep100()
{
$to_prefix = $this->config->to_prefix;
// Set the number of topic likes based on likes to the first message in the topic
$request = $this->db->query("
SELECT
COUNT(*) AS count, t.id_topic
FROM {$to_prefix}message_likes AS ml
INNER JOIN {$to_prefix}topics AS t ON (t.id_first_msg = ml.id_msg)
GROUP BY t.id_topic");
while ($row = $this->db->fetch_assoc($request))
{
$this->db->query("
UPDATE {$to_prefix}topics
SET num_likes = $row[count]
WHERE id_topic = $row[id_topic]
LIMIT 1");
pastTime(0);
}
$this->db->free_result($request);
}
/**
* Validate / Update member likes received
*/
public function substep101()
{
$to_prefix = $this->config->to_prefix;
// Update the likes each member has received based on liked messages
$request = $this->db->query("
SELECT
COUNT(*) AS count, id_poster
FROM {$to_prefix}message_likes
GROUP BY id_poster");
while ($row = $this->db->fetch_assoc($request))
{
$this->db->query("
UPDATE {$to_prefix}members
SET likes_received = $row[count]
WHERE id_member = $row[id_poster]
LIMIT 1");
pastTime(0);
}
$this->db->free_result($request);
}
/**
* Validate / Update likes given by a member
*/
public function substep102()
{
$to_prefix = $this->config->to_prefix;
// Update the likes each member has given
$request = $this->db->query("
SELECT
COUNT(*) AS count, id_member
FROM {$to_prefix}message_likes
GROUP BY id_member");
while ($row = $this->db->fetch_assoc($request))
{
$this->db->query("
UPDATE {$to_prefix}members
SET likes_given = $row[count]
WHERE id_member = $row[id_member]
LIMIT 1");
pastTime(0);
}
$this->db->free_result($request);
}
}
class elkarte1_0_importer_step3 extends Importers\SmfCommonSourceStep3
{
}