migrations/Version20180813223121.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. /**
  7.  * Auto-generated Migration: Please modify to your needs!
  8.  */
  9. final class Version20180813223121 extends AbstractMigration
  10. {
  11.     public function up(Schema $schema): void
  12.     {
  13.         // this up() migration is auto-generated, please modify it to your needs
  14.         $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.');
  15.         $this->addSql('
  16.             CREATE TABLE feed_join_user (
  17.                 feed_id INT NOT NULL,
  18.                 user_id INT NOT NULL,
  19.                 INDEX IDX_5459780C51A5BC03 (feed_id),
  20.                 INDEX IDX_5459780CA76ED395 (user_id),
  21.                 PRIMARY KEY(feed_id, user_id)
  22.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
  23.         ');
  24.         $this->addSql('
  25.             CREATE TABLE feed_join_group (
  26.                 feed_id INT NOT NULL,
  27.                 group_id INT NOT NULL,
  28.                 INDEX IDX_6BAF3B7451A5BC03 (feed_id),
  29.                 INDEX IDX_6BAF3B74FE54D947 (group_id),
  30.                 PRIMARY KEY(feed_id, group_id)
  31.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
  32.         ');
  33.         $this->addSql('
  34.             CREATE TABLE feed_participant (
  35.                 id INT AUTO_INCREMENT NOT NULL,
  36.                 feed_id INT DEFAULT NULL,
  37.                 user_id INT DEFAULT NULL,
  38.                 viewed TINYINT(1) NOT NULL,
  39.                 unread TINYINT(1) NOT NULL,
  40.                 INDEX IDX_C3111A5251A5BC03 (feed_id),
  41.                 INDEX IDX_C3111A52A76ED395 (user_id),
  42.                 PRIMARY KEY(id)
  43.             ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci ENGINE = InnoDB
  44.         ');
  45.         $stmt $this->connection->prepare('SELECT id, administrators, administrators_groups, participants FROM feeds');
  46.         $stmt->execute();
  47.         $all = [];
  48.         while ($row $stmt->fetch(\PDO::FETCH_OBJ)) {
  49.             $users $row->administrators explode(','$row->administrators) : [];
  50.             $groups $row->administrators_groups explode(','$row->administrators_groups) : [];
  51.             $participants $row->participants unserialize($row->participants) : [];
  52.             if ((\count($users) && \in_array('*'$users))
  53.                 || (\count($groups) && \in_array('*'$groups))
  54.             ) {
  55.                 $all[$row->id] = [
  56.                     'users' => \in_array('*'$users),
  57.                     'groups' => \in_array('*'$groups),
  58.                 ];
  59.             }
  60.             if (!\in_array('*'$users)) {
  61.                 foreach ($users as $user) {
  62.                     $this->addSql('INSERT INTO feed_join_user (feed_id, user_id) VALUES (:feed_id, :user_id)', [
  63.                         'feed_id' => $row->id,
  64.                         'user_id' => $user,
  65.                     ]);
  66.                 }
  67.             }
  68.             if (!\in_array('*'$groups)) {
  69.                 foreach ($groups as $group) {
  70.                     $this->addSql('INSERT INTO feed_join_group (feed_id, group_id) VALUES (:feed_id, :group_id)', [
  71.                         'feed_id' => $row->id,
  72.                         'group_id' => $group,
  73.                     ]);
  74.                 }
  75.             }
  76.             if ($participants && \count($participants)) {
  77.                 foreach ($participants as $key => $value) {
  78.                     $this->addSql('INSERT INTO feed_participant (feed_id, user_id, viewed, unread) VALUES (:feed_id, :user_id, :viewed, :unread)', [
  79.                         'feed_id' => $row->id,
  80.                         'user_id' => $key,
  81.                         'viewed' => (int) ($value['viewed'] ?? true),
  82.                         'unread' => (int) ($value['unread'] ?? true),
  83.                     ]);
  84.                 }
  85.             }
  86.         }
  87.         $this->addSql('RENAME TABLE feeds TO feed');
  88.         $this->addSql('ALTER TABLE feed ENGINE = InnoDB');
  89.         $this->addSql('ALTER TABLE feed CHARACTER SET = utf8mb4');
  90.         $this->addSql('
  91.             ALTER TABLE feed
  92.                 DROP participants,
  93.                 DROP administrators,
  94.                 DROP administrators_groups,
  95.                 ADD allow_all_users TINYINT(1) NOT NULL,
  96.                 ADD allow_all_groups TINYINT(1) NOT NULL,
  97.                 CHANGE administrators_id user_id INT DEFAULT NULL,
  98.                 CHANGE tags_id tag_id INT DEFAULT NULL,
  99.                 CHANGE title name VARCHAR(255) NOT NULL,
  100.                 CHANGE date_added created_at DATETIME NOT NULL,
  101.                 CHANGE last_modified modified_at DATETIME NOT NULL
  102.         ');
  103.         $this->addSql('DROP INDEX idx_title ON feed');
  104.         $this->addSql('DROP INDEX idx_tags_id ON feed');
  105.         $this->addSql('DROP INDEX idx_administrators_id ON feed');
  106.         $this->addSql('CREATE INDEX idx_name ON feed (name)');
  107.         $this->addSql('CREATE INDEX IDX_234044ABA76ED395 ON feed (user_id)');
  108.         $this->addSql('CREATE INDEX IDX_234044ABBAD26311 ON feed (tag_id)');
  109.         foreach ($all as $feedId => $options) {
  110.             $this->addSql('UPDATE feed SET allow_all_users = :allowAllUsers, allow_all_groups = :allowAllGroups WHERE id = :id', [
  111.                 'id' => $feedId,
  112.                 'allowAllUsers' => (int) ($options['users'] ?: false),
  113.                 'allowAllGroups' => (int) ($options['groups'] ?: false),
  114.             ]);
  115.         }
  116.         $this->addSql('RENAME TABLE feeds_comments TO feed_comment');
  117.         $this->addSql('ALTER TABLE feed_comment ENGINE = InnoDB');
  118.         $this->addSql('ALTER TABLE feed_comment CHARACTER SET = utf8mb4');
  119.         $this->addSql('DELETE FROM feed_comment WHERE body IS NULL OR body = \'\'');
  120.         $this->addSql('
  121.             ALTER TABLE feed_comment
  122.                 CHANGE feeds_id feed_id INT DEFAULT NULL,
  123.                 CHANGE administrators_id user_id INT DEFAULT NULL,
  124.                 CHANGE body body LONGTEXT NOT NULL,
  125.                 CHANGE date_added created_at DATETIME NOT NULL,
  126.                 CHANGE last_modified modified_at DATETIME NOT NULL
  127.         ');
  128.         $this->addSql('DROP INDEX idx_feeds_id ON feed_comment');
  129.         $this->addSql('DROP INDEX idx_administrators_id ON feed_comment');
  130.         $this->addSql('CREATE INDEX IDX_2E66461951A5BC03 ON feed_comment (feed_id)');
  131.         $this->addSql('CREATE INDEX IDX_2E664619A76ED395 ON feed_comment (user_id)');
  132.         $this->addSql('RENAME TABLE feeds_likes TO feed_confirm');
  133.         $this->addSql('ALTER TABLE feed_confirm ENGINE = InnoDB');
  134.         $this->addSql('ALTER TABLE feed_confirm CHARACTER SET = utf8mb4');
  135.         $this->addSql('
  136.             ALTER TABLE feed_confirm
  137.                 CHANGE feeds_id feed_id INT NOT NULL,
  138.                 CHANGE administrators_id user_id INT NOT NULL
  139.         ');
  140.         $this->addSql('DROP INDEX idx_feeds_id ON feed_confirm');
  141.         $this->addSql('DROP INDEX idx_administrators_id ON feed_confirm');
  142.         $this->addSql('CREATE INDEX IDX_35C1B73151A5BC03 ON feed_confirm (feed_id)');
  143.         $this->addSql('CREATE INDEX IDX_35C1B731A76ED395 ON feed_confirm (user_id)');
  144.         $this->addSql('RENAME TABLE feeds_tags TO feed_tag');
  145.         $this->addSql('ALTER TABLE feed_tag ENGINE = InnoDB');
  146.         $this->addSql('ALTER TABLE feed_tag CHARACTER SET = utf8mb4');
  147.         $this->addSql('
  148.             ALTER TABLE feed_tag
  149.                 CHANGE name name VARCHAR(255) NOT NULL,
  150.                 CHANGE color color VARCHAR(6) DEFAULT NULL
  151.         ');
  152.         $this->addSql('UPDATE feed SET user_id = NULL WHERE user_id NOT IN (SELECT id FROM user)');
  153.         $this->addSql('UPDATE feed SET tag_id = NULL WHERE tag_id NOT IN (SELECT id FROM feed_tag)');
  154.         $this->addSql('DELETE FROM feed_comment WHERE feed_id NOT IN (SELECT id FROM feed)');
  155.         $this->addSql('UPDATE feed_comment SET user_id = NULL WHERE user_id NOT IN (SELECT id FROM user)');
  156.         $this->addSql('DELETE FROM feed_confirm WHERE feed_id NOT IN (SELECT id FROM feed)');
  157.         $this->addSql('DELETE FROM feed_confirm WHERE user_id NOT IN (SELECT id FROM user)');
  158.         $this->addSql('DELETE FROM feed_join_user WHERE feed_id NOT IN (SELECT id FROM feed)');
  159.         $this->addSql('DELETE FROM feed_join_user WHERE user_id NOT IN (SELECT id FROM user)');
  160.         $this->addSql('DELETE FROM feed_join_group WHERE feed_id NOT IN (SELECT id FROM feed)');
  161.         $this->addSql('DELETE FROM feed_join_group WHERE group_id NOT IN (SELECT id FROM user_group)');
  162.         $this->addSql('DELETE FROM feed_participant WHERE feed_id NOT IN (SELECT id FROM feed)');
  163.         $this->addSql('DELETE FROM feed_participant WHERE user_id NOT IN (SELECT id FROM user)');
  164.         $this->addSql('ALTER TABLE feed ADD CONSTRAINT FK_234044ABA76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE SET NULL');
  165.         $this->addSql('ALTER TABLE feed ADD CONSTRAINT FK_234044ABBAD26311 FOREIGN KEY (tag_id) REFERENCES feed_tag (id) ON DELETE SET NULL');
  166.         $this->addSql('ALTER TABLE feed_comment ADD CONSTRAINT FK_2E66461951A5BC03 FOREIGN KEY (feed_id) REFERENCES feed (id) ON DELETE CASCADE');
  167.         $this->addSql('ALTER TABLE feed_comment ADD CONSTRAINT FK_2E664619A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE SET NULL');
  168.         $this->addSql('ALTER TABLE feed_confirm ADD CONSTRAINT FK_2CF4ABE451A5BC03 FOREIGN KEY (feed_id) REFERENCES feed (id) ON DELETE CASCADE');
  169.         $this->addSql('ALTER TABLE feed_confirm ADD CONSTRAINT FK_2CF4ABE4A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE');
  170.         $this->addSql('ALTER TABLE feed_join_user ADD CONSTRAINT FK_D043D1E51A5BC03 FOREIGN KEY (feed_id) REFERENCES feed (id) ON DELETE CASCADE');
  171.         $this->addSql('ALTER TABLE feed_join_user ADD CONSTRAINT FK_D043D1EA76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE');
  172.         $this->addSql('ALTER TABLE feed_join_group ADD CONSTRAINT FK_984F177951A5BC03 FOREIGN KEY (feed_id) REFERENCES feed (id) ON DELETE CASCADE');
  173.         $this->addSql('ALTER TABLE feed_join_group ADD CONSTRAINT FK_984F1779FE54D947 FOREIGN KEY (group_id) REFERENCES user_group (id) ON DELETE CASCADE');
  174.         $this->addSql('ALTER TABLE feed_participant ADD CONSTRAINT FK_C3111A5251A5BC03 FOREIGN KEY (feed_id) REFERENCES feed (id) ON DELETE CASCADE');
  175.         $this->addSql('ALTER TABLE feed_participant ADD CONSTRAINT FK_C3111A52A76ED395 FOREIGN KEY (user_id) REFERENCES user (id) ON DELETE CASCADE');
  176.     }
  177.     public function down(Schema $schema): void
  178.     {
  179.         // this down() migration is auto-generated, please modify it to your needs
  180.         $this->abortIf('mysql' !== $this->connection->getDatabasePlatform()->getName(), 'Migration can only be executed safely on \'mysql\'.');
  181.         $this->addSql('ALTER TABLE feed_participant DROP FOREIGN KEY FK_C3111A52A76ED395');
  182.         $this->addSql('ALTER TABLE feed_participant DROP FOREIGN KEY FK_C3111A5251A5BC03');
  183.         $this->addSql('ALTER TABLE feed_join_group DROP FOREIGN KEY FK_984F1779FE54D947');
  184.         $this->addSql('ALTER TABLE feed_join_group DROP FOREIGN KEY FK_984F177951A5BC03');
  185.         $this->addSql('ALTER TABLE feed_join_user DROP FOREIGN KEY FK_D043D1EA76ED395');
  186.         $this->addSql('ALTER TABLE feed_join_user DROP FOREIGN KEY FK_D043D1E51A5BC03');
  187.         $this->addSql('ALTER TABLE feed_confirm DROP FOREIGN KEY FK_2CF4ABE4A76ED395');
  188.         $this->addSql('ALTER TABLE feed_confirm DROP FOREIGN KEY FK_2CF4ABE451A5BC03');
  189.         $this->addSql('ALTER TABLE feed_comment DROP FOREIGN KEY FK_2E664619A76ED395');
  190.         $this->addSql('ALTER TABLE feed_comment DROP FOREIGN KEY FK_2E66461951A5BC03');
  191.         $this->addSql('ALTER TABLE feed DROP FOREIGN KEY FK_234044ABBAD26311');
  192.         $this->addSql('ALTER TABLE feed DROP FOREIGN KEY FK_234044ABA76ED395');
  193.         $this->addSql('RENAME TABLE feed TO feeds');
  194.         $this->addSql('ALTER TABLE feeds ENGINE = MyISAM');
  195.         $this->addSql('ALTER TABLE feeds CHARACTER SET = latin1');
  196.         $this->addSql('
  197.             ALTER TABLE feeds
  198.                 ADD administrators TEXT DEFAULT NULL AFTER administrators_id,
  199.                 ADD administrators_groups TEXT DEFAULT NULL AFTER administrators,
  200.                 ADD participants LONGTEXT DEFAULT NULL COMMENT \'(DC2Type:array)\' AFTER administrators_groups,
  201.                 CHANGE user_id administrators_id INT NOT NULL,
  202.                 CHANGE tag_id tags_id INT NOT NULL,
  203.                 CHANGE name title VARCHAR(255) DEFAULT NULL,
  204.                 CHANGE created_at date_added DATETIME DEFAULT NULL,
  205.                 CHANGE modified_at last_modified DATETIME DEFAULT NULL
  206.         ');
  207.         $this->addSql('UPDATE feeds SET administrators = \'*\' WHERE allow_all_users = 1');
  208.         $this->addSql('UPDATE feeds SET administrators_groups = \'*\' WHERE allow_all_groups = 1');
  209.         $this->addSql('
  210.             ALTER TABLE feeds
  211.                 DROP allow_all_users,
  212.                 DROP allow_all_groups
  213.         ');
  214.         $this->addSql('DROP INDEX idx_name ON feeds');
  215.         $this->addSql('DROP INDEX IDX_234044ABA76ED395 ON feeds');
  216.         $this->addSql('DROP INDEX IDX_234044ABBAD26311 ON feeds');
  217.         $this->addSql('CREATE INDEX idx_title ON feeds (title)');
  218.         $this->addSql('CREATE INDEX idx_tags_id ON feeds (tags_id)');
  219.         $this->addSql('CREATE INDEX idx_administrators_id ON feeds (administrators_id)');
  220.         $stmt $this->connection->prepare('SELECT * FROM feed_participant');
  221.         $stmt->execute();
  222.         $feeds = [];
  223.         while ($row $stmt->fetch(\PDO::FETCH_OBJ)) {
  224.             $feeds[$row->feed_id][] = [
  225.                 $row->user_id = [
  226.                     'viewed' => $row->viewed,
  227.                     'unread' => $row->unread,
  228.                 ],
  229.             ];
  230.         }
  231.         foreach ($feeds as $key => $value) {
  232.             $participants serialize($value);
  233.             $this->addSql('UPDATE feeds SET participants = :participants WHERE id = :id', [
  234.                 'participants' => $participants,
  235.                 'id' => $key,
  236.             ]);
  237.         }
  238.         $this->addSql('DROP TABLE feed_participant');
  239.         $stmt $this->connection->prepare('SELECT * FROM feed_join_user');
  240.         $stmt->execute();
  241.         $feeds = [];
  242.         while ($row $stmt->fetch(\PDO::FETCH_OBJ)) {
  243.             $feeds[$row->feed_id][] = $row->user_id;
  244.         }
  245.         foreach ($feeds as $key => $value) {
  246.             $users implode(','$value);
  247.             $this->addSql('UPDATE feeds SET administrators = :administrators WHERE id = :id', [
  248.                 'administrators' => $users,
  249.                 'id' => $key,
  250.             ]);
  251.         }
  252.         $this->addSql('DROP TABLE feed_join_user');
  253.         $stmt $this->connection->prepare('SELECT * FROM feed_join_group');
  254.         $stmt->execute();
  255.         $feeds = [];
  256.         while ($row $stmt->fetch(\PDO::FETCH_OBJ)) {
  257.             $feeds[$row->feed_id][] = $row->group_id;
  258.         }
  259.         foreach ($feeds as $key => $value) {
  260.             $groups implode(','$value);
  261.             $this->addSql('UPDATE feeds SET administrators_groups = :administrators_groups WHERE id = :id', [
  262.                 'administrators_groups' => $groups,
  263.                 'id' => $key,
  264.             ]);
  265.         }
  266.         $this->addSql('DROP TABLE feed_join_group');
  267.         $this->addSql('RENAME TABLE feed_comment TO feeds_comments');
  268.         $this->addSql('ALTER TABLE feeds_comments ENGINE = InnoDB');
  269.         $this->addSql('ALTER TABLE feeds_comments CHARACTER SET = utf8mb4');
  270.         $this->addSql('
  271.             ALTER TABLE feeds_comments
  272.                 CHANGE feed_id feeds_id INT NOT NULL,
  273.                 CHANGE user_id administrators_id INT NOT NULL,
  274.                 CHANGE body body LONGTEXT DEFAULT NULL,
  275.                 CHANGE created_at date_added DATETIME DEFAULT NULL,
  276.                 CHANGE modified_at last_modified DATETIME DEFAULT NULL
  277.         ');
  278.         $this->addSql('DROP INDEX IDX_2E66461951A5BC03 ON feeds_comments');
  279.         $this->addSql('DROP INDEX IDX_2E664619A76ED395 ON feeds_comments');
  280.         $this->addSql('CREATE INDEX idx_feeds_id ON feeds_comments (feeds_id)');
  281.         $this->addSql('CREATE INDEX idx_administrators_id ON feeds_comments (administrators_id)');
  282.         $this->addSql('RENAME TABLE feed_confirm TO feeds_likes');
  283.         $this->addSql('ALTER TABLE feeds_likes ENGINE = InnoDB');
  284.         $this->addSql('ALTER TABLE feeds_likes CHARACTER SET = utf8mb4');
  285.         $this->addSql('
  286.             ALTER TABLE feeds_likes
  287.                 CHANGE feed_id feeds_id INT NOT NULL,
  288.                 CHANGE user_id administrators_id INT NOT NULL
  289.         ');
  290.         $this->addSql('DROP INDEX IDX_35C1B73151A5BC03 ON feeds_likes');
  291.         $this->addSql('DROP INDEX IDX_35C1B731A76ED395 ON feeds_likes');
  292.         $this->addSql('CREATE INDEX idx_feeds_id ON feeds_likes (feeds_id)');
  293.         $this->addSql('CREATE INDEX idx_administrators_id ON feeds_likes (administrators_id)');
  294.         $this->addSql('RENAME TABLE feed_tag TO feeds_tags');
  295.         $this->addSql('ALTER TABLE feeds_tags ENGINE = MyISAM');
  296.         $this->addSql('ALTER TABLE feeds_tags CHARACTER SET = latin1');
  297.         $this->addSql('
  298.             ALTER TABLE feeds_tags
  299.                 CHANGE name name VARCHAR(64) NOT NULL,
  300.                 CHANGE color color VARCHAR(6) DEFAULT NULL
  301.         ');
  302.     }
  303. }