Jake Vanderwerf
2026-08-28 a9654f00c8fbc9934289d761843ddd071025013f
inc/managers/queue/executors/ContentTermExecutor.php
@@ -2,13 +2,14 @@
namespace JVBase\managers\queue\executors;
use JVBase\managers\CustomTable;
use JVBase\managers\NotificationManager;
use JVBase\managers\queue\Executor;
use JVBase\managers\queue\Operation;
use JVBase\managers\queue\Progress;
use JVBase\managers\queue\Result;
use JVBase\managers\RoleManager;
use JVBase\managers\Roles;
use JVBase\meta\Meta;
use JVBase\utility\Features;
use JVBase\registrar\Registrar;
use Exception;
if (!defined('ABSPATH')) {
@@ -25,20 +26,21 @@
 */
class ContentTermExecutor implements Executor
{
   protected RoleManager $roleManager;
   protected Roles $roleManager;
   public function __construct()
   {
      $this->roleManager = new RoleManager();
      $this->roleManager = new Roles();
   }
   public function execute(Operation $operation, Progress $progress): Result
   {
      error_log('Executing Content Term.... ');
      // Extract taxonomy from operation type (e.g., "shop_update" -> "shop")
      $parts = explode('_', $operation->type);
      $taxonomy = $parts[0] ?? '';
      if (!$taxonomy || !isset(JVB_TAXONOMY[$taxonomy])) {
      $data= $operation->requestData;
      $taxonomy = $data['taxonomy']??false;
      $registrar = $taxonomy? Registrar::getInstance($taxonomy) : false;
      if (!$taxonomy || !$registrar) {
         return Result::fail("Invalid taxonomy: {$taxonomy}");
      }
@@ -73,7 +75,7 @@
         unset($data['term_id']);
         // Filter to only allowed fields
         $allowed = jvbGetFields($taxonomy, 'term');
         $allowed = Registrar::getFieldsFor($taxonomy);
         $setData = array_filter(
            $data,
            fn($key) => array_key_exists($key, $allowed),
@@ -85,13 +87,9 @@
         }
         // Update metadata
         $meta->setAll($setData);
         $results = $meta->save();
         $results = $meta->setAll($setData);
         if ($results) {
            // Trigger any post-update actions (e.g., thumbnail generation)
            do_action(BASE . "{$taxonomy}_updated", $termID, $userID, $setData);
            return Result::success([
               'updated_fields' => array_keys($setData),
               'term_id' => $termID
@@ -128,7 +126,8 @@
      }
      // Check if tracking enabled
      if (!Features::forTaxonomy($taxonomy)->has('track_changes')) {
      $registrar = Registrar::getInstance($taxonomy);
      if ($registrar && !$registrar->hasFeature('track_changes')) {
         return Result::fail('Member tracking not enabled for ' . $taxonomy);
      }
@@ -173,15 +172,18 @@
    */
   protected function addMember(int $userID, int $termID, string $taxonomy): Result
   {
      $config = JVB_TAXONOMY[$taxonomy] ?? [];
      $content = $config['for_content'] ?? [];
      $registrar = Registrar::getInstance($taxonomy);
      if (!$registrar) {
         return Result::fail('No content registered');
      }
      if (empty($content)) {
      $forContent = $registrar->registrar->for;
      if (empty($forContent)) {
         return Result::fail('No content types configured for ' . $taxonomy);
      }
      // Get table name (e.g., "history_artist_shop")
      $contentType = $content[0]; // Use first content type
      $contentType = is_array($forContent) ? $forContent[0] : $forContent; // Use first content type
      $tableName = "history_{$contentType}_{$taxonomy}";
      $table = CustomTable::for($tableName);
@@ -235,9 +237,6 @@
            throw new Exception('Failed to set taxonomy term: ' . $termResult->get_error_message());
         }
         // Clear cache
         JVB()->cache()->for($taxonomy)->delete("{$taxonomy}_{$termID}_members");
         // Notify term managers
         $this->notifyTermManagers($termID, $userID, $taxonomy, 'member_added');
@@ -254,15 +253,19 @@
    */
   protected function removeMember(int $userID, int $termID, string $taxonomy): Result
   {
      $config = JVB_TAXONOMY[$taxonomy] ?? [];
      $content = $config['for_content'] ?? [];
      $registrar = Registrar::getInstance($taxonomy);
      if (!$registrar) {
         return Result::fail('No content registered');
      }
      $forContent = $registrar->registrar->for;
      if (empty($content)) {
      if (empty($forContent)) {
         return Result::fail('No content types configured for ' . $taxonomy);
      }
      // Get table name
      $contentType = $content[0];
      $contentType = is_array($forContent) ? $forContent[0] : $forContent;
      $tableName = "history_{$contentType}_{$taxonomy}";
      $table = CustomTable::for($tableName);
@@ -296,9 +299,6 @@
            throw new Exception('Failed to remove taxonomy term: ' . $termResult->get_error_message());
         }
         // Clear cache
         JVB()->cache()->for($taxonomy)->delete("{$taxonomy}_{$termID}_members");
         // Notify term managers
         $this->notifyTermManagers($termID, $userID, $taxonomy, 'member_removed');
@@ -319,18 +319,16 @@
      $term = get_term($termID, jvbCheckBase($taxonomy));
      $user = get_userdata($userID);
      foreach ($managers as $managerID) {
         JVB()->notification()->addNotification(
            $managerID,
            $notificationType,
            [
               'user_id' => $userID,
               'user_name' => $user ? $user->display_name : 'Unknown',
               'term_id' => $termID,
               'term_name' => $term && !is_wp_error($term) ? $term->name : 'Unknown',
               'taxonomy' => $taxonomy
            ]
         );
      }
      //TODO: Check this
      NotificationManager::getInstance()->notify(
         $managers,
         $notificationType,
         $userID,
         [
            'target_id' => $termID,
            'target_type' => $taxonomy
         ]
      );
   }
}