File size: 1,710 Bytes
d2897cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
<?php

namespace Mautic\Migrations;

use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\Exception\SkipMigration;
use Mautic\CoreBundle\Doctrine\AbstractMauticMigration;

class Version20190410143658 extends AbstractMauticMigration
{
    /**
     * @throws \Doctrine\DBAL\Schema\SchemaException
     */
    public function preUp(Schema $schema): void
    {
        $newIndexName = $this->getNewIndexName();
        $tableName    = $this->getTableName();
        $table        = $schema->getTable($tableName);

        if (true === $table->hasIndex($newIndexName)) {
            throw new SkipMigration('Schema includes this migration');
        }
    }

    /**
     * @throws \Doctrine\DBAL\Schema\SchemaException
     */
    public function up(Schema $schema): void
    {
        $newIndexName = $this->getNewIndexName();
        $tableName    = $this->getTableName();
        $oldIndexName = $this->getOldIndexName($tableName);

        $this->addSql("ALTER TABLE {$tableName} ADD INDEX {$newIndexName} (lead_id, channel, reason);");
        if ($schema->getTable($tableName)->hasIndex($oldIndexName)) {
            $this->addSql("ALTER TABLE {$tableName} DROP INDEX {$oldIndexName};");
        }
    }

    /**
     * @param string $tableName
     *
     * @return string
     */
    private function getOldIndexName($tableName)
    {
        return $this->generatePropertyName($tableName, 'idx', ['lead_id']);
    }

    /**
     * @return string
     */
    private function getNewIndexName()
    {
        return "{$this->prefix}leadid_reason_channel";
    }

    /**
     * @return string
     */
    private function getTableName()
    {
        return "{$this->prefix}lead_donotcontact";
    }
}