Passed
Push — 1.11.x ( bce6cd...c146d9 )
by Angel Fernando Quiroz
12:25
created

plugin/buycourses/database.php (1 issue)

1
<?php
2
3
/* For license terms, see /license.txt */
4
5
use Doctrine\DBAL\Schema\Schema;
6
use Doctrine\DBAL\Types\Types;
7
8
/**
9
 * Plugin database installation script. Can only be executed if included
10
 * inside another script loading global.inc.php.
11
 *
12
 * Check if script can be called.
13
 */
14
if (!function_exists('api_get_path')) {
15
    exit('This script must be loaded through the Chamilo plugin installer sequence');
16
}
17
18
$entityManager = Database::getManager();
19
$pluginSchema = new Schema();
20
$connection = $entityManager->getConnection();
21
$platform = $connection->getDatabasePlatform();
22
$sm = $connection->getSchemaManager();
23
24
// Create tables
25
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_PAYPAL)) {
26
    $paypalTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_PAYPAL);
27
    $paypalTable->addColumn(
28
        'id',
29
        Types::INTEGER,
30
        ['autoincrement' => true, 'unsigned' => true]
31
    );
32
    $paypalTable->addColumn('username', Types::STRING);
33
    $paypalTable->addColumn('password', Types::STRING);
34
    $paypalTable->addColumn('signature', Types::STRING);
35
    $paypalTable->addColumn('sandbox', Types::BOOLEAN);
36
    $paypalTable->setPrimaryKey(['id']);
37
}
38
39
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_TRANSFER)) {
40
    $transferTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_TRANSFER);
41
    $transferTable->addColumn(
42
        'id',
43
        Types::INTEGER,
44
        ['autoincrement' => true, 'unsigned' => true]
45
    );
46
    $transferTable->addColumn('name', Types::STRING);
47
    $transferTable->addColumn('account', Types::STRING);
48
    $transferTable->addColumn('swift', Types::STRING);
49
    $transferTable->setPrimaryKey(['id']);
50
}
51
52
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_TPV_REDSYS)) {
53
    $tpvRedsysTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_TPV_REDSYS);
54
    $tpvRedsysTable->addColumn(
55
        'id',
56
        Types::INTEGER,
57
        ['autoincrement' => true, 'unsigned' => true]
58
    );
59
    $tpvRedsysTable->addColumn('merchantcode', Types::STRING);
60
    $tpvRedsysTable->addColumn('terminal', Types::STRING);
61
    $tpvRedsysTable->addColumn('currency', Types::STRING);
62
    $tpvRedsysTable->addColumn('kc', Types::STRING);
63
    $tpvRedsysTable->addColumn('url_redsys', Types::STRING);
64
    $tpvRedsysTable->addColumn('url_redsys_sandbox', Types::STRING);
65
    $tpvRedsysTable->addColumn('sandbox', Types::BOOLEAN);
66
    $tpvRedsysTable->setPrimaryKey(['id']);
67
}
68
69
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_CURRENCY)) {
70
    $currencyTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_CURRENCY);
71
    $currencyTable->addColumn(
72
        'id',
73
        Types::INTEGER,
74
        ['autoincrement' => true, 'unsigned' => true]
75
    );
76
    $currencyTable->addColumn(
77
        'country_code',
78
        Types::STRING,
79
        ['length' => 2]
80
    );
81
    $currencyTable->addColumn(
82
        'country_name',
83
        Types::STRING,
84
        ['length' => 255]
85
    );
86
    $currencyTable->addColumn(
87
        'iso_code',
88
        Types::STRING,
89
        ['length' => 3]
90
    );
91
    $currencyTable->addColumn('status', Types::BOOLEAN);
92
    $currencyTable->addUniqueIndex(['country_code']);
93
    $currencyTable->addIndex(['iso_code']);
94
    $currencyTable->setPrimaryKey(['id']);
95
}
96
97
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_ITEM)) {
98
    $itemTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_ITEM);
99
    $itemTable->addColumn(
100
        'id',
101
        Types::INTEGER,
102
        ['autoincrement' => true, 'unsigned' => true]
103
    );
104
    $itemTable->addColumn('product_type', Types::INTEGER);
105
    $itemTable->addColumn(
106
        'product_id',
107
        Types::INTEGER,
108
        ['unsigned' => true]
109
    );
110
    $itemTable->addColumn(
111
        'price',
112
        Types::DECIMAL,
113
        ['scale' => 2]
114
    );
115
    $itemTable->addColumn(
116
        'currency_id',
117
        Types::INTEGER,
118
        ['unsigned' => true]
119
    );
120
    $itemTable->addColumn(
121
        'tax_perc',
122
        Types::INTEGER,
123
        ['unsigned' => true, 'notnull' => false]
124
    );
125
    $itemTable->setPrimaryKey(['id']);
126
    $itemTable->addForeignKeyConstraint(
127
        $currencyTable,
128
        ['currency_id'],
129
        ['id'],
130
        ['onDelete' => 'CASCADE']
131
    );
132
}
133
134
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_ITEM_BENEFICIARY)) {
135
    $itemBeneficiary = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_ITEM_BENEFICIARY);
136
    $itemBeneficiary->addColumn(
137
        'id',
138
        Types::INTEGER,
139
        ['autoincrement' => true, 'unsigned' => true]
140
    );
141
    $itemBeneficiary->addColumn(
142
        'item_id',
143
        Types::INTEGER,
144
        ['unsigned' => true]
145
    );
