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/blocks/FeedBlock.php | 78 +++++++++++++++++++++------------------
1 files changed, 42 insertions(+), 36 deletions(-)
diff --git a/inc/blocks/FeedBlock.php b/inc/blocks/FeedBlock.php
index e100409..9bcf1cf 100644
--- a/inc/blocks/FeedBlock.php
+++ b/inc/blocks/FeedBlock.php
@@ -2,8 +2,8 @@
namespace JVBase\blocks;
use JVBase\managers\Cache;
+use JVBase\registrar\Registrar;
use JVBase\utility\Features;
-use JVBase\utility\Checker;
use JVBase\forms\TaxonomySelector;
use WP_Block;
@@ -53,12 +53,13 @@
if (is_post_type_archive() || is_singular()) {
$content = is_singular() ? jvbNoBase($type->post_type) : jvbNoBase($type->name);
- $mainConfig = JVB_CONTENT[$content]??false;
- if ($mainConfig && array_key_exists('feed', $mainConfig) && array_key_exists('config', $mainConfig['feed'])){
- $config = array_merge($config, $mainConfig['feed']['config']);
+
+ $registrar = Registrar::getInstance($content)??false;
+ if ($registrar) {
+ $config = array_merge($config, $registrar->getConfig('feed'));
} else {
$config['content'] = $content;
- $config['icon'] = JVB_CONTENT[$content]['icon']??[jvbLogoIcon()];
+ $config['icon'] = jvbDefaultIcon();
}
if (is_singular()) {
$config['source'] = $type->ID;
@@ -67,13 +68,13 @@
$config['taxonomies'] = $this->getTaxonomies([$content]);
} elseif (is_tax()) {
$content = jvbNoBase($type->taxonomy);
- $mainConfig = JVB_TAXONOMY[$content]??false;
- if ($mainConfig) {
- $config['content'] = $mainConfig['for_content'];
- $config['context'] = $content; // ← ADD THIS
- $config['taxonomies'] = $this->getTaxonomies($mainConfig['for_content']);
- if (array_key_exists('feed', $mainConfig) && array_key_exists('config', $mainConfig['feed'])){
- $config = array_merge($config, $mainConfig['feed']['config']);
+ $registrar = Registrar::getInstance($content)??false;
+ if ($registrar) {
+ $config['content'] = $registrar->registrar->for;
+ $config['context'] = $content;
+ $config['taxonomies'] = $this->getTaxonomies($registrar->registrar->for);
+ if (!empty($registrar->getConfig('feed'))){
+ $config = array_merge($config, $registrar->getConfig('feed'));
}
}
$config['source'] = $type->term_id;
@@ -88,17 +89,19 @@
/**
* Get taxonomies for given content types
- * Uses Checker instead of globals
+
*/
protected function getTaxonomies(array $content): array
{
- $checker = Checker::getInstance();
+
$taxonomies = [];
foreach ($content as $contentType) {
- $contentTaxonomies = $checker->getTaxonomiesForContent($contentType);
+ $registrar = Registrar::getInstance($contentType);
+
+ $contentTaxonomies = $registrar->registrar->taxonomies;
$contentTaxonomies = array_filter($contentTaxonomies, function($taxonomy) {
- return array_key_exists('show_feed', JVB_TAXONOMY[$taxonomy]) && JVB_TAXONOMY[$taxonomy]['show_feed'];
+ return Registrar::getInstance($taxonomy)->hasFeature('show_feed');
});
$taxonomies = array_merge($taxonomies, $contentTaxonomies);
}
@@ -248,19 +251,18 @@
<span class="label">FILTER BY:</span>
<?php
- $checker = Checker::getInstance();
foreach ($this->config['taxonomies'] as $tax) :
- $taxConfig = JVB_TAXONOMY[$tax] ?? null;
- if (!$taxConfig) continue;
+ $registrar = Registrar::getInstance($tax)??false;
+ if (!$registrar) continue;
- $contentForTax = $checker->getContentForTaxonomy($tax);
+ $contentForTax = $registrar->registrar->for;
$hidden = empty($contentForTax) ? ' hidden' : '';
$taxSelector = new TaxonomySelector(
'feed-'.$tax,
$tax,
[
- 'icon' => $taxConfig['icon']??jvbLogoIcon(),
+ 'icon' => $registrar->getIcon()??jvbLogoIcon(),
'update' => '.selected-items-section .selected-items',
'types' => $contentForTax,
'autocomplete' => false,
@@ -311,9 +313,10 @@
<?php
$custom = [];
foreach ($this->getContent() as $content) {
- $config = JVB_CONTENT[$content]??JVB_TAXONOMY[$content]??JVB_USER[$content]??false;
- if ($config && array_key_exists('custom_order', $config)) {
- $custom = array_merge_recursive($custom, $config['custom_order']);
+ $registrar = Registrar::getInstance($content)??false;
+
+ if ($registrar && !empty($registrar->config('feed')->getCustomOrder())) {
+ $custom = array_merge_recursive($custom, $registrar->config('feed')->getCustomOrder());
}
}
foreach ($custom as $slug => $conf) {
@@ -365,8 +368,8 @@
$total = count($this->getContent()) - 1;
for ($i = 1; $i <= 36; $i++) {
$rand = rand(0, $total);
- $config = Features::getConfig($this->getContent()[$rand]);
- $icon = jvbIcon($config['icon']??jvbLogoIcon());
+ $config = Registrar::getInstance($this->getContent()[$rand]);
+ $icon = jvbIcon($config->getIcon??jvbLogoIcon());
?>
<div class="placeholder"><?=apply_filters('jvbFeedPlaceholder', $icon) ?></div>
<?php
@@ -410,7 +413,8 @@
protected function getFavouritesButton(string $content):string
{
- if (!Features::forSite()->has('favourites') && !Features::forContent($content)->has('favouritable')) {
+ $registrar = Registrar::getInstance($content);
+ if (!$registrar || !Features::forSite()->has('favourites') || !$registrar->hasFeature('favouritable')) {
return '';
}
return '<button class="favourite" type="button" title="Add to favourites" data-action="favourite">
@@ -420,7 +424,8 @@
}
protected function getUpvotesButton(string $content):string
{
- if (!Features::forSite()->has('karma') && !Features::forContent($content)->has('karma')){
+ $registrar = Registrar::getInstance($content);
+ if (!Features::forSite()->has('karma') || !$registrar || !$registrar->hasFeature('karma')){
return '';
}
return '<div class="karma row">
@@ -437,14 +442,16 @@
}
protected function getDefaultTemplate(string $content): string
{
- $config = JVB_CONTENT[$content]??[];
- $hasConfig = array_key_exists('feed', $config);
- $images = ($hasConfig && array_key_exists('images', $config['feed']) ? $config['feed']['images']:['post_thumbnail']);
- $images = (is_array($images)) ? $images : [$images];
- $fields = ($hasConfig && array_key_exists('fields', $config['feed']) ? $config['feed']['fields']:['post_title', 'post_date']);
+ $config = Registrar::getInstance($content)->getConfig('feed');
+ $allFields = Registrar::getFieldsFor($content);
+ $images = $config['images']??['post_thumbnail'];
+ $fields = $config['fields']??['post_title','post_date','post_excerpt'];
$fields = array_filter($fields, function($field) use($images) {
return !in_array($field, $images);
});
+ $fields = array_filter($allFields, function($field) use($fields) {
+ return in_array($field, $fields);
+ }, ARRAY_FILTER_USE_KEY);
$template = '<div class="feed item col '.$content.'">'.$this->getFavouritesButton($content).$this->getUpvotesButton($content);
//Add all defined images, but allow for filtering
@@ -461,9 +468,8 @@
$fieldsTemplate = '';
- foreach ($fields as $fieldName) {
- $fieldType = JVB_CONTENT[$content][$fieldName]['type']??'text';
- $fieldsTemplate .= apply_filters('jvbFeedItemField', $this->defaultFieldTemplate($fieldType, $fieldName), $content, $fieldName, $fieldType);
+ foreach ($fields as $fieldName => $config) {
+ $fieldsTemplate .= apply_filters('jvbFeedItemField', $this->defaultFieldTemplate($config['type'], $fieldName), $content, $fieldName, $config['type']);
}
$template .= '<div class="item-info">'.apply_filters('jvbFeedItemFields', $fieldsTemplate, $content, $fields).'</div>';
$template .= '</details></div>';
--
Gitblit v1.10.0