From 2bd7b206a6e536d2f13435457857f4efd2eceea3 Mon Sep 17 00:00:00 2001 From: GuavaPopper Date: Fri, 5 Jun 2026 04:25:58 +0700 Subject: [PATCH] =?UTF-8?q?feat:=20add=20system=20configuration=20(A-03)?= =?UTF-8?q?=20=E2=80=94=20map=20center,=20zoom,=20radius=20min/max?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- app/Http/Controllers/SettingController.php | 28 ++++ app/Models/Setting.php | 29 ++++ app/Providers/AppServiceProvider.php | 21 ++- ...026_06_05_000000_create_settings_table.php | 39 +++++ resources/views/admin/logs.blade.php | 1 + resources/views/admin/settings.blade.php | 133 ++++++++++++++++++ resources/views/admin/users.blade.php | 5 + resources/views/dashboard.blade.php | 5 + resources/views/data.blade.php | 5 + resources/views/map.blade.php | 16 ++- routes/web.php | 9 +- 11 files changed, 275 insertions(+), 16 deletions(-) create mode 100644 app/Http/Controllers/SettingController.php create mode 100644 app/Models/Setting.php create mode 100644 database/migrations/2026_06_05_000000_create_settings_table.php create mode 100644 resources/views/admin/settings.blade.php diff --git a/app/Http/Controllers/SettingController.php b/app/Http/Controllers/SettingController.php new file mode 100644 index 0000000..5c887b6 --- /dev/null +++ b/app/Http/Controllers/SettingController.php @@ -0,0 +1,28 @@ +json(Setting::orderBy('id')->get(['key', 'value', 'label'])); + } + + public function update(Request $request, string $key) + { + $setting = Setting::where('key', $key)->firstOrFail(); + + $request->validate(['value' => 'required|string|max:255']); + + Setting::set($key, $request->value); + + ActivityLog::record('update', "Mengubah konfigurasi: {$setting->label} → {$request->value}", 'setting', $key); + + return response()->json(['success' => true]); + } +} diff --git a/app/Models/Setting.php b/app/Models/Setting.php new file mode 100644 index 0000000..cb96fba --- /dev/null +++ b/app/Models/Setting.php @@ -0,0 +1,29 @@ +toArray(); + }); + } + + public static function get(string $key, mixed $default = null): mixed + { + return static::getAll()[$key] ?? $default; + } + + public static function set(string $key, string $value): void + { + static::where('key', $key)->update(['value' => $value]); + Cache::forget('app_settings'); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 452e6b6..f462d43 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,23 +2,22 @@ namespace App\Providers; +use App\Models\Setting; +use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { - /** - * Register any application services. - */ - public function register(): void - { - // - } + public function register(): void {} - /** - * Bootstrap any application services. - */ public function boot(): void { - // + View::composer('*', function ($view) { + try { + $view->with('appSettings', Setting::getAll()); + } catch (\Throwable) { + $view->with('appSettings', []); + } + }); } } diff --git a/database/migrations/2026_06_05_000000_create_settings_table.php b/database/migrations/2026_06_05_000000_create_settings_table.php new file mode 100644 index 0000000..5946983 --- /dev/null +++ b/database/migrations/2026_06_05_000000_create_settings_table.php @@ -0,0 +1,39 @@ +id(); + $table->string('key')->unique(); + $table->string('value'); + $table->string('label'); + $table->timestamps(); + }); + + // Default values + $defaults = [ + ['key' => 'map_center_lat', 'value' => '-0.0553', 'label' => 'Pusat Peta — Latitude'], + ['key' => 'map_center_lng', 'value' => '109.3463', 'label' => 'Pusat Peta — Longitude'], + ['key' => 'map_default_zoom', 'value' => '17', 'label' => 'Zoom Default Peta'], + ['key' => 'radius_min', 'value' => '50', 'label' => 'Radius Minimum (meter)'], + ['key' => 'radius_max', 'value' => '2000', 'label' => 'Radius Maksimum (meter)'], + ]; + + foreach ($defaults as $row) { + \DB::table('settings')->insert(array_merge($row, [ + 'created_at' => now(), + 'updated_at' => now(), + ])); + } + } + + public function down(): void + { + Schema::dropIfExists('settings'); + } +}; diff --git a/resources/views/admin/logs.blade.php b/resources/views/admin/logs.blade.php index 53f0915..8918b3c 100644 --- a/resources/views/admin/logs.blade.php +++ b/resources/views/admin/logs.blade.php @@ -30,6 +30,7 @@
  • Dashboard
  • Admin
  • Log
  • +
  • Pengaturan