1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
declare(strict_types=1); |
4
|
|
|
|
5
|
|
|
/* For licensing terms, see /license.txt */ |
6
|
|
|
|
7
|
|
|
namespace Chamilo\CoreBundle\Migrations\Schema\V200; |
8
|
|
|
|
9
|
|
|
use Chamilo\CoreBundle\Migrations\AbstractMigrationChamilo; |
10
|
|
|
use Doctrine\DBAL\Schema\Schema; |
11
|
|
|
|
12
|
|
|
final class Version20200821224242 extends AbstractMigrationChamilo |
13
|
|
|
{ |
14
|
|
|
public function getDescription(): string |
15
|
|
|
{ |
16
|
|
|
return 'Messages'; |
17
|
|
|
} |
18
|
|
|
|
19
|
|
|
public function up(Schema $schema): void |
20
|
|
|
{ |
21
|
|
|
if ($schema->hasTable('message_feedback')) { |
22
|
|
|
$table = $schema->getTable('message_feedback'); |
23
|
|
|
if ($table->hasForeignKey('FK_DB0F8049537A1329')) { |
24
|
|
|
$this->addSql('ALTER TABLE message_feedback DROP FOREIGN KEY FK_DB0F8049537A1329'); |
25
|
|
|
} |
26
|
|
|
} |
27
|
|
|
|
28
|
|
|
$table = $schema->getTable('message'); |
29
|
|
|
$this->addSql('ALTER TABLE message CHANGE id id INT AUTO_INCREMENT NOT NULL, CHANGE parent_id parent_id INT DEFAULT NULL;'); |
30
|
|
|
|
31
|
|
|
if ($table->hasColumn('msg_status')) { |
32
|
|
|
$this->addSql('ALTER TABLE message CHANGE msg_status msg_type SMALLINT NOT NULL'); |
33
|
|
|
} |
34
|
|
|
|
35
|
|
|
if (!$table->hasColumn('status')) { |
36
|
|
|
$this->addSql('ALTER TABLE message ADD status SMALLINT NOT NULL'); |
37
|
|
|
} |
38
|
|
|
|
39
|
|
|
if ($table->hasIndex('idx_message_parent')) { |
40
|
|
|
$this->addSql('DROP INDEX idx_message_parent ON message'); |
41
|
|
|
} |
42
|
|
|
|
43
|
|
|
$this->addSql('UPDATE message SET parent_id = NULL WHERE parent_id = 0'); |
44
|
|
|
|
45
|
|
|
$sql = 'SELECT id, parent_id FROM message WHERE parent_id IS NOT NULL AND parent_id <> 0'; |
46
|
|
|
$result = $this->connection->executeQuery($sql); |
47
|
|
|
$items = $result->fetchAllAssociative(); |
48
|
|
|
|
49
|
|
|
foreach ($items as $item) { |
50
|
|
|
$id = $item['id']; |
51
|
|
|
$parentId = (int) $item['parent_id']; |
52
|
|
|
$sql = "SELECT id FROM message WHERE id = $parentId"; |
53
|
|
|
$result = $this->connection->executeQuery($sql); |
54
|
|
|
$subItem = $result->fetchAllAssociative(); |
55
|
|
|
|
56
|
|
|
if (empty($subItem)) { |
57
|
|
|
$sql = "DELETE FROM message WHERE id = $id"; |
58
|
|
|
$this->addSql($sql); |
59
|
|
|
} |
60
|
|
|
} |
61
|
|
|
|
62
|
|
|
// $this->addSql('DELETE FROM message WHERE parent_id IS NOT NULL AND parent_id NOT IN (SELECT id FROM message)'); |
63
|
|
|
|
64
|
|
|
$this->addSql('ALTER TABLE message CHANGE group_id group_id INT DEFAULT NULL'); |
65
|
|
|
$this->addSql('UPDATE message SET group_id = NULL WHERE group_id = 0'); |
66
|
|
|
|
67
|
|
|
// $this->addSql('DELETE FROM message WHERE parent_id IS NOT NULL AND parent_id in (select id FROM message WHERE user_sender_id NOT IN (SELECT id FROM user))'); |
68
|
|
|
// $this->addSql('DELETE FROM message WHERE parent_id IS NOT NULL AND parent_id in (select id FROM message WHERE user_receiver_id NOT IN (SELECT id FROM user))'); |
69
|
|
|
|
70
|
|
|
// Replace user_sender_id = 0 with the admin. |
71
|
|
|
$adminId = $this->getAdmin()->getId(); |
72
|
|
|
$this->addSql("UPDATE message SET user_sender_id = $adminId WHERE user_sender_id IS NOT NULL AND user_sender_id NOT IN (SELECT id FROM user) "); |
73
|
|
|
|
74
|
|
|
// $this->addSql('DELETE FROM message WHERE user_sender_id NOT IN (SELECT id FROM user)'); |
75
|
|
|
$this->addSql('DELETE FROM message WHERE user_receiver_id IS NOT NULL AND user_receiver_id NOT IN (SELECT id FROM user)'); |
76
|
|
|
|
77
|
|
|
if (!$table->hasForeignKey('FK_B6BD307FFE54D947')) { |
78
|
|
|
$this->addSql('ALTER TABLE message ADD CONSTRAINT FK_B6BD307FFE54D947 FOREIGN KEY (group_id) REFERENCES usergroup (id) ON DELETE CASCADE;'); |
79
|
|
|
} |
80
|
|
|
|
81
|
|
|
if (!$table->hasForeignKey('FK_B6BD307F727ACA70')) { |
82
|
|
|
$this->addSql('CREATE INDEX IDX_B6BD307F727ACA70 ON message (parent_id)'); |
83
|
|
|
$this->addSql( |
84
|
|
|
'ALTER TABLE message ADD CONSTRAINT FK_B6BD307F727ACA70 FOREIGN KEY (parent_id) REFERENCES message (id);' |
85
|
|
|
); |
86
|
|
|
} |
87
|
|
|
$this->addSql('DELETE FROM message WHERE user_sender_id IS NULL OR user_sender_id = 0'); |
88
|
|
|
|
89
|
|
|
if ($table->hasForeignKey('FK_B6BD307F64482423')) { |
90
|
|
|
$this->addSql('ALTER TABLE message DROP FOREIGN KEY FK_B6BD307F64482423'); |
91
|
|
|
} |
92
|
|
|
|
93
|
|
|
if (!$schema->hasTable('message_rel_user')) { |
94
|
|
|
$this->addSql( |
95
|
|
|
'CREATE TABLE message_rel_user (id INT AUTO_INCREMENT NOT NULL, message_id INT NOT NULL, user_id INT NOT NULL, msg_read TINYINT(1) NOT NULL, starred TINYINT(1) NOT NULL, receiver_type SMALLINT NOT NULL, INDEX IDX_325D70B9537A1329 (message_id), INDEX IDX_325D70B9A76ED395 (user_id), UNIQUE INDEX message_receiver (message_id, user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB ROW_FORMAT = DYNAMIC' |
96
|
|
|
); |
97
|
|
|
$this->addSql( |
98
|
|
|
'CREATE TABLE message_rel_user_rel_tags (message_rel_user_id INT NOT NULL, message_tag_id INT NOT NULL, INDEX IDX_B4B37A20962B5422 (message_rel_user_id), INDEX IDX_B4B37A208DF5FE1E (message_tag_id), PRIMARY KEY(message_rel_user_id, message_tag_id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB ROW_FORMAT = DYNAMIC' |
99
|
|
|
); |
100
|
|
|
$this->addSql( |
101
|
|
|
'ALTER TABLE message_rel_user ADD CONSTRAINT FK_325D70B9537A1329 FOREIGN KEY (message_id) REFERENCES message (id)' |
102
|
|
|
); |
103
|
|
|
$this->addSql( |
104
|
|
|
'ALTER TABLE message_rel_user ADD CONSTRAINT FK_325D70B9A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE' |
105
|
|
|
); |
106
|
|
|
$this->addSql( |
107
|
|
|
'ALTER TABLE message_rel_user_rel_tags ADD CONSTRAINT FK_B4B37A20962B5422 FOREIGN KEY (message_rel_user_id) REFERENCES message_rel_user (id) ON DELETE CASCADE' |
108
|
|
|
); |
109
|
|
|
} |
110
|
|
|
|
111
|
|
|
// $this->addSql('ALTER TABLE message CHANGE user_receiver_id user_receiver_id INT DEFAULT NULL'); |
112
|
|
|
$this->addSql('UPDATE message SET user_receiver_id = NULL WHERE user_receiver_id = 0'); |
113
|
|
|
|
114
|
|
|
/* |
115
|
|
|
* $result = $this->connection->executeQuery('SELECT * FROM message WHERE user_receiver_id IS NOT NULL'); |
116
|
|
|
* $messages = $result->fetchAllAssociative(); |
117
|
|
|
* if ($messages) { |
118
|
|
|
* foreach ($messages as $message) { |
119
|
|
|
* $messageId = $message['id']; |
120
|
|
|
* $receiverId = $message['user_receiver_id']; |
121
|
|
|
* $result = $this->connection->executeQuery(" SELECT * FROM message_rel_user WHERE message_id = $messageId AND user_id = $receiverId"); |
122
|
|
|
* $exists = $result->fetchAllAssociative(); |
123
|
|
|
* if (empty($exists)) { |
124
|
|
|
* $this->addSql("INSERT INTO message_rel_user (message_id, user_id, msg_read, starred) VALUES('$messageId', '$receiverId', 1, 0) "); |
125
|
|
|
* } |
126
|
|
|
* //$this->addSql("UPDATE message SET user_receiver_id = NULL WHERE id = $messageId"); |
127
|
|
|
* } |
128
|
|
|
* }*/ |
129
|
|
|
|
130
|
|
|
if (!$table->hasForeignKey('FK_B6BD307FF6C43E79')) { |
131
|
|
|
$this->addSql( |
132
|
|
|
'ALTER TABLE message ADD CONSTRAINT FK_B6BD307FF6C43E79 FOREIGN KEY (user_sender_id) REFERENCES user (id)' |
133
|
|
|
); |
134
|
|
|
} |
135
|
|
|
|
136
|
|
|
if ($table->hasIndex('idx_message_user_receiver_status')) { |
137
|
|
|
$this->addSql('DROP INDEX idx_message_user_receiver_status ON message'); |
138
|
|
|
} |
139
|
|
|
|
140
|
|
|
if ($table->hasIndex('idx_message_receiver_status_send_date')) { |
141
|
|
|
$this->addSql('DROP INDEX idx_message_receiver_status_send_date ON message'); |
142
|
|
|
} |
143
|
|
|
|
144
|
|
|
if ($table->hasIndex('idx_message_status')) { |
145
|
|
|
$this->addSql('DROP INDEX idx_message_status ON message'); |
146
|
|
|
} |
147
|
|
|
|
148
|
|
|
if ($table->hasIndex('idx_message_user_receiver_type')) { |
149
|
|
|
$this->addSql('DROP INDEX idx_message_user_receiver_type ON message'); |
150
|
|
|
} |
151
|
|
|
|
152
|
|
|
if ($table->hasIndex('idx_message_receiver_type_send_date')) { |
153
|
|
|
$this->addSql('DROP INDEX idx_message_receiver_type_send_date ON message'); |
154
|
|
|
} |
155
|
|
|
|
156
|
|
|
if ($table->hasIndex('idx_message_user_receiver')) { |
157
|
|
|
$this->addSql('DROP INDEX idx_message_user_receiver ON message'); |
158
|
|
|
} |
159
|
|
|
|
160
|
|
|
if ($table->hasIndex('idx_message_user_sender_user_receiver')) { |
161
|
|
|
$this->addSql('DROP INDEX idx_message_user_sender_user_receiver ON message'); |
162
|
|
|
} |
163
|
|
|
|
164
|
|
|
if (!$table->hasIndex('idx_message_type')) { |
165
|
|
|
$this->addSql('CREATE INDEX idx_message_type ON message (msg_type)'); |
166
|
|
|
} |
167
|
|
|
|
168
|
|
|
// $this->addSql('ALTER TABLE message CHANGE msg_status msg_status SMALLINT NOT NULL;'); |
169
|
|
|
|
170
|
|
|
$this->addSql("CREATE TABLE social_post (id INT AUTO_INCREMENT NOT NULL, sender_id INT NOT NULL, user_receiver_id INT DEFAULT NULL, group_receiver_id INT DEFAULT NULL, parent_id INT DEFAULT NULL, subject LONGTEXT DEFAULT NULL, content LONGTEXT NOT NULL, type SMALLINT NOT NULL, status SMALLINT NOT NULL, send_date DATETIME NOT NULL COMMENT '(DC2Type:datetime)', updated_at DATETIME NOT NULL COMMENT '(DC2Type:datetime)', INDEX IDX_159BBFE9727ACA70 (parent_id), INDEX idx_social_post_sender (sender_id), INDEX idx_social_post_user (user_receiver_id), INDEX idx_social_post_group (group_receiver_id), INDEX idx_social_post_type (type), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB ROW_FORMAT = DYNAMIC"); |
171
|
|
|
|
172
|
|
|
$sql = 'INSERT INTO social_post (id, sender_id, user_receiver_id, group_receiver_id, parent_id, subject, content, type, status, send_date, updated_at) |
173
|
|
|
SELECT DISTINCT m.id, |
174
|
|
|
m.user_sender_id, |
175
|
|
|
m.user_receiver_id, |
176
|
|
|
m.group_id, |
177
|
|
|
m.parent_id, |
178
|
|
|
m.title, |
179
|
|
|
m.content, |
180
|
|
|
CASE m.msg_type |
181
|
|
|
WHEN 8 THEN 2 |
182
|
|
|
WHEN 9 THEN 1 |
183
|
|
|
WHEN 10 THEN 1 |
184
|
|
|
WHEN 13 THEN 4 |
185
|
|
|
ELSE 1 |
186
|
|
|
END AS type, |
187
|
|
|
CASE m.msg_type |
188
|
|
|
WHEN 8 THEN 1 |
189
|
|
|
WHEN 10 THEN 1 |
190
|
|
|
WHEN 13 THEN 1 |
191
|
|
|
WHEN 9 THEN 2 |
192
|
|
|
ELSE 2 |
193
|
|
|
END AS status, |
194
|
|
|
m.send_date, |
195
|
|
|
m.update_date |
196
|
|
|
FROM message m |
197
|
|
|
WHERE m.msg_type IN (8, 9, 10, 13)'; |
198
|
|
|
$this->addSql($sql); |
199
|
|
|
|
200
|
|
|
$this->addSql('DELETE FROM social_post WHERE parent_id NOT IN (SELECT id FROM social_post)'); |
201
|
|
|
|
202
|
|
|
$this->addSql('ALTER TABLE social_post ADD CONSTRAINT FK_159BBFE9F624B39D FOREIGN KEY (sender_id) REFERENCES user (id)'); |
203
|
|
|
$this->addSql('ALTER TABLE social_post ADD CONSTRAINT FK_159BBFE964482423 FOREIGN KEY (user_receiver_id) REFERENCES user (id)'); |
204
|
|
|
$this->addSql('ALTER TABLE social_post ADD CONSTRAINT FK_159BBFE9E8EBF277 FOREIGN KEY (group_receiver_id) REFERENCES usergroup (id) ON DELETE CASCADE'); |
205
|
|
|
$this->addSql('ALTER TABLE social_post ADD CONSTRAINT FK_159BBFE9727ACA70 FOREIGN KEY (parent_id) REFERENCES social_post (id) ON DELETE CASCADE'); |
206
|
|
|
|
207
|
|
|
if ($schema->hasTable('message_feedback')) { |
208
|
|
|
$this->addSql('DELETE FROM message_feedback WHERE user_id IS NULL OR user_id = 0'); |
209
|
|
|
|
210
|
|
|
$table = $schema->getTable('message_feedback'); |
211
|
|
|
|
212
|
|
|
if ($table->hasIndex('IDX_DB0F8049537A1329')) { |
213
|
|
|
$this->addSql('DROP INDEX IDX_DB0F8049537A1329 ON message_feedback'); |
214
|
|
|
} |
215
|
|
|
if ($table->hasForeignKey('FK_DB0F8049A76ED395')) { |
216
|
|
|
$this->addSql('ALTER TABLE message_feedback DROP FOREIGN KEY FK_DB0F8049A76ED395'); |
217
|
|
|
} |
218
|
|
|
if ($table->hasIndex('IDX_DB0F8049A76ED395')) { |
219
|
|
|
$this->addSql('DROP INDEX IDX_DB0F8049A76ED395 ON message_feedback'); |
220
|
|
|
} |
221
|
|
|
if ($table->hasIndex('idx_message_feedback_uid_mid')) { |
222
|
|
|
$this->addSql('DROP INDEX idx_message_feedback_uid_mid ON message_feedback'); |
223
|
|
|
} |
224
|
|
|
|
225
|
|
|
$this->addSql('ALTER TABLE message_feedback CHANGE message_id social_post_id INT NOT NULL'); |
226
|
|
|
$this->addSql('RENAME TABLE message_feedback TO social_post_feedback'); |
227
|
|
|
$this->addSql('DELETE FROM social_post_feedback WHERE social_post_id NOT IN (SELECT id FROM social_post)'); |
228
|
|
|
$this->addSql('CREATE INDEX IDX_DB7E436DA76ED395 ON social_post_feedback (user_id)'); |
229
|
|
|
$this->addSql('CREATE INDEX IDX_DB7E436DC4F2D6B1 ON social_post_feedback (social_post_id)'); |
230
|
|
|
$this->addSql('CREATE INDEX idx_social_post_uid_spid ON social_post_feedback (social_post_id, user_id)'); |
231
|
|
|
} else { |
232
|
|
|
$this->addSql("CREATE TABLE social_post_feedback (id INT AUTO_INCREMENT NOT NULL, social_post_id INT NOT NULL, user_id INT NOT NULL, liked TINYINT(1) DEFAULT '0' NOT NULL, disliked TINYINT(1) DEFAULT '0' NOT NULL, updated_at DATETIME NOT NULL COMMENT '(DC2Type:datetime)', INDEX IDX_DB7E436DC4F2D6B1 (social_post_id), INDEX IDX_DB7E436DA76ED395 (user_id), INDEX idx_social_post_uid_spid (social_post_id, user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB ROW_FORMAT = DYNAMIC"); |
233
|
|
|
} |
234
|
|
|
|
235
|
|
|
$this->addSql('ALTER TABLE social_post_feedback ADD CONSTRAINT FK_DB7E436DA76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE'); |
236
|
|
|
$this->addSql('ALTER TABLE social_post_feedback ADD CONSTRAINT FK_DB7E436DC4F2D6B1 FOREIGN KEY (social_post_id) REFERENCES social_post (id) ON DELETE CASCADE'); |
237
|
|
|
|
238
|
|
|
// ALTER TABLE message DROP user_receiver_id; |
239
|
|
|
|
240
|
|
|
$this->addSql('DELETE FROM message_attachment WHERE message_id NOT IN (SELECT id FROM message)'); |
241
|
|
|
|
242
|
|
|
$table = $schema->getTable('message_attachment'); |
243
|
|
|
if (false === $table->hasIndex('IDX_B68FF524537A1329')) { |
244
|
|
|
$this->addSql('CREATE INDEX IDX_B68FF524537A1329 ON message_attachment (message_id)'); |
245
|
|
|
} |
246
|
|
|
$this->addSql('ALTER TABLE message_attachment CHANGE message_id message_id INT NOT NULL'); |
247
|
|
|
|
248
|
|
|
if (false === $table->hasForeignKey('FK_B68FF524537A1329')) { |
249
|
|
|
$this->addSql('ALTER TABLE message_attachment ADD CONSTRAINT FK_B68FF524537A1329 FOREIGN KEY (message_id) REFERENCES message (id)'); |
250
|
|
|
} |
251
|
|
|
|
252
|
|
|
if (!$table->hasColumn('resource_node_id')) { |
253
|
|
|
$this->addSql('ALTER TABLE message_attachment ADD resource_node_id INT DEFAULT NULL;'); |
254
|
|
|
$this->addSql('CREATE UNIQUE INDEX UNIQ_B68FF5241BAD783F ON message_attachment (resource_node_id);'); |
255
|
|
|
} |
256
|
|
|
|
257
|
|
|
if (!$table->hasForeignKey('FK_B68FF5241BAD783F')) { |
258
|
|
|
$this->addSql(' ALTER TABLE message_attachment ADD CONSTRAINT FK_B68FF5241BAD783F FOREIGN KEY (resource_node_id) REFERENCES resource_node (id) ON DELETE CASCADE;'); |
259
|
|
|
} |
260
|
|
|
|
261
|
|
|
if (!$schema->hasTable('c_chat_conversation')) { |
262
|
|
|
$this->addSql('CREATE TABLE c_chat_conversation (id INT AUTO_INCREMENT NOT NULL, resource_node_id INT DEFAULT NULL, title VARCHAR(255) DEFAULT NULL, UNIQUE INDEX UNIQ_CD09E33F1BAD783F (resource_node_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB ROW_FORMAT = DYNAMIC;'); |
263
|
|
|
$this->addSql('ALTER TABLE c_chat_conversation ADD CONSTRAINT FK_CD09E33F1BAD783F FOREIGN KEY (resource_node_id) REFERENCES resource_node (id) ON DELETE CASCADE'); |
264
|
|
|
} |
265
|
|
|
|
266
|
|
|
if (!$schema->hasTable('message_tag')) { |
267
|
|
|
$this->addSql("CREATE TABLE message_tag (id INT AUTO_INCREMENT NOT NULL, user_id INT NOT NULL, tag VARCHAR(255) NOT NULL, color VARCHAR(255) NOT NULL, position INT NOT NULL, created_at DATETIME NOT NULL COMMENT '(DC2Type:datetime)', updated_at DATETIME NOT NULL COMMENT '(DC2Type:datetime)', INDEX IDX_2ABC3D6FA76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB ROW_FORMAT = DYNAMIC;"); |
268
|
|
|
$this->addSql('ALTER TABLE message_tag ADD CONSTRAINT FK_2ABC3D6FA76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE'); |
269
|
|
|
$this->addSql('CREATE UNIQUE INDEX user_tag ON message_tag (user_id, tag)'); |
270
|
|
|
|
271
|
|
|
$this->addSql( |
272
|
|
|
'ALTER TABLE message_rel_user_rel_tags ADD CONSTRAINT FK_B4B37A208DF5FE1E FOREIGN KEY (message_tag_id) REFERENCES message_tag (id) ON DELETE CASCADE ' |
273
|
|
|
); |
274
|
|
|
} |
275
|
|
|
} |
276
|
|
|
|
277
|
|
|
public function down(Schema $schema): void {} |
278
|
|
|
} |
279
|
|
|
|