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/integrations/SyncHelpers.php | 68 +++++++++++++++++++++++++++++++++
1 files changed, 67 insertions(+), 1 deletions(-)
diff --git a/inc/integrations/SyncHelpers.php b/inc/integrations/SyncHelpers.php
index f2d0ca0..db97940 100644
--- a/inc/integrations/SyncHelpers.php
+++ b/inc/integrations/SyncHelpers.php
@@ -1,6 +1,10 @@
<?php
namespace JVBase\integrations;
+use JVBase\managers\queue\executors\IntegrationExecutor;
+use JVBase\managers\queue\mergers\DefaultMerger;
+use JVBase\managers\queue\Queue;
+use JVBase\managers\queue\TypeConfig;
use JVBase\meta\Meta;
use WP_Query;
@@ -9,7 +13,7 @@
}
trait SyncHelpers {
- use _Base;
+ use _Base, SyncDefaults;
/**
* Queue types
* These types match with IntegrationExecutor
@@ -20,11 +24,15 @@
protected static string $syncCustomer;
protected static string $import;
+ protected static array $syncing = ['posts' => [], 'users' => [], 'terms' => []];
+
+
protected function setQueueTypes():void
{
self::$syncTo = $this->service_name.'_sync_to';
self::$deleteFrom = $this->service_name.'_delete_from';
self::$syncFrom = $this->service_name.'_sync_from';
+ self::$syncCustomer = $this->service_name.'_sync_customer';
//TODO: What is the difference between sync_from and import?
self::$import = $this->service_name.'import_from';
}
@@ -38,6 +46,17 @@
default => ''
};
}
+ public function setServiceItemID(int $itemID, string $id, string $type = 'post'):bool
+ {
+
+ $result = match($type) {
+ 'post' => Meta::forPost($itemID)->set("_{$this->service_name}_item_id", $id),
+ 'term','taxonomy' => Meta::forTerm($itemID)->set("_{$this->service_name}_item_id", $id),
+ 'user' => Meta::forUser($itemID)->set("_{$this->service_name}_item_id", $id),
+ default => false
+ };
+ return $result !== false;
+ }
protected function updateItemStatus(int|array $items, string $status = 'pending', string $type = 'post'):void
{
if (!is_array($items)) {
@@ -141,4 +160,51 @@
]);
return is_wp_error($get) || empty($get) ? false : [$get[0], 'user'];
}
+
+ public function registerQueueTypes():void
+ {
+ if (empty($this->syncTaxonomies) && empty($this->syncPostTypes)) {
+ return;
+ }
+ $queue = Queue::getInstance();
+ $executor = new IntegrationExecutor();
+
+ $queue->registry()->register(self::$syncTo, new TypeConfig(
+ mergeable: new DefaultMerger('items'),
+ executor: $executor,
+ chunkKey: 'items',
+ chunkSize: 50,
+ maxRetries: 3,
+ ));
+
+ if ($this->canSync['delete']) {
+ $queue->registry()->register(self::$deleteFrom, new TypeConfig(
+ mergeable: new DefaultMerger('external_ids'),
+ executor: $executor,
+ chunkKey: 'external_ids',
+ chunkSize: 200,
+ maxRetries: 2
+ ));
+ }
+
+ $queue->registry()->register(self::$syncFrom, new TypeConfig(
+ executor: $executor,
+ maxRetries: 3
+ ));
+
+ $this->registerAdditionalQueueTypes($executor);
+ }
+
+ /**
+ * Empty. Integration extensions can register additional operation types here
+ * @param IntegrationExecutor $executor
+ * @return void
+ */
+ protected function registerAdditionalQueueTypes(IntegrationExecutor $executor):void {}
+
+ /**
+ * @return void Sets the $this->contentTypes, which is an array of TYPE => [$fields]
+ * Should probably set the endpoints here as well, which would be an array of [ TYPE => [ 'create' => '','update' =>'', 'delete'=>'', 'batchCreate'=>'','batchUpdate'=>'', 'batchDelete'=>''] endpoints
+ */
+ abstract protected function setContentTypes():void;
}
--
Gitblit v1.10.0