diff --git a/app/Models/User.php b/app/Models/User.php index 50b10dd..fd9706d 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -3,6 +3,8 @@ namespace App\Models; use Database\Factories\UserFactory; +use Filament\Models\Contracts\FilamentUser; +use Filament\Panel; use Illuminate\Database\Eloquent\Attributes\Fillable; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -12,7 +14,7 @@ use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Spatie\Permission\Traits\HasRoles; -class User extends Authenticatable +class User extends Authenticatable implements FilamentUser { /** @use HasFactory */ use HasFactory, Notifiable, HasRoles; @@ -51,6 +53,11 @@ class User extends Authenticatable return $this->hasMany(CashRecord::class, 'created_by'); } + public function canAccessPanel(Panel $panel): bool + { + return true; + } + public function canImpersonate(): bool { return $this->hasRole('super_admin'); diff --git a/app/Models/Vote.php b/app/Models/Vote.php index 5fc6865..0a255a3 100644 --- a/app/Models/Vote.php +++ b/app/Models/Vote.php @@ -17,6 +17,13 @@ class Vote extends Model 'deadline' => 'datetime', ]; + protected static function booted(): void + { + static::creating(function (Vote $vote) { + $vote->created_by ??= auth()->id(); + }); + } + public function creator(): BelongsTo { return $this->belongsTo(User::class, 'created_by'); diff --git a/app/Observers/CashRecordObserver.php b/app/Observers/CashRecordObserver.php index a3155c1..0302af8 100644 --- a/app/Observers/CashRecordObserver.php +++ b/app/Observers/CashRecordObserver.php @@ -47,7 +47,7 @@ class CashRecordObserver 'related_id' => $record->id, 'status' => 'open', 'deadline' => now()->addDays(3), - 'created_by' => Auth::id(), + 'created_by' => Auth::id() ?? $record->created_by, ]); NotificationService::toRole('ketua', diff --git a/app/Observers/VoteObserver.php b/app/Observers/VoteObserver.php new file mode 100644 index 0000000..7bd77b1 --- /dev/null +++ b/app/Observers/VoteObserver.php @@ -0,0 +1,19 @@ +title}\" telah dibuka. Silakan berikan suara Anda.", + 'info', + route('filament.admin.resources.votes.index') + ); + } +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 5cb7c03..7a4cc68 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -5,9 +5,11 @@ namespace App\Providers; use App\Models\Activity; use App\Models\CashRecord; use App\Models\User; +use App\Models\Vote; use App\Observers\ActivityObserver; use App\Observers\CashRecordObserver; use App\Observers\UserObserver; +use App\Observers\VoteObserver; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider @@ -17,5 +19,6 @@ class AppServiceProvider extends ServiceProvider User::observe(UserObserver::class); CashRecord::observe(CashRecordObserver::class); Activity::observe(ActivityObserver::class); + Vote::observe(VoteObserver::class); } } diff --git a/app/Services/NotificationService.php b/app/Services/NotificationService.php index ee6f122..93fc9d0 100644 --- a/app/Services/NotificationService.php +++ b/app/Services/NotificationService.php @@ -33,4 +33,9 @@ class NotificationService if ($users->isEmpty()) return; self::send($users, $title, $body, $color, $url); } + + public static function toAll(string $title, string $body, string $color = 'info', ?string $url = null): void + { + self::send(User::all(), $title, $body, $color, $url); + } } diff --git a/artisan b/artisan old mode 100755 new mode 100644 diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore old mode 100644 new mode 100755 diff --git a/composer.lock b/composer.lock index 0374d3d..e04098b 100644 --- a/composer.lock +++ b/composer.lock @@ -3338,16 +3338,16 @@ }, { "name": "livewire/livewire", - "version": "v4.2.3", + "version": "v4.2.4", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "d07bcb6fd04037a90ca5187b7857c7349a8e6d1e" + "reference": "7d0bfa46269b1ec186b8cdd38baffee5cc647d10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/d07bcb6fd04037a90ca5187b7857c7349a8e6d1e", - "reference": "d07bcb6fd04037a90ca5187b7857c7349a8e6d1e", + "url": "https://api.github.com/repos/livewire/livewire/zipball/7d0bfa46269b1ec186b8cdd38baffee5cc647d10", + "reference": "7d0bfa46269b1ec186b8cdd38baffee5cc647d10", "shasum": "" }, "require": { @@ -3402,7 +3402,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v4.2.3" + "source": "https://github.com/livewire/livewire/tree/v4.2.4" }, "funding": [ { @@ -3410,7 +3410,7 @@ "type": "github" } ], - "time": "2026-03-30T22:17:37+00:00" + "time": "2026-04-02T20:48:35+00:00" }, { "name": "monolog/monolog", diff --git a/public/info.php b/public/info.php new file mode 100644 index 0000000..c4837a3 --- /dev/null +++ b/public/info.php @@ -0,0 +1 @@ +