# 🚀 دليل التثبيت السريع - جميع الباكدجات

## نسخة سريعة لتثبيت جميع الباكدجات في مشروع واحد

---

## 1️⃣ إنشاء المشروع

```bash
composer create-project laravel/laravel my-project
cd my-project
composer require filament/filament:"^5.0"
php artisan filament:install --panels
```

---

## 2️⃣ تثبيت جميع الباكدجات دفعة واحدة

```bash
composer require \
    bezhansalleh/filament-shield \
    filament/spatie-laravel-media-library-plugin \
    filament/spatie-laravel-settings-plugin \
    filament/spatie-laravel-tags-plugin \
    awcodes/filament-quick-create \
    awcodes/filament-badgeable-column \
    awcodes/filament-versions \
    pxlrbt/filament-environment-indicator \
    pxlrbt/filament-excel \
    watheqalshowaiter/filament-sticky-table-header \
    swisnl/filament-backgrounds \
    spatie/laravel-activitylog \
    spatie/laravel-health \
    shuvroroy/filament-spatie-laravel-backup \
    croustibat/filament-jobs-monitor \
    sqits/laravel-userstamps \
    ralphjsmit/laravel-seo \
    guava/filament-knowledge-base \
    mpdf/mpdf \
    craft-forge/filament-language-switcher
```

**Development only:**
```bash
composer require barryvdh/laravel-debugbar --dev
```

---

## 3️⃣ نشر جميع الإعدادات والـ Migrations

```bash
# Shield
php artisan vendor:publish --tag=filament-shield-config
php artisan vendor:publish --tag=filament-shield-migrations

# Media Library
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider"

# Settings
php artisan vendor:publish --provider="Spatie\LaravelSettings\LaravelSettingsServiceProvider"

# Tags
php artisan vendor:publish --provider="Spatie\Tags\TagsServiceProvider"

# Activity Log
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-migrations"
php artisan vendor:publish --provider="Spatie\Activitylog\ActivitylogServiceProvider" --tag="activitylog-config"

# Health
php artisan vendor:publish --tag=health-config

# Backup
php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"

# Jobs Monitor
php artisan vendor:publish --tag="jobs-monitor-migrations"

# SEO
php artisan vendor:publish --tag="seo-config"
php artisan vendor:publish --tag="seo-migrations"

# Knowledge Base
php artisan vendor:publish --tag="filament-knowledge-base-migrations"

# Backgrounds
php artisan vendor:publish --tag="filament-backgrounds-config"

# Sticky Table
php artisan vendor:publish --tag="filament-sticky-table-header-config"
```

---

## 4️⃣ تشغيل Migrations

```bash
php artisan migrate
php artisan storage:link
```

---

## 5️⃣ توليد الصلاحيات

```bash
php artisan shield:generate --all
```

---

## 6️⃣ إعداد .env

أضف هذه السطور في ملف `.env`:

```env
# Core Plugins
PLUGIN_SHIELD_ENABLED=true
PLUGIN_EXCEL_EXPORT_ENABLED=true
PLUGIN_MEDIA_LIBRARY_ENABLED=true
PLUGIN_SETTINGS_ENABLED=true
PLUGIN_TAGS_ENABLED=true

# UI Enhancements
PLUGIN_QUICK_CREATE_ENABLED=true
PLUGIN_STICKY_TABLE_ENABLED=true
PLUGIN_BACKGROUNDS_ENABLED=true
PLUGIN_BADGEABLE_COLUMN_ENABLED=true
PLUGIN_ENVIRONMENT_INDICATOR_ENABLED=true
PLUGIN_VERSIONS_ENABLED=true

# Monitoring & Logging
PLUGIN_ACTIVITY_LOG_ENABLED=true
PLUGIN_HEALTH_ENABLED=true
PLUGIN_BACKUP_ENABLED=true
PLUGIN_JOBS_MONITOR_ENABLED=true
PLUGIN_USERSTAMPS_ENABLED=true

# SEO & Content
PLUGIN_SEO_ENABLED=true
PLUGIN_KNOWLEDGE_BASE_ENABLED=true

# Language
PLUGIN_LANGUAGE_SWITCHER_ENABLED=true

# Development (Local only)
PLUGIN_DEBUGBAR_ENABLED=true
DEBUGBAR_ENABLED=true

# Queue (للـ Jobs Monitor)
QUEUE_CONNECTION=database

# Backup Email
BACKUP_NOTIFICATION_EMAIL=admin@example.com
```

