Jake Vanderwerf
2026-08-25 3d25ad7de4fdbb3eba2cde2a62422e6be5d79a0a
inc/managers/Errors.php
File was renamed from inc/managers/ErrorHandler.php
@@ -1,7 +1,7 @@
<?php
namespace JVBase\managers;
use JVBase\JVB;
use JVBase\Instance;
use WP_Error;
use Exception;
use WP_REST_Request;
@@ -10,8 +10,9 @@
    exit; // Exit if accessed directly
}
class ErrorHandler
class Errors
{
   use Instance;
    protected int $notification_threshold = 5; // Critical errors within 1 hour
    protected array $error_levels = [
@@ -24,7 +25,7 @@
   protected CustomTable $table;
    public function __construct()
    private function __construct()
    {
      $this->defineTables();
//        global $wpdb;
@@ -71,7 +72,7 @@
   }
    public function registerAdminAction():void
    {
        $admin = JVB()->admin();
        $admin = AdminPages::getInstance();
        $admin->registerSubpage(
            'Error Log',
@@ -265,25 +266,25 @@
      $admin_email = get_option('admin_email');
      $subject = "[" . get_bloginfo('name') . " Critical Error] {$component}";
      $body = JVB()->email()->alert(
      $body = Emails::getInstance()->alert(
         'A critical error has occurred and requires immediate attention',
         'error'
      );
      $body .= JVB()->email()->h2('Error Details');
      $body .= JVB()->email()->card(
      $body .= Emails::getInstance()->h2('Error Details');
      $body .= Emails::getInstance()->card(
         '<p><strong>Component:</strong> ' . esc_html($component) . '</p>' .
         '<p><strong>Message:</strong></p>' .
         JVB()->email()->codeBlock($message),
         Emails::getInstance()->codeBlock($message),
         'Error Information'
      );
      if (!empty($context)) {
         $body .= JVB()->email()->h3('Additional Context');
         $body .= JVB()->email()->codeBlock(json_encode($context, JSON_PRETTY_PRINT));
         $body .= Emails::getInstance()->h3('Additional Context');
         $body .= Emails::getInstance()->codeBlock(json_encode($context, JSON_PRETTY_PRINT));
      }
      return JVB()->email()->sendEmail($admin_email, $subject, $body, 'CRITICAL ERROR');
      return Emails::getInstance()->sendEmail($admin_email, $subject, $body, 'CRITICAL ERROR');
   }
    /**
@@ -332,77 +333,77 @@
      $subject = "[{$site_name}] Daily Error Summary - " . date('Y-m-d');
      // Header with alert
      $body = JVB()->email()->h1('Daily Error Summary');
      $body = Emails::getInstance()->h1('Daily Error Summary');
      $body .= sprintf('<p>Error summary for <strong>%s</strong></p>', $yesterday);
      // Summary stats in a grid
      if (!empty($summary['stats'])) {
         $stats = [
            JVB()->email()->stat($summary['stats']->total_errors, 'Total Errors'),
            JVB()->email()->stat($summary['stats']->critical_count, 'Critical', 'Requires attention'),
            JVB()->email()->stat($summary['stats']->error_count, 'Errors'),
            JVB()->email()->stat($summary['stats']->warning_count, 'Warnings')
            Emails::getInstance()->stat($summary['stats']->total_errors, 'Total Errors'),
            Emails::getInstance()->stat($summary['stats']->critical_count, 'Critical', 'Requires attention'),
            Emails::getInstance()->stat($summary['stats']->error_count, 'Errors'),
            Emails::getInstance()->stat($summary['stats']->warning_count, 'Warnings')
         ];
         $body .= JVB()->email()->grid($stats, 4);
         $body .= Emails::getInstance()->grid($stats, 4);
      }
      // Alert if critical errors exist
      if (!empty($summary['critical'])) {
         $body .= JVB()->email()->alert(
         $body .= Emails::getInstance()->alert(
            sprintf('Found %d critical errors that need immediate attention', count($summary['critical'])),
            'error'
         );
      }
      $body .= JVB()->email()->spacer(20);
      $body .= Emails::getInstance()->spacer(20);
      // Frequent errors section
      if (!empty($summary['frequent'])) {
         $body .= JVB()->email()->h2('Most Frequent Errors');
         $body .= Emails::getInstance()->h2('Most Frequent Errors');
         foreach ($summary['frequent'] as $error) {
            $cardContent = JVB()->email()->badge($error->count . 'x', 'warning') . ' ';
            $cardContent = Emails::getInstance()->badge($error->count . 'x', 'warning') . ' ';
            $cardContent .= '<strong>' . esc_html($error->error_type) . '</strong>';
            $cardContent .= '<p style="margin:10px 0 5px 0;font-size:13px;">' . esc_html(wp_trim_words($error->message, 15)) . '</p>';
            $cardContent .= '<p style="margin:0;font-size:12px;color:' . JVB()->email()->colours['dark-200'] . ';">
            $cardContent .= '<p style="margin:0;font-size:12px;color:' . Emails::getInstance()->colours['dark-200'] . ';">
                Source: ' . esc_html($error->source) . ' |
                Logged in: ' . $error->logged_in_count . ' |
                Logged out: ' . $error->logged_out_count . '
            </p>';
            $body .= JVB()->email()->card($cardContent, $error->component);
            $body .= Emails::getInstance()->card($cardContent, $error->component);
         }
      }
      // Critical errors section
      if (!empty($summary['critical'])) {
         $body .= JVB()->email()->spacer(30);
         $body .= JVB()->email()->h2('Recent Critical Errors');
         $body .= Emails::getInstance()->spacer(30);
         $body .= Emails::getInstance()->h2('Recent Critical Errors');
         foreach ($summary['critical'] as $error) {
            $cardContent = '<p><strong>Time:</strong> ' . esc_html($error->created_at) . '</p>';
            $cardContent .= '<p><strong>Message:</strong></p>';
            $cardContent .= JVB()->email()->codeBlock($error->message);
            $cardContent .= Emails::getInstance()->codeBlock($error->message);
            // Include context if available
            if (!empty($error->context)) {
               $context = json_decode($error->context, true);
               if (is_array($context)) {
                  $cardContent .= '<p><strong>Context:</strong></p>';
                  $cardContent .= JVB()->email()->codeBlock(json_encode($context, JSON_PRETTY_PRINT));
                  $cardContent .= Emails::getInstance()->codeBlock(json_encode($context, JSON_PRETTY_PRINT));
               }
            }
            $body .= JVB()->email()->card($cardContent, $error->component . ': ' . $error->error_type);
            $body .= Emails::getInstance()->card($cardContent, $error->component . ': ' . $error->error_type);
         }
      }
      // Dashboard link
      $admin_url = admin_url('admin.php?page=jvb-error-logs');
      $body .= JVB()->email()->spacer(30);
      $body .= JVB()->email()->button($admin_url, 'View Detailed Logs');
      $body .= Emails::getInstance()->spacer(30);
      $body .= Emails::getInstance()->button($admin_url, 'View Detailed Logs');
      return JVB()->email()->sendEmail($admin_email, $subject, $body, 'ERROR SUMMARY');
      return Emails::getInstance()->sendEmail($admin_email, $subject, $body, 'ERROR SUMMARY');
   }
    /**