From fa918e9bf6173c30899694ddd29d5d80295d125f Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 9 Jun 2026 11:49:31 -0500 Subject: [PATCH] fix: guard component service calls with class_exists check System plugin event handlers fire during install before com_mokosuite is fully loaded. Guard AutomationEngine and NotificationService calls with class_exists() to prevent fatal errors during package install. --- .../plg_system_mokosuite/Extension/MokoSuite.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/source/packages/plg_system_mokosuite/Extension/MokoSuite.php b/source/packages/plg_system_mokosuite/Extension/MokoSuite.php index 52249855..6d5a4d12 100644 --- a/source/packages/plg_system_mokosuite/Extension/MokoSuite.php +++ b/source/packages/plg_system_mokosuite/Extension/MokoSuite.php @@ -2167,7 +2167,7 @@ class MokoSuite extends CMSPlugin implements BootableExtensionInterface { if (!$isnew || !$success) return; - \Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::fire('user_register', [ + class_exists(\Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::class, true) && \Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::fire('user_register', [ 'user_id' => (int) ($user['id'] ?? 0), 'username' => $user['username'] ?? '', 'email' => $user['email'] ?? '', @@ -2182,7 +2182,7 @@ class MokoSuite extends CMSPlugin implements BootableExtensionInterface { if ($context !== 'com_content.article') return; - \Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::fire('content_save', [ + class_exists(\Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::class, true) && \Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::fire('content_save', [ 'article_id' => (int) ($article->id ?? 0), 'title' => $article->title ?? '', 'is_new' => $isNew ? '1' : '0', @@ -2196,7 +2196,7 @@ class MokoSuite extends CMSPlugin implements BootableExtensionInterface */ public function onExtensionAfterInstall($installer, $eid): void { - \Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::fire('extension_install', [ + class_exists(\Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::class, true) && \Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::fire('extension_install', [ 'extension_id' => (int) $eid, ]); } @@ -2216,7 +2216,7 @@ class MokoSuite extends CMSPlugin implements BootableExtensionInterface $name = $user->username ?? $user->name ?? 'unknown'; // Fire automation for any login - \Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::fire('user_login', [ + class_exists(\Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::class, true) && \Moko\Component\MokoSuite\Administrator\Service\AutomationEngine::fire('user_login', [ 'user_id' => (int) ($user->id ?? 0), 'username' => $name, 'ip' => $ip, @@ -2226,7 +2226,7 @@ class MokoSuite extends CMSPlugin implements BootableExtensionInterface // Security notification for backend logins only if (!$this->app->isClient('administrator')) return; - \Moko\Component\MokoSuite\Administrator\Service\NotificationService::securityAlert( + class_exists(\Moko\Component\MokoSuite\Administrator\Service\NotificationService::class, true) && \Moko\Component\MokoSuite\Administrator\Service\NotificationService::securityAlert( 'admin_login', "Admin login: {$name}", "User: {$name}\nIP: {$ip}\nTime: " . gmdate('Y-m-d H:i:s') . " UTC" @@ -2251,7 +2251,7 @@ class MokoSuite extends CMSPlugin implements BootableExtensionInterface if ($count >= 3 && $count % 3 === 0) { - \Moko\Component\MokoSuite\Administrator\Service\NotificationService::securityAlert( + class_exists(\Moko\Component\MokoSuite\Administrator\Service\NotificationService::class, true) && \Moko\Component\MokoSuite\Administrator\Service\NotificationService::securityAlert( 'login_failure', "Failed login attempts: {$count} from {$ip}", "Username: {$username}\nIP: {$ip}\nAttempts: {$count}\nTime: " . gmdate('Y-m-d H:i:s') . " UTC"