Jake Vanderwerf
5 days ago 266aa37c48222993bf7bdad6834e31bd08736f5e
activate.php
@@ -1,8 +1,14 @@
<?php
use JVBase\integrations\Umami;
use JVBase\managers\Cache;
use JVBase\managers\CustomTable;
use JVBase\base\Site;
use JVBase\managers\DashboardManager;
use JVBase\managers\DirectoryManager;
use JVBase\managers\queue\Queue;
use JVBase\managers\ReferralManager;
use JVBase\utility\Features;
use JVBase\managers\RoleManager;
use JVBase\registrar\Registrar;
if (!defined('ABSPATH')) {
    exit; // Exit if accessed directly
@@ -10,22 +16,24 @@
function jvbActivatePlugin():void
{
   ob_start();
   $validator = new JVBase\utility\Validator();
   $validation = $validator->validateAll();
   error_log('Validation result: '.print_r($validation, true));
   $checker = JVBase\utility\Checker::getInstance();
   error_log('Doing our activation action...');
// $validator = new JVBase\utility\Validator();
// $validation = $validator->validateAll();
// error_log('Validation result: '.print_r($validation, true));
// $checker = JVBase\utility\Checker::getInstance();
// error_log('Doing our activation action...');
   // Get ContentRegistry instance early
   $registry = new JVBase\registry\ContentRegistry();
// $registry = new JVBase\registry\ContentRegistry();
   // Initialize content types
   $registry->onActivation();
   $checker->invalidateContentCache();
   $checker->invalidateTaxonomyCache();
// $registry->onActivation();
// $checker->invalidateContentCache();
// $checker->invalidateTaxonomyCache();
    do_action(BASE.'activation');
   error_log('Action done!');
   error_log('Checking custom tables...');
    (new JVBase\registry\CheckCustomTables())->maybeCreateTables();
   CustomTable::ensureTables();
   error_log('Dashboard is setup: '.print_r(JVB()->dashboard(), true));
//    (new JVBase\registry\CheckCustomTables())->maybeCreateTables();
   error_log('Tables created!');
    // Store schema version
@@ -33,48 +41,32 @@
   error_log('Starting schedules...');
    jvbSchedules();
   error_log('Schedules done!');
   error_log('checking Admin capabilities...');
    jvbAddAdminCaps();
   error_log('Admin caps done!');
   error_log('Removing unneeded roles...');
    remove_role('contributor');
    remove_role('author');
    remove_role('editor');
   error_log('Roles removed!');
   error_log('New Roles done!');
   RoleManager::activate();
   jvbRegisterAdminPages();
   if (array_key_exists('integrations', JVB_SITE) && array_key_exists('umami', JVB_SITE['integrations']) && JVB_SITE['integrations']['umami']=== true) {
      error_log('Adding Umami tables');
      Umami::createTables();
   }
// if (array_key_exists('integrations', JVB_SITE) && array_key_exists('umami', JVB_SITE['integrations']) && JVB_SITE['integrations']['umami']=== true) {
//    error_log('Adding Umami tables');
//    Umami::createTables();
// }
// if (Site::has('is_directory')) {
//    error_log('Activating DirectoryManager');
//    jvb_register_do_once('buildDirectory', ['JVBase\managers\DirectoryManager', 'activate']);
// }
   error_log('Activation done! Huzzah!');
   $output = ob_get_clean();
   if ( $output ) {
      // Grab a backtrace to see what caused the output
      $trace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
      $formatted = [];
      foreach ( $trace as $step ) {
         if ( isset( $step['file'], $step['line'] ) ) {
            $formatted[] = $step['file'] . ':' . $step['line'];
         }
      }
      error_log( "⚠️ Plugin activation produced unexpected output (" . strlen( $output ) . " chars)" );
      error_log( "Output: " . trim( $output ) );
      error_log( "Backtrace: " . implode( ' <- ', $formatted ) );
   }
}
function jvbAddAdminCaps()
{
   $roleManager = new \JVBase\managers\RoleManager();
   $roleManager = new RoleManager();
   $role = get_role('administrator');
   $users = get_users(['role' => 'administrator']);
    foreach (JVB_CONTENT as $slug => $config) {
      $plural = strtolower($config['plural']);
    foreach (array_merge(Registrar::getRegistered('post'), Registrar::getFeatured('is_content')) as $slug) {
      error_log('Adding administrative roles to '.$slug);
      $plural = $roleManager->getContentPlural($slug);
      $capabilities = [
         'edit_' . $plural,
         'edit_published_' . $plural,
@@ -106,14 +98,15 @@
function jvbGrantAdminUserCaps()
{
   // Only run once after activation
   if (get_option('jvb_admin_caps_granted') === '1') {
   if (get_option(BASE.'admin_caps_granted') === '1') {
      return;
   }
   $roleManager = new \JVBase\managers\RoleManager();
   $roleManager = new RoleManager();
   $users = get_users(['role' => 'administrator']);
   foreach (JVB_CONTENT as $slug => $config) {
   foreach (array_merge(Registrar::getRegistered('post'), Registrar::getFeatured('is_content', 'term')) as $slug) {
      foreach ($users as $user) {
         // These methods should check if post type exists before adding caps
         $roleManager->grantContent($user, $slug);
@@ -122,7 +115,7 @@
   }
   // Mark as complete to prevent running again
   update_option('jvb_admin_caps_granted', '1');
   update_option(BASE.'admin_caps_granted', '1');
   remove_action('init', 'jvbGrantAdminUserCaps', 99);
}
function jvbScheduledHooks()
@@ -158,16 +151,16 @@
            'time'              => '12:03am tomorrow',
        ],
        //NotificationManager.php
        'jvb_notification_digest_daily' =>
        BASE.'notification_digest_daily' =>
            [
                'time'  => '8:08am tomorrow',
            ],
        'jvb_notification_digest_weekly' =>
        BASE.'notification_digest_weekly' =>
            [
                'time'       => 'monday 6:07am',
                'recurrence' => 'weekly',
            ],
        'jvb_notification_digest_monthly' =>
        BASE.'notification_digest_monthly' =>
            [
                'time'       => '2025-05-05 9:00am',
                'recurrence' => 'monthly',
@@ -202,6 +195,7 @@
    jvbDeleteOptions();
    jvbDeleteDashboard();
    jvbDeleteDirectories();
   Cache::flushAll();
    do_action('jvbDeactivate');
}
@@ -237,14 +231,13 @@
    $pages = new WP_Query([
        'post_type' => BASE.'directory',
        'posts_per_page'    => -1,
        'post_status'   => 'any',
        'post_status'   => ['publish', 'draft','trash'],
        'fields'    => 'ids'
    ]);
    if ($pages->have_posts()) {
        foreach ($pages->posts as $ID) {
            wp_delete_post($ID, true);
        }
    }
   foreach ($pages->posts as $ID) {
      wp_delete_post($ID, true);
   }
}
function jvbClearSchedules()
{
@@ -275,7 +268,8 @@
function jvbRegisterAdminPages():void
{
   if (Features::forSite()->has('referrals')){
   if (Site::has('referrals')){
      ReferralManager::addSubpage();
   }
// SEOAdminPage::addSubpage();
}