---

## 7️⃣ إنشاء ملف config/filament-plugins.php

```bash
php artisan make:config filament-plugins
```

أو أنشئه يدوياً في `config/filament-plugins.php`:

```php
<?php

return [
    'plugins' => [
        'shield' => env('PLUGIN_SHIELD_ENABLED', true),
        'excel_export' => env('PLUGIN_EXCEL_EXPORT_ENABLED', true),
        'userstamps' => env('PLUGIN_USERSTAMPS_ENABLED', true),
        'activity_log' => env('PLUGIN_ACTIVITY_LOG_ENABLED', true),
        'sticky_table_header' => env('PLUGIN_STICKY_TABLE_ENABLED', true),
        'backgrounds' => env('PLUGIN_BACKGROUNDS_ENABLED', true),
        'badgeable_column' => env('PLUGIN_BADGEABLE_COLUMN_ENABLED', true),
        'quick_create' => env('PLUGIN_QUICK_CREATE_ENABLED', true),
        'environment_indicator' => env('PLUGIN_ENVIRONMENT_INDICATOR_ENABLED', true),
        'versions' => env('PLUGIN_VERSIONS_ENABLED', true),
        'media_library' => env('PLUGIN_MEDIA_LIBRARY_ENABLED', true),
        'settings' => env('PLUGIN_SETTINGS_ENABLED', true),
        'tags' => env('PLUGIN_TAGS_ENABLED', true),
        'backup' => env('PLUGIN_BACKUP_ENABLED', true),
        'health' => env('PLUGIN_HEALTH_ENABLED', true),
        'jobs_monitor' => env('PLUGIN_JOBS_MONITOR_ENABLED', true),
        'seo' => env('PLUGIN_SEO_ENABLED', true),
        'knowledge_base' => env('PLUGIN_KNOWLEDGE_BASE_ENABLED', true),
        'debugbar' => env('PLUGIN_DEBUGBAR_ENABLED', env('APP_DEBUG', false)),
        'language_switcher' => env('PLUGIN_LANGUAGE_SWITCHER_ENABLED', true),
    ],
];
```

---

## 8️⃣ تعديل User Model

`app/Models/User.php`:

```php
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Spatie\Permission\Traits\HasRoles;
use Spatie\Activitylog\Traits\LogsActivity;
use Spatie\Activitylog\LogOptions;
use Sqits\UserStamps\Concerns\HasUserStamps;
use Spatie\MediaLibrary\HasMedia;
use Spatie\MediaLibrary\InteractsWithMedia;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;

class User extends Authenticatable implements FilamentUser, HasMedia
{
    use HasFactory, Notifiable, HasRoles, LogsActivity, HasUserStamps, InteractsWithMedia;

    protected $fillable = [
        'name',
        'email',
        'password',
    ];

    protected $hidden = [
        'password',
        'remember_token',
    ];

    protected function casts(): array
    {
        return [
            'email_verified_at' => 'datetime',
            'password' => 'hashed',
        ];
    }

    public function canAccessPanel(Panel $panel): bool
    {
        return true; // أو أي شرط تريده
    }

    public function getActivitylogOptions(): LogOptions
    {
        return LogOptions::defaults()
            ->logOnly(['name', 'email'])
            ->logOnlyDirty()
            ->dontSubmitEmptyLogs();
    }
}
```

---

## 9️⃣ إعداد PanelProvider

`app/Providers/Filament/AdminPanelProvider.php`:

