# Stolen Internet Devices Platform (Laravel)

منصة PHP/Laravel لإدارة وعرض قاعدة بيانات أجهزة إنترنت مسروقة.

## الميزات الأساسية
- واجهة عامة للبحث بدون تسجيل دخول.
- لوحة أدمن كاملة تحت `/admin`.
- أدوار وصلاحيات عبر `spatie/laravel-permission`.
- سجل عمليات (Audit Logs).
- دعم العربية/الإنجليزية/التركية + RTL.
- وضع ليلي/نهاري.
- وحدة إعدادات نصية كاملة (Singleton) مع صلاحية `manage_settings`.
- رفع صور متعددة لكل سجل مسروق (إنترنت/هاتف/مركبة) وعرضها في صفحة التفاصيل العامة.
- نظام مراجعة قبل النشر: أي سجل جديد يُحفظ كـ `Pending Review` ولا يظهر للعامة إلا بعد القبول بصلاحية مخصصة.
- سلة محذوفات متكاملة (Soft Delete) للأجهزة + الهواتف + المركبات + مستخدمي الأدمن، مع استرجاع/حذف نهائي/عمليات جماعية وصلاحيات دقيقة.

## التقنية
- Laravel 12
- Blade + Tailwind CSS
- MySQL (إنتاج) / SQLite (اختبارات)
- Laravel Breeze (Auth)
- Spatie Permission

## روابط مهمة
- واجهة عامة: `/`
- لمحة عن الموقع: `/about`
- انضم لنا: `/join-us`
- دخول الأدمن: `/admin/login`
- لوحة التحكم: `/admin/dashboard`
- الإعدادات: `/admin/settings`
- مركز الإعدادات الجديد: `/admin/settings-center`
- سلة المحذوفات: `/admin/trash`

## ما الذي تم ربطه من الإعدادات؟
- Header:
  - `site_name_translations`
  - `site_subtitle_translations`
- Footer:
  - `footer_developer_text`
  - `whatsapp_number`
  - Version badge from `APP_VERSION`
- About:
  - `about_text_translations`
  - `legal_notice_translations`
  - `contact_email`, `contact_phone`
- Join Us:
  - `join_us_text_translations`
- Public Search:
  - `public_search_enabled`
  - `display_owner_phone_public`
  - `public_per_page`
- Admin Pagination:
  - `admin_per_page`
- Trash Retention:
  - `trash_retention_days`

## صلاحيات الإعدادات
- المسارات:
  - `GET /admin/settings` (`admin.settings.edit`)
  - `PUT /admin/settings` (`admin.settings.update`)
- الحماية: `permission:manage_settings`
- الأدوار الافتراضية:
  - `Super Admin`: يملك الصلاحية
  - `Admin`: يملك الصلاحية
  - `Editor/Viewer`: بدون صلاحية

## مركز الإعدادات الجديد + النسخ الاحتياطي
- صفحة موحدة بتبويبات تحت:
  - `GET /admin/settings-center`
- تحديثات التبويبات:
  - عام: `PUT /admin/settings-center/general`
  - واجهة عامة: `PUT /admin/settings-center/public-site`
  - تسعير: `PUT /admin/settings-center/pricing`
  - محافظ/طلبات/أمان/إشعارات/سجلات: `PUT /admin/settings-center/{category}`
- النسخ الاحتياطي:
  - تشغيل نسخة يدوية: `POST /admin/settings-center/backup/run`
  - تحديث إعدادات الجدولة والاحتفاظ: `PUT /admin/settings-center/backup/config`
  - تحميل/حذف ملف نسخة: `GET|DELETE /admin/settings-center/backup/{backupRun}`
  - تحقق واسترجاع: `POST /admin/settings-center/backup/{backupRun}/validate-restore` و`POST /admin/settings-center/backup/{backupRun}/restore`
  - Google Drive: connect/disconnect/test ضمن مسارات `.../backup/google-drive/*`
- صلاحيات جديدة تفصيلية:
  - settings: `view_settings_*`, `manage_settings_*`, `view_sensitive_settings`, `manage_sensitive_settings`, `view_system_*`, `manage_system_*`
  - backup: `view_backup_center`, `create_manual_backup`, `manage_backup_schedule`, `view_backup_logs`, `download_backup_files`, `delete_backup_files`
  - restore: `view_restore_center`, `validate_backup_before_restore`, `restore_backup`, `restore_database_backup`, `restore_files_backup`, `approve_critical_restore`, `view_restore_logs`
  - google drive: `view_google_drive_settings`, `connect_google_drive`, `disconnect_google_drive`, `test_google_drive_connection`, `manage_google_drive_backup`
  - audit: `view_settings_audit_log`, `view_backup_audit_log`, `view_configuration_history`
- تدقيق الإعدادات:
  - جدول `settings_audit_logs` يسجل كل تعديل (من/ماذا/قبل/بعد/IP/نجاح).
- النسخ المجدولة:
  - الأمر `backups:run-scheduled` يعمل عبر الـ scheduler كل دقيقة ويفعّل التنفيذ حسب الوقت المضبوط (افتراضي 03:30).

## صلاحيات مراجعة الإضافات الجديدة
- أي إضافة جديدة للأجهزة تُسجّل كطلب (`Pending Review`) ومخفية عن الواجهة العامة.
- صلاحيات المراجعة:
  - `review_stolen_submissions` (مراجعة عامة)
  - `review_internet_devices`
  - `review_mobile_phones`
  - `review_vehicles`
- افتراضيًا: `Super Admin` يملك هذه الصلاحيات، ويمكن منحها يدويًا لأي مدير من صفحة الأدوار والصلاحيات.

