=== کلید من ===
Contributors: TS
Tags: management, dashboard, dependency, license
Requires at least: 5.6
Tested up to: 6.7
Stable tag: 1.11.1
Requires PHP: 7.4
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

افزونه مدیریت مرکزی و پیش‌نیاز برای سایر افزونه‌های خانه افزونه.

== Description ==

این افزونه یک صفحه مدیریتی در پیشخوان وردپرس ایجاد می‌کند که فهرست تمام افزونه‌های نصب‌شده، نسخه، نویسنده و وضعیت فعال/غیرفعال آن‌ها را نمایش می‌دهد.

همچنین این افزونه به‌عنوان پیش‌نیاز سایر افزونه‌های "خانه افزونه" عمل می‌کند و ثابت `MY_KEY_ACTIVE` را برای استفاده در افزونه‌های وابسته تعریف می‌کند.

از نسخه ۱.۴.۰ به بعد، این افزونه یک صفحه «لایسنس» نیز دارد که در آن می‌توانید کلید لایسنس دریافتی از خانه افزونه را وارد کنید. این کلید به‌صورت خودکار به سرور لایسنس مرکزی (`tablighatsabet.ir/`) ارسال می‌شود و نتیجه فعال‌سازی (وضعیت، تاریخ انقضا، تعداد فعال‌سازی‌ها و...) در همین سایت ذخیره و کش می‌شود. وضعیت لایسنس به‌صورت روزانه و خودکار نیز با سرور بررسی و به‌روزرسانی می‌شود.

== Installation ==

1. پوشه افزونه را در مسیر `wp-content/plugins/` آپلود کنید.
2. از بخش افزونه‌ها در پیشخوان وردپرس، افزونه «کلید من» را فعال کنید.
3. از منوی پیشخوان وارد صفحه «کلید من» شوید تا لیست افزونه‌های نصب‌شده را مشاهده کنید.
4. از زیرمنوی «لایسنس»، کلید لایسنس خود را وارد و فعال کنید.

== Changelog ==

= 1.11.1 =
* رفع خطای مهلک (Fatal Error: Cannot declare class MK_LC_Integrity, because the name is already in use) که هنگام هم‌زمان فعال بودن دو یا چند افزونهٔ خانه افزونه (که هرکدام طبق راهنمای بالای همین فایل، نسخهٔ خودشان از `class-mk-lc-integrity.php` را جداگانه embed کرده‌اند) رخ می‌داد؛ علت: کلاس داخل یک `if (...) { return; }` قرار داشت اما خودِ `class MK_LC_Integrity {}` به‌صورت بی‌قید-و-شرط در سطح بالای فایل تعریف شده بود. PHP کلاس‌های بدون parent را در زمان کامپایل فایل (پیش از اجرای هر کدی از جمله همان return) «early bind» می‌کند؛ در نتیجه گارد class_exists عملاً هیچ‌وقت اجرا نمی‌شد و به‌محض بارگذاری دومین کپی از این فایل (در دومین افزونه) خطای «Cannot declare class» بلافاصله در مرحلهٔ کامپایل رخ می‌داد، نه در زمان اجرا.
* اصلاح: خودِ تعریف `class MK_LC_Integrity` داخل بلوک `if ( ! class_exists( 'MK_LC_Integrity' ) ) : ... endif;` قرار گرفت (نه فقط یک return قبل از آن). این کار باعث می‌شود PHP تعریف کلاس را late-bound (زمان اجرا) در نظر بگیرد، گارد واقعاً مؤثر شود، و اگر همین کتابخانه از چند افزونهٔ مختلف embed شده باشد، فقط اولین کپی که لود می‌شود کلاس را واقعاً تعریف کند و بقیه بی‌صدا رد شوند.

= 1.11.0 =
* رفع خطای مهلک (Fatal Error: Call to undefined function wp_rand()) که در برخی مسیرهای بارگذاری (مثلاً پیشخوان شبکه در چندسایتی) هنگام فعال‌سازی یا بروزرسانی می‌توانست کل سایت را از کار بیندازد؛ علت: کتابخانهٔ بررسی یکپارچگی فایل، `wp_schedule_event`/`wp_rand` را مستقیماً در سطح بالای فایل افزونه (خارج از هر هوک) فراخوانی می‌کرد، پیش از آنکه این توابع هستهٔ وردپرس آماده باشند
* اصلاح ساختاری در `class-mk-lc-integrity.php`: تمام فراخوانی‌های API وردپرس اکنون به هوک `init` موکول می‌شوند، مستقل از اینکه افزونهٔ میزبان چه زمانی متد `init()` را صدا بزند (این اصلاح در کتابخانهٔ مشترک اعمال شده و افزونه‌های دیگری که از همین کتابخانه استفاده می‌کنند را هم ایمن می‌کند)

= 1.9.0 =
* رفع باگ: بروزرسانی افزونه‌های وابسته (مثل «تی‌اس راکت») اکنون در transient استاندارد update_plugins وردپرس هم تزریق می‌شود؛ در نتیجه هم در صفحهٔ افزونه‌ها > بروزرسانی‌ها دیده می‌شوند و هم دکمهٔ «بروزرسانی خودکار» واقعاً بستهٔ جدید را نصب می‌کند (قبلاً فقط یک لینک دانلود خام بود)
* افزوده: دکمهٔ «بررسی بروزرسانی الان» در داشبورد که بدون نیاز به منتظر ماندن برای کرون یا کش، بلافاصله از wp-market سؤال می‌کند
* بهبود: کش بررسی بروزرسانی افزونه‌های وابسته از ۱۲ ساعت به ۱ ساعت کاهش یافت تا نسخه‌های تازه ثبت‌شده در مارکت زودتر دیده شوند
* افزوده: پشتیبانی از دیالوگ «جزئیات نسخه» برای افزونه‌های وابسته در صفحهٔ افزونه‌ها