146
    $itemBeneficiary->addColumn(
147
        'user_id',
148
        Types::INTEGER,
149
        ['unsigned' => true]
150
    );
151
    $itemBeneficiary->addColumn(
152
        'commissions',
153
        Types::INTEGER,
154
        ['unsigned' => true]
155
    );
156
    $itemBeneficiary->setPrimaryKey(['id']);
157
    $itemBeneficiary->addForeignKeyConstraint(
158
        $itemTable,
159
        ['item_id'],
160
        ['id'],
161
        ['onDelete' => 'CASCADE']
162
    );
163
}
164
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_COMMISSION)) {
165
    $commissions = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_COMMISSION);
166
    $commissions->addColumn(
167
        'id',
168
        Types::INTEGER,
169
        ['autoincrement' => true, 'unsigned' => true]
170
    );
171
    $commissions->addColumn(
172
        'commission',
173
        Types::INTEGER,
174
        ['unsigned' => true]
175
    );
176
    $commissions->setPrimaryKey(['id']);
177
}
178
179
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_PAYPAL_PAYOUTS)) {
180
    $saleCommissions = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_PAYPAL_PAYOUTS);
181
    $saleCommissions->addColumn(
182
        'id',
183
        Types::INTEGER,
184
        ['autoincrement' => true, 'unsigned' => true]
185
    );
186
    $saleCommissions->addColumn('date', Types::DATETIME_MUTABLE);
187
    $saleCommissions->addColumn('payout_date', Types::DATETIME_MUTABLE);
188
    $saleCommissions->addColumn(
189
        'sale_id',
190
        Types::INTEGER,
191
        ['unsigned' => true]
192
    );
193
    $saleCommissions->addColumn(
194
        'user_id',
195
        Types::INTEGER,
196
        ['unsigned' => true]
197
    );
198
    $saleCommissions->addColumn(
199
        'commission',
200
        Types::DECIMAL,
201
        ['scale' => 2]
202
    );
203
    $saleCommissions->addColumn(
204
        'status',
205
        Types::INTEGER,
206
        ['unsigned' => true]
207
    );
208
    $saleCommissions->setPrimaryKey(['id']);
209
}
210
211
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_SALE)) {
212
    $saleTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_SALE);
213
    $saleTable->addColumn(
214
        'id',
215
        Types::INTEGER,
216
        ['autoincrement' => true, 'unsigned' => true]
217
    );
218
    $saleTable->addColumn('reference', Types::STRING);
219
    $saleTable->addColumn('date', Types::DATETIME_MUTABLE);
220
    $saleTable->addColumn(
221
        'user_id',
222
        Types::INTEGER,
223
        ['unsigned' => true]
224
    );
225
    $saleTable->addColumn('product_type', Types::INTEGER);
226
    $saleTable->addColumn('product_name', Types::STRING);
227
    $saleTable->addColumn(
228
        'product_id',
229
        Types::INTEGER,
230
        ['unsigned' => true]
231
    );
232
    $saleTable->addColumn(
233
        'price',
234
        Types::DECIMAL,
235
        ['scale' => 2]
236
    );
237
    $saleTable->addColumn(
238
        'price_without_tax',
239
        Types::DECIMAL,
240
        ['scale' => 2, 'notnull' => false]
241
    );
242
    $saleTable->addColumn(
243
        'tax_perc',
244
        Types::INTEGER,
245
        ['unsigned' => true, 'notnull' => false]
246
    );
247
    $saleTable->addColumn(
248
        'tax_amount',
249
        Types::DECIMAL,
250
        ['scale' => 2, 'notnull' => false]
251
    );
252
    $saleTable->addColumn(
253
        'currency_id',
254
        Types::INTEGER,
255
        ['unsigned' => true]
256
    );
257
    $saleTable->addColumn('status', Types::INTEGER);
258
    $saleTable->addColumn('payment_type', Types::INTEGER);
259
    $saleTable->addColumn('invoice', Types::INTEGER);
260
    $saleTable->addColumn(
261
        'price_without_discount',
262
        Types::DECIMAL,
263
        ['scale' => 2, 'notnull' => false]
264
    );
265
    $saleTable->addColumn(
266
        'discount_amount',
267
        Types::DECIMAL,
268
        ['scale' => 2, 'notnull' => false]
269
    );
270
    $saleTable->setPrimaryKey(['id']);
271
    $saleTable->addForeignKeyConstraint(
272
        $currencyTable,
273
        ['currency_id'],
274
        ['id'],
275
        ['onDelete' => 'CASCADE']
276
    );
277
}
278
279
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_SERVICES)) {
280
    $servicesTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_SERVICES);
281
    $servicesTable->addColumn(
282
        'id',
283
        Types::INTEGER,
284
        ['autoincrement' => true, 'unsigned' => true]
285
    );
286
    $servicesTable->addColumn('name', Types::STRING);
287
    $servicesTable->addColumn('description', Types::TEXT);
288
    $servicesTable->addColumn(
289
        'price',
290
        Types::DECIMAL,
291
        ['scale' => 2]
292
    );
293
    $servicesTable->addColumn('duration_days', Types::INTEGER);
294
    $servicesTable->addColumn('applies_to', Types::INTEGER);
295
    $servicesTable->addColumn('owner_id', Types::INTEGER);
296
    $servicesTable->addColumn('visibility', Types::INTEGER);
