From a6413da67a4579866f0fd0323ddb23a7b6b9654a Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Fri, 18 Sep 2026 17:00:53 +0000
Subject: [PATCH] =Cleaning up the Integrations setup a bit, started the Helcim integration work too

---
 inc/meta/Storage.php |   66 +++++++++++++++++++--------------
 1 files changed, 38 insertions(+), 28 deletions(-)

diff --git a/inc/meta/Storage.php b/inc/meta/Storage.php
index 74538ff..732a9bb 100644
--- a/inc/meta/Storage.php
+++ b/inc/meta/Storage.php
@@ -2,7 +2,10 @@
 namespace JVBase\meta;
 
 use Exception;
+use JVBase\inc\managers\ErrorHelper;
 use JVBase\managers\Cache;
+use JVBase\managers\Errors;
+use wpdb;
 
 if (!defined('ABSPATH')) {
 	exit;
@@ -10,11 +13,11 @@
 
 /**
  * Handles persistence of meta values to WordPress
- * Pure storage layer - no validation or sanitization
  */
 class Storage
 {
-	protected \wpdb $wpdb;
+	use ErrorHelper;
+	protected wpdb $wpdb;
 
 	public function __construct()
 	{
@@ -77,7 +80,7 @@
 				&& (
 					($config['type'] ?? '') === 'taxonomy'
 					|| (($config['type']??'') === 'selector' && ($config['subtype']??'') === 'taxonomy')
-				) && !isset($config['taxonomy_type'])) {
+				) && (!isset($config['taxonomy_type']) || !isset($config['isReference']))) {
 				$taxonomyFields[$name] = $config;
 			} else {
 				$metaFields[] = $name;
@@ -123,18 +126,21 @@
 		}
 
 		if ($field->isTaxonomy()) {
+			error_log('Saving Taxonomy field with set_object_terms');
 			return $this->saveTaxonomyField($item, $field);
 		}
 
 		$metaKey = BASE . $field->name;
-
-		return match ($item->objectType) {
-			'post' => update_post_meta($item->id, $metaKey, $field->value) !== false,
-			'term' => update_term_meta($item->id, $metaKey, $field->value) !== false,
-			'user', 'integrations' => update_user_meta($item->id, $metaKey, $field->value) !== false,
+		$result =  match ($item->objectType) {
+			'post' => (bool)update_post_meta($item->id, $metaKey, $field->value),
+			'term' => (bool)update_term_meta($item->id, $metaKey, $field->value),
+			'user', 'integrations' => (bool)update_user_meta($item->id, $metaKey, $field->value),
 			'options' => $this->saveOption($item, $field),
 			default => false
 		};
+
+		error_log('Result: '.print_r($result, true));
+		return $result;
 	}
 
 	/**
@@ -149,10 +155,10 @@
 		}
 
 		$this->wpdb->query('START TRANSACTION');
-
 		try {
 			foreach ($dirty as $field) {
 				if (!$this->saveField($item, $field)) {
+					error_log("Could not save field: {$field->name}");
 					throw new Exception("Failed to save field: {$field->name}");
 				}
 				$field->markClean();
@@ -161,18 +167,14 @@
 			$this->wpdb->query('COMMIT');
 
 			// Update post modified timestamp
-			Cache::invalidateItem($item->objectType, $item->id);
 			$this->clearCache($item);
 
 			return true;
 
 		} catch (Exception $e) {
 			$this->wpdb->query('ROLLBACK');
-			JVB()->error()->log('meta_storage', $e->getMessage(), [
-				'item_id' => $item->id,
-				'object_type' => $item->objectType,
-				'fields' => array_keys($dirty)
-			], 'error');
+			$this->logError($e->getMessage(), 'save');
+
 			return false;
 		}
 	}
@@ -186,7 +188,7 @@
 		$config = $item->getFieldConfig($name);
 		if ($config && ($config['type'] ?? '') === 'taxonomy' && !isset($config['taxonomy_type'])) {
 			$taxonomy = jvbCheckBase($config['taxonomy']);
-			wp_set_object_terms($item->id, [], $taxonomy, false);
+			wp_set_object_terms($item->id, [], $taxonomy);
 			return true;
 		}
 
@@ -324,7 +326,7 @@
 				$results[$meta->item()->id ?? 'options'] = false;
 			}
 
-			JVB()->error()->log('meta_storage', 'Bulk save failed: ' . $e->getMessage(), [], 'error');
+			self::staticLogError($e->getMessage(), 'save');
 
 			return $results;
 		}
@@ -440,7 +442,7 @@
 	protected function getTermField(Item $item, string $name): mixed
 	{
 		return match ($name) {
-			'term_name' => get_term_field('name', $item->id),
+			'name' => get_term_field('name', $item->id),
 			'description' => get_term_field('description', $item->id),
 			default => ''
 		};
@@ -538,14 +540,13 @@
 	{
 		$taxonomy = jvbCheckBase($field->config['taxonomy']);
 		$value = $field->value;
-
 		if (empty(trim((string)$value))) {
-			wp_set_object_terms($item->id, [], $taxonomy, false);
+			wp_set_object_terms($item->id, [], $taxonomy);
 			return true;
 		}
 
 		$termIds = array_map('intval', array_filter(explode(',', $value)));
-		$result = wp_set_object_terms($item->id, $termIds, $taxonomy, false);
+		$result = wp_set_object_terms($item->id, $termIds, $taxonomy);
 
 		return !is_wp_error($result);
 	}
@@ -608,12 +609,21 @@
 
 	public function clearCache(Item $item): void
 	{
-		match ($item->objectType) {
-			'post' => clean_post_cache($item->id),
-			'term' => clean_term_cache($item->id),
-			'user', 'integrations' => clean_user_cache($item->id),
-			default => null
-		};
+		switch ($item->objectType) {
+			case 'post':
+				Cache::clearPost($item->id);
+				clean_post_cache($item->id);
+				break;
+			case 'term':
+				Cache::clearTerm($item->id);
+				clean_term_cache($item->id);
+				break;
+			case 'user':
+			case 'integrations':
+				Cache::clearUser($item->id);
+				clean_user_cache($item->id);
+				break;
+		}
 	}
 
 	// ─────────────────────────────────────────────────────────────
@@ -723,7 +733,7 @@
 				? []
 				: array_map('intval', array_filter(explode(',', $update['value'])));
 
-			wp_set_object_terms($update['object_id'], $termIds, $update['taxonomy'], false);
+			wp_set_object_terms($update['object_id'], $termIds, $update['taxonomy']);
 		}
 	}
 

--
Gitblit v1.10.0