Version20200821224242::up()   F
last analyzed

Complexity

Conditions 32
Paths > 20000

Size

Total Lines 254
Code Lines 120

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 32
eloc 120
c 0
b 0
f 0
nc 641728512
nop 1
dl 0
loc 254
rs 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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