297
    $servicesTable->addColumn('video_url', Types::STRING);
298
    $servicesTable->addColumn('image', Types::STRING);
299
    $servicesTable->addColumn('service_information', Types::TEXT);
300
    $servicesTable->setPrimaryKey(['id']);
301
}
302
303
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_SERVICES_SALE)) {
304
    $servicesNodeTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_SERVICES_SALE);
305
    $servicesNodeTable->addColumn(
306
        'id',
307
        Types::INTEGER,
308
        ['autoincrement' => true, 'unsigned' => true]
309
    );
310
    $servicesNodeTable->addColumn(
311
        'service_id',
312
        Types::INTEGER,
313
        ['unsigned' => true]
314
    );
315
    $servicesNodeTable->addColumn('reference', Types::STRING);
316
    $servicesNodeTable->addColumn('currency_id', Types::INTEGER);
317
    $servicesNodeTable->addColumn(
318
        'price',
319
        Types::DECIMAL,
320
        ['scale' => 2]
321
    );
322
    $servicesNodeTable->addColumn(
323
        'price_without_tax',
324
        Types::DECIMAL,
325
        ['scale' => 2, 'notnull' => false]
326
    );
327
    $servicesNodeTable->addColumn(
328
        'tax_perc',
329
        Types::INTEGER,
330
        ['unsigned' => true, 'notnull' => false]
331
    );
332
    $servicesNodeTable->addColumn(
333
        'tax_amount',
334
        Types::DECIMAL,
335
        ['scale' => 2, 'notnull' => false]
336
    );
337
    $servicesNodeTable->addColumn('node_type', Types::INTEGER);
338
    $servicesNodeTable->addColumn('node_id', Types::INTEGER);
339
    $servicesNodeTable->addColumn('buyer_id', Types::INTEGER);
340
    $servicesNodeTable->addColumn('buy_date', Types::DATETIME_MUTABLE);
341
    $servicesNodeTable->addColumn(
342
        'date_start',
343
        Types::DATETIME_MUTABLE,
344
        ['notnull' => false]
345
    );
346
    $servicesNodeTable->addColumn(
347
        'date_end',
348
        Types::DATETIME_MUTABLE
349
    );
350
    $servicesNodeTable->addColumn('status', Types::INTEGER);
351
    $servicesNodeTable->addColumn('payment_type', Types::INTEGER);
352
    $servicesNodeTable->addColumn('invoice', Types::INTEGER);
353
    $servicesNodeTable->addColumn(
354
        'price_without_discount',
355
        Types::DECIMAL,
356
        ['scale' => 2, 'notnull' => false]
357
    );
358
    $servicesNodeTable->addColumn(
359
        'discount_amount',
360
        Types::DECIMAL,
361
        ['scale' => 2, 'notnull' => false]
362
    );
363
    $servicesNodeTable->setPrimaryKey(['id']);
364
    $servicesNodeTable->addForeignKeyConstraint(
365
        $servicesTable,
366
        ['service_id'],
367
        ['id'],
368
        ['onDelete' => 'CASCADE']
369
    );
370
}
371
372
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_CULQI)) {
373
    $culqiTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_CULQI);
374
    $culqiTable->addColumn(
375
        'id',
376
        Types::INTEGER,
377
        ['autoincrement' => true, 'unsigned' => true]
378
    );
379
    $culqiTable->addColumn('commerce_code', Types::STRING);
380
    $culqiTable->addColumn('api_key', Types::STRING);
381
    $culqiTable->addColumn('integration', Types::INTEGER);
382
    $culqiTable->setPrimaryKey(['id']);
383
}
384
385
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_GLOBAL_CONFIG)) {
386
    $globalTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_GLOBAL_CONFIG);
387
    $globalTable->addColumn(
388
        'id',
389
        Types::INTEGER,
390
        ['autoincrement' => true, 'unsigned' => true]
391
    );
392
    $globalTable->addColumn('terms_and_conditions', Types::TEXT);
393
    $globalTable->addColumn('global_tax_perc', Types::INTEGER);
394
    $globalTable->addColumn('tax_applies_to', Types::INTEGER);
395
    $globalTable->addColumn('tax_name', Types::STRING);
396
    $globalTable->addColumn('seller_name', Types::STRING);
397
    $globalTable->addColumn('seller_id', Types::STRING);
398
    $globalTable->addColumn('seller_address', Types::STRING);
399
    $globalTable->addColumn('seller_email', Types::STRING);
400
    $globalTable->addColumn('next_number_invoice', Types::INTEGER);
401
    $globalTable->addColumn('invoice_series', Types::STRING);
402
    $globalTable->addColumn('sale_email', Types::STRING);
403
    $globalTable->addColumn('info_email_extra', Types::TEXT);
404
    $globalTable->setPrimaryKey(['id']);
405
} else {
406
    $globalTable = $pluginSchema->getTable(BuyCoursesPlugin::TABLE_GLOBAL_CONFIG);
407
408
    if (!$globalTable->hasColumn('info_email_extra')) {
409
        $globalTable->addColumn('info_email_extra', Types::TEXT);
410
    }
411
}
412
413
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_INVOICE)) {
414
    $invoiceTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_INVOICE);
415
    $invoiceTable->addColumn(
416
        'id',
417
        Types::INTEGER,
418
        ['autoincrement' => true, 'unsigned' => true]
419
    );
420
    $invoiceTable->addColumn('sale_id', Types::INTEGER);
