=== Valabi Updates ===
Contributors: valabi
Tags: updates, release, plugin-update-checker, deployment
Requires at least: 5.8
Tested up to: 6.7
Requires PHP: 7.4
Stable tag: 1.0.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

مرکز انتشار افزونه‌های والابی. زیپ افزونه از سیستم شما آپلود می‌شود و فایل‌های به‌روزرسانی (JSON و ZIP) که افزونه‌ها می‌خوانند، خودکار ساخته می‌شوند.

== Description ==

این افزونه روی سایت میزبانِ به‌روزرسانی‌ها (مثلاً mobodel.ir) نصب می‌شود و کار آپلود دستی را خودکار می‌کند.

جریان کار:

1. روی سیستم خود نسخهٔ افزونه را در هدر `Version:` بالا می‌برید.
2. دستور `./release.sh <slug>` را اجرا می‌کنید.
3. اسکریپت زیپ را می‌سازد و همراه متادیتا با توکن امن به این افزونه POST می‌کند.
4. این افزونه نسخه را از داخل خود زیپ می‌خواند (منبع حقیقت)، فایل `{slug}-{version}.zip` و `{slug}.json` را در پوشهٔ انتشار می‌نویسد.
5. به‌روزرسان افزونه‌ها (Plugin Update Checker) روی سایت‌های زنده، نسخهٔ جدید را می‌بیند.

پوشهٔ انتشار به‌صورت پیش‌فرض `ABSPATH . wp-updates/` است (یعنی `https://<site>/wp-updates/`) تا با محل آپلود دستی قبلی یکی باشد. با فیلترهای `valabi_updates_dir` و `valabi_updates_url` قابل تغییر است.

داشبورد فهرست افزونه‌ها و نسخهٔ هرکدام، توکن انتشار و تاریخچه را نشان می‌دهد. با کد کوتاه `[valabi_updates]` می‌توانید نمایش عمومی فقط‌خواندنی هم داشته باشید.

== Endpoints ==

* POST `/wp-json/valabi-updates/v1/release` — آپلود نسخه (نیازمند توکن).
* GET  `/wp-json/valabi-updates/v1/catalog` — فهرست نسخه‌ها (عمومی فقط وقتی نمایش عمومی روشن باشد).
* GET/POST `/wp-json/valabi-updates/v1/license-bundle` — خروجی/ورودی دادهٔ لایسنس (کدها، سایت‌ها، دسترسی‌ها) برای آینه‌سازی بین دو نصب (نیازمند مدیر سایت؛ Application Password کافی است).

== Changelog ==

= 1.5.2 =
* افزودن اندپوینت `license-bundle` (GET/POST) برای همگام‌سازی دادهٔ لایسنس بین دو نصب خواهر (مثلاً کپی ایران و خارج از ایران mobodel.ir) توسط valabi-sync-agent. احراز هویت فقط `manage_options` است (Application Password استاندارد وردپرس).

= 1.1.0 =
* افزودن «دسترسی مشتری»: برای هر افزونه می‌توان حالت نمایش را عمومی / فقط با کد / مخفی تعیین کرد و کدهای دسترسی ساخت. اندپوینت catalog با پارامتر code فقط افزونه‌های مجاز را برمی‌گرداند.

= 1.0.4 =
* صفحهٔ «آپلود دستی بسته‌ها» در داشبورد: برای سایت آینه‌ای که `release.sh` به آن دسترسی مستقیم ندارد (مثلاً سایتی که فقط با آی‌پی ایران باز می‌شود)، می‌توانید بسته‌های ساخته‌شده (zip + metadata.json) را با کشیدن‌ورها‌کردن و یک کلیک منتشر کنید — چند افزونه با هم. هر دو مسیر انتشار (REST و دستی) از یک تابع `ingest()` مشترک می‌گذرند، پس خروجی سایت آینه دقیقاً مثل هاب خودکار است.
* اسکریپت `release.sh` اکنون علاوه بر آپلود به هاب، یک کپی از بستهٔ هر انتشار را در `~/valabi-releases/<slug>/` نگه می‌دارد (همان جفت فایلی که در صفحهٔ آپلود دستی می‌کشید). گزینهٔ `--bundle-only` فقط بسته را می‌سازد و با هاب تماس نمی‌گیرد.

= 1.0.3 =
* همهٔ بخش‌های متادیتا (توضیحات، نصب، پرسش‌ها، تغییرات…) اکنون عبور داده می‌شوند تا پنجرهٔ «مشاهدهٔ جزئیات» وردپرس مثل افزونه‌های عادی پر شود (قبلاً فقط changelog نگه داشته می‌شد).

= 1.0.2 =
* پشتیبانی از هاست‌های بدون ZipArchive: خواندن نسخه از داخل زیپ اکنون با یک خوانندهٔ سبک خالص‌PHP (فقط zlib) انجام می‌شود و اگر آن هم در دسترس نباشد، به نسخهٔ متادیتای ارسالی اتکا می‌کند. خطای «ZipArchive فعال نیست» برطرف شد.
* پاک‌سازی نسخه برای استفادهٔ امن در نام فایل.

= 1.0.1 =
* رفع نمایش فارسی: زمان نسبی («۲ هفته پیش») به‌جای انگلیسی نمایش داده می‌شود و ارقام فارسی شدند.
* اصلاح فاصله‌گذاری: مقادیر آماری دیگر با فونت تک‌فاصله/چپ‌چین نمایش داده نمی‌شوند تا حروف فارسی به‌درستی بچسبند.
* عنوان «والابی آپدیتس» در سربرگ سفید شد و فاصله‌گذاری سربرگ بهبود یافت.

= 1.0.0 =
* انتشار اولیه: نقطهٔ دریافت انتشار با احراز توکن، ساخت خودکار JSON/ZIP از داخل زیپ، داشبورد طراحی‌شدهٔ والابی، نمایش عمومی فقط‌خواندنی، و تاریخچهٔ انتشار.
