Completed
Push — 1.9 ( 5c3e2e...1529fd )
by
unknown
60:20
created

FillActivityAssociationTables::up()   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 2
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
        $table->removeForeignKey('FK_E494F7AE427EB8A5');
82
        $table->removeForeignKey('FK_E494F7AEA832C1C9');
83
        $schema->dropTable('orocrm_contactus_req_emails');
84
85
        // Remove orocrm_contactus_request_calls
86
        $table = $schema->getTable('orocrm_contactus_request_calls');
87
        $table->removeForeignKey('FK_6F7A50CE427EB8A5');
88
        $table->removeForeignKey('FK_6F7A50CE50A89B2C');
89
        $schema->dropTable('orocrm_contactus_request_calls');
90
91
    }
92
93
    /**
94
     * @param QueryBag $queries
95
     */
96
    protected function fillActivityTables(QueryBag $queries)
97
    {
98
        $queries->addPreQuery(
99
            new SqlMigrationQuery(
100
                [$this->getFillContactRequestEmailActivityQuery(), $this->getFillContactRequestCallActivityQuery()]
101
            )
102
        );
103
    }
104
105
    /**
106
     * @param QueryBag $queries
107
     */
108
    protected function fillActivityListTables(QueryBag $queries)
109
    {
110
        // Fill activitylists tables
111
        $queries->addPreQuery(
112
            new ParametrizedSqlMigrationQuery(
113
                $this->getFillContactRequestEmailActivityListQuery(),
114
                ['class' => 'Oro\Bundle\EmailBundle\Entity\Email'],
115
                ['class' => Type::STRING]
116
            )
117
        );
118
        $queries->addPreQuery(
119
            new ParametrizedSqlMigrationQuery(
120
                $this->getFillContactRequestCallActivityListQuery(),
121
                ['class' => 'OroCRM\Bundle\CallBundle\Entity\Call'],
122
                ['class' => Type::STRING]
123
            )
124
        );
125
    }
126
127
    /**
128
     * @return string
129
     */
130
    protected function getFillContactRequestEmailActivityQuery()
131
    {
132
        $sql = 'INSERT INTO %s (email_id, contactrequest_id)' .
133
               ' SELECT email_id, request_id' .
134
               ' FROM orocrm_contactus_req_emails';
135
136
        return sprintf(
137
            $sql,
138
            $this->activityExtension->getAssociationTableName('oro_email', 'orocrm_contactus_request')
139
        );
140
    }
141
142
    /**
143
     * @return string
144
     */
145
    protected function getFillContactRequestCallActivityQuery()
146
    {
147
        $sql = 'INSERT INTO %s (call_id, contactrequest_id)' .
148
               ' SELECT call_id, request_id' .
149
               ' FROM orocrm_contactus_request_calls';
150
151
        return sprintf(
152
            $sql,
153
            $this->activityExtension->getAssociationTableName('orocrm_call', 'orocrm_contactus_request')
154
        );
155
    }
156
157
    /**
158
     * @return string
159
     */
160 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...
161
    {
162
        $sql = 'INSERT INTO %s (activitylist_id, contactrequest_id)' .
163
               ' SELECT al.id, rel.contactrequest_id' .
164
               ' FROM oro_activity_list al' .
165
               ' JOIN %s rel ON rel.email_id = al.related_activity_id' .
166
               ' AND al.related_activity_class = :class';
167
168
        return sprintf(
169
            $sql,
170
            $this->activityListExtension->getAssociationTableName('orocrm_contactus_request'),
171
            $this->activityExtension->getAssociationTableName('oro_email', 'orocrm_contactus_request')
172
        );
173
    }
174
175
    /**
176
     * @return string
177
     */
178 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...
179
    {
180
        $sql = 'INSERT INTO %s (activitylist_id, contactrequest_id)' .
181
               ' SELECT al.id, rel.contactrequest_id' .
182
               ' FROM oro_activity_list al' .
183
               ' JOIN %s rel ON rel.call_id = al.related_activity_id' .
184
               ' AND al.related_activity_class = :class';
185
186
        return sprintf(
187
            $sql,
188
            $this->activityListExtension->getAssociationTableName('orocrm_contactus_request'),
189
            $this->activityExtension->getAssociationTableName('orocrm_call', 'orocrm_contactus_request')
190
        );
191
    }
192
}
193