```php
<?php

namespace App\Providers\Filament;

use Filament\Http\Middleware\Authenticate;
use Filament\Http\Middleware\DisableBladeIconComponents;
use Filament\Http\Middleware\DispatchServingFilamentEvent;
use Filament\Pages;
use Filament\Panel;
use Filament\PanelProvider;
use Filament\Support\Colors\Color;
use Filament\Widgets;
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
use Illuminate\Routing\Middleware\SubstituteBindings;
use Illuminate\Session\Middleware\AuthenticateSession;
use Illuminate\Session\Middleware\StartSession;
use Illuminate\View\Middleware\ShareErrorsFromSession;

// Plugins
use BezhanSalleh\FilamentShield\FilamentShieldPlugin;
use Awcodes\FilamentQuickCreate\QuickCreatePlugin;
use Awcodes\FilamentVersions\VersionsPlugin;
use pxlrbt\FilamentEnvironmentIndicator\EnvironmentIndicatorPlugin;
use Swis\Filament\Backgrounds\FilamentBackgroundsPlugin;
use ShuvroRoy\FilamentSpatieLaravelBackup\FilamentSpatieLaravelBackupPlugin;
use Croustibat\FilamentJobsMonitor\FilamentJobsMonitorPlugin;
use Guava\FilamentKnowledgeBase\KnowledgeBasePlugin;
use CraftForge\FilamentLanguageSwitcher\LanguageSwitcherPlugin;

class AdminPanelProvider extends PanelProvider
{
    public function panel(Panel $panel): Panel
    {
        return $panel
            ->default()
            ->id('admin')
            ->path('admin')
            ->login()
            ->colors([
                'primary' => Color::Amber,
            ])
            ->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources')
            ->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages')
            ->pages([
                Pages\Dashboard::class,
            ])
            ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\\Filament\\Widgets')
            ->widgets([
                Widgets\AccountWidget::class,
            ])
            ->middleware([
                EncryptCookies::class,
                AddQueuedCookiesToResponse::class,
                StartSession::class,
                AuthenticateSession::class,
                ShareErrorsFromSession::class,
                VerifyCsrfToken::class,
                SubstituteBindings::class,
                DisableBladeIconComponents::class,
                DispatchServingFilamentEvent::class,
            ])
            ->authMiddleware([
                Authenticate::class,
            ])
            ->plugins([
                FilamentShieldPlugin::make(),
                QuickCreatePlugin::make()
                    ->label('إنشاء سريع')
                    ->keyBindings(['command+k', 'ctrl+k']),
                VersionsPlugin::make(),
                EnvironmentIndicatorPlugin::make()
                    ->visible(fn () => app()->environment(['local', 'staging']))
                    ->color(fn () => match (app()->environment()) {
                        'local' => 'info',
                        'staging' => 'warning',
                        default => 'success',
                    }),
                FilamentBackgroundsPlugin::make(),
                FilamentSpatieLaravelBackupPlugin::make(),
                FilamentJobsMonitorPlugin::make(),
                KnowledgeBasePlugin::make(),
                LanguageSwitcherPlugin::make()
                    ->locales(['ar', 'en', 'fr'])
                    ->visible(outsidePanels: true),
            ]);
    }
}
```

---

## 🔟 جدولة المهام

`app/Console/Kernel.php`:

```php
<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    protected function schedule(Schedule $schedule): void
    {
        // Health Checks
        $schedule->command('health:check')->everyFiveMinutes();
        
        // Backup
        $schedule->command('backup:clean')->daily()->at('01:00');
        $schedule->command('backup:run')->daily()->at('02:00');
    }

    protected function commands(): void
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}
```

---

## 1️⃣1️⃣ Migration مثال لـ Userstamps

عند إنشاء أي migration جديد، أضف:

```php
Schema::create('posts', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('content');
    
    // Userstamps
    $table->unsignedBigInteger('created_by')->nullable();
    $table->unsignedBigInteger('updated_by')->nullable();
    $table->unsignedBigInteger('deleted_by')->nullable();
    
    $table->foreign('created_by')->references('id')->on('users')->onDelete('set null');
    $table->foreign('updated_by')->references('id')->on('users')->onDelete('set null');
    $table->foreign('deleted_by')->references('id')->on('users')->onDelete('set null');
    
    $table->timestamps();
    $table->softDeletes();
});
```

---

## 1️⃣2️⃣ إنشاء Resources أساسية

```bash
# Role Resource
php artisan make:filament-resource Role --generate

# Activity Log Resource
php artisan make:filament-resource ActivityLog \
    --model="Spatie\Activitylog\Models\Activity" \
    --generate

# User Importer
php artisan make:filament-importer User --generate
```

---

## 1️⃣3️⃣ إنشاء Super Admin

```bash
# طريقة 1: عبر Artisan
php artisan make:filament-user

# أدخل البيانات ثم
php artisan shield:super-admin

# طريقة 2: عبر Tinker
php artisan tinker
>>> $user = App\Models\User::find(1);
>>> $user->assignRole('super_admin');
```