421
    $invoiceTable->addColumn('is_service', Types::INTEGER);
422
    $invoiceTable->addColumn(
423
        'num_invoice',
424
        Types::INTEGER,
425
        ['unsigned' => true, 'notnull' => false]
426
    );
427
    $invoiceTable->addColumn(
428
        'year',
429
        Types::INTEGER,
430
        ['unsigned' => true, 'notnull' => false]
431
    );
432
    $invoiceTable->addColumn('serie', Types::STRING);
433
    $invoiceTable->addColumn('date_invoice', Types::DATETIME_MUTABLE);
434
    $invoiceTable->setPrimaryKey(['id']);
435
}
436
437
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_COUPON)) {
438
    $couponTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_COUPON);
439
    $couponTable->addColumn(
440
        'id',
441
        Types::INTEGER,
442
        ['autoincrement' => true, 'unsigned' => true]
443
    );
444
    $couponTable->addColumn('code', Types::STRING);
445
    $couponTable->addColumn('discount_type', Types::INTEGER);
446
    $couponTable->addColumn('discount_amount', Types::INTEGER);
447
    $couponTable->addColumn('valid_start', Types::DATETIME_MUTABLE);
448
    $couponTable->addColumn('valid_end', Types::DATETIME_MUTABLE);
449
    $couponTable->addColumn('delivered', Types::INTEGER);
450
    $couponTable->addColumn('active', Types::TINYINT);
451
    $couponTable->setPrimaryKey(['id']);
452
}
453
454
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_COUPON_ITEM)) {
455
    $couponItemTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_COUPON_ITEM);
456
    $couponItemTable->addColumn(
457
        'id',
458
        Types::INTEGER,
459
        ['autoincrement' => true, 'unsigned' => true]
460
    );
461
    $couponItemTable->addColumn('coupon_id', Types::INTEGER);
462
    $couponItemTable->addColumn('product_type', Types::INTEGER);
463
    $couponItemTable->addColumn('product_id', Types::INTEGER);
464
    $couponItemTable->setPrimaryKey(['id']);
465
}
466
467
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_COUPON_SERVICE)) {
468
    $couponService = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_COUPON_SERVICE);
469
    $couponService->addColumn(
470
        'id',
471
        Types::INTEGER,
472
        ['autoincrement' => true, 'unsigned' => true]
473
    );
474
    $couponService->addColumn('coupon_id', Types::INTEGER);
475
    $couponService->addColumn('service_id', Types::INTEGER);
476
    $couponService->setPrimaryKey(['id']);
477
}
478
479
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_COUPON_SALE)) {
480
    $couponSaleTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_COUPON_SALE);
481
    $couponSaleTable->addColumn(
482
        'id',
483
        Types::INTEGER,
484
        ['autoincrement' => true, 'unsigned' => true]
485
    );
486
    $couponSaleTable->addColumn('coupon_id', Types::INTEGER);
487
    $couponSaleTable->addColumn('sale_id', Types::INTEGER);
488
    $couponSaleTable->setPrimaryKey(['id']);
489
}
490
491
if (false === $sm->tablesExist(BuyCoursesPlugin::TABLE_COUPON_SERVICE_SALE)) {
492
    $couponSaleTable = $pluginSchema->createTable(BuyCoursesPlugin::TABLE_COUPON_SERVICE_SALE);
493
    $couponSaleTable->addColumn(
494
        'id',
495
        Types::INTEGER,
496
        ['autoincrement' => true, 'unsigned' => true]
497
    );
498
    $couponSaleTable->addColumn('coupon_id', Types::INTEGER);
499
    $couponSaleTable->addColumn('service_sale_id', Types::INTEGER);
500
    $couponSaleTable->setPrimaryKey(['id']);
501
}
502
503
$queries = $pluginSchema->toSql($platform);
504
505
foreach ($queries as $query) {
506
    Database::query($query);
507
}
508
509
// Insert data
510
$paypalTable = Database::get_main_table(BuyCoursesPlugin::TABLE_PAYPAL);
511
$currencyTable = Database::get_main_table(BuyCoursesPlugin::TABLE_CURRENCY);
512
$itemTable = Database::get_main_table(BuyCoursesPlugin::TABLE_ITEM);
513
$saleTable = Database::get_main_table(BuyCoursesPlugin::TABLE_SALE);
514
$commissionTable = Database::get_main_table(BuyCoursesPlugin::TABLE_COMMISSION);
515
$extraFieldTable = Database::get_main_table(TABLE_EXTRA_FIELD);
516
$culqiTable = Database::get_main_table(BuyCoursesPlugin::TABLE_CULQI);
517
$globalTable = Database::get_main_table(BuyCoursesPlugin::TABLE_GLOBAL_CONFIG);
518
$tpvRedsysTable = Database::get_main_table(BuyCoursesPlugin::TABLE_TPV_REDSYS);
519
520
$paypalExtraField = Database::select(
521
    "*",
522
    $extraFieldTable,
523
    [
524
        'where' => ['variable = ?' => 'paypal'],
525
    ],
526
    'first'
527
);
528
529
if (!$paypalExtraField) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $paypalExtraField of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
530
    Database::insert(
531
        $extraFieldTable,
532
        [
533
            'extra_field_type' => 1,
534
            'field_type' => 1,
535
            'variable' => 'paypal',
536
            'display_text' => 'Paypal',
537
            'default_value' => '',
538
            'field_order' => 0,
539
            'visible_to_self' => 1,
540
            'changeable' => 1,
541
            'filter' => 0,
542
            'created_at' => api_get_utc_datetime(),
543
        ]
544
    );
