From 86c6cd3cc099d2480932ede03c12cea01e625c94 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 26 Apr 2026 21:56:28 +0000
Subject: [PATCH] =Requiring files based on Site class settings

---
 inc/helpers/crud.php |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 55 insertions(+), 5 deletions(-)

diff --git a/inc/helpers/crud.php b/inc/helpers/crud.php
index 7f4e8c8..6245bff 100644
--- a/inc/helpers/crud.php
+++ b/inc/helpers/crud.php
@@ -5,8 +5,60 @@
 }
 
 use JVBase\managers\Cache;
+use JVBase\meta\Form;
+use JVBase\registrar\Registrar;
 
 /**
+ * For whatever reason, after much testing, it seems that
+ *  good ol' WP resets post_parent if you call wp_update_post
+ *  without explicitly setting the post_parent
+ * This is a wrapper that grabs old data and merges it with
+ *   what we're trying to update - reducing repetition
+ * @param array $postArr as in wp_update_post
+ * @param array $allowOverride an array of keys that are allowed to be overridden
+ * @return int|WP_Error
+ */
+function jvb_update_post(array $postArr, array $allowOverride = []) {
+	if (empty($postArr['ID'])) {
+		return new WP_Error('missing_id', 'Post ID is required');
+	}
+
+	$old = get_post($postArr['ID'], ARRAY_A);
+	if (!$old) {
+		return new WP_Error('invalid_id', 'Post not found');
+	}
+	/**
+	 * WARNING: You won't want to override fields like:
+	 * guid
+	 * filter
+	 * ancestors
+	 * post_category
+	 * tags_input
+	 * to_ping
+	 * pinged
+	**/
+	$preserveFields = [
+		'post_parent', 'menu_order',
+		'post_status', 'post_password', 'comment_status', 'ping_status',
+		'post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt',
+		'post_name', 'post_title', 'post_excerpt', 'post_content',
+		'post_author'
+	];
+	// Remove fields we explicitly want to override
+	$preserveFields = array_diff($preserveFields, $allowOverride);
+
+	// Keep only preserved fields from old post
+	$old = array_intersect_key($old, array_flip($preserveFields));
+
+	// Merge old → new (new wins)
+	$merged = array_merge($old, $postArr);
+	$merged['ID'] = (int)$postArr['ID'];
+
+	return wp_update_post($merged, true);
+}
+
+/**
+ * @deprecated use CRUDManager.php or CRUDSkeleton.php
  * Outputs the blocks of a CRUD management in backend
  * Mainly used in news.php so far
  * @param string $content
@@ -296,9 +348,7 @@
     $nav .= '</nav>';
     echo $nav;
 
-    $fields = jvbGetFields($postType);
-
-    $meta = new JVBase\meta\MetaManager($ID, $contentType);
+    $fields = Registrar::getFieldsFor($postType);
     ?>
     <form class="jvb-form" id="bio" data-form-id="bio-<?=$ID?>" data-save="bio"
           data-object-id="<?=$ID?>" data-content-type="<?=$postType?>">
@@ -334,10 +384,10 @@
                         if (array_key_exists('role', $config)) {
                             $user = get_userdata($ID);
                             if (in_array($config['role'], $user->roles)) {
-                                $meta->render('form', $field, $config);
+                                echo Form::render($field, null, $config);
                             }
                         } else {
-                            $meta->render('form', $field, $config);
+                            echo Form::render($field, null, $config);
                         }
                     }
                     ?>

--
Gitblit v1.10.0