---

## 1️⃣4️⃣ تشغيل الخدمات

```bash
# Terminal 1: Development Server
php artisan serve

# Terminal 2: Queue Worker
php artisan queue:work

# Terminal 3: Scheduler (للنسخ الاحتياطي والـ Health Checks)
php artisan schedule:work
```

---

## 1️⃣5️⃣ إنشاء Seeder (اختياري)

```bash
php artisan make:seeder RoleSeeder
```

`database/seeders/RoleSeeder.php`:

```php
<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
use App\Models\User;

class RoleSeeder extends Seeder
{
    public function run(): void
    {
        // إنشاء الأدوار
        $superAdmin = Role::create(['name' => 'super_admin']);
        $admin = Role::create(['name' => 'admin']);
        $editor = Role::create(['name' => 'editor']);
        $user = Role::create(['name' => 'user']);

        // منح صلاحيات Super Admin
        $superAdmin->givePermissionTo(Permission::all());

        // إنشاء مستخدم تجريبي
        $adminUser = User::create([
            'name' => 'Admin',
            'email' => 'admin@example.com',
            'password' => bcrypt('password'),
            'email_verified_at' => now(),
        ]);

        $adminUser->assignRole('super_admin');

        // مستخدم عادي
        $testUser = User::create([
            'name' => 'Test User',
            'email' => 'test@example.com',
            'password' => bcrypt('password'),
            'email_verified_at' => now(),
        ]);

        $testUser->assignRole('user');
    }
}
```

تشغيل:
```bash
php artisan db:seed --class=RoleSeeder
```

---

## 1️⃣6️⃣ تنظيف الكاش

```bash
php artisan optimize:clear
php artisan filament:clear-cached-components
php artisan filament:upgrade
```

---

## 1️⃣7️⃣ الوصول للوحة

```
http://localhost:8000/admin

البريد: admin@example.com
كلمة المرور: password
```

---

## ✅ Checklist

- [ ] تثبيت Laravel + Filament
- [ ] تثبيت 23 باكدج
- [ ] نشر Configs و Migrations
- [ ] `php artisan migrate`
- [ ] `php artisan storage:link`
- [ ] `php artisan shield:generate --all`
- [ ] إنشاء config/filament-plugins.php
- [ ] تحديث .env
- [ ] تعديل User Model
- [ ] إعداد PanelProvider
- [ ] جدولة المهام في Kernel
- [ ] إنشاء Super Admin
- [ ] تشغيل Queue و Scheduler
- [ ] اختبار الدخول

---

## 🚨 مشاكل شائعة وحلولها

### خطأ: Class not found

```bash
composer dump-autoload
php artisan optimize:clear
```

### خطأ: Migrations لا تعمل

```bash
php artisan migrate:fresh
php artisan db:seed
```

### خطأ: Permissions لا تظهر

```bash
php artisan shield:generate --all
php artisan cache:clear
```

### خطأ: Media Library لا يرفع

```bash
php artisan storage:link
chmod -R 775 storage
chmod -R 775 bootstrap/cache
```

### خطأ: Queue لا يعمل

```bash
# تأكد من .env
QUEUE_CONNECTION=database

# ثم شغل
php artisan queue:table
php artisan migrate
php artisan queue:work
```

---

## 📦 Package.json (اختياري - لـ Frontend)

```json
{
    "private": true,
    "type": "module",
    "scripts": {
        "dev": "vite",
        "build": "vite build"
    },
    "devDependencies": {
        "axios": "^1.7.4",
        "laravel-vite-plugin": "^1.0",
        "vite": "^5.0"
    }
}
```

```bash
npm install
npm run build
```

---

## 🎉 انتهى!

الآن لديك نظام Laravel + Filament 5 كامل مع 23 باكدج جاهزة للاستخدام.

**الوقت المتوقع للتثبيت**: 15-20 دقيقة

**ملفات التوثيق**:
- `PACKAGES_GUIDE_AR.md` - الدليل الشامل (مع شرح كل باكدج)
- `QUICK_INSTALLATION_AR.md` - هذا الملف (الأوامر السريعة فقط)

---

**بالتوفيق! 🚀**
