From 2127b1bdd73ecd2423e443992da4b442f5a3c1a3 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Wed, 04 Feb 2026 21:19:25 +0000
Subject: [PATCH] =Major overhaul of MetaManager.php -> Meta.php and RestRouteManager.php -> Rest.php. Seems to work for JakeVan
---
inc/registry/CheckCustomTables.php | 116 ++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 69 insertions(+), 47 deletions(-)
diff --git a/inc/registry/CheckCustomTables.php b/inc/registry/CheckCustomTables.php
index 16962fc..9ec862a 100644
--- a/inc/registry/CheckCustomTables.php
+++ b/inc/registry/CheckCustomTables.php
@@ -103,7 +103,12 @@
error_log('JVB: Starting table creation process');
error_log('JVB: Memory usage at start: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
- $tables = $calendar = $integrations = $karma = $stats = $invitable = $verifyEntry = $approval = $trackChanges = [];
+ $tables = $calendar = $integrations = $karma = $stats = $verifyEntry = $approval = $trackChanges = [];
+ $invitable = [
+ 'roles' => [],
+ 'terms' => []
+ ];
+
// Basic tables (these worked fine)
try {
@@ -113,10 +118,9 @@
// $tables = array_merge($tables, $this->umamiTracking());
// }
}
- if (array_key_exists('can_invite', $this->JVB_MEMBERSHIP) && is_array($this->JVB_MEMBERSHIP['can_invite'])) {
- foreach ($this->JVB_MEMBERSHIP['can_invite'] as $role => $canInvite) {
- $invitable[$role]['can_invite'] = $canInvite;
- }
+ if (array_key_exists('can_invite', $this->JVB_MEMBERSHIP) &&
+ is_array($this->JVB_MEMBERSHIP['can_invite'])) {
+ $invitable['roles'] = $this->JVB_MEMBERSHIP['can_invite'];
}
// if (jvbCheck('social', $this->JVB_SITE) || jvbCheck('gmb', $this->JVB_SITE) || jvbCheck('square', $this->JVB_SITE) || jvbCheck('helcim', $this->JVB_SITE)) {
@@ -208,9 +212,7 @@
$trackChanges[$type] = $config;
}
if (array_key_exists('invitable', $config) && $config['invitable']) {
- foreach ($config['for_content'] as $content) {
- $invitable[$content]['to_terms'][] = $type;
- }
+ $invitable['terms'][] = $type;
}
if (array_key_exists('verify_entry', $config) && $config['verify_entry']) {
$verifyEntry[$type] = $config;
@@ -295,17 +297,19 @@
// RE-ENABLE other table types
try {
- if (!empty($invitable)) {
- error_log('JVB: Creating invitation tables...');
+ if (!empty($invitable['roles']) || !empty($invitable['terms'])) {
+ error_log('JVB: Creating invitation table...');
$invitationTables = $this->invitationTables($invitable);
- error_log('JVB: Invitation tables created: ' . count($invitationTables));
+ error_log('JVB: Invitation table created: ' . count($invitationTables));
$tables = array_merge($tables, $invitationTables);
- error_log('JVB: Memory after invitations: ' . memory_get_usage(true) / 1024 / 1024 . ' MB');
}
} catch (Exception $e) {
- error_log("JVB: Error creating invitation tables: " . $e->getMessage());
+ error_log("JVB: Error creating invitation table: " . $e->getMessage());
}
+ // Store config for later use
+ update_option(BASE.'invitation_config', $invitable);
+
try {
if (!empty($approval)) {
error_log('JVB: Creating approval tables...');
@@ -1153,42 +1157,60 @@
];
}
- protected function invitationTables($types)
- {
-
- $tables = [];
- foreach ($types as $role => $config) {
- $definitions = "(
- `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
- `name` varchar(255) NOT NULL,
- `email` varchar(255) NOT NULL,
- `invitation_token` varchar(64) NOT NULL,
- `status` enum('pending', 'accepted', 'rejected', 'expired','revoked') DEFAULT 'pending',
- `inviters` JSON NOT NULL,";
- foreach($config['to_terms']??[] as $term) {
- $definitions .= "`to_{$term}` {$this->termIDType} DEFAULT NULL,";
- }
- $definitions .= "`new_user_id` bigint(20) NOT NULL,
- `expires_at` datetime NOT NULL,
- `accepted_at` datetime 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 `unique_email` (`email`),
- KEY `token_lookup` (`invitation_token`),
- KEY `status_expiry` (`status`, `expires_at`),
- KEY `name_status` (`name`, `status`)
- )";
- foreach($config['to_terms']??[] as $term) {
- $definitions .= "CONSTRAINT `{$this->base}_{$term}_link` FOREIGN KEY (`to_{$term}`)
- REFERENCES `{$this->wpdb->terms}` (`term_id`) ON DELETE CASCADE";
- }
-
- $tables['invitations_'.$role] = $definitions;
+ protected function invitationTables(array $config): array
+ {
+ if (empty($config['roles']) && empty($config['terms'])) {
+ return [];
}
- return $tables;
- }
+ $definitions = "(
+ `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
+ `name` varchar(255) NOT NULL,
+ `email` varchar(255) NOT NULL,
+ `invitation_token` varchar(255) NOT NULL,
+ `invited_role` varchar(50) NOT NULL COMMENT 'Role being invited to',
+ `status` enum('pending','accepted','rejected','expired','revoked') DEFAULT 'pending',
+ `inviters` JSON NOT NULL COMMENT 'Array of {user_id, invited_at}',
+ `new_user_id` {$this->userIDType} DEFAULT NULL,
+ `expires_at` datetime NOT NULL,
+ `accepted_at` datetime DEFAULT NULL,
+ `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ `updated_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+ ";
+
+ // Add term columns for all invitable taxonomies
+ foreach ($config['terms'] ?? [] as $taxonomy) {
+ $definitions .= "`to_{$taxonomy}` {$this->termIDType} DEFAULT NULL,";
+ }
+
+ $definitions .= "PRIMARY KEY (`id`),
+ UNIQUE KEY `unique_email_role` (`email`, `invited_role`),
+ KEY `token_lookup` (`invitation_token`),
+ KEY `status_expiry` (`status`, `expires_at`),
+ KEY `role_status` (`invited_role`, `status`),
+ KEY `email_status` (`email`, `status`),
+ ";
+
+ // Add foreign key constraints for terms
+ $constraints = [];
+ foreach ($config['terms'] ?? [] as $taxonomy) {
+ $constraints[] = "CONSTRAINT `{$this->base}invitations_{$taxonomy}_fk`
+ FOREIGN KEY (`to_{$taxonomy}`)
+ REFERENCES `{$this->wpdb->terms}` (`term_id`)
+ ON DELETE SET NULL";
+ }
+
+ // Add user foreign key
+ $constraints[] = "CONSTRAINT `{$this->base}invitations_user_fk`
+ FOREIGN KEY (`new_user_id`)
+ REFERENCES `{$this->userTable}` (`ID`)
+ ON DELETE SET NULL";
+
+ $definitions .= implode(',', $constraints);
+ $definitions .= ")";
+
+ return ['invitations' => $definitions];
+ }
protected function trackChangesTables($types)
{
--
Gitblit v1.10.0