<?php
|
namespace JVBase\registry;
|
|
if (!defined('ABSPATH')) {
|
exit;
|
}
|
|
use JVBase\managers\RoleManager;
|
use JVBase\meta\Registry;
|
use JVBase\rest\RegisterRoutes;
|
|
class ContentRegistry
|
{
|
private FieldRegistry $fieldRegistry;
|
private bool $initialized = false;
|
|
|
public function __construct()
|
{
|
$this->fieldRegistry = FieldRegistry::getInstance();
|
|
// Hook registration at different priorities for proper sequencing
|
add_action('init', [$this, 'registerAll'], 5);
|
|
// add_action('init', [$this, 'registerMetaFields'], 10);
|
// add_action('rest_api_init', [$this, 'registerRestRoutes'], 10);
|
}
|
|
/**
|
* Handle plugin activation
|
*/
|
public function onActivation(): void
|
{
|
// Initialize field registry early
|
$this->fieldRegistry->initializeFields();
|
|
// Register post types and taxonomies immediately for activation
|
$this->registerPostTypes();
|
$this->registerTaxonomies();
|
$this->registerUserRoles();
|
|
// Flush rewrite rules after registration
|
flush_rewrite_rules();
|
}
|
|
/**
|
* Register all content types
|
*/
|
public function registerAll(): void
|
{
|
// if ($this->initialized) {
|
// return;
|
// }
|
|
$this->registerPostTypes();
|
$this->registerTaxonomies();
|
|
// $this->initialized = true;
|
}
|
|
/**
|
* Register meta fields for all types
|
*/
|
public function registerMetaFields(): void
|
{
|
if ($this->initialized) {
|
return;
|
}
|
// Register post type fields
|
foreach (JVB_CONTENT as $slug => $config) {
|
|
if (!empty($config['fields'])) {
|
$fields = $this->fieldRegistry->getFields($slug, 'post');
|
$this->registerFieldsForType(BASE . $slug, $fields, 'post');
|
}
|
}
|
|
// Register taxonomy fields
|
foreach (JVB_TAXONOMY as $slug => $config) {
|
if (!empty($config['fields'])) {
|
$fields = $this->fieldRegistry->getFields($slug, 'term');
|
$this->registerFieldsForType(BASE . $slug, $fields, 'term');
|
}
|
}
|
|
// Register user fields
|
foreach (JVB_USER as $slug => $config) {
|
if (!empty($config['settings']) || !empty($config['admin'])) {
|
$fields = $this->fieldRegistry->getFields($slug, 'user');
|
$this->registerFieldsForType(BASE . $slug, $fields, 'user');
|
}
|
}
|
$this->intialized = true;
|
}
|
|
/**
|
* Register fields for a specific type
|
*/
|
private function registerFieldsForType(string $type, array $fields, string $object_type): void
|
{
|
if (empty($fields)) {
|
return;
|
}
|
|
$meta_registry = new Registry($fields, $type, $object_type);
|
$meta_registry->registerMetaFields();
|
}
|
|
/**
|
* Register post types
|
*/
|
private function registerPostTypes(): void
|
{
|
foreach (JVB_CONTENT as $slug => $config) {
|
$registrar = new PostTypeRegistrar($slug, $config);
|
$registrar->register();
|
|
// Set up calendar functionality if needed
|
if ($config['is_calendar'] ?? false) {
|
new MakeCalendarType($slug, $config['rewrite']['slug']??$slug);
|
}
|
}
|
}
|
|
/**
|
* Register taxonomies
|
*/
|
private function registerTaxonomies(): void
|
{
|
foreach (JVB_TAXONOMY as $slug => $config) {
|
$registrar = new TaxonomyRegistrar($slug, $config);
|
$registrar->register();
|
}
|
}
|
|
/**
|
* Register user roles
|
*/
|
public function registerUserRoles(): void
|
{
|
$registrar = new RoleManager();
|
error_log('Registering User Roles');
|
$registrar->activate();
|
}
|
|
/**
|
* Register options
|
*/
|
private function registerOptions(): void
|
{
|
if (empty(JVB_OPTIONS)) {
|
return;
|
}
|
|
$fields = $this->fieldRegistry->getFields('options', 'options');
|
|
if (!empty($fields)) {
|
new OptionsRegistry($fields);
|
}
|
}
|
}
|
|
new ContentRegistry();
|