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() |
|
|
|
|
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() |
|
|
|
|
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
|
|
|
|
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.