From ba1e1ccf869b818f7a7a897264dfea05563a7796 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 07 Jun 2026 20:10:20 +0000
Subject: [PATCH] =Major overhaul of Integrations. Playing around with adding fields to post types through Registrar from an integrations' class file.
---
inc/blocks/FormBlock.php | 88 ++++++++++++++++++++++++--------------------
1 files changed, 48 insertions(+), 40 deletions(-)
diff --git a/inc/blocks/FormBlock.php b/inc/blocks/FormBlock.php
index 369ce77..0d447da 100644
--- a/inc/blocks/FormBlock.php
+++ b/inc/blocks/FormBlock.php
@@ -1,11 +1,9 @@
<?php
namespace JVBase\blocks;
-use JVBase\managers\CacheManager;
-use JVBase\meta\MetaManager;
-use JVBase\managers\CloudflareTurnstile;
-use Exception;
-use WP_Block;
+use JVBase\managers\Cache;
+use JVBase\meta\Form;
+use JVBase\base\Site;
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly
@@ -18,8 +16,8 @@
*/
class FormBlock
{
- protected static FormBlock|null $instance = null;
- protected CacheManager $cache;
+ protected static ?FormBlock $instance = null;
+ protected Cache $cache;
protected array $forms;
protected string $form_contact;
@@ -35,7 +33,7 @@
public function __construct()
{
- $this->cache = new CacheManager('form_blocks', HOUR_IN_SECONDS);
+ $this->cache = Cache::for('forms', WEEK_IN_SECONDS);
// Initialize forms from filter
$this->forms = $this->registerForms();
@@ -47,12 +45,35 @@
// Register forms data for the block editor
add_action('enqueue_block_editor_assets', [$this, 'localizeFormsData']);
add_action('init', [$this, 'registerBlock']);
+ add_filter('render_block', [$this, 'maybeEnqueueScripts'], 10, 2);
+ }
+
+ /**
+ * Enqueue scripts when rendering form block
+ */
+ public function maybeEnqueueScripts(string $block_content, array $block): string
+ {
+ // Only process our form blocks
+ if ($block['blockName'] !== 'jvb/forms') {
+ return $block_content;
+ }
+
+ // Enqueue Turnstile if needed
+ if (Site::hasIntegration('cloudflare')) {
+ $cloudflare = JVB()->connect('cloudflare');
+ if ($cloudflare->isSetUp()) {
+ $cloudflare->enqueueTurnstileScripts();
+ }
+ }
+
+ return $block_content;
}
public function registerBlock()
{
register_block_type($this->path, [
- 'render_callback' => [$this, 'render']
+ 'render_callback' => [$this, 'render'],
+ 'style' => 'jvb-icons-forms',
]);
}
@@ -93,9 +114,7 @@
'sections' => []
];
- $config = array_merge($defaults, $config);
-
- return $config;
+ return array_merge($defaults, $config);
}
/**
@@ -110,16 +129,12 @@
}
$cache_key = $this->cache->generateKey($block);
- $cached = $this->cache->get($cache_key);
- $cached = false;
- if ($cached) {
- return $cached;
- }
-
- $rendered = $this->renderForm($form_type, $block);
-
- $this->cache->set($cache_key, $rendered);
- return $rendered;
+ return $this->cache->remember(
+ $cache_key,
+ function() use ($form_type, $block) {
+ return $this->renderForm($form_type, $block);
+ }
+ );
}
/**
@@ -164,7 +179,6 @@
$this->renderTurnstile();
$this->renderFormEnd($type, $form_id);
echo '</div>';
-
return ob_get_clean();
}
@@ -262,8 +276,8 @@
}
}
- echo '<form id="' . esc_attr($form_id) . '" data-form-id="'.esc_attr($type).'" data-save="form" data-noautosave>';
- wp_nonce_field('jvb_form_' . $type);
+ echo '<form id="' . esc_attr($form_id) . '" data-form-id="'.esc_attr($type).'" data-save="form">';
+// wp_nonce_field('jvb_form_' . $type);
}
/**
@@ -277,25 +291,24 @@
return;
}
- // Create MetaManager instance for form rendering
- $meta = new MetaManager();
-
// If sections are defined, render in sections
if (!empty($form_config['sections'])) {
- $this->renderSections($type, $meta);
+ $this->renderSections($type);
} else {
echo jvbFormStatus();
// Render fields directly
foreach ($form_config['fields'] as $field_name => $field_config) {
- $meta->render('form', $field_name, $field_config);
+ echo Form::render($field_name, null, $field_config);
}
+ $submit_text = $form_config['submit'] ?? 'Submit';
+ echo '<button type="submit" class="button primary">' . esc_html($submit_text) . '</button>';
}
}
/**
* Render form sections
*/
- protected function renderSections(string $type, MetaManager $meta): void
+ protected function renderSections(string $type): void
{
$form_config = $this->forms[$type];
$sections = $form_config['sections'];
@@ -311,7 +324,7 @@
// Render navigation if multiple sections
if (count($sections) > 1) {
- echo '<nav class="tabs row start" role="tablist">';
+ echo '<nav class="tabs row left" role="tablist">';
$i = 1;
foreach ($sections as $slug => $section) {
$active_class = $i === 1 ? ' active' : '';
@@ -350,11 +363,11 @@
});
foreach ($section_fields as $field_name => $field_config) {
- $meta->render('form', $field_name, $field_config);
+ echo Form::render($field_name, null, $field_config);
}
// Add step navigation buttons
- echo '<div class="step-navigation row btw">';
+ echo '<div class="step-navigation row x-btw">';
if ($i > 0) {
echo '<button type="button" class="button secondary prev-step" data-action="prev-step">';
@@ -389,7 +402,7 @@
*/
protected function renderTurnstile(): void
{
- if (!jvbSiteUsesCloudflare()) {
+ if (!Site::hasIntegration('cloudflare')) {
return;
}
@@ -435,11 +448,6 @@
];
}
- error_log('Form Localization: '.print_r([
- 'formTypes' => $form_types,
- 'availableForms' => $this->forms,
- 'nonce' => wp_create_nonce('jvbForm')
- ], true));
wp_localize_script('jvb-forms-editor-script', 'jvbFormsData', [
'formTypes' => $form_types,
'availableForms' => $this->forms,
--
Gitblit v1.10.0