PluginProbe
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses / 2.8.0
FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses v2.8.0
2.10.0 2.10.01 2.9.1 2.9.0 2.8.1 2.8.0 2.7.7 2.7.5 2.7.0 2.6.01 2.6.0 2.5.0 2.4.01 trunk 1.0.90 1.0.91 1.0.92 1.0.93 1.0.94 1.0.95 1.0.96 1.0.97 1.0.98 1.0.99 1.1.0 All 77 releases
fluent-community / database / Migrations / NotificationUserMigrator.php

NotificationUserMigrator.php in FluentCommunity – Ultra-Fast High-Performance Social Network, Community, LMS & Online Courses 2.8.0, at database/Migrations/NotificationUserMigrator.php

92 lines 3.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 // phpcs:disable
3
4 namespace FluentCommunity\Database\Migrations;
5
6 class NotificationUserMigrator
7 {
8 /**
9 * Migrate the table.
10 *
11 * @return void
12 */
13 public static function migrate()
14 {
15 global $wpdb;
16
17 $charsetCollate = $wpdb->get_charset_collate();
18
19 $table = $wpdb->prefix . 'fcom_notification_users';
20 $indexPrefix = $wpdb->prefix . 'fcom_nu_';
21
22 if ($wpdb->get_var("SHOW TABLES LIKE '$table'") != $table) {
23 $sql = "CREATE TABLE $table (
24 `id` BIGINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
25 `object_type` VARCHAR(50) NULL DEFAULT 'notification',
26 `notification_type` VARCHAR(50) NULL DEFAULT 'web',
27 `object_id` BIGINT UNSIGNED NULL,
28 `user_id` BIGINT UNSIGNED NULL,
29 `is_read` TINYINT(1) UNSIGNED NULL DEFAULT 0,
30 `created_at` TIMESTAMP NULL,
31 `updated_at` TIMESTAMP NULL,
32 INDEX `{$indexPrefix}_mto_id_uio` (`user_id`, `is_read`, `object_type`),
33 INDEX `{$indexPrefix}_mto_id_oion` (`object_id`, `is_read`, `object_type`, `notification_type`),
34 INDEX `{$indexPrefix}_created_uid` (`created_at`, `user_id`)
35 ) $charsetCollate;";
36 dbDelta($sql);
37 } else {
38 self::maybeAlterDBColumns();
39 }
40 }
41
42 private static function maybeAlterDBColumns()
43 {
44 global $wpdb;
45 $table = $wpdb->prefix . 'fcom_notification_users';
46 // get column names
47 $column_names = $wpdb->get_col("DESC " . $table, 0);
48
49 if(in_array('notification_id', $column_names)) {
50 $wpdb->query("ALTER TABLE $table CHANGE `notification_id` `object_id` bigint unsigned NULL");
51 }
52
53 $newItems = ['object_type', 'notification_type'];
54 $newItems = array_diff($newItems, $column_names);
55 if($newItems) {
56 if(in_array('object_type', $newItems)) {
57 $wpdb->query("ALTER TABLE $table ADD object_type VARCHAR(50) NULL DEFAULT 'notification' AFTER id");
58 }
59 if(in_array('notification_type', $newItems)) {
60 $wpdb->query("ALTER TABLE $table ADD notification_type VARCHAR(50) NULL DEFAULT 'web' AFTER object_type");
61 }
62 }
63
64 $allIndexes = $wpdb->get_col("SHOW INDEX FROM $table", 2);
65 $previousIndexName = $wpdb->prefix . 'fcom_nu__mto_id_idx';
66 if(in_array($previousIndexName, $allIndexes)) {
67 // remove this index
68 $wpdb->query("ALTER TABLE $table DROP INDEX `{$previousIndexName}`");
69 }
70
71 $newIndex1 = $wpdb->prefix . 'fcom_nu__mto_id_uio';
72
73 if(in_array($newIndex1, $allIndexes)) {
74 // remove this index
75 $wpdb->query("ALTER TABLE $table DROP INDEX `{$newIndex1}`");
76 }
77
78 $index2 = $wpdb->prefix . 'fcom_nu__mto_id_oion';
79
80 if(!in_array($index2, $allIndexes)) {
81 // add this index
82 $wpdb->query("ALTER TABLE $table ADD INDEX `{$index2}` (`object_id`, `is_read`, `object_type`, `notification_type`)");
83 }
84
85 $createdIndex = $wpdb->prefix . 'fcom_nu__created_uid';
86
87 if(!in_array($createdIndex, $allIndexes)) {
88 $wpdb->query("ALTER TABLE $table ADD INDEX `{$createdIndex}` (`created_at`, `user_id`)");
89 }
90 }
91 }
92