From 56a9a1ccf764ff7a6af8f8a2292cb07443cb4aa7 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Thu, 28 May 2026 18:19:57 +0000
Subject: [PATCH] =New Gitbit setpu
---
JVBase.php | 466 ++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 308 insertions(+), 158 deletions(-)
diff --git a/JVBase.php b/JVBase.php
index 6dd39df..f0b0c3d 100644
--- a/JVBase.php
+++ b/JVBase.php
@@ -1,28 +1,44 @@
<?php
namespace JVBase;
-use JVBase\integrations\BlueSky;
+use JVBase\blocks\CustomBlocks;
+use JVBase\base\Site;
+use JVBase\managers\ApprovalManager;
+use JVBase\managers\EmailManager;
use JVBase\managers\ErrorHandler;
-use JVBase\managers\OperationQueue;
+use JVBase\managers\FavouritesManager;
+use JVBase\managers\InvitationsManager;
+use JVBase\managers\LoginManager;
+use JVBase\managers\MagicLinkManager;
+use JVBase\managers\queue\Queue;
use JVBase\managers\DashboardManager;
+use JVBase\managers\DirectoryManager;
+use JVBase\managers\ReferralManager;
use JVBase\managers\RoleManager;
-use JVBase\managers\SchemaManager;
+use JVBase\managers\SEO\render\SchemaOutput;
+use JVBase\admin\SEOAdmin;
use JVBase\managers\AdminPages;
use JVBase\managers\NotificationManager;
+use JVBase\managers\TaxonomyRelationships;
use JVBase\managers\UserTermsManager;
+use JVBase\registrar\Registrar;
use JVBase\rest\routes\FeedRoutes;
use JVBase\rest\routes\FavouritesRoutes;
+use JVBase\rest\routes\IntegrationsSquareRoutes;
+use JVBase\rest\routes\IntegrationsHelcimRoutes;
use JVBase\rest\routes\NotificationsRoutes;
use JVBase\rest\routes\ContentRoutes;
use JVBase\rest\routes\TermRoutes;
use JVBase\rest\routes\UploadRoutes;
-use JVBase\rest\routes\BioRoutes;
use JVBase\rest\routes\SettingsRoutes;
-use JVBase\rest\routes\ShopRoutes;
+use JVBase\rest\routes\ContentTermsRoutes;
+use JVBase\rest\routes\SEORoutes;
use JVBase\rest\routes\QueueRoutes;
use JVBase\rest\routes\ErrorRoutes;
use JVBase\rest\routes\FormRoutes;
+use JVBase\rest\routes\LoginRoutes;
use JVBase\rest\routes\NewsRoutes;
+use JVBase\rest\routes\ReferralRoutes;
use JVBase\rest\routes\ResponseRoutes;
use JVBase\rest\routes\OptionsRoutes;
use JVBase\rest\routes\VoteRoutes;
@@ -30,7 +46,7 @@
use JVBase\rest\routes\ApprovalRoutes;
use JVBase\rest\routes\AdminRoutes;
use JVBase\rest\routes\IntegrationsRoutes;
-use JVBase\utility\Features;
+use JVBase\base\SchemaHelper;
if (!defined('ABSPATH')) {
exit;
@@ -38,13 +54,14 @@
class JVB
{
- protected static JVB|null $instance = null;
- protected array $managers = [];
- protected array $content = [];
- protected array $taxonomies = [];
+ protected static JVB|null $instance = null;
+ protected array $managers = [];
+ protected array $content = [];
+ protected array $taxonomies = [];
protected array $integrations = [];
- protected array $blocks = [];
- protected array $routes = [];
+ protected array $blocks = [];
+ protected array $routes = [];
+ protected CustomBlocks $customBlocks;
protected array $serviceMap = [
'maps' => 'JVBase\integrations\GoogleMaps',
@@ -56,168 +73,222 @@
'gmb' => 'JVBase\integrations\GoogleMyBusiness',
'cloudflare' => 'JVBase\integrations\Cloudflare',
'umami' => 'JVBase\integrations\Umami',
+ 'postmark' => 'JVBase\integrations\PostMark',
];
- public static function getInstance():JVB
- {
- if (self::$instance === null) {
- self::$instance = new self();
+ public static function getInstance(): JVB
+ {
+ if (self::$instance === null) {
+ self::$instance = new self();
+ }
+ return self::$instance;
+ }
+
+
+ public function __construct()
+ {
+ $this->customBlocks = new CustomBlocks();
+ $this->managers = [
+ 'errors' => new ErrorHandler(),
+ 'queue' => new Queue(),
+// 'dash' => new DashboardManager(),
+ 'roles' => new RoleManager(),
+// 'forms' => new FormManager(),
+// 'schema' => new SchemaOutputManager(),
+ 'admin' => new AdminPages(),
+ 'seoAdmin' => new SEOAdmin(),
+ 'seo' => new SchemaOutput(),
+ 'schemaHelper' => new SchemaHelper(),
+// 'uploads' => new UploadManager(),
+// 'userTerms' => new UserTermsManager(),
+ 'email' => new EmailManager(),
+// 'terms' => new TaxonomyRelationships(),
+ ];
+
+ if (Site::has('feed_block')) {
+ $this->managers['terms'] = new TaxonomyRelationships();
}
- return self::$instance;
- }
+ if (Site::hasAll(['dashboard', 'membership', 'feed_block'])) {
+ $this->managers['userTerms'] = new UserTermsManager();
+ }
- public function __construct()
- {
- $this->managers = [
- 'errors' => new ErrorHandler(),
- 'queue' => new OperationQueue(),
-// 'dash' => new DashboardManager(),
- 'roles' => new RoleManager(),
-// 'forms' => new FormManager(),
- 'schema' => new SchemaManager(),
- 'admin' => new AdminPages(),
-// 'uploads' => new UploadManager(),
- 'userTerms' => new UserTermsManager(),
- ];
+ $this->routes = [
+ 'login' => new LoginRoutes(),
+ 'integrations' => new IntegrationsRoutes(),
+ 'seo' => new SEORoutes(),
+ 'queue' => new QueueRoutes(),
+ 'settings' => new SettingsRoutes(),
+ 'upload' => new UploadRoutes(),
+ 'forms' => new FormRoutes()
+ ];
- if (Features::forSite()->has('dashboard')) {
+ if (Site::has('magicLink')) {
+// $this->routes['magicLink'] = new MagicLinkRoutes();
+ $this->managers['magicLink'] = new MagicLinkManager();
+ }
+ if (Site::has('referrals')) {
+ $this->managers['referral'] = new ReferralManager();
+ $this->routes['referral'] = new ReferralRoutes();
+ }
+
+ if (Site::has('dashboard')) {
$this->managers['dash'] = new DashboardManager();
}
- $this->routes = [
- 'integrations' => new IntegrationsRoutes(),
- ];
- if (jvbSiteUsesFeedBlock()) {
- $this->routes['feed'] = new FeedRoutes();
- }
- if (jvbSiteHasNotifications()) {
+ if (Site::hasIntegration('square')) {
+ $this->routes['square'] = new IntegrationsSquareRoutes();
+ }
+ if (Site::hasIntegration('helcim')) {
+ $this->routes['helcim'] = new IntegrationsHelcimRoutes();
+ }
+
+ if (Site::has('feed_block')) {
+ $this->routes['feed'] = new FeedRoutes();
+ }
+ $membership = Site::membership();
+ if ($membership && $membership->has('notifications')) {
$this->managers['notifications'] = new NotificationManager();
- $this->routes['notifications'] = new NotificationsRoutes();
- }
- if (jvbSiteUsesFeedBlock() || jvbSiteHasDashboard()) {
- $this->routes['term'] = new TermRoutes();
- }
+ $this->routes['notifications'] = new NotificationsRoutes();
+ }
+ if (!empty(Registrar::getFeatured('approve_new'))) {
+ $this->managers['approvals'] = new ApprovalManager();
+ }
+ if (Site::has('feed_block') || Site::has('dashboard')) {
+ $this->routes['term'] = new TermRoutes();
+ }
- if (jvbSiteHasDashboard()) {
- $this->routes['upload'] = new UploadRoutes();
- $this->routes['settings']= new SettingsRoutes();
- $this->routes['queue'] = new QueueRoutes();
- $this->routes['error'] = new ErrorRoutes();
+ if (Site::has('is_directory')) {
+ $this->managers['directory'] = new DirectoryManager();
+ }
+
+ if (Site::has('dashboard')) {
+ $this->routes['error'] = new ErrorRoutes();
$this->routes['admin'] = new AdminRoutes();
- $this->routes['content']= new ContentRoutes();
- $this->routes['bio'] = new BioRoutes();
- $this->routes['shop'] = new ShopRoutes();
- $this->routes['options']= new OptionsRoutes();
- }
- $this->routes['forms']= new FormRoutes();
+ $this->routes['content'] = new ContentRoutes();
+// $this->routes['bio'] = new BioRoutes();
+// $this->routes['shop'] = new ShopRoutes();
+ $this->routes['contentTax'] = new ContentTermsRoutes();
+ $this->routes['options'] = new OptionsRoutes();
+ }
- if (jvbSiteHasFavourites()) {
- $this->routes['favourites'] = new FavouritesRoutes();
- }
+ if (Site::has('favourites')) {
+ $this->managers['favourites'] = new FavouritesManager();
+ $this->routes['favourites'] = new FavouritesRoutes();
+ }
- if (Features::forMembership()->has('forum')) {
- $this->routes['news'] = new NewsRoutes();
- }
- if (Features::anyContentHas('response') || Features::anyTaxonomyHas('response') || Features::anyUserHas('response')) {
- $this->routes['comments'] = new ResponseRoutes();
- }
- if (Features::anyContentHas('karma') || Features::anyTaxonomyHas('karma') || Features::anyUserHas('karma')) {
- $this->routes['vote'] = new VoteRoutes();
- }
- if (Features::anyContentHas('karma') || Features::anyTaxonomyHas('karma') || Features::anyUserHas('karma')
- || Features::forMembership()->has('member_verified') ||
- Features::forMembership()->has('term_approval')) {
- $this->routes['approvals'] = new ApprovalRoutes();
- }
- if (Features::forMembership()->has('can_invite')) {
- $this->routes['invites'] = new Invitations();
- }
+ if ($membership && $membership->has('forum')) {
+ $this->routes['news'] = new NewsRoutes();
+ }
+ if ($membership && $membership->has('invitable')) {
+ $this->managers['invitations'] = new InvitationsManager();
+ }
+ if (!empty(Registrar::getFeatured('has_responses'))) {
+ $this->routes['comments'] = new ResponseRoutes();
+ }
+ if (!empty(Registrar::getFeatured('karma'))) {
+ $this->routes['vote'] = new VoteRoutes();
+ }
+ if (!empty(Registrar::getFeatured('karma'))
+ || ($membership && $membership->has('member_verified')) ||
+ ($membership && $membership->has('term_approval'))) {
+ $this->routes['approvals'] = new ApprovalRoutes();
+ }
+ if ($membership && $membership->has('can_invite')) {
+ $this->routes['invites'] = new Invitations();
+ }
$this->setupIntegrations();
+
+ add_action('wp_footer', [$this, 'additionalActions']);
// $this->managers['notifications'] = new NotificationManager();
- // Register activation hook
- register_activation_hook(JVB_DIR . '/jvb.php', [$this, 'activate']);
- }
-
-
- protected function setupIntegrations():void
- {
- if (array_key_exists('integrations', JVB_SITE)){
- foreach (JVB_SITE['integrations'] as $service => $use){
- if (!$use) {
- continue;
- }
- if (array_key_exists($service, $this->serviceMap)) {
- $this->integrations[$service] = new $this->serviceMap[$service]();
- }
-
- }
- }
+ // Register activation hook
+ register_activation_hook(JVB_DIR . '/jvb.php', [$this, 'activate']);
}
- public function registeredContent():array
- {
- return array_merge(array_keys($this->content), array_keys($this->taxonomies));
- }
- public function dashboard()
- {
- return $this->managers['dash'];
- }
- public function error()
- {
- return $this->managers['errors'];
- }
- public function file()
- {
- return $this->managers['file'];
- }
- public function cache()
- {
- return $this->managers['cache'];
- }
- public function queue()
- {
- return $this->managers['queue'];
- }
+
+ protected function setupIntegrations(): void
+ {
+ foreach(array_keys(Site::getIntegrations()) as $integration) {
+ $this->integrations[$integration] = new $this->serviceMap[$integration]();
+ }
+ }
+
+ public function registeredContent(): array
+ {
+ return array_merge(array_keys($this->content), array_keys($this->taxonomies));
+ }
+
+ public function dashboard(): DashboardManager|false
+ {
+ return $this->managers['dash'] ?? false;
+ }
+
+ public function directories(): DirectoryManager|false
+ {
+ return $this->managers['directory'] ?? false;
+ }
+
+ public function error(): ErrorHandler
+ {
+ return $this->managers['errors'];
+ }
+
+ public function file()
+ {
+ return $this->managers['file'];
+ }
+
+ public function queue(): Queue
+ {
+ return $this->managers['queue'];
+ }
// public function forms()
// {
// return $this->managers['forms'];
// }
- public function notification()
- {
- return $this->managers['notifications'];
- }
- public function routes($route):mixed
- {
- if (array_key_exists($route, $this->routes)) {
- return $this->routes[$route];
- }
- return false;
- }
- public function roles()
- {
- return $this->managers['roles'];
- }
- public function admin()
- {
- return $this->managers['admin'];
- }
+ public function notification(): NotificationManager|false
+ {
+ return $this->managers['notifications'] ?? false;
+ }
- public function getFields($type):array
- {
- $content = JVB_CONTENT[$type]??JVB_TAXONOMY[$type]??JVB_USER[$type]??null;
- return $content['fields']??[];
- }
- public function getContent($type):mixed
- {
- return $this->content[$type]??$this->taxonomies[$type]??$this->blocks[$type]??null;
- }
+ public function routes($route): mixed
+ {
+ if (array_key_exists($route, $this->routes)) {
+ return $this->routes[$route];
+ }
+ return false;
+ }
- public function connect(string $service, ?int $userID = null):mixed
+ public function roles(): RoleManager
+ {
+ return $this->managers['roles'];
+ }
+
+ public function admin()
+ {
+ return $this->managers['admin'];
+ }
+
+ public function seoAdmin()
+ {
+ return $this->managers['seoAdmin'];
+ }
+
+ public function getFields($type): array
+ {
+ return Registrar::getFieldsFor($type)??[];
+ }
+
+ public function getContent($type): mixed
+ {
+ return $this->content[$type] ?? $this->taxonomies[$type] ?? $this->blocks[$type] ?? null;
+ }
+
+ public function connect(string $service, ?int $userID = null): mixed
{
if ($userID) {
- if (!$this->userCanConnect($service, $userID)){
+ if (!$this->userCanConnect($service, $userID)) {
return null;
}
@@ -228,26 +299,105 @@
}
return (array_key_exists($service, $this->integrations)) ? $this->integrations[$service] : null;
}
- public function userCanConnect(string $service, int $userID):bool
+
+ public function userCanConnect(string $service, int $userID): bool
{
- $allowed = JVB_USER[jvbUserRole($userID)]['integrations'] ?? [];
- return user_can($userID, 'manage_options') || in_array($service, $allowed);
+ $role = jvbUserRole($userID);
+ $registrar = Registrar::getInstance($role);
+ return user_can($userID, 'manage_options') || $registrar->hasIntegration($service);
}
- public function getAvailableServices(bool $keys = true):array {
+
+ public function getAvailableServices(bool $keys = true): array
+ {
return ($keys) ? array_keys($this->integrations) : $this->integrations;
}
- public function activate():void
- {
- error_log('Activate!');
- // Activate roles - will be properly initialized after post types are registered
- $this->roles()->activate();
- }
+ public function activate(): void
+ {
+ // Activate roles - will be properly initialized after post types are registered
+ $this->roles()->activate();
+ }
- public function addRoute($slug, $class):void
+ public function addRoute($slug, $class): void
{
$this->routes[$slug] = $class;
}
+ public function email(): EmailManager
+ {
+ return $this->managers['email'];
+ }
+
+ public function referrals(): ReferralManager|false
+ {
+ return $this->managers['referral'] ?? false;
+ }
+
+ public function magicLink(): MagicLinkManager|false
+ {
+ return $this->managers['magicLink'] ?? false;
+ }
+
+ public function invitations(): InvitationsManager|false
+ {
+ return $this->managers['invitations'] ?? false;
+ }
+
+ public function additionalActions():void
+ {
+ if (LoginManager::isLogin()) {
+ return;
+ }
+ $extras = apply_filters('jvbAdditionalActions', []);
+ $extras = array_filter($extras, function ($extra) {
+ return is_array($extra) && array_key_exists('button', $extra) && array_key_exists('content', $extra);
+ });
+ if (empty ($extras)) {
+ return;
+ }
+ $buttons = array_map(function ($extra) {
+ return $extra['button'];
+ }, $extras);
+ $contents = array_map(function($extra) {
+ return $extra['content'];
+ }, $extras);
+
+ if (!empty ($buttons)) {
+ ?>
+ <section class="main-actions">
+ <div class="buttons col">
+ <?= implode($buttons); ?>
+ </div>
+ <div class="actions">
+ <?= implode($contents); ?>
+ </div>
+ </section>
+ <?php
+ }
+ }
+
+ public function seo():SchemaOutput
+ {
+ return $this->managers['seo'];
+ }
+
+ public function blocks():CustomBlocks|bool
+ {
+ return $this->customBlocks??false;
+ }
+ public function schemaHelper():SchemaHelper
+ {
+ return $this->managers['schemaHelper'];
+ }
+
+ public function termRelationships():TaxonomyRelationships
+ {
+ return $this->managers['terms'];
+ }
+
+ public function approvals ():ApprovalManager|false
+ {
+ return $this->managers['approvals']??false;
+ }
}
--
Gitblit v1.10.0