Merge branch 'main' of https://get.feep.ir/khaneghi_abshodeh/khaneghi_server
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
---
|
||||
description: khaneghi_server — فقط SQL؛ کد سرور را تغییر نده؛ value را عوض نکن
|
||||
alwaysApply: true
|
||||
---
|
||||
|
||||
# khaneghi_server — SQL-only edits
|
||||
|
||||
این ریپو Laravel API پلتفرم خانگی است (`khaneghi_server`؛ روی سرور معمولاً `…/server`).
|
||||
|
||||
## قانون اصلی
|
||||
|
||||
- **هرگز** کد اپلیکیشن/سرور را تغییر نده، مگر کاربر صریحاً بگوید «کد PHP/Laravel را هم عوض کن».
|
||||
- وقتی کاربر دستوری برای تغییر میدهد، **فقط فایلهای `.sql`** را ویرایش/ایجاد کن — ترجیحاً زیر `database/sql/`.
|
||||
- سؤال، توضیح، و خواندن کل پروژه آزاد است؛ نوشتن فقط در محدودهٔ SQL.
|
||||
- **`value` ها تغییر نکنند:** برای ردیفهای موجود در `settings` / `const` هرگز `UPDATE ... SET value = ...` ننویس و value زندهای که ادمین/سیستم تنظیم کرده را عوض نکن. فقط کلید جدید با `INSERT ... WHERE NOT EXISTS` و پیشفرض اولیه. متادیتا (`title_fa`, `description`, `type`, `can_edit`) مجاز است. استثنا فقط اگر کاربر صریحاً بگوید value را عوض کن (و در SQL شرط خالیبودن مستند شود).
|
||||
|
||||
## مجاز (editable)
|
||||
|
||||
- `database/sql/**/*.sql` — patch، deploy، tenant merge، settings/const، ensure/alter
|
||||
- در صورت نیاز برای اجرای همان SQL: فقط بهروزرسانی توضیحات داخل همان `.sql` (هدر/کامنت)
|
||||
|
||||
## ممنوع (do not edit)
|
||||
|
||||
- `app/**` — Controllers، Models، Services، `MigrateCommand`، Providers، Jobs، …
|
||||
- `routes/**`, `config/**`, `packages/**`, `resources/**`, `bootstrap/**`, `public/**`, `tests/**`
|
||||
- `database/migrations/**` (PHP) — مگر کاربر صریحاً migration بخواهد
|
||||
- `database/schema/mysql-schema.sql.reference` — dump مخرب با `DROP TABLE`؛ روی DB موجود اجرا/بازنویسی نکن
|
||||
- `.env`, `composer.json`, `composer.lock`, Docker، اسکریپتهای root ops
|
||||
- بازنویسی `value` (و ترجیحاً `is_active`) ردیفهای موجود settings یا const در SQLهای deploy
|
||||
|
||||
اگر کار فقط با تغییر PHP حل میشود: **رد کن**، راه SQL پیشنهاد بده، یا بپرس آیا مجاز به لمس کد هستی.
|
||||
|
||||
## قرارداد SQL
|
||||
|
||||
- Idempotent بنویس (قابل اجرای چندباره).
|
||||
- **حفظ value:** در `deploy_settings_const*.sql` و هر patch جدید، برای ردیف موجود **هرگز** `UPDATE value` نزن. فقط INSERT کلید جدید با default؛ آپدیت فقط روی `title_fa` / `description` / `type` / `can_edit`. ترجیح آپگرید زنده: `deploy_settings_const_preserve_value_sync_can_edit.sql`.
|
||||
- Schema جدول/ستون را در settings SQL نگذار؛ برای ستون جدید از الگوی `database/sql/_helpers/safe_add_column.sql` / `ensure_*.sql` / `deploy_safe_schema.sql` پیروی کن.
|
||||
- نامگذاری: `add_*`, `alter_*`, `ensure_*`, `*_patch.sql`, `{tenant}_*`, `deploy_settings_const*.sql`.
|
||||
- قبل از پیشنهاد اجرا روی سرور: بکاپ؛ ترتیب DB موجود معمولاً: `baseline_migrations.sql` → `php artisan migrate` → `deploy_settings_const*.sql` (جزئیات: `database/sql/DEPLOY_CHECKLIST.md`).
|
||||
|
||||
## ایمنی migrate
|
||||
|
||||
- `app/Console/MigrateCommand.php` از auto-load اسکیما جلوگیری میکند — آن را لمس/حذف نکن.
|
||||
- روی DB موجود هرگز `mysql-schema.sql.reference` را پیشنهاد نکن.
|
||||
|
||||
## مثال
|
||||
|
||||
```text
|
||||
❌ کاربر: «فلگ X را در SettingsController چک کن» → فایل PHP را ادیت نکن؛ در صورت نیاز کلید را در SQL settings اضافه کن.
|
||||
❌ SQL: UPDATE settings SET value = 'false' WHERE key = 'referral_show'; — value زنده را عوض نکن.
|
||||
✅ کاربر: «کلید support_messengers را به deploy settings اضافه کن» → فقط database/sql/*.sql با INSERT WHERE NOT EXISTS.
|
||||
✅ SQL: UPDATE settings SET title_fa = '...', description = '...' WHERE key = 'referral_id'; — فقط متادیتا.
|
||||
```
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Super;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Http\Middleware\BlockServerAccess;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class SuperSettingsController extends Controller
|
||||
{
|
||||
public function show()
|
||||
{
|
||||
$blocked = (bool) Cache::get(BlockServerAccess::CACHE_KEY, false);
|
||||
|
||||
return response()->json([
|
||||
'server_access_blocked' => $blocked,
|
||||
]);
|
||||
}
|
||||
|
||||
public function update(Request $request)
|
||||
{
|
||||
$data = $request->validate([
|
||||
'server_access_blocked' => 'sometimes|boolean',
|
||||
]);
|
||||
|
||||
if (array_key_exists('server_access_blocked', $data)) {
|
||||
$blocked = (bool) $data['server_access_blocked'];
|
||||
if ($blocked) {
|
||||
Cache::forever(BlockServerAccess::CACHE_KEY, true);
|
||||
} else {
|
||||
Cache::forget(BlockServerAccess::CACHE_KEY);
|
||||
}
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'ok' => true,
|
||||
'server_access_blocked' => (bool) Cache::get(BlockServerAccess::CACHE_KEY, false),
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ class Kernel extends HttpKernel
|
||||
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
|
||||
\App\Http\Middleware\TrimStrings::class,
|
||||
\Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
|
||||
\App\Http\Middleware\BlockServerAccess::class,
|
||||
];
|
||||
|
||||
/**
|
||||
@@ -69,5 +70,6 @@ class Kernel extends HttpKernel
|
||||
'pargar.auth' => \App\Http\Middleware\PargarAuth::class,
|
||||
'sms.panel.super' => \App\Http\Middleware\EnsureSmsPanelSuperAdmin::class,
|
||||
'customer.active' => \App\Http\Middleware\EnsureCustomerIsActive::class,
|
||||
'superadmin.remote' => \App\Http\Middleware\EnsureSuperAdminRemoteToken::class,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cache;
|
||||
|
||||
class BlockServerAccess
|
||||
{
|
||||
public const CACHE_KEY = 'sa_server_access_blocked';
|
||||
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$path = trim($request->path(), '/');
|
||||
if ($this->isWhitelisted($path)) {
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
if (Cache::get(self::CACHE_KEY)) {
|
||||
return response()->json([
|
||||
'message' => 'خطا در برقراری ارتباط با سرور',
|
||||
], 503);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
|
||||
private function isWhitelisted(string $path): bool
|
||||
{
|
||||
$allowed = [
|
||||
'super/settings',
|
||||
'api/super/settings',
|
||||
];
|
||||
|
||||
foreach ($allowed as $item) {
|
||||
if ($path === $item || str_ends_with($path, '/'.$item)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
/**
|
||||
* Bearer token must match SUPERADMIN_REMOTE_TOKEN (same as SuperAdmin Tenant.remoteApiToken).
|
||||
*/
|
||||
class EnsureSuperAdminRemoteToken
|
||||
{
|
||||
public function handle(Request $request, Closure $next)
|
||||
{
|
||||
$expected = trim((string) config('services.superadmin.remote_token', ''));
|
||||
if ($expected === '') {
|
||||
return response()->json([
|
||||
'message' => 'SUPERADMIN_REMOTE_TOKEN is not configured',
|
||||
], 503);
|
||||
}
|
||||
|
||||
$auth = (string) $request->header('Authorization', '');
|
||||
$token = '';
|
||||
if (preg_match('/^\s*Bearer\s+(.+)\s*$/i', $auth, $m)) {
|
||||
$token = trim($m[1]);
|
||||
}
|
||||
|
||||
if ($token === '' || ! hash_equals($expected, $token)) {
|
||||
return response()->json(['message' => 'Unauthorized'], 401);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
@@ -72,11 +72,21 @@ class ConfigService
|
||||
return $this->getBool('is_store', false);
|
||||
}
|
||||
|
||||
/** کد معرف در ثبتنام اجباری است (تنظیم referral_id = required) */
|
||||
public function isReferralRequired(): bool
|
||||
{
|
||||
return strtolower(trim($this->getString('referral_id'))) === 'required';
|
||||
}
|
||||
/** کد معرف در ثبتنام اجباری است (referral_id = required) — فقط وقتی فیلد نمایش داده شود */
|
||||
public function isReferralRequired(): bool
|
||||
{
|
||||
if (! $this->getBool('referral_show', true)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return strtolower(trim($this->getString('referral_id'))) === 'required';
|
||||
}
|
||||
|
||||
/** فیلد کد معرف در صفحه ثبتنام اپ کاربر نمایش داده شود */
|
||||
public function isReferralFieldVisible(): bool
|
||||
{
|
||||
return $this->getBool('referral_show', true);
|
||||
}
|
||||
|
||||
public function getInt(string $key, int $default = 0): int
|
||||
{
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
-- =============================================================================
|
||||
-- add_referral_show_setting.sql
|
||||
-- کلید نمایش/عدمنمایش فیلد «کد معرف» در ثبتنام اپ کاربر
|
||||
-- کنار referral_id (کد معرف اجباری) در گروه «معرف و پاداش» پنل ادمین
|
||||
--
|
||||
-- اجرا (DB موجود):
|
||||
-- mysql ... < database/sql/add_referral_show_setting.sql
|
||||
-- یا با deploy کامل:
|
||||
-- mysql ... < database/sql/deploy_settings_const.sql
|
||||
-- =============================================================================
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
|
||||
SELECT
|
||||
'referral_show',
|
||||
'true',
|
||||
'نمایش فیلد کد معرف',
|
||||
1,
|
||||
1,
|
||||
'روشن: فیلد کد معرف در صفحه ثبتنام اپ کاربر نمایش داده میشود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال میشود). اگر خاموش است، «کد معرف اجباری» را هم خاموش کنید مگر بخواهید فقط از لینک دعوت ثبتنام شود.',
|
||||
'switch'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_show' LIMIT 1);
|
||||
|
||||
UPDATE `settings`
|
||||
SET
|
||||
`type` = 'switch',
|
||||
`title_fa` = 'نمایش فیلد کد معرف',
|
||||
`can_edit` = 1,
|
||||
`description` = 'روشن: فیلد کد معرف در صفحه ثبتنام اپ کاربر نمایش داده میشود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال میشود). اگر خاموش است، «کد معرف اجباری» را هم خاموش کنید مگر بخواهید فقط از لینک دعوت ثبتنام شود.'
|
||||
WHERE `key` = 'referral_show';
|
||||
|
||||
UPDATE `settings`
|
||||
SET
|
||||
`description` = 'روشن: وارد کردن کد معرف در ثبتنام اجباری است. خاموش: کد معرف اختیاری است. اگر «نمایش فیلد کد معرف» خاموش باشد، اجباری بودن اعمال نمیشود.'
|
||||
WHERE `key` = 'referral_id';
|
||||
|
||||
COMMIT;
|
||||
|
||||
SELECT 'add_referral_show_setting.sql finished' AS status;
|
||||
@@ -921,6 +921,12 @@ INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `de
|
||||
SELECT 'referral_id', 'required', 'کد معرف اجباری', 1, 1, 'روشن = اجباری در ثبتنام | خاموش = اختیاری', 'switch'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_id' LIMIT 1);
|
||||
|
||||
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
|
||||
SELECT 'referral_show', 'true', 'نمایش فیلد کد معرف', 1, 1,
|
||||
'روشن: فیلد کد معرف در صفحه ثبتنام اپ کاربر نمایش داده میشود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال میشود).',
|
||||
'switch'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_show' LIMIT 1);
|
||||
|
||||
-- fee_single حذف شد — اختلاف فقط buy_fee / sell_fee (خالی = صفر)
|
||||
|
||||
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
|
||||
@@ -1114,6 +1120,7 @@ UPDATE `settings` SET `type` = 'longtext' WHERE `key` IN (
|
||||
UPDATE `settings` SET `type` = 'select', `description` = 'none,pargar,tahesab,zarin' WHERE `key` = 'accounting_provider';
|
||||
UPDATE `settings` SET `type` = 'select', `description` = 'منبع فعال قیمت|montzar,zaarbox,main_product' WHERE `key` = 'price_provider';
|
||||
UPDATE `settings` SET `type` = 'switch', `title_fa` = 'کد معرف اجباری', `description` = 'روشن = اجباری در ثبتنام | خاموش = اختیاری' WHERE `key` = 'referral_id';
|
||||
UPDATE `settings` SET `type` = 'switch', `title_fa` = 'نمایش فیلد کد معرف', `description` = 'روشن: فیلد کد معرف در صفحه ثبتنام اپ کاربر نمایش داده میشود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال میشود).' WHERE `key` = 'referral_show';
|
||||
UPDATE `settings` SET `type` = 'select', `description` = 'sepal,' WHERE `key` = 'payping_gateway_name';
|
||||
UPDATE `settings` SET `type` = 'select', `description` = 'bale,telegram,whatsapp,rubika,eitaa,soroush' WHERE `key` = 'support_messenger';
|
||||
|
||||
@@ -1121,6 +1128,7 @@ UPDATE `settings` SET `type` = 'select', `description` = 'bale,telegram,whatsapp
|
||||
UPDATE `settings` SET `type` = 'switch' WHERE `key` IN (
|
||||
'chart_use_local_data',
|
||||
'jibit_enabled', 'jibit_verification', 'register_jibit_verify', 'open_register', 'auto_active_customer',
|
||||
'referral_show',
|
||||
'close_price', 'show_last_price', 'show_gold_ounce_price', 'show_home_price_when_closed', 'show_product_details',
|
||||
'show_product_trade_status', 'show_product_card_meta',
|
||||
'products_site_link_enabled',
|
||||
@@ -1327,6 +1335,12 @@ UPDATE `settings` SET
|
||||
`description` = 'روشن = اجباری در ثبتنام | خاموش = اختیاری'
|
||||
WHERE `key` = 'referral_id';
|
||||
|
||||
UPDATE `settings` SET
|
||||
`type` = 'switch',
|
||||
`title_fa` = 'نمایش فیلد کد معرف',
|
||||
`description` = 'روشن: فیلد کد معرف در صفحه ثبتنام اپ کاربر نمایش داده میشود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال میشود).'
|
||||
WHERE `key` = 'referral_show';
|
||||
|
||||
UPDATE `settings` SET `type` = 'switch'
|
||||
WHERE `key` IN ('register_referral_sms_to_referrer', 'register_referral_bonus_message', 'referral_gift_on_first_order', 'referral_gift_buy_from_montzar');
|
||||
|
||||
@@ -1509,7 +1523,8 @@ UPDATE `settings` SET `description` = 'تنظیم legacy — از price_provider
|
||||
UPDATE `settings` SET `description` = 'متن کامل قوانین و مقررات استفاده از اپ که در صفحه قوانین به کاربر نشان داده میشود. HTML ساده مجاز است.' WHERE `key` = 'text_rule';
|
||||
UPDATE `settings` SET `description` = 'متن «درباره ما» شامل معرفی مجموعه، راههای ارتباطی و توضیح خدمات. در صفحه مربوطه در اپ کاربر نمایش داده میشود.' WHERE `key` = 'text_about';
|
||||
|
||||
UPDATE `settings` SET `description` = 'روشن: وارد کردن کد معرف در ثبتنام اجباری است. خاموش: کد معرف اختیاری است.' WHERE `key` = 'referral_id';
|
||||
UPDATE `settings` SET `description` = 'روشن: وارد کردن کد معرف در ثبتنام اجباری است. خاموش: کد معرف اختیاری است. اگر «نمایش فیلد کد معرف» خاموش باشد، اجباری بودن اعمال نمیشود.' WHERE `key` = 'referral_id';
|
||||
UPDATE `settings` SET `description` = 'روشن: فیلد کد معرف در صفحه ثبتنام اپ کاربر نمایش داده میشود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال میشود). اگر خاموش است و اجباری روشن باشد، فقط ثبتنام از لینک دعوت ممکن است.' WHERE `key` = 'referral_show';
|
||||
UPDATE `settings` SET `description` = 'مقدار پاداش (گرم) به کیف معرف. ۰ = بدون پاداش. زمان واریز بسته به «پاداش معرف پس از اولین سفارش» است. خرید پوشش از همکار با کلید «خرید پاداش معرفی از همکار» کنترل میشود.' WHERE `key` = 'gift_for_referrer';
|
||||
UPDATE `settings` SET `description` = 'مقدار پاداش (گرم) به معرفشونده. ۰ = بدون پاداش. زمان واریز بسته به «پاداش معرف پس از اولین سفارش» است. خرید پوشش از همکار با کلید «خرید پاداش معرفی از همکار» کنترل میشود.' WHERE `key` = 'gift_for_referral';
|
||||
UPDATE `settings` SET `description` = 'روشن: پس از ثبتنام کاربر جدید، پیامک اطلاعرسانی برای معرف ارسال میشود.' WHERE `key` = 'register_referral_sms_to_referrer';
|
||||
@@ -1818,6 +1833,7 @@ UPDATE `settings` SET `title_fa` = 'API سود طلا' WHERE `key` = 'profit_gol
|
||||
UPDATE `settings` SET `title_fa` = 'مقدار پاداش معرف' WHERE `key` = 'referral_bonus_amount';
|
||||
UPDATE `settings` SET `title_fa` = 'تعداد معرف برای هدیه' WHERE `key` = 'referral_count_for_gift';
|
||||
UPDATE `settings` SET `title_fa` = 'کد معرف اجباری' WHERE `key` = 'referral_id';
|
||||
UPDATE `settings` SET `title_fa` = 'نمایش فیلد کد معرف' WHERE `key` = 'referral_show';
|
||||
UPDATE `settings` SET `title_fa` = 'محدودیت دعوت' WHERE `key` = 'referral_limit';
|
||||
UPDATE `settings` SET `title_fa` = 'تأیید کدملی/موبایل در ثبتنام' WHERE `key` = 'register_jibit_verify';
|
||||
UPDATE `settings` SET `title_fa` = 'پیام پاداش در SMS ثبتنام' WHERE `key` = 'register_referral_bonus_message';
|
||||
@@ -1949,7 +1965,7 @@ UPDATE `settings` SET `can_edit` = 1 WHERE `key` IN (
|
||||
'montzar_mobile', 'montzar_open_buy', 'montzar_open_sell',
|
||||
'montzar_password', 'montzar_product_id',
|
||||
'open_register',
|
||||
'referral_id', 'referral_limit', 'referral_gift_on_first_order', 'referral_gift_buy_from_montzar',
|
||||
'referral_id', 'referral_show', 'referral_limit', 'referral_gift_on_first_order', 'referral_gift_buy_from_montzar',
|
||||
'register_jibit_verify', 'register_referral_bonus_message', 'register_referral_sms_to_referrer',
|
||||
'sell_fee', 'show_last_price', 'show_home_price_when_closed', 'show_gold_ounce_price', 'show_product_details',
|
||||
'show_product_trade_status', 'show_product_card_meta',
|
||||
|
||||
@@ -685,6 +685,12 @@ INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `de
|
||||
SELECT 'referral_id', 'required', 'کد معرف اجباری', 1, 1, 'روشن = اجباری در ثبتنام | خاموش = اختیاری', 'switch'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_id' LIMIT 1);
|
||||
|
||||
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
|
||||
SELECT 'referral_show', 'true', 'نمایش فیلد کد معرف', 1, 1,
|
||||
'روشن: فیلد کد معرف در صفحه ثبتنام اپ کاربر نمایش داده میشود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال میشود).',
|
||||
'switch'
|
||||
WHERE NOT EXISTS (SELECT 1 FROM `settings` WHERE `key` = 'referral_show' LIMIT 1);
|
||||
|
||||
-- fee_single حذف شد — اختلاف فقط buy_fee / sell_fee (خالی = صفر)
|
||||
|
||||
INSERT INTO `settings` (`key`, `value`, `title_fa`, `can_edit`, `is_active`, `description`, `type`)
|
||||
@@ -876,6 +882,7 @@ UPDATE `settings` SET `type` = 'longtext' WHERE `key` IN ('text_rule', 'text_abo
|
||||
-- select (+ گزینهها در description)
|
||||
UPDATE `settings` SET `type` = 'select', `description` = 'منبع فعال قیمت|montzar,zaarbox,main_product' WHERE `key` = 'price_provider';
|
||||
UPDATE `settings` SET `type` = 'switch', `title_fa` = 'کد معرف اجباری', `description` = 'روشن = اجباری در ثبتنام | خاموش = اختیاری' WHERE `key` = 'referral_id';
|
||||
UPDATE `settings` SET `type` = 'switch', `title_fa` = 'نمایش فیلد کد معرف', `description` = 'روشن: فیلد کد معرف در صفحه ثبتنام اپ کاربر نمایش داده میشود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال میشود).' WHERE `key` = 'referral_show';
|
||||
UPDATE `settings` SET `type` = 'select', `description` = 'sepal,' WHERE `key` = 'payping_gateway_name';
|
||||
UPDATE `settings` SET `type` = 'select', `description` = 'bale,telegram,whatsapp,rubika,eitaa,soroush' WHERE `key` = 'support_messenger';
|
||||
|
||||
@@ -883,6 +890,7 @@ UPDATE `settings` SET `type` = 'select', `description` = 'bale,telegram,whatsapp
|
||||
UPDATE `settings` SET `type` = 'switch' WHERE `key` IN (
|
||||
'chart_use_local_data',
|
||||
'jibit_enabled', 'jibit_verification', 'register_jibit_verify', 'open_register', 'auto_active_customer',
|
||||
'referral_show',
|
||||
'close_price', 'show_last_price', 'show_home_price_when_closed', 'show_product_details',
|
||||
'show_product_trade_status', 'show_product_card_meta',
|
||||
'products_site_link_enabled',
|
||||
@@ -1070,6 +1078,12 @@ UPDATE `settings` SET
|
||||
`description` = 'روشن = اجباری در ثبتنام | خاموش = اختیاری'
|
||||
WHERE `key` = 'referral_id';
|
||||
|
||||
UPDATE `settings` SET
|
||||
`type` = 'switch',
|
||||
`title_fa` = 'نمایش فیلد کد معرف',
|
||||
`description` = 'روشن: فیلد کد معرف در صفحه ثبتنام اپ کاربر نمایش داده میشود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال میشود).'
|
||||
WHERE `key` = 'referral_show';
|
||||
|
||||
UPDATE `settings` SET `type` = 'switch'
|
||||
WHERE `key` IN ('register_referral_sms_to_referrer', 'register_referral_bonus_message', 'referral_gift_on_first_order', 'referral_gift_buy_from_montzar');
|
||||
|
||||
@@ -1286,7 +1300,8 @@ UPDATE `settings` SET `description` = 'تنظیم legacy — از price_provider
|
||||
UPDATE `settings` SET `description` = 'متن کامل قوانین و مقررات استفاده از اپ که در صفحه قوانین به کاربر نشان داده میشود. HTML ساده مجاز است.' WHERE `key` = 'text_rule';
|
||||
UPDATE `settings` SET `description` = 'متن «درباره ما» شامل معرفی مجموعه، راههای ارتباطی و توضیح خدمات. در صفحه مربوطه در اپ کاربر نمایش داده میشود.' WHERE `key` = 'text_about';
|
||||
|
||||
UPDATE `settings` SET `description` = 'روشن: وارد کردن کد معرف در ثبتنام اجباری است. خاموش: کد معرف اختیاری است.' WHERE `key` = 'referral_id';
|
||||
UPDATE `settings` SET `description` = 'روشن: وارد کردن کد معرف در ثبتنام اجباری است. خاموش: کد معرف اختیاری است. اگر «نمایش فیلد کد معرف» خاموش باشد، اجباری بودن اعمال نمیشود.' WHERE `key` = 'referral_id';
|
||||
UPDATE `settings` SET `description` = 'روشن: فیلد کد معرف در صفحه ثبتنام اپ کاربر نمایش داده میشود. خاموش: فیلد مخفی است (لینک دعوت با ?id= همچنان اعمال میشود). اگر خاموش است و اجباری روشن باشد، فقط ثبتنام از لینک دعوت ممکن است.' WHERE `key` = 'referral_show';
|
||||
UPDATE `settings` SET `description` = 'مقدار پاداش (گرم) به کیف معرف. ۰ = بدون پاداش. زمان واریز بسته به «پاداش معرف پس از اولین سفارش» است. خرید پوشش از همکار با کلید «خرید پاداش معرفی از همکار» کنترل میشود.' WHERE `key` = 'gift_for_referrer';
|
||||
UPDATE `settings` SET `description` = 'مقدار پاداش (گرم) به معرفشونده. ۰ = بدون پاداش. زمان واریز بسته به «پاداش معرف پس از اولین سفارش» است. خرید پوشش از همکار با کلید «خرید پاداش معرفی از همکار» کنترل میشود.' WHERE `key` = 'gift_for_referral';
|
||||
UPDATE `settings` SET `description` = 'روشن: پس از ثبتنام کاربر جدید، پیامک اطلاعرسانی برای معرف ارسال میشود.' WHERE `key` = 'register_referral_sms_to_referrer';
|
||||
@@ -1496,7 +1511,7 @@ UPDATE `settings` SET `can_edit` = 1 WHERE `key` IN (
|
||||
'montzar_mobile', 'montzar_open_buy', 'montzar_open_sell',
|
||||
'montzar_password', 'montzar_product_id',
|
||||
'open_register',
|
||||
'referral_id', 'referral_limit', 'referral_gift_on_first_order', 'referral_gift_buy_from_montzar',
|
||||
'referral_id', 'referral_show', 'referral_limit', 'referral_gift_on_first_order', 'referral_gift_buy_from_montzar',
|
||||
'register_jibit_verify', 'register_referral_bonus_message', 'register_referral_sms_to_referrer',
|
||||
'sell_fee', 'show_last_price', 'show_home_price_when_closed', 'show_product_details',
|
||||
'show_product_trade_status', 'show_product_card_meta',
|
||||
|
||||
@@ -15,6 +15,7 @@ use App\Services\ConfigService;
|
||||
use App\Http\Controllers\Customer\CartController;
|
||||
use App\Http\Controllers\Admin\CategoryController;
|
||||
use App\Http\Controllers\Chat\SupportChatNotifyController;
|
||||
use App\Http\Controllers\Super\SuperSettingsController;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -27,6 +28,10 @@ use App\Http\Controllers\Chat\SupportChatNotifyController;
|
||||
|
|
||||
*/
|
||||
|
||||
Route::middleware('superadmin.remote')->group(function () {
|
||||
Route::get('/super/settings', [SuperSettingsController::class, 'show']);
|
||||
Route::post('/super/settings', [SuperSettingsController::class, 'update']);
|
||||
});
|
||||
|
||||
Route::get('/candle',[ReportController::class, 'candleChart']);
|
||||
Route::get('/price/up',[ReportController::class, 'upDownPrice']);
|
||||
|
||||
@@ -13,9 +13,15 @@ use App\Mail\YourMailableClass;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Ramsey\Uuid\Uuid;
|
||||
use App\Http\Controllers\pay\PaymanController;
|
||||
use App\Http\Controllers\Super\SuperSettingsController;
|
||||
use App\Models\Message;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
Route::middleware('superadmin.remote')->group(function () {
|
||||
Route::get('/super/settings', [SuperSettingsController::class, 'show']);
|
||||
Route::post('/super/settings', [SuperSettingsController::class, 'update']);
|
||||
});
|
||||
|
||||
// وقتی public/storage symlink نیست یا فایل تازه فقط در storage/app/public است
|
||||
Route::get('storage/{path}', [PublicStorageController::class, 'show'])
|
||||
->where('path', '.*');
|
||||
|
||||
Reference in New Issue
Block a user