= 1.8.0 =
* تغییر معماری: منبع نسخه/چنج‌لاگ/فایل بروزرسانی «کلید من» و افزونه‌های وابسته اکنون منحصراً افزونهٔ wp-market است (نه mk-license)
* افزوده: تب «افزونه‌های وابسته» اکنون نسخهٔ فعلی و نسخهٔ جدید، تغییرات (Changelog) و دکمهٔ دانلود مستقیم را برای هر افزونه نمایش می‌دهد
* بهبود: چک بروزرسانی خودِ «کلید من» به endpoint جدید wp-market/v1/update-check منتقل شد
* رفع باگ: عدم تطابق قبلی بین آدرس چک بروزرسانی و روت‌های واقعی mk-license برطرف شد

= 1.7.1 =
* رفع باگ: محدودیت «۲ بار در روز» پاپ‌آپ فرانت‌اند دیگر توسط افزونه‌های کش صفحه (Page Cache) نادیده گرفته نمی‌شود
* بهبود: تشخیص افزونه‌های وابسته اکنون بر اساس هدر Requires Plugins، ثابت MY_KEY_ACTIVE و تطبیق دقیق دامنه انجام می‌شود (رفع false positive)
* افزوده: دکمهٔ بستن (×) و کلید Escape برای پاپ‌آپ‌های تبلیغاتی در ادمین و فرانت‌اند
* امنیت: تأیید دامنه و چک‌سام sha256 بستهٔ بروزرسانی پیش از نصب

= 1.7.0 =
* تغییر اساسی: تبلیغات اکنون از سرور مرکزی tablighatsabet.ir دریافت می‌شوند (نه از دیتابیس محلی)
* افزوده: تابع my_key_ad_api_url() برای endpoint مرکزی تبلیغات
* بهبود: کش ۶ ساعته برای تبلیغ دریافتی از سرور (Transient)
* بهبود: در صورت خطای اتصال، ۳۰ دقیقه مجدداً تلاش نمی‌شود
* بهبود: پاک‌سازی my_key_remote_ad در uninstall.php
* سازگار با افزونه «کلید من — مدیریت تبلیغات» روی سرور مرکزی

= 1.6.0 =
* افزوده: پاپ‌آپ تبلیغاتی در پیشخوان ادمین (پیشخوان و داشبورد کلید من)
* افزوده: پاپ‌آپ تبلیغاتی در صفحه اصلی سایت برای تمام بازدیدکنندگان
* افزوده: محدودیت نمایش ۲ بار در روز برای بازدیدکنندگان فرانت‌اند (کوکی)
* افزوده: تایمر ۱۵ ثانیه‌ای دایره‌ای با بسته‌شدن خودکار پاپ‌آپ
* افزوده: پشتیبانی از تبلیغات متنی، تصویری و ویدیویی
* افزوده: سیستم چرخشی تبلیغات بر اساس اولویت عددی
* افزوده: assets/ad-popup.css، ad-popup.js، ad-popup-front.css، ad-popup-front.js
* افزوده: option ذخیره‌سازی my_key_ads و شمارنده my_key_ad_counter
* سازگار با افزونه «کلید من — مدیریت تبلیغات» نسخه ۱.۰.۰+

= 1.5.0 =
* افزوده: فایل uninstall.php برای پاک‌سازی کامل داده‌ها هنگام حذف افزونه
* بهینه‌سازی: حذف options، cron jobs و transients پس از uninstall
* به‌روزرسانی: آدرس سرور از tablighatsabet.ir/support/ به tablighatsabet.ir


= 1.4.0 =
* افزودن صفحه «لایسنس» برای وارد کردن کلید لایسنس.
* اتصال خودکار به سرور لایسنس مرکزی (افزونه مرکز لایسنس) از طریق REST API برای فعال‌سازی، غیرفعال‌سازی و بررسی وضعیت لایسنس.
* ذخیره و کش وضعیت لایسنس (فعال/غیرفعال/منقضی/لغو شده) به همراه تاریخ انقضا و تعداد فعال‌سازی‌های مجاز.
* بررسی خودکار روزانه وضعیت لایسنس از طریق Cron وردپرس.
* نمایش هشدار در صفحه اصلی افزونه در صورت نبود لایسنس فعال.

= 1.3.0 =
* رفع مشکل امنیتی: حذف اجرای کد از طریق eval(base64_decode()) و جایگزینی با کد PHP شفاف و خوانا.
* حذف کامنت غیرواقعی "Protected by Manus Security".
* انتقال آیکون منو از رشته base64 درون کد به فایل SVG مستقل در assets/icon.svg.
* افزودن ثابت نسخه MY_KEY_VERSION.
* بهبود کد بررسی وضعیت افزونه‌ها (استفاده از مقایسه strict در in_array).
* افزودن فایل readme.txt استاندارد وردپرس.

= 1.2.0 =
* نسخه اولیه.
