dashboard in better style
This commit is contained in:
@@ -5,54 +5,106 @@ namespace App\Http\Controllers\Admin;
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Models\Setting;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
|
||||
class SettingsController extends Controller
|
||||
{
|
||||
private const DEPLOY_ADMIN_MOBILE_SUFFIX = '9128081392';
|
||||
|
||||
private const NEW_SETTING_NOTIFY_MOBILE = '09134469985';
|
||||
|
||||
public function index(Request $request)
|
||||
{
|
||||
$query = Setting::query()
|
||||
->select(Setting::adminSelectColumns())
|
||||
->orderBy('key');
|
||||
|
||||
if (!$request->boolean('editable_only')) {
|
||||
return response()->json($query->get());
|
||||
if ($request->boolean('system_only')) {
|
||||
return response()->json(
|
||||
$query
|
||||
->where(function ($q) {
|
||||
$q->where('can_edit', 0)->orWhere('can_edit', false);
|
||||
})
|
||||
->where(function ($q) {
|
||||
$q->where('is_active', 1)
|
||||
->orWhere('is_active', true)
|
||||
->orWhere('is_active', '1');
|
||||
})
|
||||
->get()
|
||||
);
|
||||
}
|
||||
|
||||
return response()->json($query->where('can_edit', 1)->get());
|
||||
if ($request->boolean('editable_only')) {
|
||||
return response()->json($query->where('can_edit', 1)->get());
|
||||
}
|
||||
|
||||
return response()->json($query->get());
|
||||
}
|
||||
|
||||
public function edit(Request $request)
|
||||
{
|
||||
// Check if the setting exists
|
||||
$isDeployAdmin = $this->isDeployAdminUser();
|
||||
$isSystemDeploy = $request->boolean('system_deploy');
|
||||
$setting = Setting::where('key', $request->key)->first();
|
||||
$isNew = !$setting;
|
||||
|
||||
if ($setting) {
|
||||
$setting->value = $request->value;
|
||||
$setting->description = $request->description;
|
||||
if ($request->has('is_active')) {
|
||||
$setting->is_active = filter_var($request->is_active, FILTER_VALIDATE_BOOLEAN) ? 1 : 0;
|
||||
if ($isNew) {
|
||||
if ($isSystemDeploy && !$isDeployAdmin) {
|
||||
return response()->json(['message' => 'Unauthorized'], 403);
|
||||
}
|
||||
$setting->title_fa = $request->title_fa ?? '';
|
||||
if (Setting::hasTypeColumn()) {
|
||||
$setting->type = $request->type ?? '';
|
||||
}
|
||||
$setting->save();
|
||||
} else {
|
||||
|
||||
$setting = new Setting();
|
||||
$setting->key = $request->key;
|
||||
$setting->title_fa = $request->title_fa ?? '';
|
||||
$setting->value = $request->value;
|
||||
$setting->description = $request->description;
|
||||
$setting->is_active = filter_var($request->is_active ?? true, FILTER_VALIDATE_BOOLEAN) ? 1 : 0;
|
||||
$setting->can_edit = 1;
|
||||
if (Setting::hasTypeColumn()) {
|
||||
$setting->type = $request->type ?? '';
|
||||
}
|
||||
$setting->save();
|
||||
$setting->can_edit = $isSystemDeploy ? 0 : 1;
|
||||
} elseif (!$setting->can_edit && !$isDeployAdmin) {
|
||||
return response()->json(['message' => 'Forbidden'], 403);
|
||||
}
|
||||
|
||||
$setting->value = $request->value;
|
||||
$setting->description = $request->description;
|
||||
if ($request->has('is_active')) {
|
||||
$setting->is_active = filter_var($request->is_active, FILTER_VALIDATE_BOOLEAN) ? 1 : 0;
|
||||
} elseif ($isNew) {
|
||||
$setting->is_active = 1;
|
||||
}
|
||||
$setting->title_fa = $request->title_fa ?? '';
|
||||
if (Setting::hasTypeColumn()) {
|
||||
$setting->type = $request->type ?? '';
|
||||
}
|
||||
$setting->save();
|
||||
|
||||
if ($isNew && $isSystemDeploy) {
|
||||
$projectName = Setting::where('key', 'name_fa')->value('value') ?: 'پروژه';
|
||||
$settingTitle = trim($request->title_fa ?? '') ?: $request->key;
|
||||
$this->Send(
|
||||
self::NEW_SETTING_NOTIFY_MOBILE,
|
||||
"تنظیم جدید: {$settingTitle}\nپروژه: {$projectName}",
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
// Return the setting as a JSON response
|
||||
return response()->json($setting);
|
||||
}
|
||||
|
||||
private function normalizeAdminMobile(?string $mobile): string
|
||||
{
|
||||
$digits = preg_replace('/\D+/', '', (string) $mobile) ?? '';
|
||||
if (str_starts_with($digits, '98') && strlen($digits) >= 12) {
|
||||
$digits = substr($digits, 2);
|
||||
}
|
||||
if (strlen($digits) === 11 && str_starts_with($digits, '0')) {
|
||||
$digits = substr($digits, 1);
|
||||
}
|
||||
|
||||
return $digits;
|
||||
}
|
||||
|
||||
private function isDeployAdminUser(): bool
|
||||
{
|
||||
$user = auth('user')->user() ?? auth()->user();
|
||||
if (!$user) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->normalizeAdminMobile($user->mobile ?? '') === self::DEPLOY_ADMIN_MOBILE_SUFFIX;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user