# WA Clone — آپدیت کامل به نسخه ۱.۰۳

این بستهٔ **آپدیت کامل** شامل همهٔ فایل‌های برنامه (به‌جز `vendor`) است؛ نه فقط فایل‌های تغییرکرده.
برای نصب تازه از بستهٔ `install` استفاده کنید.

- نسخه: **1.03 / Phase 9**
- تاریخ: 2026-11-02
- شامل: کد برنامه، `public/build`، مهاجرت‌ها، ترجمه‌ها، مستندات و `update.php`
- بدون: `vendor`, `.env`, `node_modules`, آپلودها و کش‌ها

---

## مراحل آپدیت

1. از دیتابیس و `storage/app/public` بکاپ بگیرید.
2. سرویس‌های `queue:work` و `reverb:start` را متوقف کنید.
3. محتوای ZIP را روی ریشهٔ نصب فعلی استخراج کنید (Overwrite).
   - `.env`، `storage/app/public`، `storage/logs` و `public/storage` را نگه دارید.
4. اگر `vendor` در نصب فعلی وجود دارد، نیازی به Composer نیست. در غیر این صورت:
   `composer install --no-dev --optimize-autoloader`
5. ویزارد وب را باز کنید: `{APP_URL}/update.php`
   - نسخهٔ فعلی و جدید را مقایسه می‌کند، مهاجرت‌ها و تغییرات را نشان می‌دهد،
     بکاپ می‌گیرد، migrate و کش‌ها را اجرا می‌کند و نسخه را ثبت می‌کند.
6. در پایان `update.php` را حذف کنید و سرویس‌ها را دوباره اجرا کنید.
7. در مرورگر `Ctrl+F5` بزنید تا assetهای جدید بارگذاری شوند.

## اگر ارتقا با خطای دیتابیس متوقف شد (1045)

خطای `SQLSTATE[HY000] [1045] Access denied` یعنی رمز یا دسترسی کاربر دیتابیس رد شده است؛ نصب
لزوماً خراب نشده و مهاجرت‌ها اجرا نشده‌اند. ابتدا برنامه را از حالت تعمیرات خارج کنید:

```bash
php artisan up
php artisan config:clear
php artisan migrate:status
```

سپس در `.env` این مقادیر را با اطلاعات cPanel هم‌راستا کنید (رمز را داخل کوتیشن بگذارید):

```dotenv
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=quarfsiw_waclone
DB_USERNAME=quarfsiw_waclone
DB_PASSWORD="رمز دقیق دیتابیس"
```

در cPanel → MySQL Databases مطمئن شوید کاربر به دیتابیس متصل و دارای دسترسی ALL است. سپس:

```bash
php artisan config:clear
php artisan migrate:status
php artisan migrate --force
php artisan optimize:clear
```

بعد از موفقیت، `update.php` را حذف کنید. آپدیتر جدید قبل از فعال‌سازی حالت تعمیرات، کش کانفیگ
را پاک و اتصال دیتابیس را بررسی می‌کند تا این خطا باعث توقف نیمه‌کاره نشود.

## تغییرات این نسخه

- تنظیمات درگاه پیامک در پنل ادمین با ذخیرهٔ رمزنگاری‌شده و ارسال پیامک تست
- درگاه‌های Twilio، WhatsApp Cloud API و درگاه Kurdisoft (`/send-message`)
- فعال‌سازی حساب با کد OTP پیامکی هنگام ثبت‌نام و بازیابی رمز با کد پیامکی
- ارسال اعلان گروهی/تکی از پنل ادمین و Web Push پس‌زمینه
- پنل کاربران کاملاً ریسپانسیو با چیدمان کارت در موبایل و دکمه‌های هم‌تراز
- نمایش واضح «ساخته‌شده توسط گروه کردی‌سافت — Kurdisoft» در اپ، ورود و پنل
- نسخه 1.02 و بسته‌بندی جدا برای نصب و آپدیت

## مهاجرت جدید

`database/migrations/2026_11_03_000014_create_admin_notifications_and_push_subscriptions.php`
(جدول‌های `admin_notifications`، `admin_notification_recipients` و `push_subscriptions`)

`database/migrations/2026_11_03_000015_add_phone_verification_and_sms_codes.php`
(ستون `users.phone_verified_at` و جدول `sms_codes`)

## برگشت به عقب

بکاپ دیتابیس را بازگردانید و فایل‌های نسخهٔ قبلی را از ZIP قبلی کپی کنید؛ سپس
`php artisan optimize:clear` را اجرا کنید.