## وحدة سلة المحذوفات (Trash)
- الحذف من صفحات الإدارة أصبح نقلًا إلى السلة (Soft Delete) مع حفظ:
  - `deleted_by`
  - `delete_reason` (اختياري)
- عمليات السلة:
  - استرجاع عنصر
  - حذف نهائي (يتطلب كلمة تأكيد)
  - عمليات جماعية (استرجاع/حذف نهائي)
  - تفريغ السلة حسب النوع (مع تأكيد)
- الصلاحيات الجديدة:
  - `view_trash`, `view_trash_stolen_devices`, `view_trash_admin_users`
  - `restore_trash_items`, `restore_trash_stolen_devices`, `restore_trash_admin_users`
  - `force_delete_trash_items`, `force_delete_trash_stolen_devices`, `force_delete_trash_admin_users`
  - `empty_trash`, `view_deleted_by_others`
- تنظيف تلقائي:
  - أمر: `php artisan trash:purge --types=internet,mobile,vehicle`
  - يستخدم قيمة `trash_retention_days` من الإعدادات العامة عند عدم تمرير `--days`.
  - مجدول يوميًا 03:00 للسجلات فقط (بدون مستخدمي الأدمن افتراضيًا)

## متغيرات `.env` الخاصة بالبذور
تمت إضافة مفاتيح اختيارية لبذور الإعدادات في `.env.example`:
- `SITE_SETTINGS_SITE_NAME_*`
- `SITE_SETTINGS_SITE_SUBTITLE_*`
- `SITE_SETTINGS_ABOUT_*`
- `SITE_SETTINGS_JOIN_US_*`
- `SITE_SETTINGS_LEGAL_*`
- `SITE_SETTINGS_FOOTER_DEVELOPER_TEXT`
- `SITE_SETTINGS_WHATSAPP_NUMBER`
- `SITE_SETTINGS_CONTACT_EMAIL`
- `SITE_SETTINGS_CONTACT_PHONE`
- `SITE_SETTINGS_DEFAULT_LOCALE`
- `SITE_SETTINGS_PUBLIC_SEARCH_ENABLED`
- `SITE_SETTINGS_DISPLAY_OWNER_PHONE_PUBLIC`
- `SITE_SETTINGS_PUBLIC_PER_PAGE`
- `SITE_SETTINGS_ADMIN_PER_PAGE`
- `SITE_SETTINGS_TRASH_RETENTION_DAYS`

## وحدة المحفظة والتسعير
- جداول جديدة:
  - `wallets`
  - `wallet_transactions`
  - `pricing_settings`
  - `record_requests`
- صفحات جديدة داخل الأدمن:
  - `GET /admin/my-wallet` (محفظتي)
  - `GET /admin/my-requests` (طلباتي)
  - `GET /admin/pricing-settings` (إدارة التسعير)
  - `GET /admin/wallets` (محافظ المدراء)
- الصلاحيات الجديدة:
  - `view_wallet_self`, `view_wallet_transactions_self`
  - `topup_managers_wallet`, `view_all_wallets`, `adjust_wallet_balance`
  - `manage_pricing_settings`
  - `create_record_request`, `publish_records_directly`
  - `review_record_requests`, `approve_record_requests`, `reject_record_requests`
  - `view_record_requests_self`, `view_record_requests_all`
- متغيرات مالية في `.env.example`:
  - `WALLET_DEFAULT_CURRENCY`
  - `PRICE_CAR_RECORD`
  - `PRICE_BIKE_RECORD`
  - `PRICE_PHONE_RECORD`
  - `PRICE_INTERNET_RECORD`

## التثبيت والتشغيل
1. تثبيت الاعتمادات:
```bash
composer install
npm install
```
2. إعداد البيئة:
```bash
cp .env.example .env
php artisan key:generate
```
3. ضبط قاعدة البيانات في `.env`.
4. الترحيل + البذور:
```bash
php artisan migrate --seed
```
5. ربط تخزين الصور العام:
```bash
php artisan storage:link
```
6. بناء الواجهة:
```bash
npm run build
```
7. تشغيل محلي:
```bash
php artisan serve
```
8. لتشغيل الجدولة محليًا (اختياري):
```bash
php artisan schedule:work
```
9. صلاحيات النسخ/الإعدادات الجديدة (بعد تحديث مشروع قائم):
```bash
php artisan db:seed --class=RolesAndPermissionsSeeder
php artisan permission:cache-reset
```

## نشر الإنتاج (PHP Hosting)
نفّذ بعد رفع المشروع:
```bash
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan db:seed --class=SiteSettingsSeeder --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
npm run build
```
وللجدولة في الإنتاج أضف Cron لـ Laravel Scheduler:
```bash
* * * * * php /path/to/project/artisan schedule:run >> /dev/null 2>&1
```

وتأكد من:
- توجيه Document Root إلى `public/`.
- صلاحيات الكتابة لـ `storage/` و`bootstrap/cache/`.

## قائمة فحص بعد النشر
1. تسجيل دخول الأدمن يعمل.
2. البحث العام يعمل.
3. حفظ الإعدادات من `/admin/settings` يعمل.
4. حفظ الإعدادات من `/admin/settings-center` يعمل حسب الصلاحيات.
5. النسخ اليدوي من تبويب النسخ الاحتياطي يعمل.
6. تبديل اللغة عبر `/locale/{locale}` يعمل.
7. الفوتر يعرض:
   - `برمجة وتطوير المهندس محمد إدريس`
   - WhatsApp: `00963994806517`
