Completed
Push — 1.9 ( 1529fd...66be26 )
by
unknown
43:32
created

fillActivityListTables()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 18
Code Lines 11

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 18
rs 9.4285
cc 1
eloc 11
nc 1
nop 1
1
<?php
2
3
namespace OroCRM\Bundle\ContactUsBundle\Migrations\Schema\v1_10;
4
5
use Doctrine\DBAL\Types\Type;
6
use Doctrine\DBAL\Schema\Schema;
7
8
use Oro\Bundle\MigrationBundle\Migration\QueryBag;
9
use Oro\Bundle\MigrationBundle\Migration\Migration;
10
use Oro\Bundle\MigrationBundle\Migration\SqlMigrationQuery;
11
use Oro\Bundle\MigrationBundle\Migration\ParametrizedSqlMigrationQuery;
12
use Oro\Bundle\MigrationBundle\Migration\OrderedMigrationInterface;
13
14
use Oro\Bundle\EntityExtendBundle\Migration\Extension\ExtendExtension;
15
use Oro\Bundle\EntityExtendBundle\Migration\Extension\ExtendExtensionAwareInterface;
16
17
use Oro\Bundle\ActivityBundle\Migration\Extension\ActivityExtension;
18
use Oro\Bundle\ActivityBundle\Migration\Extension\ActivityExtensionAwareInterface;
19
20
use Oro\Bundle\ActivityListBundle\Migration\Extension\ActivityListExtension;
21
use Oro\Bundle\ActivityListBundle\Migration\Extension\ActivityListExtensionAwareInterface;
22
23
class FillActivityAssociationTables implements
24
    Migration,
25
    OrderedMigrationInterface,
26
    ExtendExtensionAwareInterface,
27
    ActivityExtensionAwareInterface,
28
    ActivityListExtensionAwareInterface
