From c4aa5cdb5e90ad4b420e22772797d16980232a2b Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Wed, 15 Apr 2026 18:38:55 +0000
Subject: [PATCH] =Updating custom tables to utilize CustomTable.php
---
inc/registry/CheckCustomTables.php | 1407 +++++++++++++++++++++++++++++-----------------------------
1 files changed, 708 insertions(+), 699 deletions(-)
diff --git a/inc/registry/CheckCustomTables.php b/inc/registry/CheckCustomTables.php
index bc5955e..b04af0b 100644
--- a/inc/registry/CheckCustomTables.php
+++ b/inc/registry/CheckCustomTables.php
@@ -6,6 +6,7 @@
}
use Exception;
+use JVBase\registrar\Registrar;
class CheckCustomTables
{
@@ -130,13 +131,13 @@
error_log("JVB: Error in notification section: " . $e->getMessage());
}
- try {
+// try {
// if (array_key_exists('dashboard', $this->JVB_SITE) && $this->JVB_SITE['dashboard']) {
- $tables = array_merge($tables, $this->queueTables(), $this->errorLogTables());
+// $tables = array_merge($tables, $this->queueTables(), $this->errorLogTables());
// }
- } catch (Exception $e) {
- error_log("JVB: Error in dashboard section: " . $e->getMessage());
- }
+// } catch (Exception $e) {
+// error_log("JVB: Error in dashboard section: " . $e->getMessage());
+// }
try {
if (array_key_exists('referrals', $this->JVB_SITE) && $this->JVB_SITE['referrals']) {
@@ -439,104 +440,105 @@
/******************************************************
* Table Definitions
*****************************************************/
+// MOVED TO Queue.php
+// protected function queueTables():array
+// {
+//
+// return [
+// '_operation_queue' => "(
+// `id` VARCHAR(64) NOT NULL,
+// `type` varchar(50) NOT NULL,
+// `user_id` {$this->userIDType} NOT NULL,
+//
+// `request_data` JSON NOT NULL CHECK (JSON_VALID(request_data)),
+//
+// `total_items` int(11) NOT NULL DEFAULT 1,
+// `processed_items` int(11) DEFAULT 0,
+// `failed_items` JSON,
+//
+// `priority` ENUM('high', 'normal', 'low') DEFAULT 'normal',
+// `state` enum('pending', 'scheduled', 'processing', 'completed') DEFAULT 'pending',
+// `outcome` enum('pending', 'success', 'partial', 'merged', 'failed', 'failed_permanent') DEFAULT 'pending',
+//
+// `retries` int(11) DEFAULT 0,
+// `last_error_hash` CHAR(32) DEFAULT NULL,
+// `error_message` text,
+//
+// `scheduled_at` datetime DEFAULT NULL,
+// `started_at` datetime DEFAULT CURRENT_TIMESTAMP,
+// `completed_at` datetime DEFAULT NULL,
+//
+// `metadata` JSON DEFAULT NULL,
+// `result` JSON,
+// `dependencies` JSON,
+// `merged_into` VARCHAR(64) DEFAULT NULL,
+//
+// `user_dismissed` tinyint(1) DEFAULT 0,
+// `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
+// `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// KEY `idx_run_queue` (state, priority, scheduled_at),
+// KEY `idx_user_ops` (user_id, state),
+// KEY `idx_user_type_pending` (user_id, type, state),
+// KEY `idx_completed_at` (completed_at),
+// KEY `idx_processing_stuck` (`state`, `started_at`)
+// )",
+//
+// 'stats__operation_queue' => "(
+// `id` bigint unsigned AUTO_INCREMENT,
+// `date` date NOT NULL,
+// `type` varchar(50) NOT NULL,
+//
+// `total_operations` int NOT NULL DEFAULT 0,
+// `successful_operations` int NOT NULL DEFAULT 0,
+// `partial_operations` int NOT NULL DEFAULT 0,
+// `failed_operations` int NOT NULL DEFAULT 0,
+// `failed_permanent_operations` int NOT NULL DEFAULT 0,
+//
+// `total_items_processed` int NOT NULL DEFAULT 0,
+//
+// `average_duration` float DEFAULT NULL,
+// `max_duration` int DEFAULT NULL,
+//
+// `peak_queue_size` int NOT NULL DEFAULT 0,
+//
+// `peak_memory_usage` int DEFAULT NULL,
+// `peak_cpu_usage` float DEFAULT NULL,
+//
+// `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY (date, type),
+// KEY `date_idx` (date),
+// KEY `type_idx` (type)
+// )"
+// ];
+// }
- protected function queueTables():array
- {
-
- return [
- '_operation_queue' => "(
- `id` VARCHAR(64) NOT NULL,
- `type` varchar(50) NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
-
- `request_data` JSON NOT NULL CHECK (JSON_VALID(request_data)),
-
- `total_items` int(11) NOT NULL DEFAULT 1,
- `processed_items` int(11) DEFAULT 0,
- `failed_items` JSON,
-
- `priority` ENUM('high', 'normal', 'low') DEFAULT 'normal',
- `state` enum('pending', 'scheduled', 'processing', 'completed') DEFAULT 'pending',
- `outcome` enum('pending', 'success', 'partial', 'merged', 'failed', 'failed_permanent') DEFAULT 'pending',
-
- `retries` int(11) DEFAULT 0,
- `last_error_hash` CHAR(32) DEFAULT NULL,
- `error_message` text,
-
- `scheduled_at` datetime DEFAULT NULL,
- `started_at` datetime DEFAULT CURRENT_TIMESTAMP,
- `completed_at` datetime DEFAULT NULL,
-
- `metadata` JSON DEFAULT NULL,
- `result` JSON,
- `dependencies` JSON,
- `merged_into` VARCHAR(64) DEFAULT NULL,
-
- `user_dismissed` tinyint(1) DEFAULT 0,
- `created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
- `updated_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- KEY `idx_run_queue` (state, priority, scheduled_at),
- KEY `idx_user_ops` (user_id, state),
- KEY `idx_user_type_pending` (user_id, type, state),
- KEY `idx_completed_at` (completed_at),
- KEY `idx_processing_stuck` (`state`, `started_at`)
- )",
-
- 'stats__operation_queue' => "(
- `id` bigint unsigned AUTO_INCREMENT,
- `date` date NOT NULL,
- `type` varchar(50) NOT NULL,
-
- `total_operations` int NOT NULL DEFAULT 0,
- `successful_operations` int NOT NULL DEFAULT 0,
- `partial_operations` int NOT NULL DEFAULT 0,
- `failed_operations` int NOT NULL DEFAULT 0,
- `failed_permanent_operations` int NOT NULL DEFAULT 0,
-
- `total_items_processed` int NOT NULL DEFAULT 0,
-
- `average_duration` float DEFAULT NULL,
- `max_duration` int DEFAULT NULL,
-
- `peak_queue_size` int NOT NULL DEFAULT 0,
-
- `peak_memory_usage` int DEFAULT NULL,
- `peak_cpu_usage` float DEFAULT NULL,
-
- `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY (date, type),
- KEY `date_idx` (date),
- KEY `type_idx` (type)
- )"
- ];
- }
-
- protected function errorLogTables():array
- {
- return [
- 'error_log'=> "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `error_type` varchar(50) NOT NULL,
- `component` varchar(100) NOT NULL,
- `method` varchar(100) DEFAULT NULL,
- `page_url` varchar(255) DEFAULT NULL,
- `message` text NOT NULL,
- `context` JSON,
- `severity` varchar(20) NOT NULL,
- `user_id` {$this->userIDType} DEFAULT NULL,
- `user_was_logged_in` tinyint(1) NOT NULL,
- `source` enum('frontend','backend') NOT NULL,
- `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- KEY `created_at` (`created_at`),
- KEY `component_severity_date` (`component`, `severity`, `created_at`),
- KEY `error_type_date` (`error_type`, `created_at`),
- KEY `severity_date` (`severity`, `created_at`)
- )"
- ];
- }
+//MOVED TO ErrorHandler.php
+// protected function errorLogTables():array
+// {
+// return [
+// 'error_log'=> "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `error_type` varchar(50) NOT NULL,
+// `component` varchar(100) NOT NULL,
+// `method` varchar(100) DEFAULT NULL,
+// `page_url` varchar(255) DEFAULT NULL,
+// `message` text NOT NULL,
+// `context` JSON,
+// `severity` varchar(20) NOT NULL,
+// `user_id` {$this->userIDType} DEFAULT NULL,
+// `user_was_logged_in` tinyint(1) NOT NULL,
+// `source` enum('frontend','backend') NOT NULL,
+// `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// KEY `created_at` (`created_at`),
+// KEY `component_severity_date` (`component`, `severity`, `created_at`),
+// KEY `error_type_date` (`error_type`, `created_at`),
+// KEY `severity_date` (`severity`, `created_at`)
+// )"
+// ];
+// }
protected function userIntegrationsTable():array
{
@@ -558,445 +560,449 @@
)"
];
}
+//MOVED TO NotificationManger.php
+// protected function notificationTables():array
+// {
+//
+// return [
+// // Main notifications table
+// 'notifications' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `owner_id` {$this->userIDType} NOT NULL,
+// `action_user_id` {$this->userIDType} NOT NULL,
+// `target_id` bigint(20) DEFAULT NULL,
+// `target_type` varchar(30) DEFAULT NULL,
+// `type` enum('new_favourite','new_artist','artist_approved','artist_invitation',
+// 'new_term','term_approved','term_rejected','list_shared',
+// 'system_message','shop_invitation') NOT NULL,
+// `status` enum('unread','read','actioned','dismissed') NOT NULL DEFAULT 'unread',
+// `priority` enum('low','normal','high') NOT NULL DEFAULT 'normal',
+// `message` varchar(255) DEFAULT NULL,
+// `context` JSON DEFAULT NULL,
+// `requires_action` tinyint(1) NOT NULL DEFAULT 0,
+// `action_taken` tinyint(1) NOT NULL DEFAULT 0,
+// `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+// `read_at` datetime DEFAULT NULL,
+// `actioned_at` datetime DEFAULT NULL,
+// `emailed_at` datetime DEFAULT NULL,
+// `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// KEY `user_status` (`owner_id`, `status`),
+// KEY `target_lookup` (`target_id`, `target_type`),
+// KEY `unread_notifications` (`owner_id`, `status`, `created_at`),
+// KEY `requires_action` (`owner_id`, `requires_action`, `action_taken`),
+// KEY `acting_user_lookup` (`owner_id`, `action_user_id`, `type`, `status`, `created_at`),
+// CONSTRAINT `{$this->base}notify_owner` FOREIGN KEY (`owner_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}action_id` FOREIGN KEY (`action_user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+// )",
+//
+//
+// 'notifications_content' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `user_id` {$this->userIDType} NOT NULL,
+// `date` date NOT NULL,
+// `frequency` enum('daily','weekly','monthly') NOT NULL,
+// `tattoo_count` int unsigned NOT NULL DEFAULT 0,
+// `artwork_count` int unsigned NOT NULL DEFAULT 0,
+// `piercing_count` int unsigned NOT NULL DEFAULT 0,
+// `event_count` int unsigned NOT NULL DEFAULT 0,
+// `news_count` int unsigned NOT NULL DEFAULT 0,
+// `offer_count` int unsigned NOT NULL DEFAULT 0,
+// `total_items` int unsigned NOT NULL DEFAULT 0,
+// `has_profile_update` tinyint(1) NOT NULL DEFAULT 0,
+// `new_items` JSON DEFAULT NULL,
+// `updated_items` JSON DEFAULT NULL,
+// `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+// `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `artist_date_frequency` (`user_id`, `date`, `frequency`),
+// KEY `recent_content` (`date`, `frequency`),
+// KEY `artist_frequency` (`user_id`, `frequency`),
+// CONSTRAINT `{$this->base}content_artist` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+// )",
+//
+// 'notifications_user_seen' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `user_id` {$this->userIDType} NOT NULL,
+// `content_notification_id` bigint(20) unsigned NOT NULL,
+// `status` enum('unread','read','dismissed') NOT NULL DEFAULT 'unread',
+// `read_at` datetime DEFAULT NULL,
+// `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `user_content_notif` (`user_id`, `content_notification_id`),
+// KEY `user_status` (`user_id`, `status`),
+// CONSTRAINT `{$this->base}user_content_user` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}user_content_notification` FOREIGN KEY (`content_notification_id`)
+// REFERENCES `{$this->prefixed}notifications_content` (`id`) ON DELETE CASCADE
+// )",
+//
+// // User notification preferences
+// 'notification_preferences' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `user_id` {$this->userIDType} NOT NULL,
+// `item_id` bigint(20) NOT NULL,
+// `notification_type` varchar(50) NOT NULL,
+// `frequency` enum('never','daily','weekly','monthly') DEFAULT 'never',
+// `last_sent` datetime DEFAULT NULL,
+// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
+// `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `user_type` (`user_id`, `item_id`),
+// KEY `user_frequency` (`user_id`, `frequency`),
+// KEY `frequency_lookup` (`frequency`, `last_sent`),
+// CONSTRAINT `{$this->base}notification_pref_user` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+// )",
+//
+// // Notification digest scheduling and tracking
+// 'notification_digests' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `user_id` {$this->userIDType} NOT NULL,
+// `frequency` enum('daily','weekly','monthly') NOT NULL,
+// `scheduled_at` datetime NOT NULL,
+// `sent_at` datetime DEFAULT NULL,
+// `status` enum('pending','processing','sent','failed') DEFAULT 'pending',
+// `notification_count` int unsigned DEFAULT 0,
+// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// KEY `scheduled_digests` (`frequency`, `scheduled_at`, `status`),
+// KEY `user_digests` (`user_id`, `frequency`),
+// CONSTRAINT `{$this->base}digest_user` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+// )",
+//
+// // Analytics on notification interactions
+// 'stats__notifications' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `notification_id` bigint(20) unsigned NOT NULL,
+// `user_id` {$this->userIDType} NOT NULL,
+// `action` varchar(30) NOT NULL,
+// `action_source` enum('web','email','app') DEFAULT 'web',
+// `action_details` JSON DEFAULT NULL,
+// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// KEY `notification_lookup` (`notification_id`),
+// KEY `user_actions` (`user_id`, `action`),
+// KEY `action_analysis` (`action`, `action_source`),
+// CONSTRAINT `{$this->base}metrics_user` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}metrics_notification` FOREIGN KEY (`notification_id`)
+// REFERENCES `{$this->prefixed}notifications` (`id`) ON DELETE CASCADE
+// )"
+// ];
+// }
- protected function notificationTables():array
- {
-
- return [
- // Main notifications table
- 'notifications' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `owner_id` {$this->userIDType} NOT NULL,
- `action_user_id` {$this->userIDType} NOT NULL,
- `target_id` bigint(20) DEFAULT NULL,
- `target_type` varchar(30) DEFAULT NULL,
- `type` enum('new_favourite','new_artist','artist_approved','artist_invitation',
- 'new_term','term_approved','term_rejected','list_shared',
- 'system_message','shop_invitation') NOT NULL,
- `status` enum('unread','read','actioned','dismissed') NOT NULL DEFAULT 'unread',
- `priority` enum('low','normal','high') NOT NULL DEFAULT 'normal',
- `message` varchar(255) DEFAULT NULL,
- `context` JSON DEFAULT NULL,
- `requires_action` tinyint(1) NOT NULL DEFAULT 0,
- `action_taken` tinyint(1) NOT NULL DEFAULT 0,
- `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `read_at` datetime DEFAULT NULL,
- `actioned_at` datetime DEFAULT NULL,
- `emailed_at` datetime DEFAULT NULL,
- `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- KEY `user_status` (`owner_id`, `status`),
- KEY `target_lookup` (`target_id`, `target_type`),
- KEY `unread_notifications` (`owner_id`, `status`, `created_at`),
- KEY `requires_action` (`owner_id`, `requires_action`, `action_taken`),
- KEY `acting_user_lookup` (`owner_id`, `action_user_id`, `type`, `status`, `created_at`),
- CONSTRAINT `{$this->base}notify_owner` FOREIGN KEY (`owner_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}action_id` FOREIGN KEY (`action_user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )",
+//MOVED TO ApprovalManager.php
+// protected function approvalTables($types):array
+// {
+// $tables = [];
+// $save = [];
+//
+// foreach ($types as $type => $config) {
+// $save[$type] = ($type === 'term') ? $config : 'user';
+// $tables['approval_'.$type.'_requests'] = "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `user_id` {$this->userIDType} NOT NULL,
+// `status` enum('pending','approved','rejected','appealed','expired') DEFAULT 'pending',
+// `required_approvals` int unsigned DEFAULT 3,
+// `current_approvals` int unsigned DEFAULT 0,
+// `current_rejections` int unsigned DEFAULT 0,
+// `expires_at` datetime DEFAULT NULL,
+// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
+// `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+// `approved_by` json DEFAULT NULL,
+// `rejected_by` json DEFAULT NULL,
+// `created_item` json DEFAULT NULL,
+// PRIMARY KEY (`id`),
+// KEY `status` (`status`),
+// KEY `expiring_requests` (`status`, `expires_at`),
+// CONSTRAINT `{$this->base}{$type}_approval_requester` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+// )";
+// $tables['approval_'.$type.'_votes'] = "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `request_id` bigint(20) unsigned NOT NULL,
+// `user_id` {$this->userIDType} NOT NULL,
+// `vote` enum('approve','reject','dismissed') NOT NULL,
+// `notes` text DEFAULT NULL,
+// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `unique_vote` (`request_id`, `user_id`),
+// KEY `user_votes` (`user_id`),
+// CONSTRAINT `{$this->base}{$type}_user_approval_request` FOREIGN KEY (`request_id`)
+// REFERENCES `{$this->prefixed}approval_{$type}_requests` (`id`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}{$type}_user_approval_voter` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+// )";
+// }
+// if (!empty($save)) {
+// update_option(BASE.'approvals_types', $save);
+// }
+// return $tables;
+// }
- 'notifications_content' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` {$this->userIDType} NOT NULL,
- `date` date NOT NULL,
- `frequency` enum('daily','weekly','monthly') NOT NULL,
- `tattoo_count` int unsigned NOT NULL DEFAULT 0,
- `artwork_count` int unsigned NOT NULL DEFAULT 0,
- `piercing_count` int unsigned NOT NULL DEFAULT 0,
- `event_count` int unsigned NOT NULL DEFAULT 0,
- `news_count` int unsigned NOT NULL DEFAULT 0,
- `offer_count` int unsigned NOT NULL DEFAULT 0,
- `total_items` int unsigned NOT NULL DEFAULT 0,
- `has_profile_update` tinyint(1) NOT NULL DEFAULT 0,
- `new_items` JSON DEFAULT NULL,
- `updated_items` JSON DEFAULT NULL,
- `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `artist_date_frequency` (`user_id`, `date`, `frequency`),
- KEY `recent_content` (`date`, `frequency`),
- KEY `artist_frequency` (`user_id`, `frequency`),
- CONSTRAINT `{$this->base}content_artist` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )",
+// protected function taxonomyRelationshipsTables():array
+// {
+// $tables = [
+// 'taxonomy_relationships' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `term_id` {$this->termIDType} NOT NULL,
+// `related_term_id` {$this->termIDType} NOT NULL,
+// `taxonomy` varchar(32) NOT NULL,
+// `related_taxonomy` varchar(32) NOT NULL,
+// `post_count` int(11) NOT NULL DEFAULT 0,
+// `is_direct` tinyint(1) NOT NULL DEFAULT 1,
+// `is_hierarchical` tinyint(1) NOT NULL DEFAULT 0,
+// `last_updated` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// KEY `term_id` (`term_id`),
+// KEY `related_term_id` (`related_term_id`),
+// KEY `taxonomy` (`taxonomy`),
+// KEY `related_taxonomy` (`related_taxonomy`),
+// UNIQUE KEY `term_relation` (`term_id`, `related_term_id`, `taxonomy`, `related_taxonomy`),
+// CONSTRAINT `{$this->base}tax_rel_term_id` FOREIGN KEY (`term_id`)
+// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}tax_rel_related_id` FOREIGN KEY (`related_term_id`)
+// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
+// )"
+// ];
+//
+//// if ((array_key_exists('dashboard', $this->JVB_SITE) && $this->JVB_SITE['dashboard'] === true) || array_key_exists('use_feed_block', $this->JVB_SITE) && $this->JVB_SITE['use_feed_block']) {
+// $tables['user_term_index'] = "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `user_id` {$this->userIDType} NOT NULL,
+// `term_id` {$this->termIDType} NOT NULL,
+// `taxonomy` varchar(32) NOT NULL,
+// `post_count` int(11) NOT NULL DEFAULT 1,
+// `is_parent` tinyint(1) NOT NULL DEFAULT 0,
+// `last_used` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `user_term` (`user_id`, `term_id`, `taxonomy`),
+// KEY `user_taxonomy` (`user_id`, `taxonomy`),
+// KEY `taxonomy` (`taxonomy`),
+// CONSTRAINT `{$this->base}user_term_user_fk` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}user_term_term_fk` FOREIGN KEY (`term_id`)
+// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
+// )";
+//// }
+//
+// return $tables;
+// }
+//MOVED TO FavouritesManager.php
+// protected function favouriteTables():array
+// {
+//
+// return [
+// 'favourites' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `user_id` {$this->userIDType} NOT NULL,
+// `type` varchar(50) NOT NULL,
+// `target_id` bigint(20) NOT NULL,
+// `notes` text DEFAULT NULL,
+// `date_added` datetime DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `unique_favourite` (`user_id`, `type`, `target_id`),
+// KEY `user_type` (`user_id`, `type`),
+// KEY `target_type` (`target_id`, `type`),
+// CONSTRAINT `{$this->base}favourites_user` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+// )",
+// 'favourites_lists' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `user_id` {$this->userIDType} NOT NULL,
+// `name` varchar(255) NOT NULL,
+// `description` text,
+// `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+// `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// KEY `user_lists` (`user_id`),
+// CONSTRAINT `{$this->base}list_user` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+// )",
+// 'favourites_list_items' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `list_id` bigint(20) unsigned NOT NULL,
+// `item_type` varchar(50) NOT NULL,
+// `item_id` bigint(20) NOT NULL,
+// `favourite_id` bigint(20) unsigned DEFAULT NULL,
+// `added_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `unique_list_item` (`list_id`, `item_type`, `item_id`),
+// KEY `list_items` (`list_id`),
+// KEY `favourite_id` (`favourite_id`),
+// CONSTRAINT `{$this->base}list_items` FOREIGN KEY (`list_id`)
+// REFERENCES `{$this->prefixed}favourites_lists` (`id`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}list_favourite` FOREIGN KEY (`favourite_id`)
+// REFERENCES `{$this->prefixed}favourites` (`id`) ON DELETE SET NULL
+// )",
+// 'favourites_list_shares' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `list_id` bigint(20) unsigned NOT NULL,
+// `user_id` {$this->userIDType} NULL,
+// `email` varchar(255) NOT NULL,
+// `permission_type` enum('view', 'edit') NOT NULL DEFAULT 'view',
+// `status` enum('pending', 'accepted', 'rejected', 'revoked') NOT NULL DEFAULT 'pending',
+// `invitation_token` varchar(64) NULL,
+// `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+// `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `unique_share_user` (`list_id`, `user_id`, `status`),
+// UNIQUE KEY `unique_share_email` (`list_id`, `email`, `status`),
+// KEY `list_shares` (`list_id`),
+// KEY `status_index` (`status`),
+// CONSTRAINT `{$this->base}share_list` FOREIGN KEY (`list_id`)
+// REFERENCES `{$this->prefixed}favourites_lists` (`id`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}share_user` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+// )",
+// 'favourites_list_stats' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `item_type` varchar(50) NOT NULL,
+// `item_id` bigint(20) NOT NULL,
+// `list_count` int NOT NULL DEFAULT 0,
+// `last_added` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `unique_item_stat` (`item_type`, `item_id`),
+// KEY `item_stats` (`item_type`, `item_id`)
+// )",
+// ];
+// }
- 'notifications_user_seen' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` {$this->userIDType} NOT NULL,
- `content_notification_id` bigint(20) unsigned NOT NULL,
- `status` enum('unread','read','dismissed') NOT NULL DEFAULT 'unread',
- `read_at` datetime DEFAULT NULL,
- `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_content_notif` (`user_id`, `content_notification_id`),
- KEY `user_status` (`user_id`, `status`),
- CONSTRAINT `{$this->base}user_content_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}user_content_notification` FOREIGN KEY (`content_notification_id`)
- REFERENCES `{$this->prefixed}notifications_content` (`id`) ON DELETE CASCADE
- )",
+//MOVED TO ForumManager.php
+// protected function newsRelationshipsTable():array
+// {
+// return [
+// 'news_relationships' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `shop_id` {$this->termIDType} NOT NULL,
+// `user_id` {$this->userIDType} NOT NULL,
+// `artist_id` {$this->postIDType} NOT NULL,
+// `news_count` int(10) unsigned NOT NULL DEFAULT 0,
+// `last_post_date` datetime DEFAULT NULL,
+// `last_updated` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `shop_user` (`shop_id`, `user_id`),
+// KEY `shop_id` (`shop_id`),
+// KEY `user_id` (`user_id`),
+// KEY `artist_id` (`artist_id`),
+// CONSTRAINT `{$this->base}nr_shop_news_shop` FOREIGN KEY (`shop_id`)
+// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}nr_shop_news_user` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}nr_shop_news_artist` FOREIGN KEY (`artist_id`)
+// REFERENCES `{$this->wpdb->posts}` (`ID`) ON DELETE SET NULL
+// )"
+// ];
+// }
- // User notification preferences
- 'notification_preferences' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` {$this->userIDType} NOT NULL,
- `item_id` bigint(20) NOT NULL,
- `notification_type` varchar(50) NOT NULL,
- `frequency` enum('never','daily','weekly','monthly') DEFAULT 'never',
- `last_sent` datetime DEFAULT NULL,
- `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
- `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_type` (`user_id`, `item_id`),
- KEY `user_frequency` (`user_id`, `frequency`),
- KEY `frequency_lookup` (`frequency`, `last_sent`),
- CONSTRAINT `{$this->base}notification_pref_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )",
+//MOVED TO ResponseManager.php
+// protected function responseTable():array
+// {
+// return [
+// 'responses' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `item_id` {$this->postIDType} NOT NULL,
+// `content` text NOT NULL,
+// `user_id` {$this->userIDType} NOT NULL,
+// `parent_id` bigint(20) unsigned DEFAULT NULL,
+// `response` text NOT NULL,
+// `status` enum('published','hidden','flagged','deleted') DEFAULT 'published',
+// `is_user_deleted` tinyint(1) DEFAULT 0,
+// `upvotes` int NOT NULL DEFAULT 0,
+// `downvotes` int NOT NULL DEFAULT 0,
+// `karma` int NOT NULL DEFAULT 0,
+// `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
+// `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// KEY `item_lookup` (`item_id`, `status`),
+// KEY `user_comments` (`user_id`),
+// KEY `parent_child` (`parent_id`),
+// KEY `karma_order` (`karma`),
+// CONSTRAINT `{$this->base}re_responses_news` FOREIGN KEY (`item_id`)
+// REFERENCES `{$this->wpdb->posts}` (`ID`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}re_responses_parent` FOREIGN KEY (`parent_id`)
+// REFERENCES `{$this->prefixed}responses` (`id`) ON DELETE SET NULL
+// )",
+// 'karma_response' => "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `item_id` bigint(20) NOT NULL,
+// `user_id` {$this->userIDType} NOT NULL,
+// `vote` enum('up','down') NOT NULL,
+// `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `user_post` (`user_id`,`item_id`),
+// KEY `item_id` (`item_id`),
+// KEY `user_id` (`user_id`),
+// CONSTRAINT `{$this->base}_response_item_id` FOREIGN KEY (`item_id`)
+// REFERENCES `{$this->prefixed}responses` (`id`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}_response_user_id` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+// )"
+// ];
+// }
- // Notification digest scheduling and tracking
- 'notification_digests' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` {$this->userIDType} NOT NULL,
- `frequency` enum('daily','weekly','monthly') NOT NULL,
- `scheduled_at` datetime NOT NULL,
- `sent_at` datetime DEFAULT NULL,
- `status` enum('pending','processing','sent','failed') DEFAULT 'pending',
- `notification_count` int unsigned DEFAULT 0,
- `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- KEY `scheduled_digests` (`frequency`, `scheduled_at`, `status`),
- KEY `user_digests` (`user_id`, `frequency`),
- CONSTRAINT `{$this->base}digest_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )",
-
- // Analytics on notification interactions
- 'stats__notifications' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `notification_id` bigint(20) unsigned NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `action` varchar(30) NOT NULL,
- `action_source` enum('web','email','app') DEFAULT 'web',
- `action_details` JSON DEFAULT NULL,
- `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- KEY `notification_lookup` (`notification_id`),
- KEY `user_actions` (`user_id`, `action`),
- KEY `action_analysis` (`action`, `action_source`),
- CONSTRAINT `{$this->base}metrics_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}metrics_notification` FOREIGN KEY (`notification_id`)
- REFERENCES `{$this->prefixed}notifications` (`id`) ON DELETE CASCADE
- )"
- ];
- }
-
- protected function approvalTables($types):array
- {
- $tables = [];
- $save = [];
-
- foreach ($types as $type => $config) {
- $save[$type] = ($type === 'term') ? $config : 'user';
- $tables['approval_'.$type.'_requests'] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` {$this->userIDType} NOT NULL,
- `status` enum('pending','approved','rejected','appealed','expired') DEFAULT 'pending',
- `required_approvals` int unsigned DEFAULT 3,
- `current_approvals` int unsigned DEFAULT 0,
- `current_rejections` int unsigned DEFAULT 0,
- `expires_at` datetime DEFAULT NULL,
- `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
- `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- `approved_by` json DEFAULT NULL,
- `rejected_by` json DEFAULT NULL,
- `created_item` json DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `status` (`status`),
- KEY `expiring_requests` (`status`, `expires_at`),
- CONSTRAINT `{$this->base}{$type}_approval_requester` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )";
- $tables['approval_'.$type.'_votes'] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `request_id` bigint(20) unsigned NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `vote` enum('approve','reject','dismissed') NOT NULL,
- `notes` text DEFAULT NULL,
- `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `unique_vote` (`request_id`, `user_id`),
- KEY `user_votes` (`user_id`),
- CONSTRAINT `{$this->base}{$type}_user_approval_request` FOREIGN KEY (`request_id`)
- REFERENCES `{$this->prefixed}approval_{$type}_requests` (`id`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}{$type}_user_approval_voter` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )";
- }
- if (!empty($save)) {
- update_option(BASE.'approvals_types', $save);
- }
- return $tables;
- }
-
-
- protected function taxonomyRelationshipsTables():array
- {
- $tables = [
- 'taxonomy_relationships' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `term_id` {$this->termIDType} NOT NULL,
- `related_term_id` {$this->termIDType} NOT NULL,
- `taxonomy` varchar(32) NOT NULL,
- `related_taxonomy` varchar(32) NOT NULL,
- `post_count` int(11) NOT NULL DEFAULT 0,
- `is_direct` tinyint(1) NOT NULL DEFAULT 1,
- `is_hierarchical` tinyint(1) NOT NULL DEFAULT 0,
- `last_updated` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- KEY `term_id` (`term_id`),
- KEY `related_term_id` (`related_term_id`),
- KEY `taxonomy` (`taxonomy`),
- KEY `related_taxonomy` (`related_taxonomy`),
- UNIQUE KEY `term_relation` (`term_id`, `related_term_id`, `taxonomy`, `related_taxonomy`),
- CONSTRAINT `{$this->base}tax_rel_term_id` FOREIGN KEY (`term_id`)
- REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}tax_rel_related_id` FOREIGN KEY (`related_term_id`)
- REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
- )"
- ];
-
- if ((array_key_exists('dashboard', $this->JVB_SITE) && $this->JVB_SITE['dashboard'] === true) || array_key_exists('use_feed_block', $this->JVB_SITE) && $this->JVB_SITE['use_feed_block']) {
- $tables['user_term_index'] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` {$this->userIDType} NOT NULL,
- `term_id` {$this->termIDType} NOT NULL,
- `taxonomy` varchar(32) NOT NULL,
- `post_count` int(11) NOT NULL DEFAULT 1,
- `is_parent` tinyint(1) NOT NULL DEFAULT 0,
- `last_used` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_term` (`user_id`, `term_id`, `taxonomy`),
- KEY `user_taxonomy` (`user_id`, `taxonomy`),
- KEY `taxonomy` (`taxonomy`),
- CONSTRAINT `{$this->base}user_term_user_fk` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}user_term_term_fk` FOREIGN KEY (`term_id`)
- REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
- )";
- }
-
- return $tables;
- }
-
- protected function favouriteTables():array
- {
-
- return [
- 'favourites' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` {$this->userIDType} NOT NULL,
- `type` varchar(50) NOT NULL,
- `target_id` bigint(20) NOT NULL,
- `notes` text DEFAULT NULL,
- `date_added` datetime DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `unique_favourite` (`user_id`, `type`, `target_id`),
- KEY `user_type` (`user_id`, `type`),
- KEY `target_type` (`target_id`, `type`),
- CONSTRAINT `{$this->base}favourites_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )",
- 'favourites_lists' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` {$this->userIDType} NOT NULL,
- `name` varchar(255) NOT NULL,
- `description` text,
- `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- KEY `user_lists` (`user_id`),
- CONSTRAINT `{$this->base}list_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )",
- 'favourites_list_items' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `list_id` bigint(20) unsigned NOT NULL,
- `item_type` varchar(50) NOT NULL,
- `item_id` bigint(20) NOT NULL,
- `favourite_id` bigint(20) unsigned DEFAULT NULL,
- `added_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `unique_list_item` (`list_id`, `item_type`, `item_id`),
- KEY `list_items` (`list_id`),
- KEY `favourite_id` (`favourite_id`),
- CONSTRAINT `{$this->base}list_items` FOREIGN KEY (`list_id`)
- REFERENCES `{$this->prefixed}favourites_lists` (`id`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}list_favourite` FOREIGN KEY (`favourite_id`)
- REFERENCES `{$this->prefixed}favourites` (`id`) ON DELETE SET NULL
- )",
- 'favourites_list_shares' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `list_id` bigint(20) unsigned NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `email` varchar(255) NOT NULL,
- `permission_type` enum('view', 'edit') NOT NULL DEFAULT 'view',
- `status` enum('pending', 'accepted', 'rejected', 'revoked') NOT NULL DEFAULT 'pending',
- `invitation_token` varchar(64) NULL,
- `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `unique_share_user` (`list_id`, `user_id`, `status`),
- UNIQUE KEY `unique_share_email` (`list_id`, `email`, `status`),
- KEY `list_shares` (`list_id`),
- KEY `status_index` (`status`),
- CONSTRAINT `{$this->base}share_list` FOREIGN KEY (`list_id`)
- REFERENCES `{$this->prefixed}favourites_lists` (`id`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}share_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )",
- 'favourites_list_stats' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `item_type` varchar(50) NOT NULL,
- `item_id` bigint(20) NOT NULL,
- `list_count` int NOT NULL DEFAULT 0,
- `last_added` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `unique_item_stat` (`item_type`, `item_id`),
- KEY `item_stats` (`item_type`, `item_id`)
- )",
- ];
- }
-
- protected function newsRelationshipsTable():array
- {
- return [
- 'news_relationships' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `shop_id` {$this->termIDType} NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `artist_id` {$this->postIDType} NOT NULL,
- `news_count` int(10) unsigned NOT NULL DEFAULT 0,
- `last_post_date` datetime DEFAULT NULL,
- `last_updated` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `shop_user` (`shop_id`, `user_id`),
- KEY `shop_id` (`shop_id`),
- KEY `user_id` (`user_id`),
- KEY `artist_id` (`artist_id`),
- CONSTRAINT `{$this->base}nr_shop_news_shop` FOREIGN KEY (`shop_id`)
- REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}nr_shop_news_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}nr_shop_news_artist` FOREIGN KEY (`artist_id`)
- REFERENCES `{$this->wpdb->posts}` (`ID`) ON DELETE SET NULL
- )"
- ];
- }
-
- protected function responseTable():array
- {
- return [
- 'responses' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `item_id` {$this->postIDType} NOT NULL,
- `content` text NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `parent_id` bigint(20) unsigned DEFAULT NULL,
- `response` text NOT NULL,
- `status` enum('published','hidden','flagged','deleted') DEFAULT 'published',
- `is_user_deleted` tinyint(1) DEFAULT 0,
- `upvotes` int NOT NULL DEFAULT 0,
- `downvotes` int NOT NULL DEFAULT 0,
- `karma` int NOT NULL DEFAULT 0,
- `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
- `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- KEY `item_lookup` (`item_id`, `status`),
- KEY `user_comments` (`user_id`),
- KEY `parent_child` (`parent_id`),
- KEY `karma_order` (`karma`),
- CONSTRAINT `{$this->base}re_responses_news` FOREIGN KEY (`item_id`)
- REFERENCES `{$this->wpdb->posts}` (`ID`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}re_responses_parent` FOREIGN KEY (`parent_id`)
- REFERENCES `{$this->prefixed}responses` (`id`) ON DELETE SET NULL
- )",
- 'karma_response' => "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `item_id` bigint(20) NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `vote` enum('up','down') NOT NULL,
- `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_post` (`user_id`,`item_id`),
- KEY `item_id` (`item_id`),
- KEY `user_id` (`user_id`),
- CONSTRAINT `{$this->base}_response_item_id` FOREIGN KEY (`item_id`)
- REFERENCES `{$this->prefixed}responses` (`id`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}_response_user_id` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )"
- ];
- }
-
- protected function karmaTables(array $types):array
- {
- $tables = [];
- foreach ($types as $type => $config) {
- $t = false;
- if (array_key_exists($type, $this->JVB_CONTENT)) {
- $t = 'posts';
- } elseif (array_key_exists($type, $this->JVB_TAXONOMY)) {
- $t = 'terms';
- } elseif (array_key_exists($type, $this->JVB_USER)) {
- $t = 'users';
- }
-
- if (!$t) {
- continue;
- }
-
- switch ($t) {
- case 'posts':
- $referenceType = $this->postIDType;
- $reference_table = $this->wpdb->posts;
- $reference_column = 'ID';
- break;
- case 'terms':
- $referenceType = $this->termIDType;
- $reference_table = $this->wpdb->terms;
- $reference_column = 'term_id';
- break;
- case 'users':
- $referenceType = $this->userIDType;
- $reference_table = $this->userTable;
- $reference_column = 'ID';
- break;
- }
-
- $tables['karma_'.$type] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `item_id` {$referenceType} NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `vote` enum('up','down') NOT NULL,
- `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `user_post` (`user_id`,`item_id`),
- KEY `item_id` (`item_id`),
- KEY `user_id` (`user_id`),
- CONSTRAINT `{$this->base}kt_{$type}_item_id` FOREIGN KEY (`item_id`)
- REFERENCES `{$reference_table}` (`{$reference_column}`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}kt_{$type}_user_id` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
- )";
-
- }
-
- return $tables;
- }
+ //MOVED TO KarmaManager.php
+// protected function karmaTables(array $types):array
+// {
+// $tables = [];
+// foreach ($types as $type => $config) {
+// $t = false;
+// if (array_key_exists($type, $this->JVB_CONTENT)) {
+// $t = 'posts';
+// } elseif (array_key_exists($type, $this->JVB_TAXONOMY)) {
+// $t = 'terms';
+// } elseif (array_key_exists($type, $this->JVB_USER)) {
+// $t = 'users';
+// }
+//
+// if (!$t) {
+// continue;
+// }
+//
+// switch ($t) {
+// case 'posts':
+// $referenceType = $this->postIDType;
+// $reference_table = $this->wpdb->posts;
+// $reference_column = 'ID';
+// break;
+// case 'terms':
+// $referenceType = $this->termIDType;
+// $reference_table = $this->wpdb->terms;
+// $reference_column = 'term_id';
+// break;
+// case 'users':
+// $referenceType = $this->userIDType;
+// $reference_table = $this->userTable;
+// $reference_column = 'ID';
+// break;
+// }
+//
+// $tables['karma_'.$type] = "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `item_id` {$referenceType} NOT NULL,
+// `user_id` {$this->userIDType} NOT NULL,
+// `vote` enum('up','down') NOT NULL,
+// `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `user_post` (`user_id`,`item_id`),
+// KEY `item_id` (`item_id`),
+// KEY `user_id` (`user_id`),
+// CONSTRAINT `{$this->base}kt_{$type}_item_id` FOREIGN KEY (`item_id`)
+// REFERENCES `{$reference_table}` (`{$reference_column}`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}kt_{$type}_user_id` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+// )";
+//
+// }
+//
+// return $tables;
+// }
protected function calendarTables(array $types):array
{
@@ -1158,7 +1164,7 @@
];
}
- protected function invitationTables(array $config): array
+ /*protected function invitationTables(array $config): array
{
if (empty($config['roles']) && empty($config['terms'])) {
return [];
@@ -1211,177 +1217,180 @@
$definitions .= ")";
return ['invitations' => $definitions];
- }
+ }*/
- protected function trackChangesTables($types)
- {
- $tables = [];
- foreach ($types as $type => $config) {
- $contents = $config['for_content'];
- foreach ($contents as $content) {
- $tables['history_'.$content.'_'.$type] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` {$this->userIDType} NOT NULL,
- `content_id` bigint(20) NOT NULL,
- `term_id` {$this->termIDType} NOT NULL,
- `role` varchar(50) DEFAULT 'artist',
- `is_primary` tinyint(1) DEFAULT 0,
- `start_date` date DEFAULT NULL,
- `end_date` date DEFAULT NULL,
- `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `content_term` (`content_id`, `term_id`),
- KEY content_role (`term_id`, `role`),
- CONSTRAINT `{$this->base}{$content}_{$type}_history_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}{$content}_{$type}_history_term` FOREIGN KEY (`term_id`)
- REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
- )";
- }
- }
+ //MOVED TO MakeTrackChanges.php
+// protected function trackChangesTables($types)
+// {
+// $tables = [];
+// foreach ($types as $type => $config) {
+// $contents = $config['for_content'];
+// foreach ($contents as $content) {
+// $tables['history_'.$content.'_'.$type] = "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `user_id` {$this->userIDType} NOT NULL,
+// `content_id` bigint(20) NOT NULL,
+// `term_id` {$this->termIDType} NOT NULL,
+// `role` varchar(50) DEFAULT 'artist',
+// `is_primary` tinyint(1) DEFAULT 0,
+// `start_date` date DEFAULT NULL,
+// `end_date` date DEFAULT NULL,
+// `created_at` timestamp DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `content_term` (`content_id`, `term_id`),
+// KEY content_role (`term_id`, `role`),
+// CONSTRAINT `{$this->base}{$content}_{$type}_history_user` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}{$content}_{$type}_history_term` FOREIGN KEY (`term_id`)
+// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
+// )";
+// }
+// }
+//
+// return $tables;
+// }
- return $tables;
- }
- protected function requestEntryTables($types)
- {
- $tables = [];
- foreach ($types as $type => $config) {
- $contents = $config['for_content'];
- foreach ($contents as $content) {
- $tables[$content.'_'.$type.'_requests'] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `user_id` {$this->userIDType} NOT NULL,
- `content_id` bigint(20) NOT NULL,
- `term_id` {$this->termIDType} NOT NULL,
- `managers` json DEFAULT NULL,
- `status` ENUM('requested', 'rejected', 'accepted') DEFAULT 'requested',
- `dismissed` smallint(1) unsigned DEFAULT NULL,
- `created_date` timestamp DEFAULT CURRENT_TIMESTAMP,
- `updated_date` timestamp DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
- `notes` text DEFAULT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `{$this->base}content_term` (`content_id`, `term_id`),
- CONSTRAINT `{$this->base}{$content}_{$type}_request_user` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}{$content}_{$type}_request_term` FOREIGN KEY (`term_id`)
- REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
- )";
- }
- }
+//MOVED TO VerifyEntryManager.php
+// protected function requestEntryTables($types)
+// {
+// $tables = [];
+// foreach ($types as $type => $config) {
+// $contents = $config['for_content'];
+// foreach ($contents as $content) {
+// $tables[$content.'_'.$type.'_requests'] = "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `user_id` {$this->userIDType} NOT NULL,
+// `content_id` bigint(20) NOT NULL,
+// `term_id` {$this->termIDType} NOT NULL,
+// `managers` json DEFAULT NULL,
+// `status` ENUM('requested', 'rejected', 'accepted') DEFAULT 'requested',
+// `dismissed` smallint(1) unsigned DEFAULT NULL,
+// `created_date` timestamp DEFAULT CURRENT_TIMESTAMP,
+// `updated_date` timestamp DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
+// `notes` text DEFAULT NULL,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `{$this->base}content_term` (`content_id`, `term_id`),
+// CONSTRAINT `{$this->base}{$content}_{$type}_request_user` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}{$content}_{$type}_request_term` FOREIGN KEY (`term_id`)
+// REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE
+// )";
+// }
+// }
+//
+// return $tables;
+// }
- return $tables;
- }
-
-
+// MOVED TO ReferralManager.php
/**
* Create referral tracking tables
*
* Call this from the main table creation method in CheckCustomTables.php:
* $tables = array_merge($tables, $this->referralTables());
*/
- protected function referralTables(): array
- {
- // Create tables in dependency order
- // First: referrals (depends only on wp_users)
- $mainTable['referrals'] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `referrer_id` {$this->userIDType} NOT NULL,
- `referee_id` {$this->userIDType} NOT NULL,
- `referee_name` varchar(255) NOT NULL,
- `referee_email` varchar(255) NOT NULL,
- `referee_phone` varchar(50) DEFAULT NULL,
- `referral_code` varchar(50) NOT NULL,
- `status` enum('pending', 'consulted', 'treated', 'cancelled') DEFAULT 'pending',
- `referred_at` datetime NOT NULL,
- `consulted_at` datetime DEFAULT NULL,
- `treated_at` datetime DEFAULT NULL,
- `treatment_count` int DEFAULT 0,
- `notes` text DEFAULT NULL,
- PRIMARY KEY (`id`),
- UNIQUE KEY `referee_unique` (`referee_id`),
- KEY `referrer_idx` (`referrer_id`),
- KEY `status_idx` (`status`),
- KEY `code_idx` (`referral_code`),
- KEY `date_idx` (`referred_at`),
- KEY `consult_idx` (`consulted_at`),
- CONSTRAINT `{$this->base}referral_referrer_fk` FOREIGN KEY (`referrer_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}referral_referee_fk` FOREIGN KEY (`referee_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-)";
-
- // Create the main referrals table first
- $this->createTables($mainTable);
-
- // Now create dependent tables
- $dependentTables = [];
-
- // Second: jane_clients (depends only on wp_users)
- $dependentTables['jane_clients'] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `patient_guid` varchar(50) NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `first_name` varchar(100) NOT NULL,
- `last_name` varchar(100) NOT NULL,
- `email` varchar(255) NOT NULL,
- `imported_at` datetime DEFAULT CURRENT_TIMESTAMP,
- `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- UNIQUE KEY `patient_guid_unique` (`patient_guid`),
- KEY `user_idx` (`user_id`),
- KEY `email_idx` (`email`),
- CONSTRAINT `{$this->base}jane_client_user_fk` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-)";
-
- // Third: referral_treatments (depends on referrals AND wp_users)
- $dependentTables['referral_treatments'] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `referral_id` bigint(20) unsigned NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `treatment_type` varchar(100) NOT NULL COMMENT 'Tier 1-6, Brows, etc',
- `treatment_date` datetime NOT NULL,
- `invoice_number` varchar(50) DEFAULT NULL,
- `amount` decimal(10,2) DEFAULT NULL,
- `status` enum('completed', 'no_show', 'cancelled') DEFAULT 'completed',
- `imported_at` datetime DEFAULT CURRENT_TIMESTAMP,
- PRIMARY KEY (`id`),
- KEY `referral_idx` (`referral_id`),
- KEY `user_idx` (`user_id`),
- KEY `date_idx` (`treatment_date`),
- KEY `type_idx` (`treatment_type`),
- CONSTRAINT `{$this->base}treatment_referral_fk` FOREIGN KEY (`referral_id`)
- REFERENCES `{$this->prefixed}referrals` (`id`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}treatment_user_fk` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-)";
-
- // Fourth: referral_rewards (depends on referrals AND wp_users)
- $dependentTables['referral_rewards'] = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `referral_id` bigint(20) unsigned NOT NULL,
- `user_id` {$this->userIDType} NOT NULL,
- `reward_type` enum('referrer', 'referee') NOT NULL,
- `amount` decimal(10,2) NOT NULL,
- `reward_calculation` varchar(20) DEFAULT NULL COMMENT 'percentage or fixed',
- `status` enum('available', 'redeemed', 'expired', 'cancelled') DEFAULT 'available',
- `created_at` datetime NOT NULL,
- `redeemed_at` datetime DEFAULT NULL,
- `expires_at` datetime DEFAULT NULL,
- `notes` text DEFAULT NULL,
- PRIMARY KEY (`id`),
- KEY `referral_idx` (`referral_id`),
- KEY `user_idx` (`user_id`),
- KEY `status_idx` (`status`),
- KEY `type_idx` (`reward_type`),
- CONSTRAINT `{$this->base}reward_referral_fk` FOREIGN KEY (`referral_id`)
- REFERENCES `{$this->prefixed}referrals` (`id`) ON DELETE CASCADE,
- CONSTRAINT `{$this->base}reward_user_fk` FOREIGN KEY (`user_id`)
- REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
-)";
-
- return $dependentTables;
- }
+// protected function referralTables(): array
+// {
+// // Create tables in dependency order
+// // First: referrals (depends only on wp_users)
+// $mainTable['referrals'] = "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `referrer_id` {$this->userIDType} NOT NULL,
+// `referee_id` {$this->userIDType} NOT NULL,
+// `referee_name` varchar(255) NOT NULL,
+// `referee_email` varchar(255) NOT NULL,
+// `referee_phone` varchar(50) DEFAULT NULL,
+// `referral_code` varchar(50) NOT NULL,
+// `status` enum('pending', 'consulted', 'treated', 'cancelled') DEFAULT 'pending',
+// `referred_at` datetime NOT NULL,
+// `consulted_at` datetime DEFAULT NULL,
+// `treated_at` datetime DEFAULT NULL,
+// `treatment_count` int DEFAULT 0,
+// `notes` text DEFAULT NULL,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `referee_unique` (`referee_id`, `referral_code`),
+// KEY `referrer_idx` (`referrer_id`),
+// KEY `status_idx` (`status`),
+// KEY `code_idx` (`referral_code`),
+// KEY `date_idx` (`referred_at`),
+// KEY `consult_idx` (`consulted_at`),
+// CONSTRAINT `{$this->base}referral_referrer_fk` FOREIGN KEY (`referrer_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}referral_referee_fk` FOREIGN KEY (`referee_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+//)";
+//
+// // Create the main referrals table first
+// $this->createTables($mainTable);
+//
+// // Now create dependent tables
+// $dependentTables = [];
+//
+// // Second: jane_clients (depends only on wp_users)
+// $dependentTables['jane_clients'] = "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `patient_guid` varchar(50) NOT NULL,
+// `user_id` {$this->userIDType} NOT NULL,
+// `first_name` varchar(100) NOT NULL,
+// `last_name` varchar(100) NOT NULL,
+// `email` varchar(255) NOT NULL,
+// `imported_at` datetime DEFAULT CURRENT_TIMESTAMP,
+// `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// UNIQUE KEY `patient_guid_unique` (`patient_guid`),
+// KEY `user_idx` (`user_id`),
+// KEY `email_idx` (`email`),
+// CONSTRAINT `{$this->base}jane_client_user_fk` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+//)";
+//
+// // Third: referral_treatments (depends on referrals AND wp_users)
+// $dependentTables['referral_treatments'] = "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `referral_id` bigint(20) unsigned NOT NULL,
+// `user_id` {$this->userIDType} NOT NULL,
+// `treatment_type` varchar(100) NOT NULL COMMENT 'Tier 1-6, Brows, etc',
+// `treatment_date` datetime NOT NULL,
+// `invoice_number` varchar(50) DEFAULT NULL,
+// `amount` decimal(10,2) DEFAULT NULL,
+// `status` enum('completed', 'no_show', 'cancelled') DEFAULT 'completed',
+// `imported_at` datetime DEFAULT CURRENT_TIMESTAMP,
+// PRIMARY KEY (`id`),
+// KEY `referral_idx` (`referral_id`),
+// KEY `user_idx` (`user_id`),
+// KEY `date_idx` (`treatment_date`),
+// KEY `type_idx` (`treatment_type`),
+// CONSTRAINT `{$this->base}treatment_referral_fk` FOREIGN KEY (`referral_id`)
+// REFERENCES `{$this->prefixed}referrals` (`id`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}treatment_user_fk` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+//)";
+//
+// // Fourth: referral_rewards (depends on referrals AND wp_users)
+// $dependentTables['referral_rewards'] = "(
+// `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+// `referral_id` bigint(20) unsigned NOT NULL,
+// `user_id` {$this->userIDType} NOT NULL,
+// `reward_type` enum('referrer', 'referee') NOT NULL,
+// `amount` decimal(10,2) NOT NULL,
+// `reward_calculation` varchar(20) DEFAULT NULL COMMENT 'percentage or fixed',
+// `status` enum('available', 'redeemed', 'expired', 'cancelled') DEFAULT 'available',
+// `created_at` datetime NOT NULL,
+// `redeemed_at` datetime DEFAULT NULL,
+// `expires_at` datetime DEFAULT NULL,
+// `notes` text DEFAULT NULL,
+// PRIMARY KEY (`id`),
+// KEY `referral_idx` (`referral_id`),
+// KEY `user_idx` (`user_id`),
+// KEY `status_idx` (`status`),
+// KEY `type_idx` (`reward_type`),
+// CONSTRAINT `{$this->base}reward_referral_fk` FOREIGN KEY (`referral_id`)
+// REFERENCES `{$this->prefixed}referrals` (`id`) ON DELETE CASCADE,
+// CONSTRAINT `{$this->base}reward_user_fk` FOREIGN KEY (`user_id`)
+// REFERENCES `{$this->userTable}` (`ID`) ON DELETE CASCADE
+//)";
+//
+// return $dependentTables;
+// }
/*******************************************************************************************
* These methods help create a content-type taxonomy, like the tattoo shops in edmonton.ink
@@ -1519,7 +1528,7 @@
}
try {
- $contentFields = jvbGetFields($type);
+ $contentFields = Registrar::getFieldsFor($type);
if (!$contentFields || empty($contentFields)) {
return;
--
Gitblit v1.10.0