Jake Vanderwerf
2026-09-18 a6413da67a4579866f0fd0323ddb23a7b6b9654a
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()
   {
@@ -164,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;
      }
   }
@@ -189,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;
      }
@@ -327,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;
      }
@@ -542,12 +541,12 @@
      $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);
   }
@@ -610,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;
      }
   }
   // ─────────────────────────────────────────────────────────────
@@ -725,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']);
      }
   }