Files
Virtnet.bond/extensions/Others/Onboarding/Onboarding.php

111 lines
3.7 KiB
PHP

<?php
namespace Paymenter\Extensions\Others\Onboarding;
use App\Classes\Extension\Extension;
use App\Helpers\ExtensionHelper;
use Illuminate\Support\Facades\Schema;
class Onboarding extends Extension
{
public function getMetadata()
{
return [
'display_name' => '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,
],
];
}
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',
];
});
// Only register body hook if the table exists
if (!Schema::hasTable('ext_onboarding_slides')) {
return;
}
\Illuminate\Support\Facades\Event::listen('body', function () {
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') &&
!request()->is('/') &&
\Illuminate\Support\Facades\Auth::check()) {
return [
'view' => view('onboarding::widget')->render(),
];
}
});
}
}