Completed
Pull Request — master (#452)
by Jonas
03:17
created

TriggerService::createArticleAttributesTrigger()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 24
rs 8.9713
c 1
b 0
f 0
1
<?php
2
3
4
namespace ShopwarePlugins\Connect\Components;
5
6
use Doctrine\DBAL\Connection;
7
8
class TriggerService
9
{
10
    /**
11
     * @var Connection;
12
     */
13
    private $connection;
14
15
    /**
16
     * @param Connection $connection
17
     */
18
    public function __construct(Connection $connection)
19
    {
20
        $this->connection= $connection;
21
    }
22
23
    public function activateTriggers()
24
    {
25
        $this->createArticleTrigger();
26
        $this->createArticleDetailsTrigger();
27
        $this->createArticleAttributesTrigger();
28
        $this->createArticleImagesTrigger();
29
        $this->createArticleCategoriesTrigger();
30
        $this->createArticlePricesTrigger();
31
        $this->createArticleTranslationsTrigger();
32
        $this->createSupplierTrigger();
33
        $this->createTaxTrigger();
34
        $this->createCategoriesTrigger();
35
    }
36
37
    public function deactivateTriggers()
38
    {
39
        $this->connection->executeQuery('
40
            DROP TRIGGER IF EXISTS connect_article_trigger;
41
            DROP TRIGGER IF EXISTS connect_article_details_update_trigger;
42
            DROP TRIGGER IF EXISTS connect_article_details_insert_trigger;
43
            DROP TRIGGER IF EXISTS connect_article_details_delete_trigger;
44
            DROP TRIGGER IF EXISTS connect_article_attributes_update_trigger;
45
            DROP TRIGGER IF EXISTS connect_article_attributes_insert_trigger;
46
            DROP TRIGGER IF EXISTS connect_article_attributes_delete_trigger;
47
            DROP TRIGGER IF EXISTS connect_article_images_update_trigger;
48
            DROP TRIGGER IF EXISTS connect_article_images_insert_trigger;
49
            DROP TRIGGER IF EXISTS connect_article_images_delete_trigger;
50
            DROP TRIGGER IF EXISTS connect_article_categories_update_trigger;
51
            DROP TRIGGER IF EXISTS connect_article_categories_insert_trigger;
52
            DROP TRIGGER IF EXISTS connect_article_categories_delete_trigger;
53
            DROP TRIGGER IF EXISTS connect_article_prices_update_trigger;      
54
            DROP TRIGGER IF EXISTS connect_article_prices_insert_trigger;
55
            DROP TRIGGER IF EXISTS connect_article_prices_delete_trigger;
56
            DROP TRIGGER IF EXISTS connect_article_translations_update_trigger;
57
            DROP TRIGGER IF EXISTS connect_article_translations_insert_trigger;
58
            DROP TRIGGER IF EXISTS connect_article_translations_delete_trigger;
59
            DROP TRIGGER IF EXISTS connect_supplier_trigger;
60
            DROP TRIGGER IF EXISTS connect_tax_trigger;  
61
            DROP TRIGGER IF EXISTS connect_categories_trigger;  
62
        ');
63
    }
64
65
    private function createArticleTrigger()
66
    {
67
        $this->connection->executeQuery('
68
            CREATE TRIGGER connect_article_trigger
69
            AFTER UPDATE
70
            ON s_articles
71
            FOR EACH ROW
72
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.id
73
        ');
74
    }
75
76
    private function createArticleDetailsTrigger()
77
    {
78
        $this->connection->executeQuery('
79
            CREATE TRIGGER connect_article_details_update_trigger
80
            AFTER UPDATE
81
            ON s_articles_details
82
            FOR EACH ROW
83
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
84
        ');
85
        $this->connection->executeQuery('
86
            CREATE TRIGGER connect_article_details_insert_trigger
87
            AFTER INSERT
88
            ON s_articles_details
89
            FOR EACH ROW
90
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
91
        ');
92
        $this->connection->executeQuery('
93
            CREATE TRIGGER connect_article_details_delete_trigger
94
            AFTER DELETE
95
            ON s_articles_details
96
            FOR EACH ROW
97
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = OLD.articleID
98
        ');
99
    }
100
101
    private function createArticleAttributesTrigger()
102
    {
103
        $this->connection->executeQuery('
104
            CREATE TRIGGER connect_article_attributes_update_trigger
105
            AFTER UPDATE
106
            ON s_articles_attributes
107
            FOR EACH ROW
108
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
109
        ');
110
        $this->connection->executeQuery('
111
            CREATE TRIGGER connect_article_attributes_insert_trigger
112
            AFTER INSERT
113
            ON s_articles_attributes
114
            FOR EACH ROW
115
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
116
        ');
117
        $this->connection->executeQuery('
118
            CREATE TRIGGER connect_article_attributes_delete_trigger
119
            AFTER DELETE
120
            ON s_articles_attributes
121
            FOR EACH ROW
122
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = OLD.articleID
123
        ');
124
    }
125
126
    private function createArticleImagesTrigger()
127
    {
128
        $this->connection->executeQuery('
129
            CREATE TRIGGER connect_article_images_update_trigger
130
            AFTER UPDATE
131
            ON s_articles_img
132
            FOR EACH ROW
133
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
134
        ');
135
        $this->connection->executeQuery('
136
            CREATE TRIGGER connect_article_images_insert_trigger
137
            AFTER INSERT
138
            ON s_articles_img
139
            FOR EACH ROW
140
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
141
        ');
142
        $this->connection->executeQuery('
143
            CREATE TRIGGER connect_article_images_delete_trigger
144
            AFTER DELETE
145
            ON s_articles_img
146
            FOR EACH ROW
147
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = OLD.articleID
148
        ');
149
    }
150
151
    private function createArticleCategoriesTrigger()
152
    {
153
        $this->connection->executeQuery('
154
            CREATE TRIGGER connect_article_categories_update_trigger
155
            AFTER UPDATE
156
            ON s_articles_categories
157
            FOR EACH ROW
158
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
159
        ');
160
        $this->connection->executeQuery('
161
            CREATE TRIGGER connect_article_categories_insert_trigger
162
            AFTER INSERT
163
            ON s_articles_categories
164
            FOR EACH ROW
165
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
166
        ');
167
        $this->connection->executeQuery('
168
            CREATE TRIGGER connect_article_categories_delete_trigger
169
            AFTER DELETE
170
            ON s_articles_categories
171
            FOR EACH ROW
172
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = OLD.articleID
173
        ');
174
    }
175
176
    private function createArticlePricesTrigger()
177
    {
178
        $this->connection->executeQuery('
179
            CREATE TRIGGER connect_article_prices_update_trigger
180
            AFTER UPDATE
181
            ON s_articles_prices
182
            FOR EACH ROW
183
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
184
        ');
185
        $this->connection->executeQuery('
186
            CREATE TRIGGER connect_article_prices_insert_trigger
187
            AFTER INSERT
188
            ON s_articles_prices
189
            FOR EACH ROW
190
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
191
        ');
192
        $this->connection->executeQuery('
193
            CREATE TRIGGER connect_article_prices_delete_trigger
194
            AFTER DELETE
195
            ON s_articles_prices
196
            FOR EACH ROW
197
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = OLD.articleID
198
        ');
199
    }
200
201
    private function createArticleTranslationsTrigger()
202
    {
203
        $this->connection->executeQuery('
204
            CREATE TRIGGER connect_article_translations_update_trigger
205
            AFTER UPDATE
206
            ON s_articles_translations
207
            FOR EACH ROW
208
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
209
        ');
210
        $this->connection->executeQuery('
211
            CREATE TRIGGER connect_article_translations_insert_trigger
212
            AFTER INSERT
213
            ON s_articles_translations
214
            FOR EACH ROW
215
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = NEW.articleID
216
        ');
217
        $this->connection->executeQuery('
218
            CREATE TRIGGER connect_article_translations_delete_trigger
219
            AFTER DELETE
220
            ON s_articles_translations
221
            FOR EACH ROW
222
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id = OLD.articleID
223
        ');
224
    }
225
226
    private function createSupplierTrigger()
227
    {
228
        $this->connection->executeQuery('
229
            CREATE TRIGGER connect_supplier_trigger
230
            AFTER UPDATE
231
            ON s_articles_supplier
232
            FOR EACH ROW
233
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id IN 
234
                    (
235
                        SELECT id FROM s_articles WHERE supplierID = NEW.id
236
                    );
237
        ');
238
    }
239
240
    private function createTaxTrigger()
241
    {
242
        $this->connection->executeQuery('
243
            CREATE TRIGGER connect_tax_trigger
244
            AFTER UPDATE
245
            ON s_core_tax
246
            FOR EACH ROW
247
                IF (NEW.tax <> OLD.tax) THEN
248
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id IN 
249
                    (
250
                        SELECT id FROM s_articles WHERE taxID = NEW.id
251
                    );
252
                END IF;
253
        ');
254
    }
255
256
    private function createCategoriesTrigger()
257
    {
258
        $this->connection->executeQuery('
259
            CREATE TRIGGER connect_categories_trigger
260
            AFTER UPDATE
261
            ON s_categories
262
            FOR EACH ROW
263
                IF (NEW.description <> OLD.description) OR (NEW.parent <> OLD.parent) THEN
264
                UPDATE s_plugin_connect_items SET cron_update = 1 WHERE article_id IN 
265
                    (
266
                        SELECT articleID FROM s_articles_categories WHERE categoryID = NEW.id
267
                    );
268
                END IF;
269
        ');
270
    }
271
}