29
{
30
    /** @var ExtendExtension */
31
    protected $extendExtension;
32
33
    /** @var ActivityExtension */
34
    protected $activityExtension;
35
36
    /** @var ActivityListExtension */
37
    protected $activityListExtension;
38
39
    /**
40
     * {@inheritdoc}
41
     */
42
    public function setExtendExtension(ExtendExtension $extendExtension)
43
    {
44
        $this->extendExtension = $extendExtension;
45
    }
46
47
    /**
48
     * {@inheritdoc}
49
     */
50
    public function setActivityExtension(ActivityExtension $activityExtension)
51
    {
52
        $this->activityExtension = $activityExtension;
53
    }
54
55
    /**
56
     * {@inheritdoc}
57
     */
58
    public function setActivityListExtension(ActivityListExtension $activityListExtension)
59
    {
60
        $this->activityListExtension = $activityListExtension;
61
    }
62
63
    /**
64
     * {@inheritdoc}
65
     */
66
    public function getOrder()
67
    {
68
        return 2;
69
    }
70
71
    /**
72
     * {@inheritdoc}
73
     */
74
    public function up(Schema $schema, QueryBag $queries)
75
    {
76
        $this->fillActivityTables($queries);
77
        $this->fillActivityListTables($queries);
78
79
        // Remove orocrm_contactus_req_emails
80
        $table = $schema->getTable('orocrm_contactus_req_emails');
81
        if ($table->hasForeignKey('FK_E494F7AE427EB8A5')) {
82
            $table->removeForeignKey('FK_E494F7AE427EB8A5');
83
        }
84
        if ($table->hasForeignKey('FK_E494F7AEA832C1C9')) {
85
            $table->removeForeignKey('FK_E494F7AEA832C1C9');
86
        }
87
        // Delete foreign keys for orocrm_contactus_request_emails table,
88
        // that was renamed to orocrm_contactus_req_emails
89
        if ($table->hasForeignKey('FK_4DEF4058427EB8A5')) {
90
            $table->removeForeignKey('FK_4DEF4058427EB8A5');
91
        }
92
        if ($table->hasForeignKey('FK_4DEF4058A832C1C9')) {
93
            $table->removeForeignKey('FK_4DEF4058A832C1C9');
94
        }
95
        $schema->dropTable('orocrm_contactus_req_emails');
96
97
        // Remove orocrm_contactus_request_calls
98
        $table = $schema->getTable('orocrm_contactus_request_calls');
99
        $table->removeForeignKey('FK_6F7A50CE427EB8A5');
100
        $table->removeForeignKey('FK_6F7A50CE50A89B2C');
101
        $schema->dropTable('orocrm_contactus_request_calls');
102
103
    }
104
105
    /**
106
     * @param QueryBag $queries
107
     */
108
    protected function fillActivityTables(QueryBag $queries)
109
    {
110
        $queries->addPreQuery(
111
            new SqlMigrationQuery(
112
                [$this->getFillContactRequestEmailActivityQuery(), $this->getFillContactRequestCallActivityQuery()]
113
            )
114
        );
115
    }
116
117
    /**
118
     * @param QueryBag $queries
119
     */
120
    protected function fillActivityListTables(QueryBag $queries)
121
    {
122
        // Fill activitylists tables
123
        $queries->addPreQuery(
124
            new ParametrizedSqlMigrationQuery(
125
                $this->getFillContactRequestEmailActivityListQuery(),
126
                ['class' => 'Oro\Bundle\EmailBundle\Entity\Email'],
127
                ['class' => Type::STRING]
128
            )
129
        );
130
        $queries->addPreQuery(
131
            new ParametrizedSqlMigrationQuery(
132
                $this->getFillContactRequestCallActivityListQuery(),
133
                ['class' => 'OroCRM\Bundle\CallBundle\Entity\Call'],
134
                ['class' => Type::STRING]
135
            )
136
        );
137
    }
138
139
    /**
140
     * @return string
141
     */
142
    protected function getFillContactRequestEmailActivityQuery()
143
    {
144
        $sql = 'INSERT INTO %s (email_id, contactrequest_id)' .
145
               ' SELECT email_id, request_id' .
146
               ' FROM orocrm_contactus_req_emails';
147
148
        return sprintf(
149
            $sql,
150
            $this->activityExtension->getAssociationTableName('oro_email', 'orocrm_contactus_request')
151
        );
152
    }
153
154
    /**
155
     * @return string
156
     */
157
    protected function getFillContactRequestCallActivityQuery()
158
    {
159
        $sql = 'INSERT INTO %s (call_id, contactrequest_id)' .
160
               ' SELECT call_id, request_id' .
161
               ' FROM orocrm_contactus_request_calls';
162
163
        return sprintf(
164
            $sql,
165
            $this->activityExtension->getAssociationTableName('orocrm_call', 'orocrm_contactus_request')
166
        );
167
    }
168
169
    /**
170
     * @return string
171
     */
172 View Code Duplication
    protected function getFillContactRequestEmailActivityListQuery()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
173
    {
174
        $sql = 'INSERT INTO %s (activitylist_id, contactrequest_id)' .
175
               ' SELECT al.id, rel.contactrequest_id' .
176
               ' FROM oro_activity_list al' .
177
               ' JOIN %s rel ON rel.email_id = al.related_activity_id' .
178
               ' AND al.related_activity_class = :class';
179
180
        return sprintf(
181
            $sql,
182
            $this->activityListExtension->getAssociationTableName('orocrm_contactus_request'),
183
            $this->activityExtension->getAssociationTableName('oro_email', 'orocrm_contactus_request')
184
        );
185
    }
186
187
    /**
188
     * @return string
189
     */
190 View Code Duplication
    protected function getFillContactRequestCallActivityListQuery()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
191
    {
192
        $sql = 'INSERT INTO %s (activitylist_id, contactrequest_id)' .
193
               ' SELECT al.id, rel.contactrequest_id' .
194
               ' FROM oro_activity_list al' .
195
               ' JOIN %s rel ON rel.call_id = al.related_activity_id' .
196
               ' AND al.related_activity_class = :class';
197
198
        return sprintf(
199
            $sql,
200
            $this->activityListExtension->getAssociationTableName('orocrm_contactus_request'),
201
            $this->activityExtension->getAssociationTableName('orocrm_call', 'orocrm_contactus_request')
202
        );
203
    }
204
}
205