'Onboarding', 'version' => '1.0.0', 'author' => 'Paymenter', 'website' => 'https://paymenter.org', ]; } public function getConfig($values = []) { return [ [ 'name' => 'test_mode', 'type' => 'checkbox', 'label' => 'Test Mode', 'description' => 'Enable test mode to always show onboarding modal (bypass session tracking). Useful for testing while setting up slides.', 'required' => false, 'default' => false, ], [ 'name' => 'show_backdrop', 'type' => 'checkbox', 'label' => 'Show Backdrop', 'description' => 'Display a dark backdrop behind the onboarding modal.', 'required' => false, 'default' => false, ], [ 'name' => 'per_session', 'type' => 'checkbox', 'label' => 'Per Session Onboarding', 'description' => 'Use cookies instead of database session. Onboarding will show again if user clears cookies or uses a different browser/device.', 'required' => false, 'default' => false, ], [ 'name' => 'include_homepage', 'type' => 'checkbox', 'label' => 'Show on Homepage', 'description' => 'Also display onboarding on the homepage. By default, onboarding only shows on internal pages like dashboard, services, etc.', 'required' => false, 'default' => false, ], ]; } public function installed() { ExtensionHelper::runMigrations('extensions/Others/Onboarding/database/migrations'); } public function uninstalled() { ExtensionHelper::rollbackMigrations('extensions/Others/Onboarding/database/migrations'); } public function boot() { app('view')->addNamespace('onboarding', __DIR__ . '/resources/views'); \Livewire\Livewire::component('onboarding.modal', \Paymenter\Extensions\Others\Onboarding\Livewire\Onboarding\Modal::class); \Illuminate\Support\Facades\Gate::policy( \Paymenter\Extensions\Others\Onboarding\Models\OnboardingSlide::class, \Paymenter\Extensions\Others\Onboarding\Policies\OnboardingSlidePolicy::class ); \Illuminate\Support\Facades\Event::listen('permissions', function () { return [ 'admin.onboarding.view' => 'View Onboarding Slides', 'admin.onboarding.create' => 'Create Onboarding Slides', 'admin.onboarding.update' => 'Update Onboarding Slides', 'admin.onboarding.delete' => 'Delete Onboarding Slides', ]; }); \Illuminate\Support\Facades\Event::listen('body', function () { // Skip if table doesn't exist if (!Schema::hasTable('ext_onboarding_slides')) { return null; } // Check if homepage should be included $extension = ExtensionHelper::getExtension('other', 'Onboarding'); $includeHomepage = $extension->config('include_homepage', false); // Skip admin and auth pages if (request()->is('admin/*') || request()->is('login') || request()->is('register') || request()->is('2fa') || request()->is('forgot-password') || request()->is('reset-password/*') || request()->is('verify-email')) { return null; } // Skip homepage unless explicitly included if (!$includeHomepage && request()->is('/')) { return null; } // Only show for authenticated users if (!\Illuminate\Support\Facades\Auth::check()) { return null; } return [ 'view' => view('onboarding::widget'), ]; }); } }