در WHMCS فیلدهای پیش‌فرض مانند نام، ایمیل و آدرس از تنظیمات whmcs قفل می‌شوند و کاربر امکان ویرایش آن‌ها را ندارد.

اما کاستوم فیلدها (Custom Fields) که توسط مدیر ساخته می‌شوند، به‌صورت پیش‌فرض قابل ویرایش هستند و این موضوع معمولاً برای برخی سایت‌ها مشکل‌ساز می‌شود؛ مخصوصاً زمانی که بخواهید اطلاعات حساس یا یکبارثبت‌شونده مثل کدملی، شماره تلفن، شناسه مشتری، IP ثابت و… را ذخیره کنید.

در این آموزش از وبسایت وهاب آنلاین، یاد می‌گیرید چطور با یک فایل هوک ساده، کاستوم فیلدهای موردنظر را قفل کنید تا کاربر پس از یک‌بار ثبت، دیگر نتواند آن‌ها را تغییر دهد.

چرا باید کاستوم فیلدها را قفل کنیم؟

  • جلوگیری از تغییر اطلاعات مهم توسط کاربران
  • حفظ امنیت و جلوگیری از تقلب
  • مناسب برای سیستم‌های احراز هویت، لایسنس و خدمات حساس
  • هماهنگ‌سازی کاستوم‌فیلدها با رفتار فیلدهای پیش‌فرض WHMCS

چطور Custom Field را قفل کنیم؟

برای قفل کردن یک یا چند کاستوم فیلد، کافیست یک فایل هوک در WHMCS اضافه کنید تا هنگام مشاهده صفحه پروفایل، فیلدهای موردنظر به حالت Readonly تغییر کنند و حتی اگر کاربر با استفاده از ابزارهای خاص فیلدها را تغییر داد خطا دریافت شود.

۱. فایل را در مسیر مشخص آپلود کنید

فایل هوکی که در ضمیمه به شما داده‌ام را در مسیر زیر قرار دهید:

/includes/hooks/

برای مثال :

/home/whmcs/public_html/includes/hooks/lockCustomFields.php

پس از آپلود، هوک به صورت خودکار فعال می‌شود و نیاز به تنظیمات اضافی ندارد. فقط شما باید فیلد آیدی هایی که میخواهید قفل شوند را مشخص کنید.

در فایل ارسالی متغییر targetFields به صورت آرایه قرار دارد که باید فیلد آیدی های مورد نظر خود را به جای اعداد 1,9 وارد کنید و اگر فیلدهای بیشتری را نیاز داشتید بعد از هر عدد یک کاما اضافه کنید و آیدی بعدی را وارد کنید . 

کدی که باید ویرایش کنید این است و در خط 34 قرار دارد :

$targetFields = [1,9];

۲. چطور Custom Field ID را پیدا کنیم؟

برای قفل کردن هر فیلد باید Field ID آن را بدانید. برای این کار:

  1. وارد WHMCS شوید
  2. به مسیر زیر بروید: Settings → System Settings → Custom Client Fields
  3. روی فیلد موردنظر کلیک راست کرده و inspect element را بزنید
  4. رو به روی fieldnamex همانند تصویر آیدی فیلد مشخص شده است . آنرا در کد بالا قرار دهید

دریافت فیلد آیدی در whmcs

۳. محتوای فایل هوک (برای قفل کردن فیلدها)

کافیست در فایل هوک، ID فیلدهایی که می‌خواهید قفل شوند را وارد کنید:

<?php

use WHMCS\Database\Capsule;

function Vo_NotEdit($vars, $targetFieldId){
    foreach ($targetFieldId as $fieldId) {
        $existing = Capsule::table('tblcustomfieldsvalues')
            ->where('fieldid', $fieldId)
            ->where('relid', $_SESSION['uid'])
            ->value('value');

        $newValue = $_POST['customfield'][$fieldId] ?? '';

        if (!empty($existing) && $existing != $newValue) {
            return ['error' => 'امکان ویرایش برخی فیلدها وجود ندارد.'];
        }
    }
}

function Vo_ReadOnly($vars, $targetFieldId){
    foreach ($vars['customfields'] as $index => $field) {
        if (in_array($field['id'], $targetFieldId) && !empty($field['value'])) {
            $vars['customfields'][$index]['input'] = str_replace(
                '<input',
                '<input readonly style="background:#eee;cursor:not-allowed;"',
                $field['input']
            );
        }
    }
    return $vars;
}

// لیست فیلدهایی که باید قفل شوند
$targetFields = [1,9];

add_hook('ClientDetailsValidation', 1, function($vars) use ($targetFields) {
    return Vo_NotEdit($vars, $targetFields);
});

add_hook('ClientAreaPageProfile', 1, function($vars) use ($targetFields) {
    return Vo_ReadOnly($vars, $targetFields);
});

با این هوک، هر فیلدی که ID آن را داخل آرایه قرار دهید، قفل می‌شود و کاربر امکان ویرایش آن را نخواهد داشت.

جمع‌بندی

با اینکه WHMCS امکان قفل‌کردن فیلدهای پیش‌فرض را ارائه می‌دهد، اما کاستوم فیلدها به‌صورت پیش‌فرض قابل ویرایش هستند. با استفاده از یک فایل هوک ساده که در مسیر includes/hooks قرار می‌گیرد، می‌توانید کنترل کامل روی این فیلدها داشته باشید و امنیت اطلاعات کاربران را افزایش دهید.

اگر قصد دارید فیلدهای خاصی مانند شماره ملی، شناسه مشتری، ID لایسنس یا هر داده حساس دیگری را غیرقابل‌ویرایش کنید، این روش بهترین و استانداردترین راه‌حل است.


اگر سوال و یا مشکلی داشتید از طریق بخش نظرات همین مطلب با ما در میان بگذارید 🌹🌹🌹

وهاب سیدی
برنامه نویس

من وهاب سیدی هستم . برنامه نویس و توسعه دهنده php . عاشق whmcs هستم و دوست دارم امکانات جدیدی برای whmcs ایجاد کنم و در اختیار شما قرار بدم . من عاشق لاراولم و اسکریپت های اختصاصیم رو با اون میسازم و توسعه میدهم . علاوه بر اینا از از سی شارپ خوشم میاد و کلی نرم افزار برای ویندوز هم ساختم که کم کم اون ها رو منتشر میکنم . امیدوارم مطالب منو دنبال کنید.

دیدگاهتان را با ما به اشتراک بگذارید

فیلدهای نام و ایمیل و متن دیدگاه الزامی می باشند.

0 دیدگاه