From ac444cba221832c012c0435fdc8339fe9f37febb Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Mon, 11 May 2026 18:35:04 +0000
Subject: [PATCH] =Some changes to the CRUD.js editing, timeline post configuration
---
inc/managers/DashboardManager.php | 432 ++++++++++++++++++++++++-----------------------------
1 files changed, 199 insertions(+), 233 deletions(-)
diff --git a/inc/managers/DashboardManager.php b/inc/managers/DashboardManager.php
index c2867aa..062c1bf 100644
--- a/inc/managers/DashboardManager.php
+++ b/inc/managers/DashboardManager.php
@@ -2,12 +2,11 @@
namespace JVBase\managers;
use JVBase\forms\TaxonomySelector;
-use JVBase\managers\CRUD;
+use JVBase\base\Site;
use JVBase\meta\Form;
-use JVBase\meta\Meta;
-use JVBase\utility\Features;
+use JVBase\registrar\Registrar;
use JVBase\ui\Navigation;
-use WP_User;
+use WP_Error;use WP_Query;use WP_User;
if (!defined('ABSPATH')) {
exit; // Exit if accessed directly
@@ -28,12 +27,10 @@
{
$this->cache = Cache::for('dashboard', WEEK_IN_SECONDS)->connect('user');
add_action('init', [$this, 'registerDashboard']);
- if (!$this->isRegistered()) {
- add_action('init', [$this, 'buildDashboard']);
- }
+ $this->cache->flush();
$this->user = wp_get_current_user();
$this->role = jvbUserRole($this->user->ID);
- $this->userLink = (int)get_user_meta($this->user->ID, BASE.'link', true);
+ $this->userLink = (int)get_user_meta($this->user->ID, BASE.'profile_link', true);
$this->baseURL = get_home_url(null, '/dash');
add_action('template_redirect', [$this, 'handleRedirects']);
@@ -42,6 +39,8 @@
add_action('wp_enqueue_scripts', [$this, 'dashboardScripts'], 50);
add_filter('jvbDashboardPage', [$this, 'renderIndex'], 10, 2);
+ jvb_register_do_once('buildDashboard', [$this, 'activate']);
+
add_filter('the_seo_framework_sitemap_exclude_ids', [$this, 'excludeDashboard'], 10, 1);
}
@@ -138,14 +137,14 @@
}
- protected function getConfig(string $page):array
+ protected function getConfig(string $page):Registrar|false
{
$pages = $this->getAllDashboardPages();
$key = array_search($page, $pages);
if ($key === false || is_numeric($key)) {
- return [];
+ return false;
}
- return Features::getConfig($key);
+ return Registrar::getInstance($key)??false;
}
/**
@@ -165,9 +164,9 @@
protected function getTitle(string $slug):string
{
- $config = $this->getConfig($slug);
- if (!empty($config)) {
- return $config['dash_title']??$config['plural'];
+ $registrar = $this->getConfig($slug);
+ if ($registrar) {
+ return $registrar->getConfig('dashboard')['title']??$registrar->getPlural();
}
return ucwords(str_replace('-', ' ', str_replace('_', ' ', $slug)));
}
@@ -224,34 +223,65 @@
* Ensures the necessary pages are created
* @return void
*/
- public function buildDashboard():void
+ public function activate():void
{
$manageableContent = $this->getAllDashboardPages();
+ error_log('[DashboardManager]::buildDashboard Manageable Content: '.print_r($manageableContent, true));
foreach ($manageableContent as $slug => $page) {
if ($page === 'dash') {
continue;
}
- $slug = $this->getSlug($slug, $page);
- $existing = get_page_by_path($slug, OBJECT, BASE.'dash');
- if ($existing) {
- continue;
+
+ $ID = $this->createDashboardPage($slug, $page);
+
+
+ $registrar = Registrar::getInstance($slug);
+ if ($registrar) {
+ $create = [
+ 'new_' => 'Create New ',
+ 'edit_' => 'Edit '
+ ];
+ $parentID = (int)$ID;
+ foreach ($create as $s => $t) {
+ $s .= $slug;
+ $t .= $page;
+ $this->createDashboardPage($s, $t, $parentID);
+ }
}
- $title = $page;
-
- $ID = wp_insert_post(array(
- 'post_title' => $title,
- 'post_name' => $slug,
- 'post_type' => BASE.'dash',
- 'post_status' => 'publish',
- ));
-
- if ($title === 'Integrations') {
+ if ($page === 'Integrations') {
$this->buildIntegrationPages($ID);
}
}
- update_option(BASE.'dashboard_registered', true);
- remove_action('init', [$this, 'buildDashboard']);
}
+ public function createDashboardPage(string $slug, string $page, int $parentID = 0):int|WP_Error
+ {
+ if (is_numeric($slug)) {
+ $slug = $this->getSlug($slug, $page);
+ }
+
+ $existing = new WP_Query([
+ 'post_type' => BASE.'dash',
+ 'name' => $slug,
+ 'fields' => 'ids',
+ 'posts_per_page' => 1,
+ ]);
+
+ if ($existing->have_posts()) {
+ return $existing->posts[0];
+ }
+
+
+ $args = [
+ 'post_title' => $page,
+ 'post_name' => $slug,
+ 'post_type' => BASE.'dash',
+ 'post_status' => 'publish',
+ ];
+ if ($parentID > 0) {
+ $args['post_parent'] = $parentID;
+ }
+ return wp_insert_post($args);
+ }
/**
* Build integration sub-pages
@@ -264,36 +294,18 @@
foreach ($integrations as $name => $integration) {
$title = $integration->getTitle();
+
$slug = sanitize_title($title);
-
- // Check if integration page already exists
- $existing = get_posts([
- 'post_type' => BASE.'dash',
- 'name' => $slug,
- 'post_parent' => $parentID,
- 'posts_per_page' => 1,
- ]);
-
- if (!empty($existing)) {
- continue; // Skip if exists
- }
-
- wp_insert_post([
- 'post_title' => $title,
- 'post_name' => $slug,
- 'post_type' => BASE.'dash',
- 'post_status' => 'publish',
- 'post_parent' => $parentID
- ]);
+ $this->createDashboardPage($slug, $title, $parentID);
}
}
protected function getDescription(string $page):string
{
- $config = $this->getConfig($page);
- if (!empty($config)) {
- $description = (array_key_exists('dash_description', $config)) ? $config['dash_description'] : '';
+ $registrar = $this->getConfig($page);
+ if ($registrar) {
+ $description = $registrar->getConfig('dashboard')['description']??'';
} else {
$description = apply_filters('jvbDashboardDescription', $page);
switch ($page) {
@@ -318,14 +330,6 @@
return $description;
}
- /**
- * Checks if we've already created the need pages
- * @return bool
- */
- protected function isRegistered():bool
- {
- return get_option(BASE.'dashboard_registered', false);
- }
/**
* Hacking into the template_include to set our custom templates and protections
@@ -341,10 +345,10 @@
// Get current page/section
$page = $this->getCurrentPageTitle();
- $config = $this->getConfig($page);
- if(!empty($config)) {
- add_filter('jvbLoadingIcon', function() use ($config) {
- return $config['icon'];
+ $registrar = $this->getConfig($page);
+ if($registrar) {
+ add_filter('jvbLoadingIcon', function() use ($registrar) {
+ return $registrar->getIcon();
});
}
$integrationSlugs = array_map(function($name) {
@@ -382,6 +386,7 @@
$this->renderHeader();
// Pass to page handler
$constantSlug = $this->getConstantSlug($page);
+
echo apply_filters(
'jvbDashboardPage',
$this->renderPage($page),
@@ -398,11 +403,11 @@
// if ($page === 'integrations' || in_array($page, $integrationSlugs)) {
// // Check integration access
// if ($page === 'integrations') {
-// if (!Features::hasAnyIntegration('user', $this->role)) {
+// if (!Site::hasAnyIntegration('user', $this->role)) {
// $this->redirectToDashboard();
// }
// } else {
-// if (!Features::hasIntegration($page, 'user', $this->role)) {
+// if (!Site::hasIntegration($page, 'user', $this->role)) {
// $this->redirectToDashboard();
// }
// }
@@ -516,8 +521,8 @@
if (!is_singular(BASE.'dash') && !is_post_type_archive(BASE.'dash')) {
return;
}
- wp_enqueue_style('jvb-icons-dash');
- wp_enqueue_style('jvb-icons-forms');
+ IconsManager::for('forms')->enqueueIconStyles();
+ IconsManager::for('dash')->enqueueIconStyles();
wp_enqueue_script('jvb-form');
wp_enqueue_script('jvb-selector');
@@ -528,7 +533,7 @@
switch ($page) {
case 'notifications':
- if (Features::forSite()->has('notifications')) {
+ if (Site::has('notifications')) {
wp_enqueue_script('jvb-notification-manager');
}
break;
@@ -538,28 +543,28 @@
break;
case 'admin':
case 'dash':
- if (current_user_can('manage_options') && apply_filters('jvbAdminDashboard', '') === '') {
- wp_enqueue_script(
- 'jvb-admin',
- JVB_URL . 'assets/js/min/admin.min.js',
- [
- 'jvb-queue',
- 'jvb-loading'
- ],
- [
- 'strategy' => 'defer',
- 'in_footer' => true
- ]
- );
+// if (current_user_can('manage_options') && apply_filters('jvbAdminDashboard', '') === '') {
+// wp_enqueue_script(
+// 'jvb-admin',
+// JVB_URL . 'assets/js/min/admin.min.js',
+// [
+// 'jvb-queue',
+//// 'jvb-loading'
+// ],
+// [
+// 'strategy' => 'defer',
+// 'in_footer' => true
+// ]
+// );
- wp_localize_script(
- 'jvb-admin',
- 'jvbAdmin',
- [
- 'nonce' => wp_create_nonce('itsme')
- ]
- );
- }
+// wp_localize_script(
+// 'jvb-admin',
+// 'jvbAdmin',
+// [
+// 'nonce' => wp_create_nonce('itsme')
+// ]
+// );
+// }
break;
case 'seo':
wp_enqueue_script('jvb-schema');
@@ -568,7 +573,7 @@
wp_enqueue_script('jvb-crud');
break;
}
- if (Features::forSite()->has('favourites')) {
+ if (Site::has('favourites')) {
wp_enqueue_script('jvb-favourites');
wp_localize_script('jvb-favourites-manager', 'favouritesSettings', [
'strings' => [
@@ -584,7 +589,7 @@
wp_enqueue_script('jvb-creator');
- if (Features::forSite()->has('forum')) {
+ if (Site::has('forum')) {
wp_enqueue_script('jvb-news');
}
do_action('jvbDashScripts', $page);
@@ -620,10 +625,11 @@
return $this->cache->remember('icon_'.sanitize_title($page), function() use ($slug, $page) {
$icon = sanitize_title($page);
if (!is_numeric($slug)) {
- $config = Features::getConfig($slug);
- if (array_key_exists('icon', $config)) {
- $icon = $config['icon'];
+ $registrar =Registrar::getInstance($slug);
+ if ($registrar) {
+ return $registrar->getIcon();
}
+
}
return $icon;
});
@@ -645,7 +651,7 @@
<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
- <title><?= (array_key_exists('dashboard_title', JVB_SITE)) ? JVB_SITE['dashboard_title'] : 'Dashboard | '.get_bloginfo('name') ?></title>
+ <title><?= Site::dashboardTitle()??'Dashboard | '.get_bloginfo('name') ?></title>
<meta charset="<?php bloginfo('charset'); ?>">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<?php
@@ -665,41 +671,24 @@
<body class="dashboard<?= ' '.$this->getCurrentPageSlug()?>">
<?php jvbAccessibility();?>
<header>
- <?php
- $checked = (is_user_logged_in() && current_user_can('prefers_dark_theme', true)) ? ' checked' : '';
- $title = ($checked == '') ? 'Toggle Dark Mode' : 'Toggle Light Mode';
- echo '<label title="'.$title.'" id="theme-switch" class="toggle-switch" for="theme-switcher">
- <input class="theme-switch row" id="theme-switcher" name="theme-switcher" type="checkbox"'.$checked.' data-setting="theme" data-theme role="switch" name="dark-mode" aria-label="Toggle dark mode"><span class="slider">'.
- jvbIcon('sun-dim', ['title'=> 'Light Mode']).
- jvbIcon('moon', ['title'=>'Dark Mode']).
- '</span></label>';
- ?>
- <p class="title">
- <a href="<?= get_home_url(); ?>" rel="home" title="Back to Site">
- <?php
- $icon = (int) get_option( 'site_icon' );
- $out = '';
- if ($icon > 0) {
- $url = wp_get_attachment_image_url( $icon);
- if ($url) {
- $out = '<img src="'.$url.'">';
- }
- }
- if ($out == '') {
- $out =jvbIcon('house');
- }
- ?><?= $out ?>
- </a>
- </p>
+ <?= jvbDarkModeToggle() ?>
+ <?php
+ $function = BASE.'render_core_site_logo';
+ if (function_exists($function)) {
+ echo $function([],'');
+ } else {
+ echo JVB()->blocks()->render_core_site_logo([],'');
+ }
+ ?>
- <nav>
- <ul>
- <?= jvbNotificationMenu() ?>
- <?= jvbHelpMenu() ?>
- <li><a href="<?=wp_logout_url(get_home_url())?>" title="Logout"><?=jvbIcon('sign-out')?></a></li>
- </ul>
- </nav>
- </header>
+ <nav>
+ <ul>
+ <?= jvbNotificationMenu() ?>
+ <?= jvbHelpMenu() ?>
+ <li><a href="<?=wp_logout_url(get_home_url())?>" title="Logout"><?=jvbIcon('sign-out')?></a></li>
+ </ul>
+ </nav>
+ </header>
<main><section class="replace">
<?php
@@ -740,9 +729,12 @@
//Content
//content types
- //Taxonomies
- $availableContent = array_filter($pages, function($page, $key) {
- return !is_numeric($key) && array_key_exists($key, JVB_CONTENT);
+ $all = array_merge(
+ Registrar::getRegistered('post'),
+ Registrar::getFeatured('is_content', 'term')
+ );
+ $availableContent = array_filter($pages, function($page, $key) use($all) {
+ return !is_numeric($key) && in_array($key, $all) && JVB()->roles()->checkRole($this->user, $key);
}, ARRAY_FILTER_USE_BOTH);
if (!empty ($availableContent)){
$content = $menu->addItem('Your Content', jvbDashIcon('book-bookmark'))
@@ -750,25 +742,30 @@
->defaultMenuClasses($menuClasses)
->defaultItemClasses($itemClasses);
foreach ($availableContent as $slug => $page) {
- $config = JVB_CONTENT[$slug];
- $item = $content->addItem($page, jvbDashIcon($config['icon']))
+ $registrar = Registrar::getInstance($slug);
+
+ $item = $content->addItem($page, $registrar->getIcon())
->url($this->baseURL.'/'.$slug);
- $taxonomies = array_filter(JVB_TAXONOMY, function ($value, $key) use ($slug) {
- return in_array($slug, $value['for_content']);
- },1);
- if (!empty ($taxonomies)) {
- //TODO: If we add a dedicated 'create item' page, remove this from the empty check
- $itemMenu = $item->submenu($slug);
- foreach ($taxonomies as $s => $config) {
- $itemMenu->addItem($config['plural'], $config['icon'])
- ->url($this->baseURL.'/'.$s);
+ if ($registrar->getType() === 'post') {
+ $taxonomies = $registrar->registrar->taxonomies;
+ if (!empty ($taxonomies)) {
+ //TODO: If we add a dedicated 'create item' page, remove this from the empty check
+ $itemMenu = $item->submenu($slug);
+ foreach ($taxonomies as $s) {
+ $taxRegistrar = Registrar::getInstance($s);
+ $itemMenu->addItem($taxRegistrar->getPlural(), $taxRegistrar->getIcon())
+ ->url($this->baseURL.'/'.$s);
+ }
}
}
+
}
}
+ //Taxonomies
+
//Settings
$settings = $menu->addItem('Settings', jvbDashIcon('faders'))
->submenu('settings')
@@ -856,7 +853,7 @@
return $content;
}
- if (Features::forSite()->has('referrals')) {
+ if (Site::has('referrals')) {
$whatever = JVB()->referrals()->getReferralWelcomeMessage($this->user->ID);
if (!empty($whatever)) {
return $whatever;
@@ -866,7 +863,7 @@
ob_start();
$name = ($this->user->first_name !== '') ? $this->user->first_name : $this->user->display_name;
- echo '<h1 style="text-transform:none;margin-top:2em!important;">Hey '.$name.'</h1>';
+ echo '<h1>Hey '.$name.'</h1>';
echo '<p>Welcome back!</p>';
$pages = $this->getUserAllowedPages();
@@ -970,7 +967,7 @@
$connection = (array_key_exists($page, $map)) ? $map[$page] : $page;
if ($connection !== 'integrations') {
- $userID = (jvbSiteHasMembership()) ? $this->user->ID : null;
+ $userID = (Site::has('has_membership')) ? $this->user->ID : null;
$integration = JVB()->connect($connection, $userID);
echo '<h1>Managing '.$integration->title.'</h1>';
@@ -1004,16 +1001,16 @@
<div class="approvals container">
<nav class="tabs row start" role="tablist">
<button type="button" class="tab active" data-tab="summary" role="tab" aria-selected="true">
- <h2><?= jvbDashIcon('infinity')?>All</h2>
+ <?= jvbDashIcon('infinity')?>All
</button>
<button type="button" class="tab" data-tab="artists" role="tab" aria-selected="false">
- <h2><?= jvbDashIcon('users-three')?>Artists</h2>
+ <?= jvbDashIcon('users-three')?>Artists
</button>
<button type="button" class="tab" data-tab="terms" role="tab" aria-selected="false">
- <h2><?= jvbDashIcon('hash')?>Terms</h2>
+ <?= jvbDashIcon('hash')?>Terms
</button>
<button type="button" class="tab" data-tab="yours" role="tab" aria-selected="false">
- <h2><?= jvbDashIcon('user')?>Yours</h2>
+ <?= jvbDashIcon('user')?>Yours
</button>
</nav>
</div>
@@ -1077,20 +1074,19 @@
<nav class="tabs row start" role="tablist">
<?php
$i=1;
- $content = JVB_CONTENT;
- $contentTax = array_filter(JVB_TAXONOMY, function ($tax) {
- return jvbCheck('is_content', $tax);
- });
- $taxonomies = JVB_TAXONOMY;
- foreach($contentTax as $key => $config) {
- unset($taxonomies[$key]);
+ $content = Registrar::getRegistered('post');
+ $contentTax = Registrar::getFeatured('is_content', 'term');
+ $taxonomies = Registrar::getRegistered('term');
+ foreach($contentTax as $index => $tax) {
+ unset($taxonomies[$index]);
}
$content = array_merge($content, $contentTax);
- foreach ($content as $type => $settings) {
+ foreach ($content as $type) {
+ $registrar = Registrar::getInstance($type);
$active = ($i === 1) ? ' active' : '';
?>
<button type="button" class="tab<?=$active?>" data-tab="<?=$type?>" role="tab" aria-selected="<?= ($active !== '') ? 'true' : 'false'?>">
- <h2><?=jvbDashIcon($settings['icon']??$key)?> <?= $settings['plural'] ?></h2>
+ <h2><?=jvbDashIcon($registrar->getIcon())?> <?= $registrar->getPlural() ?></h2>
</button>
<?php
$i++;
@@ -1101,8 +1097,9 @@
<option> ... Taxonomy</option>
<?php
- foreach ($taxonomies as $type => $settings) {
- echo '<option value="'.$type.'">'.$settings['plural'].'</option>';
+ foreach ($taxonomies as $type) {
+ $taxRegistrar = Registrar::getInstance($type);
+ echo '<option value="'.$type.'">'.$taxRegistrar->getPlural().'</option>';
}
?>
</select>
@@ -1126,10 +1123,10 @@
<?php
- $jvb_everything = array_merge(JVB_CONTENT, JVB_TAXONOMY);
- foreach ($jvb_everything as $type => $settings) {
- $fields = jvbGetFields($type);
+
+ foreach (Registrar::getRegistered() as $type) {
+ $fields = Registrar::getFieldsFor($type);
?>
<template class="<?= $type ?>Table">
<table>
@@ -1247,53 +1244,55 @@
$pages = [];
$pages[] = 'SEO';
// Add feature-dependent pages (non-config)
- if (Features::forSite()->has('referrals')) {
+ if (Site::has('referrals')) {
$pages[] = 'Referrals';
}
-
- if (Features::forMembership()->has('can_invite')) {
+ $membership = Site::membership();
+ if ($membership && $membership->has('can_invite')) {
$pages[] = 'Invites';
}
- if (Features::forMembership()->has('term_approval')) {
+ if ($membership && $membership->has('term_approval')) {
$pages[] = 'Approvals';
}
- if (Features::forMembership()->has('forum')) {
+ if ($membership && $membership->has('forum')) {
$pages[] = 'News';
}
- if (Features::forMembership()->has('member_content')) {
+ if ($membership && $membership->has('member_content')) {
$pages[] = 'Metrics';
}
- if (Features::forSite()->has('favourites')) {
+ if (Site::has('favourites')) {
$pages[] = 'Favourites';
}
- if (Features::anyContentHas('karma') || Features::anyTaxonomyHas('karma') || Features::anyUserHas('karma')) {
+ if (!empty(Registrar::getFeatured('karma'))) {
$pages[] = 'Karmic Score';
}
- if (Features::forSite()->has('notifications')) {
+ if (Site::has('notifications')) {
$pages[] = 'Notifications';
}
- if (Features::forSite()->has('support')) {
+ if (Site::has('support')) {
$pages[] = 'Support';
}
- if (Features::hasAnyIntegration()) {
+ if (Site::hasAnyIntegration()) {
$pages[] = 'Integrations';
}
// Add all content types (with config keys)
- foreach (JVB_CONTENT as $slug => $config) {
- $pages[$slug] = $config['plural'];
+ foreach (Registrar::getRegistered('post') as $slug) {
+ $registrar = Registrar::getInstance($slug);
+ $pages[$slug] = $registrar->getPlural();
}
- foreach (JVB_TAXONOMY as $slug=>$config) {
- $pages[$slug] = $config['plural'];
+ foreach (Registrar::getRegistered('term') as $slug) {
+ $registrar = Registrar::getInstance($slug);
+ $pages[$slug] = $registrar->getPlural();
}
// Allow filtering
@@ -1311,21 +1310,6 @@
return $pages;
}
- /**
- * Get pages available to a specific role
- * @param string $role The role slug (with or without BASE prefix)
- * @return array
- */
- protected function getRolePages(string $role):array
- {
- $role = jvbNoBase($role);
-
- if (!array_key_exists($role, JVB_USER)) {
- return [];
- }
-
- return Features::forUser($role)->getDashboardPages();
- }
/**
* Get pages that a specific user is allowed to access
@@ -1365,21 +1349,23 @@
//Default to Remove pages
$remove = true;
if (!is_numeric($key)) {
- $type = Features::getType($key);
+ $registrar = Registrar::getInstance($key);
+ $membership = Site::membership();
+ $type = $registrar? $registrar->getType() : false;
if ($type) {
- $permission = RoleManager::getPlural($key);
+ $permission = JVB()->roles()->getPermission('edit', $key);
}
switch ($type) {
case 'content':
- if (user_can($userID, "edit_{$permission}")) {
+ if (user_can($userID, $permission)) {
$remove = false;
}
break;
case 'taxonomy':
- $config = Features::getConfig($key, 'taxonomy');
- if (array_key_exists('is_content', $config) && $config['is_content'] && (user_can($userID, "own_{$key}") || user_can($userID, "manage_{$key}"))) {
+ $registrar = Registrar::getInstance($key);
+ if ($registrar && $registrar->hasFeature('is_content') && (!empty(JVB()->roles()->getOwnedTerms($userID, $key)) || !empty(JVB()->roles()->getManagedTerms($userID, $key)))){
$remove = false;
- } else if (count(array_intersect($config['for_content'], array_keys($pages))) > 0) {
+ } else if (count(array_intersect($registrar->registrar->for, array_keys($pages))) > 0) {
$remove = false;
}
break;
@@ -1388,7 +1374,7 @@
switch ($slug) {
case 'Integrations':
foreach($roles as $role) {
- if (Features::hasAnyIntegration('user', $role)) {
+ if (Registrar::getInstance($role)->hasAnyIntegrations()) {
$remove = false;
}
}
@@ -1401,14 +1387,15 @@
}
}
if ($remove) {
- if ($canSkip || array_key_exists('invitable', $config)) {
+ //TODO: Figure out what $config was supposed to be
+ if ($canSkip || ($registrar && $registrar->hasFeature('invitable'))) {
$remove = false;
}
}
break;
case 'Approvals':
$canApprove = false;
- if (Features::forMembership()->has('term_approval')) {
+ if ($membership && $membership->has('term_approval')) {
if (array_key_exists('can_approve', JVB_MEMBERSHIP)) {
foreach ($roles as $role) {
if (in_array($role, JVB_MEMBERSHIP['can_approve'])) {
@@ -1439,20 +1426,17 @@
break;
case 'metrics':
foreach ($roles as $role) {
- if (!empty(Features::forUser($role)->getCreatableContent())) {
+ if (!empty(Registrar::getInstance($role)?->getCreatable())) {
$remove = false;
}
}
break;
case 'karmic-score':
foreach ($roles as $role) {
- $contents = Features::forUser($role)->getCreatableContent();
+ $contents = Registrar::getInstance($role)?->getCreatable();
if (!empty($contents)) {
- foreach($contents as $content) {
- if (Features::forContent($content)->has('karma')) {
- $remove = false;
- }
- }
+ $hasKarma = Registrar::getFeatured('karma');
+ $remove = empty(array_intersect($contents, $hasKarma));
}
}
break;
@@ -1498,7 +1482,7 @@
$creatable = [];
foreach ($roles as $role) {
- $roleCreatable = Features::forUser($role)->getCreatableContent();
+ $roleCreatable = Registrar::getInstance($role)?->getCreatable();
$creatable = array_merge($creatable, $roleCreatable);
}
@@ -1512,9 +1496,7 @@
*/
protected function getRolesWithDashboard():array
{
- return array_keys(array_filter(JVB_USER, function ($role) {
- return Features::forUser(array_search($role, JVB_USER))->has('has_dashboard');
- }));
+ return Registrar::getFeatured('has_dashboard', 'user');
}
/**
@@ -1534,20 +1516,4 @@
return count(array_intersect($dashboardRoles, $userRoles)) > 0;
}
- /**
- * Get the capability needed to access a content type
- * @param string $type
- * @return string
- */
- protected function getPermissionForType(string $type):string
- {
- // Check if it's a registered content type
- if (array_key_exists($type, JVB_CONTENT)) {
- $plural = JVB_CONTENT[$type]['plural'];
- return 'edit_'.$plural;
- }
-
- // Default to edit_{type}s
- return 'edit_'.$type.'s';
- }
}
--
Gitblit v1.10.0