545
}
546
547
Database::insert(
548
    $paypalTable,
549
    [
550
        'username' => '',
551
        'password' => '',
552
        'signature' => '',
553
        'sandbox' => true,
554
    ]
555
);
556
557
Database::insert(
558
    $tpvRedsysTable,
559
    [
560
        'url_redsys' => 'https://sis.redsys.es/sis/realizarPago',
561
        'url_redsys_sandbox' => 'https://sis-t.redsys.es:25443/sis/realizarPago',
562
    ]
563
);
564
565
Database::insert(
566
    $culqiTable,
567
    [
568
        'commerce_code' => '',
569
        'api_key' => '',
570
        'integration' => 1,
571
    ]
572
);
573
574
Database::insert(
575
    $globalTable,
576
    [
577
        'terms_and_conditions' => '',
578
    ]
579
);
580
581
Database::insert(
582
    $commissionTable,
583
    [
584
        'commission' => 0,
585
    ]
586
);
587
588
$currencies = [
589
    ['AD', 'Andorra', 'EUR', 'AND'],
590
    ['AE', 'United Arab Emirates', 'AED', 'ARE'],
591
    ['AF', 'Afghanistan', 'AFN', 'AFG'],
592
    ['AG', 'Antigua and Barbuda', 'XCD', 'ATG'],
593
    ['AI', 'Anguilla', 'XCD', 'AIA'],
594
    ['AL', 'Albania', 'ALL', 'ALB'],
595
    ['AM', 'Armenia', 'AMD', 'ARM'],
596
    ['AO', 'Angola', 'AOA', 'AGO'],
597
    ['AR', 'Argentina', 'ARS', 'ARG'],
598
    ['AS', 'American Samoa', 'USD', 'ASM'],
599
    ['AT', 'Austria', 'EUR', 'AUT'],
600
    ['AU', 'Australia', 'AUD', 'AUS'],
601
    ['AW', 'Aruba', 'AWG', 'ABW'],
602
    ['AX', '&Aring;land', 'EUR', 'ALA'],
603
    ['AZ', 'Azerbaijan', 'AZN', 'AZE'],
604
    ['BA', 'Bosnia and Herzegovina', 'BAM', 'BIH'],
605
    ['BB', 'Barbados', 'BBD', 'BRB'],
606
    ['BD', 'Bangladesh', 'BDT', 'BGD'],
607
    ['BE', 'Belgium', 'EUR', 'BEL'],
608
    ['BF', 'Burkina Faso', 'XOF', 'BFA'],
609
    ['BG', 'Bulgaria', 'BGN', 'BGR'],
610
    ['BH', 'Bahrain', 'BHD', 'BHR'],
611
    ['BI', 'Burundi', 'BIF', 'BDI'],
612
    ['BJ', 'Benin', 'XOF', 'BEN'],
613
    ['BL', 'Saint Barth&eacute;lemy', 'EUR', 'BLM'],
614
    ['BM', 'Bermuda', 'BMD', 'BMU'],
615
    ['BN', 'Brunei', 'BND', 'BRN'],
616
    ['BO', 'Bolivia', 'BOB', 'BOL'],
617
    ['BQ', 'Bonaire', 'USD', 'BES'],
618
    ['BR', 'Brazil', 'BRL', 'BRA'],
619
    ['BS', 'Bahamas', 'BSD', 'BHS'],
620
    ['BT', 'Bhutan', 'BTN', 'BTN'],
621
    ['BV', 'Bouvet Island', 'NOK', 'BVT'],
622
    ['BW', 'Botswana', 'BWP', 'BWA'],
623
    ['BY', 'Belarus', 'BYR', 'BLR'],
624
    ['BZ', 'Belize', 'BZD', 'BLZ'],
625
    ['CA', 'Canada', 'CAD', 'CAN'],
626
    ['CC', 'Cocos [Keeling] Islands', 'AUD', 'CCK'],
627
    ['CD', 'Congo', 'CDF', 'COD'],
628
    ['CF', 'Central African Republic', 'XAF', 'CAF'],
629
    ['CG', 'Republic of the Congo', 'XAF', 'COG'],
630
    ['CH', 'Switzerland', 'CHF', 'CHE'],
631
    ['CI', 'Ivory Coast', 'XOF', 'CIV'],
632
    ['CK', 'Cook Islands', 'NZD', 'COK'],
633
    ['CL', 'Chile', 'CLP', 'CHL'],
634
    ['CM', 'Cameroon', 'XAF', 'CMR'],
635
    ['CN', 'China', 'CNY', 'CHN'],
636
    ['CO', 'Colombia', 'COP', 'COL'],
637
    ['CR', 'Costa Rica', 'CRC', 'CRI'],
638
    ['CU', 'Cuba', 'CUP', 'CUB'],
639
    ['CV', 'Cape Verde', 'CVE', 'CPV'],
640
    ['CW', 'Curacao', 'ANG', 'CUW'],
641
    ['CX', 'Christmas Island', 'AUD', 'CXR'],
642
    ['CY', 'Cyprus', 'EUR', 'CYP'],
643
    ['CZ', 'Czechia', 'CZK', 'CZE'],
644
    ['DE', 'Germany', 'EUR', 'DEU'],
645
    ['DJ', 'Djibouti', 'DJF', 'DJI'],
646
    ['DK', 'Denmark', 'DKK', 'DNK'],
647
    ['DM', 'Dominica', 'XCD', 'DMA'],
648
    ['DO', 'Dominican Republic', 'DOP', 'DOM'],
649
    ['DZ', 'Algeria', 'DZD', 'DZA'],
650
    ['EC', 'Ecuador', 'USD', 'ECU'],
651
    ['EE', 'Estonia', 'EUR', 'EST'],
652
    ['EG', 'Egypt', 'EGP', 'EGY'],
653
    ['EH', 'Western Sahara', 'MAD', 'ESH'],
654
    ['ER', 'Eritrea', 'ERN', 'ERI'],
655
    ['ES', 'Spain', 'EUR', 'ESP'],
656
    ['ET', 'Ethiopia', 'ETB', 'ETH'],
657
    ['FI', 'Finland', 'EUR', 'FIN'],
658
    ['FJ', 'Fiji', 'FJD', 'FJI'],
659
    ['FK', 'Falkland Islands', 'FKP', 'FLK'],
660
    ['FM', 'Micronesia', 'USD', 'FSM'],
661
    ['FO', 'Faroe Islands', 'DKK', 'FRO'],
662
    ['FR', 'France', 'EUR', 'FRA'],
663
    ['GA', 'Gabon', 'XAF', 'GAB'],
664
    ['GB', 'United Kingdom', 'GBP', 'GBR'],
665
    ['GD', 'Grenada', 'XCD', 'GRD'],
666
    ['GE', 'Georgia', 'GEL', 'GEO'],
667
    ['GF', 'French Guiana', 'EUR', 'GUF'],
668
    ['GG', 'Guernsey', 'GBP', 'GGY'],
669
    ['GH', 'Ghana', 'GHS', 'GHA'],
670
    ['GI', 'Gibraltar', 'GIP', 'GIB'],
671
    ['GL', 'Greenland', 'DKK', 'GRL'],
672
    ['GM', 'Gambia', 'GMD', 'GMB'],
673
    ['GN', 'Guinea', 'GNF', 'GIN'],
674
    ['GP', 'Guadeloupe', 'EUR', 'GLP'],
675
    ['GQ', 'Equatorial Guinea', 'XAF', 'GNQ'],
676
    ['GR', 'Greece', 'EUR', 'GRC'],
677
    ['GS', 'South Georgia and the South Sandwich Islands', 'GBP', 'SGS'],
678
    ['GT', 'Guatemala', 'GTQ', 'GTM'],
679
    ['GU', 'Guam', 'USD', 'GUM'],
680
    ['GW', 'Guinea-Bissau', 'XOF', 'GNB'],
681
    ['GY', 'Guyana', 'GYD', 'GUY'],
682
    ['HK', 'Hong Kong', 'HKD', 'HKG'],
683
    ['HM', 'Heard Island and McDonald Islands', 'AUD', 'HMD'],
684
    ['HN', 'Honduras', 'HNL', 'HND'],
685
    ['HR', 'Croatia', 'HRK', 'HRV'],
686
    ['HT', 'Haiti', 'HTG', 'HTI'],
687
    ['HU', 'Hungary', 'HUF', 'HUN'],
688
    ['ID', 'Indonesia', 'IDR', 'IDN'],
689
    ['IE', 'Ireland', 'EUR', 'IRL'],
690
    ['IL', 'Israel', 'ILS', 'ISR'],
691
    ['IM', 'Isle of Man', 'GBP', 'IMN'],
692
    ['IN', 'India', 'INR', 'IND'],
693
    ['IO', 'British Indian Ocean Territory', 'USD', 'IOT'],
694
    ['IQ', 'Iraq', 'IQD', 'IRQ'],
695
    ['IR', 'Iran', 'IRR', 'IRN'],
696
    ['IS', 'Iceland', 'ISK', 'ISL'],
697
    ['IT', 'Italy', 'EUR', 'ITA'],
698
    ['JE', 'Jersey', 'GBP', 'JEY'],
699
    ['JM', 'Jamaica', 'JMD', 'JAM'],
700
    ['JO', 'Jordan', 'JOD', 'JOR'],
701
    ['JP', 'Japan', 'JPY', 'JPN'],
702
    ['KE', 'Kenya', 'KES', 'KEN'],
703
    ['KG', 'Kyrgyzstan', 'KGS', 'KGZ'],
704
    ['KH', 'Cambodia', 'KHR', 'KHM'],
705
    ['KI', 'Kiribati', 'AUD', 'KIR'],
706
    ['KM', 'Comoros', 'KMF', 'COM'],
707
    ['KN', 'Saint Kitts and Nevis', 'XCD', 'KNA'],
708
    ['KP', 'North Korea', 'KPW', 'PRK'],
709
    ['KR', 'South Korea', 'KRW', 'KOR'],
710
    ['KW', 'Kuwait', 'KWD', 'KWT'],
711
    ['KY', 'Cayman Islands', 'KYD', 'CYM'],
712
    ['KZ', 'Kazakhstan', 'KZT', 'KAZ'],
713
    ['LA', 'Laos', 'LAK', 'LAO'],
714
    ['LB', 'Lebanon', 'LBP', 'LBN'],
715
    ['LC', 'Saint Lucia', 'XCD', 'LCA'],
716
    ['LI', 'Liechtenstein', 'CHF', 'LIE'],
717
    ['LK', 'Sri Lanka', 'LKR', 'LKA'],
718
    ['LR', 'Liberia', 'LRD', 'LBR'],
719
    ['LS', 'Lesotho', 'LSL', 'LSO'],
720
    ['LT', 'Lithuania', 'LTL', 'LTU'],
721
    ['LU', 'Luxembourg', 'EUR', 'LUX'],
722
    ['LV', 'Latvia', 'LVL', 'LVA'],
723
    ['LY', 'Libya', 'LYD', 'LBY'],
724
    ['MA', 'Morocco', 'MAD', 'MAR'],
725
    ['MC', 'Monaco', 'EUR', 'MCO'],
726
    ['MD', 'Moldova', 'MDL', 'MDA'],
727
    ['ME', 'Montenegro', 'EUR', 'MNE'],
728
    ['MF', 'Saint Martin', 'EUR', 'MAF'],
729
    ['MG', 'Madagascar', 'MGA', 'MDG'],
730
    ['MH', 'Marshall Islands', 'USD', 'MHL'],
731
    ['MK', 'Macedonia', 'MKD', 'MKD'],
732
    ['ML', 'Mali', 'XOF', 'MLI'],
733
    ['MM', 'Myanmar [Burma]', 'MMK', 'MMR'],
734
    ['MN', 'Mongolia', 'MNT', 'MNG'],
735
    ['MO', 'Macao', 'MOP', 'MAC'],
736
    ['MP', 'Northern Mariana Islands', 'USD', 'MNP'],
737
    ['MQ', 'Martinique', 'EUR', 'MTQ'],
738
    ['MR', 'Mauritania', 'MRO', 'MRT'],
739
    ['MS', 'Montserrat', 'XCD', 'MSR'],
740
    ['MT', 'Malta', 'EUR', 'MLT'],
741
    ['MU', 'Mauritius', 'MUR', 'MUS'],
742
    ['MV', 'Maldives', 'MVR', 'MDV'],
743
    ['MW', 'Malawi', 'MWK', 'MWI'],
744
    ['MX', 'Mexico', 'MXN', 'MEX'],
745
    ['MY', 'Malaysia', 'MYR', 'MYS'],
746
    ['MZ', 'Mozambique', 'MZN', 'MOZ'],
747
    ['NA', 'Namibia', 'NAD', 'NAM'],
748
    ['NC', 'New Caledonia', 'XPF', 'NCL'],
749
    ['NE', 'Niger', 'XOF', 'NER'],
750
    ['NF', 'Norfolk Island', 'AUD', 'NFK'],
751
    ['NG', 'Nigeria', 'NGN', 'NGA'],
752
    ['NI', 'Nicaragua', 'NIO', 'NIC'],
753
    ['NL', 'Netherlands', 'EUR', 'NLD'],
754
    ['NO', 'Norway', 'NOK', 'NOR'],
755
    ['NP', 'Nepal', 'NPR', 'NPL'],
756
    ['NR', 'Nauru', 'AUD', 'NRU'],
757
    ['NU', 'Niue', 'NZD', 'NIU'],
758
    ['NZ', 'New Zealand', 'NZD', 'NZL'],
759
    ['OM', 'Oman', 'OMR', 'OMN'],
760
    ['PA', 'Panama', 'PAB', 'PAN'],
761
    ['PE', 'Peru', 'PEN', 'PER'],
762
    ['PF', 'French Polynesia', 'XPF', 'PYF'],
763
    ['PG', 'Papua New Guinea', 'PGK', 'PNG'],
764
    ['PH', 'Philippines', 'PHP', 'PHL'],
765
    ['PK', 'Pakistan', 'PKR', 'PAK'],
766
    ['PL', 'Poland', 'PLN', 'POL'],
767
    ['PM', 'Saint Pierre and Miquelon', 'EUR', 'SPM'],
768
    ['PN', 'Pitcairn Islands', 'NZD', 'PCN'],
769
    ['PR', 'Puerto Rico', 'USD', 'PRI'],
770
    ['PS', 'Palestine', 'ILS', 'PSE'],
771
    ['PT', 'Portugal', 'EUR', 'PRT'],
772
    ['PW', 'Palau', 'USD', 'PLW'],
773
    ['PY', 'Paraguay', 'PYG', 'PRY'],
774
    ['QA', 'Qatar', 'QAR', 'QAT'],
775
    ['RE', 'R&eacute;union', 'EUR', 'REU'],
776
    ['RO', 'Romania', 'RON', 'ROU'],
777
    ['RS', 'Serbia', 'RSD', 'SRB'],
778
    ['RU', 'Russia', 'RUB', 'RUS'],
779
    ['RW', 'Rwanda', 'RWF', 'RWA'],
780
    ['SA', 'Saudi Arabia', 'SAR', 'SAU'],
781
    ['SB', 'Solomon Islands', 'SBD', 'SLB'],
782
    ['SC', 'Seychelles', 'SCR', 'SYC'],
783
    ['SD', 'Sudan', 'SDG', 'SDN'],
784
    ['SE', 'Sweden', 'SEK', 'SWE'],
785
    ['SG', 'Singapore', 'SGD', 'SGP'],
786
    ['SH', 'Saint Helena', 'SHP', 'SHN'],
787
    ['SI', 'Slovenia', 'EUR', 'SVN'],
788
    ['SJ', 'Svalbard and Jan Mayen', 'NOK', 'SJM'],
789
    ['SK', 'Slovakia', 'EUR', 'SVK'],
790
    ['SL', 'Sierra Leone', 'SLL', 'SLE'],
791
    ['SM', 'San Marino', 'EUR', 'SMR'],
792
    ['SN', 'Senegal', 'XOF', 'SEN'],
793
    ['SO', 'Somalia', 'SOS', 'SOM'],
794
    ['SR', 'Suriname', 'SRD', 'SUR'],
795
    ['SS', 'South Sudan', 'SSP', 'SSD'],
796
    ['ST', 'S&atilde;o Tom&eacute; and Pr&iacute;ncipe', 'STD', 'STP'],
797
    ['SV', 'El Salvador', 'USD', 'SLV'],
798
    ['SX', 'Sint Maarten', 'ANG', 'SXM'],
799
    ['SY', 'Syria', 'SYP', 'SYR'],
800
    ['SZ', 'Swaziland', 'SZL', 'SWZ'],
801
    ['TC', 'Turks and Caicos Islands', 'USD', 'TCA'],
802
    ['TD', 'Chad', 'XAF', 'TCD'],
803
    ['TF', 'French Southern Territories', 'EUR', 'ATF'],
804
    ['TG', 'Togo', 'XOF', 'TGO'],
805
    ['TH', 'Thailand', 'THB', 'THA'],
806
    ['TJ', 'Tajikistan', 'TJS', 'TJK'],
807
    ['TK', 'Tokelau', 'NZD', 'TKL'],
808
    ['TL', 'East Timor', 'USD', 'TLS'],
809
    ['TM', 'Turkmenistan', 'TMT', 'TKM'],
810
    ['TN', 'Tunisia', 'TND', 'TUN'],
811
    ['TO', 'Tonga', 'TOP', 'TON'],
812
    ['TR', 'Turkey', 'TRY', 'TUR'],
813
    ['TT', 'Trinidad and Tobago', 'TTD', 'TTO'],
814
    ['TV', 'Tuvalu', 'AUD', 'TUV'],
815
    ['TW', 'Taiwan', 'TWD', 'TWN'],
816
    ['TZ', 'Tanzania', 'TZS', 'TZA'],
817
    ['UA', 'Ukraine', 'UAH', 'UKR'],
818
    ['UG', 'Uganda', 'UGX', 'UGA'],
819
    ['UM', 'U.S. Minor Outlying Islands', 'USD', 'UMI'],
820
    ['US', 'United States', 'USD', 'USA'],
821
    ['UY', 'Uruguay', 'UYU', 'URY'],
822
    ['UZ', 'Uzbekistan', 'UZS', 'UZB'],
823
    ['VA', 'Vatican City', 'EUR', 'VAT'],
824
    ['VC', 'Saint Vincent and the Grenadines', 'XCD', 'VCT'],
825
    ['VE', 'Venezuela', 'VEF', 'VEN'],
826
    ['VG', 'British Virgin Islands', 'USD', 'VGB'],
827
    ['VI', 'U.S. Virgin Islands', 'USD', 'VIR'],
828
    ['VN', 'Vietnam', 'VND', 'VNM'],
829
    ['VU', 'Vanuatu', 'VUV', 'VUT'],
830
    ['WF', 'Wallis and Futuna', 'XPF', 'WLF'],
831
    ['WS', 'Samoa', 'WST', 'WSM'],
832
    ['XK', 'Kosovo', 'EUR', 'XKX'],
833
    ['YE', 'Yemen', 'YER', 'YEM'],
834
    ['YT', 'Mayotte', 'EUR', 'MYT'],
835
    ['ZA', 'South Africa', 'ZAR', 'ZAF'],
836
    ['ZM', 'Zambia', 'ZMK', 'ZMB'],
837
    ['ZW', 'Zimbabwe', 'ZWL', 'ZWE'],
838
];
839
840
foreach ($currencies as $currency) {
841
    $value = Database::select(
842
        "*",
843
        $currencyTable,
844
        [
845
            'where' => ['country_code = ?' => $currency[0]],
846
        ],
847
        'first'
848
    );
849
850
    if (!empty($value)) {
851
        continue;
852
    }
853
854
    Database::insert(
855
        $currencyTable,
856
        [
857
            'country_code' => $currency[0],
858
            'country_name' => $currency[1],
859
            'iso_code' => $currency[2],
860
        ]
861
    );
862
}
863
864
$fieldlabel = 'buycourses_company';
865
$fieldtype = '1';
866
$fieldtitle = BuyCoursesPlugin::get_lang('Company');
867
$fielddefault = '';
868
$field_id = UserManager::create_extra_field($fieldlabel, $fieldtype, $fieldtitle, $fielddefault);
869
870
$fieldlabel = 'buycourses_vat';
871
$fieldtype = '1';
872
$fieldtitle = BuyCoursesPlugin::get_lang('VAT');
873
$fielddefault = '';
874
$field_id = UserManager::create_extra_field($fieldlabel, $fieldtype, $fieldtitle, $fielddefault);
875
876
$fieldlabel = 'buycourses_address';
877
$fieldtype = '1';
878
$fieldtitle = BuyCoursesPlugin::get_lang('Address');
879
$fielddefault = '';
880
$field_id = UserManager::create_extra_field($fieldlabel, $fieldtype, $fieldtitle, $fielddefault);
881