From 46d681c6b825d21b3f698d793c4e630c687d90ad Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 21 May 2026 21:41:53 +0000
Subject: [PATCH] =Major CustomBlocks.php overhaul, expanding block support and customization from the editor. theme.json should now be updated on new themes to set brand colours, etc. Also note: major change to .col vs .row alignment: simplifying it to .top .bottom vs the confusion of the differences for .col/.row .start and .a-start
---
inc/integrations/Integrations.php | 132 +++++++++++++++++++++++++-------------------
1 files changed, 75 insertions(+), 57 deletions(-)
diff --git a/inc/integrations/Integrations.php b/inc/integrations/Integrations.php
index 08c375f..5a14350 100644
--- a/inc/integrations/Integrations.php
+++ b/inc/integrations/Integrations.php
@@ -3,9 +3,11 @@
use Exception;
use JVBase\managers\Cache;
-use JVBase\managers\UploadManager;
-use JVBase\meta\MetaManager;
+use JVBase\meta\Form;
+use JVBase\meta\Meta;
use JVBase\managers\ErrorHandler;
+use JVBase\registrar\helpers\AddIntegrationFields;
+use JVBase\registrar\Registrar;
use WP_Error;
use WP_Post;
use WP_REST_Request;
@@ -91,6 +93,7 @@
'test_connection' => 'Test Connection',
];
+ protected array $allowedContent = [];
/**
* Caching Configuration
@@ -131,8 +134,8 @@
'update' => false, // Can update already-shared posts
'delete' => false, // Can remove posts from the service
];
- protected array $syncPostTypes = []; // Post types that can be synced (e.g., ['artwork', 'tattoo']): usually built by querying the global JVB_CONTENT if the integration name exists as a key in [ 'integrations' => []]
- protected array $syncTaxonomies = []; // Post types that can be synced (e.g., ['artwork', 'tattoo']): usually built by querying the global JVB_CONTENT if the integration name exists as a key in [ 'integrations' => []]
+ protected array $syncPostTypes = []; // Post types that can be synced (e.g., ['artwork', 'tattoo']): usually built by Registrar.php if the integration name exists as a key in [ 'integrations' => []]
+ protected array $syncTaxonomies = []; // Post types that can be synced (e.g., ['artwork', 'tattoo']): usually built by Registrar.php if the integration name exists as a key in [ 'integrations' => []]
protected array $contentTypes = []; // Integration's available content types. Set by child classes' getContentTypes
protected bool $has_content = false; // Whether integration has content that can sync
/**
@@ -295,12 +298,10 @@
$postTypes = get_option($key, false);
if (!$postTypes) {
$postTypes = [];
-
- // Get from JVB_CONTENT
-
- foreach (JVB_CONTENT as $type => $config) {
- if (array_key_exists('integrations', $config) && array_key_exists($this->service_name, $config['integrations'])) {
- $postTypes[] = $type;
+ foreach (Registrar::getRegistered('post') as $registrar) {
+ $registrar = Registrar::getInstance($registrar);
+ if ($registrar->hasIntegration($this->service_name)) {
+ $postTypes[] = $registrar->getSlug();
}
}
@@ -318,11 +319,10 @@
if (!$taxonomies) {
// Combine both content and taxonomy filtering
$taxonomies = [];
- // Get from JVB_TAXONOMY (content taxonomies)
- foreach (JVB_TAXONOMY as $type => $config) {
- if (jvbCheck('is_content', $config) &&
- isset($config['integrations'][$this->service_name])) {
- $taxonomies[] = $type;
+ foreach (Registrar::getFeatured('is_content', 'term') as $type) {
+ $registrar = Registrar::getInstance($type);
+ if ($registrar->hasIntegration($this->service_name)) {
+ $taxonomies[] = $registrar->getSlug();
}
}
@@ -2081,20 +2081,11 @@
*/
protected function mapFieldsToService(int $postID, array $mapping): array
{
- $meta_manager = new MetaManager($postID, 'post');
- $post = get_post($postID);
+ $meta_manager = Meta::forPost($postID);
$service_data = [];
foreach ($mapping as $wp_field => $service_field) {
- $value = null;
-
- // Check if it's a post field
- if (property_exists($post, $wp_field)) {
- $value = $post->$wp_field;
- } else {
- // It's a meta field
- $value = $meta_manager->getValue($wp_field);
- }
+ $value = $meta_manager->get($wp_field);
if ($value !== null && $value !== '') {
$this->setNestedValue($service_data, $service_field, $value);
@@ -2133,23 +2124,34 @@
*/
public function handleSavePost(int $postID, WP_Post $post, bool $update): void
{
- if (jvbNoSaveIt($postID, $post)) {
+ if (!$postID || $postID === 0) {
return;
}
+ $postType = jvbNoBase($post->post_type);
+
+ if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
+ if (wp_is_post_revision($postID)) return;
+
+ $registrar = Registrar::getInstance($postType);
+ if (!$registrar){
+ return;
+ }
+
if (empty($this->syncPostTypes)) {
return;
}
- $config = JVB_CONTENT[jvbNoBase($post->post_type)]??null;
- if (!$config) {
- return;
- }
-
- $settings = $config['integrations'][$this->service_name]??null;
+ $settings = $registrar->hasIntegration($this->service_name)??null;
if (!$settings) {
return;
}
+ $settings = $registrar->getIntegrationConfig($this->service_name);
+ if (!$settings){
+ return;
+ }
+
+
$fields = $this->getSyncFields($postID, 'post', ['schedule_'.$this->service_name]);
if (!$fields['share_to_'.$this->service_name]) {
return;
@@ -2169,7 +2171,7 @@
protected function getSyncFields(int $postID, string $type, array $additional = []):array
{
- $meta = new MetaManager($postID, $type);
+ $meta = new Meta($postID, $type);
$fieldsToCheck = [
'share_to_' . $this->service_name,
'_keep_synced_' . $this->service_name,
@@ -2252,13 +2254,13 @@
if (!in_array($noBase, $this->syncTaxonomies)) {
return;
}
- // Check if taxonomy is content-type
- $config = JVB_TAXONOMY[$noBase] ?? null;
- if (!$config || !($config['is_content'] ?? false)) {
+ $registrar = Registrar::getInstance($noBase);
+ if (!$registrar->hasFeature('is_content')) {
return;
}
- $settings = $config['integrations'][$this->service_name] ?? null;
+
+ $settings = $registrar->getIntegrationConfig($this->service_name);
if (!$settings) {
return;
}
@@ -2930,7 +2932,7 @@
return '';
}
- $meta = new MetaManager($this->userID, 'integrations');
+ $meta = Meta::forOptions($this->userID.'_integrations');
$is_connected = $this->isSetUp();
$credentials = $this->getCredentials();
@@ -2943,7 +2945,7 @@
?>
<form id="<?=$this->service_name?>" class="integration <?php echo $is_connected ? 'connected' : 'disconnected'; ?>"
data-service="<?php echo esc_attr($this->service_name); ?>">
- <div class="header row btw">
+ <div class="header row x-btw">
<h3><?php echo esc_html($this->title); ?></h3>
<div class="setup">
<?php if ($is_connected): ?>
@@ -3007,7 +3009,7 @@
$config['value'] = $credentials[$name]??'';
$config['autocomplete'] = 'off';
$config['base'] = $this->service_name.'_';
- $meta->render('form', $name, $config);
+ echo Form::render($name, '', $config);
}
}
if ($this->handleWebhooks) {
@@ -3038,7 +3040,7 @@
$config['value'] = $credentials[$name]??'';
$config['base'] = $this->service_name.'_';
$config['autocomplete'] = 'off';
- $meta->render('form', $name, $config);
+ Form::render($name,null, $config);
}
?>
</details>
@@ -3054,7 +3056,7 @@
}
?>
</div>
- <div class="actions row btw wrap">
+ <div class="actions row x-btw wrap">
<?php
foreach ($this->buttons as $action => $label) {
if (!$is_connected && $action !== 'save_credentials') {
@@ -3277,7 +3279,7 @@
if (empty($types)) {
return;
}
- $meta = new MetaManager($this->userID, 'integrations');
+ $meta = Meta::forOptions($this->userID.'_integrations');
?>
<form>
<h1><?= $this->title?> Defaults:</h1>
@@ -3289,16 +3291,19 @@
$config['base'] = $this->service_name.'_';
$config['autocomplete'] = 'off';
- $meta->render('form', $name, $config);
+ echo Form::render($name, null, $config);
}
foreach ($this->syncPostTypes as $type) {
- $config = JVB_CONTENT[$type];
+ $registrar = Registrar::getInstance($type);
+
+ $icon = $registrar->getIcon();
+ $icon = $icon === '' ? jvbDefaultIcon() : $icon;
?>
<details>
- <summary><?= jvbIcon($config['icon']) ?><?= $config['singular']?> Defaults</summary>
+ <summary><?= jvbIcon($icon) ?><?= $registrar->getSingular()?> Defaults</summary>
<?php
- $fields = new \JVBase\registry\providers\IntegrationFieldProvider();
- $fields = $fields->getIntegrationFields($this->service_name, $config);
+ $fields = new AddIntegrationFields($this->service_name);
+ $fields = $fields->getIntegrationFields();
foreach($fields as $name=>$c) {
$c['required'] = false;
if ($c['type'] === 'number') {
@@ -3309,7 +3314,7 @@
$c['hint'] = $c['description'];
unset($c['description']);
}
- $meta->render('form', $name, $c);
+ echo Form::render($name, null, $c);
}
?>
</details>
@@ -3339,17 +3344,16 @@
$enabled = get_option($key);
if (!$enabled) {
$enabled = [];
- foreach (array_merge(JVB_CONTENT, JVB_TAXONOMY) as $content => $config) {
- if (!array_key_exists('integrations', $config)) {
+ foreach (Registrar::getRegistered() as $registrar) {
+ $registrar = Registrar::getInstance($registrar);
+ if (!$registrar->hasIntegration($this->service_name)) {
continue;
}
- if (!array_key_exists($this->service_name, $config['integrations'])) {
+ $type = $registrar->getIntegration($this->service_name)->getContent_type();
+ if (!$type) {
continue;
}
- if (!array_key_exists('content_type', $config['integrations'][$this->service_name])) {
- continue;
- }
- $type = $config['integrations'][$this->service_name]['content_type'];
+
if (!in_array($type, $enabled)) {
$enabled[] = $type;
}
@@ -3525,4 +3529,18 @@
{
$this->token_refresh_attempted = false;
}
+
+ public function getAllowedContent():array
+ {
+ return $this->allowedContent;
+ }
+
+ /**
+ * Used by JVBase\registrar\helpers\AddIntegrationFields.php
+ * @return array
+ */
+ public function getAdditionalFields(?string $content_type = null):array
+ {
+ return [];
+ }
}
--
Gitblit v1.10.0