From 772462eeca3002a1d52508aeba485aab2b4742ad Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Tue, 03 Mar 2026 19:06:19 +0000
Subject: [PATCH] =MAJOR OVERHAUL. Likely should have made a new branch ages ago. Key changes: Registrar.php is the base for custom post types, taxonomies, and user roles. Replaces JVB_CONTENT, JVB_TAXONOMY, and JVB_USER constants, eliminates most of Features.php (except for JVB_SITE, JVB_MEMBERSHIP), and has built in sanitizing and validation via sub-classes. Also started a major overhaul of the Schema output. Created a shit ton of property traits and classes to help sanitize and ensure proper data for different schema types. Still a bunch to do, but better to be starting committing changes here on this other branch.
---
inc/helpers/crud.php | 66 +++++++++++++++++++++++++++++---
1 files changed, 59 insertions(+), 7 deletions(-)
diff --git a/inc/helpers/crud.php b/inc/helpers/crud.php
index 3966261..6245bff 100644
--- a/inc/helpers/crud.php
+++ b/inc/helpers/crud.php
@@ -4,7 +4,61 @@
exit;
}
+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
@@ -103,7 +157,7 @@
</button>
</div>
</div>',
- jvbIcon('close', ['title'=>'Cancel'])
+ jvbIcon('x', ['title'=>'Cancel'])
);
}
$out .= '</div>';
@@ -166,7 +220,7 @@
*/
function jvbRenderDateFilter(string $content):string
{
- $cache = new JVBase\Managers\CacheManager('date_filter');
+ $cache = Cache::for('date_filter')->connect('post', true);
$check = $cache->get($content);
if ($check) {
return $check;
@@ -294,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?>">
@@ -332,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