From 7e9d841856845d77a937c70192c4519627617908 Mon Sep 17 00:00:00 2001 From: salam Date: Fri, 13 Feb 2026 07:38:17 +0100 Subject: [PATCH] useract wip --- .../Resources/Clients/ClientResource.php | 2 +- .../Pages/CreateUserActivity.php | 11 +++++ .../UserActivities/Pages/EditUserActivity.php | 19 +++++++ .../Pages/ListUserActivities.php | 11 +++++ .../Schemas/UserActivityForm.php | 16 ++++++ .../Tables/UserActivitiesTable.php | 25 ++++++++++ .../UserActivities/UserActivityResource.php | 49 +++++++++++++++++++ app/Filament/Tables/Columns/ColumnOdds.php | 18 +++---- app/Http/Middleware/RecordUserActivity.php | 10 ++-- app/Models/UserActivity.php | 12 ++++- app/Providers/Filament/AdminPanelProvider.php | 4 ++ ...11_171641_create_user_activities_table.php | 1 + resources/css/filament/admin/theme.css | 4 ++ .../views/components/alarm-neutral.blade.php | 3 +- .../events/widgets/alarm-widget.blade.php | 2 +- .../tables/columns/column-odds.blade.php | 18 +++---- .../multiline-client-partner.blade.php | 4 +- .../multiline/multiline-partner.blade.php | 8 +-- .../multiline/multilines-slots.blade.php | 28 ++++------- 19 files changed, 194 insertions(+), 51 deletions(-) create mode 100644 app/Filament/Resources/UserActivities/Pages/CreateUserActivity.php create mode 100644 app/Filament/Resources/UserActivities/Pages/EditUserActivity.php create mode 100644 app/Filament/Resources/UserActivities/Pages/ListUserActivities.php create mode 100644 app/Filament/Resources/UserActivities/Schemas/UserActivityForm.php create mode 100644 app/Filament/Resources/UserActivities/Tables/UserActivitiesTable.php create mode 100644 app/Filament/Resources/UserActivities/UserActivityResource.php diff --git a/app/Filament/Resources/Clients/ClientResource.php b/app/Filament/Resources/Clients/ClientResource.php index f53d567e..9b4cf871 100644 --- a/app/Filament/Resources/Clients/ClientResource.php +++ b/app/Filament/Resources/Clients/ClientResource.php @@ -15,7 +15,7 @@ class ClientResource extends Resource { protected static ?string $model = Client::class; - protected static ?int $navigationSort = 32; + protected static ?int $navigationSort = 33; protected static string|\BackedEnum|null $navigationIcon = 'phosphor-baseball-helmet'; diff --git a/app/Filament/Resources/UserActivities/Pages/CreateUserActivity.php b/app/Filament/Resources/UserActivities/Pages/CreateUserActivity.php new file mode 100644 index 00000000..2f1b04f1 --- /dev/null +++ b/app/Filament/Resources/UserActivities/Pages/CreateUserActivity.php @@ -0,0 +1,11 @@ +components([ + // + ]); + } +} diff --git a/app/Filament/Resources/UserActivities/Tables/UserActivitiesTable.php b/app/Filament/Resources/UserActivities/Tables/UserActivitiesTable.php new file mode 100644 index 00000000..dc9f52f7 --- /dev/null +++ b/app/Filament/Resources/UserActivities/Tables/UserActivitiesTable.php @@ -0,0 +1,25 @@ +columns([ + TextColumn::make('user.name'), + TextColumn::make('ip'), + TextColumn::make('country'), + TextColumn::make('location'), + TextColumn::make('created_at')->dateTime('M j, Y H:i'), + ]) + ->defaultSort('created_at', 'desc') + ->filters([ + // + ]); + } +} diff --git a/app/Filament/Resources/UserActivities/UserActivityResource.php b/app/Filament/Resources/UserActivities/UserActivityResource.php new file mode 100644 index 00000000..cc827325 --- /dev/null +++ b/app/Filament/Resources/UserActivities/UserActivityResource.php @@ -0,0 +1,49 @@ + ListUserActivities::route('/'), + ]; + } + + public static function getNavigationBadge(): ?string + { + return parent::getEloquentQuery()->count(); + } +} diff --git a/app/Filament/Tables/Columns/ColumnOdds.php b/app/Filament/Tables/Columns/ColumnOdds.php index 61d7efd4..364532e0 100644 --- a/app/Filament/Tables/Columns/ColumnOdds.php +++ b/app/Filament/Tables/Columns/ColumnOdds.php @@ -18,6 +18,8 @@ class ColumnOdds extends Column public $slots; + public $empty_slots_icons; + public $bookmaker; protected $max; @@ -40,8 +42,6 @@ class ColumnOdds extends Column public $partner; - public $partner_icon; - protected ?array $odds_labels; protected bool $state = true; @@ -68,8 +68,6 @@ class ColumnOdds extends Column return; } - $this->setPartnerIcon(); - $this->setSlots(); $this->has_data = count($this->data); @@ -131,11 +129,6 @@ class ColumnOdds extends Column return $this->columns; } - public function getPartnerBookmakerIcon() - { - return $this->partner_icon; - } - public function getSlots() { if (auth()->user()->is_multiline_direct) { @@ -465,6 +458,11 @@ class ColumnOdds extends Column }); } + public function getBookmakerIcon($bookmaker_id) + { + return $this->empty_slots_icons[$bookmaker_id]; + } + public function setPartnerIcon() { $this->partner_icon = Bookmaker::where('id', auth()->user()->partner_bookmaker_id)->value('icon'); @@ -474,6 +472,8 @@ class ColumnOdds extends Column { $this->slots = EventsTable::$slots[$this->bettype]; + $this->empty_slots_icons = Bookmaker::pluck('icon', 'id')->all(); + $this->bookmaker = EventsTable::$bookmaker[$this->bettype]; $this->filter = EventsTable::$filter[$this->bettype]; diff --git a/app/Http/Middleware/RecordUserActivity.php b/app/Http/Middleware/RecordUserActivity.php index a8f8dc1f..868d2fe8 100644 --- a/app/Http/Middleware/RecordUserActivity.php +++ b/app/Http/Middleware/RecordUserActivity.php @@ -1,6 +1,6 @@ ip(); + $whoIsIp = '178.165.190.98'; $position = Location::get($whoIsIp); + $session_id = session()->getId(); - dd($position); - + // dd($position); // Perform action if (Auth::id() !== null) { UserActivity::create([ 'url' => config('app.url').'/'.$request->path(), 'user_id' => Auth::id(), + 'session_id' => $session_id, 'ip' => $whoIsIp, 'country' => $position->countryName, - 'location' => $position->countryName, + 'location' => $position->cityName, ]); } diff --git a/app/Models/UserActivity.php b/app/Models/UserActivity.php index 46e06f74..b5906b14 100644 --- a/app/Models/UserActivity.php +++ b/app/Models/UserActivity.php @@ -7,10 +7,20 @@ use Illuminate\Database\Eloquent\Model; class UserActivity extends Model { protected $fillable = [ - 'user_id', 'url', + 'user_id', + 'url', + 'session_id', + 'ip', + 'country', + 'location', ]; protected $casts = [ 'created_at' => 'datetime', ]; + + public function user() + { + return $this->belongsTo(User::class); + } } diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 7dfff724..cefa5156 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -3,6 +3,7 @@ namespace App\Providers\Filament; use Agencetwogether\HooksHelper\HooksHelperPlugin; +use App\Http\Middleware\RecordUserActivity; use Awcodes\LightSwitch\Enums\Alignment; use Awcodes\LightSwitch\LightSwitchPlugin; use BezhanSalleh\FilamentShield\FilamentShieldPlugin; @@ -38,6 +39,9 @@ class AdminPanelProvider extends PanelProvider { return $panel ->id('admin') + ->middleware([ + RecordUserActivity::class, + ]) ->path('') ->login() ->passwordReset(RequestPasswordReset::class) diff --git a/database/migrations/2026_02_11_171641_create_user_activities_table.php b/database/migrations/2026_02_11_171641_create_user_activities_table.php index 73b276dc..4ef85e03 100644 --- a/database/migrations/2026_02_11_171641_create_user_activities_table.php +++ b/database/migrations/2026_02_11_171641_create_user_activities_table.php @@ -15,6 +15,7 @@ return new class extends Migration $table->id(); $table->unsignedInteger('user_id')->nullable(); + $table->string('session_id'); $table->string('url'); $table->string('ip'); $table->string('country'); diff --git a/resources/css/filament/admin/theme.css b/resources/css/filament/admin/theme.css index e4fb46fd..3a703f1a 100644 --- a/resources/css/filament/admin/theme.css +++ b/resources/css/filament/admin/theme.css @@ -8,6 +8,10 @@ @source '../../../../vendor/guava/filament-modal-relation-managers/resources/**/*'; @source '../../../../vendor/jaocero/radio-deck/resources/views'; +.fi-ta-header-toolbar, +.fi-ta-filters-above-content-ctn { + @apply pt-0 +} /* Reduce gap between widgets and content */ .fi-page-content { diff --git a/resources/views/components/alarm-neutral.blade.php b/resources/views/components/alarm-neutral.blade.php index 10abcea0..4bdaf361 100644 --- a/resources/views/components/alarm-neutral.blade.php +++ b/resources/views/components/alarm-neutral.blade.php @@ -1,4 +1,5 @@
+ class="text-gray-400 bg-gray-50 border border-gray-300 dark:text-primary-500 dark:!border-gray-800 dark:bg-gray-900 rounded"> + {{ $slot }}
diff --git a/resources/views/filament/resources/events/widgets/alarm-widget.blade.php b/resources/views/filament/resources/events/widgets/alarm-widget.blade.php index b667805e..2508a00d 100644 --- a/resources/views/filament/resources/events/widgets/alarm-widget.blade.php +++ b/resources/views/filament/resources/events/widgets/alarm-widget.blade.php @@ -1,5 +1,5 @@
+ class="grid grid-cols-4 text-xs gap-1 p-1 text-gray-400 dark:text-primary-500 border rounded border-gray-200 dark:border-gray-800 bg-gray-100 dark:bg-gray-900 text-center shadow">
{{ $title }}
@if ($red) diff --git a/resources/views/filament/tables/columns/column-odds.blade.php b/resources/views/filament/tables/columns/column-odds.blade.php index 9f5980f5..0215cde6 100644 --- a/resources/views/filament/tables/columns/column-odds.blade.php +++ b/resources/views/filament/tables/columns/column-odds.blade.php @@ -14,19 +14,19 @@ @if ($getColumns() == 2)
@else -
+
@endif - @include('filament.tables.columns.multiline.label', ['labels' => $label]) + @include('filament.tables.columns.multiline.label', ['labels' => $label])
@if ($getColumns() == 2) -
+
@else -
+
@endif - - @if(auth()->user()->partner_show == 1) + + @if (auth()->user()->partner_show == 1) @include('filament.tables.columns.multiline.multiline-client-partner') @include('filament.tables.columns.multiline.multiline-partner') @else @@ -34,15 +34,15 @@ @include('filament.tables.columns.multiline.multiline-compare') @endif - +
@if ($getColumns() == 2)
- @else -
+ @else +
@endif @if (auth()->user()->is_multiline_direct) diff --git a/resources/views/filament/tables/columns/multiline/multiline-client-partner.blade.php b/resources/views/filament/tables/columns/multiline/multiline-client-partner.blade.php index d9e74781..da2ce073 100644 --- a/resources/views/filament/tables/columns/multiline/multiline-client-partner.blade.php +++ b/resources/views/filament/tables/columns/multiline/multiline-client-partner.blade.php @@ -233,10 +233,10 @@ 'd' => 1, ]) @else - {{-- @include('filament.tables.columns.multiline.bkm', [ + @include('filament.tables.columns.multiline.bkm', [ 'bookmaker_id' => auth()->user()->bookmaker_id, 'icon' => auth()->user()->bookmaker->icon ?? '', - ]) --}} + ])
 
diff --git a/resources/views/filament/tables/columns/multiline/multiline-partner.blade.php b/resources/views/filament/tables/columns/multiline/multiline-partner.blade.php index c3894abd..0eb3fb4d 100644 --- a/resources/views/filament/tables/columns/multiline/multiline-partner.blade.php +++ b/resources/views/filament/tables/columns/multiline/multiline-partner.blade.php @@ -233,10 +233,10 @@ 'd' => 1, ]) @else - {{-- @include('filament.tables.columns.multiline.bkm', [ - 'bookmaker_id' => auth()->user()->bookmaker_id, - 'icon' => auth()->user()->bookmaker->icon ?? '', - ]) --}} + @include('filament.tables.columns.multiline.bkm', [ + 'bookmaker_id' => auth()->user()->partner_bookmaker_id, + 'icon' => $getBookmakerIcon(auth()->user()->partner_bookmaker_id), + ])
 
diff --git a/resources/views/filament/tables/columns/multiline/multilines-slots.blade.php b/resources/views/filament/tables/columns/multiline/multilines-slots.blade.php index d2546195..8924c510 100644 --- a/resources/views/filament/tables/columns/multiline/multilines-slots.blade.php +++ b/resources/views/filament/tables/columns/multiline/multilines-slots.blade.php @@ -1,7 +1,4 @@ - - @foreach ($slots as $slot) - @php $taken = false; $compare_bookmaker_id = $getCompareBookmaker(); @@ -9,14 +6,13 @@ @endphp @foreach ($multilines as $multiline) - @if ($multiline->bookmaker_id == $slot) @php $taken = true; $favorit = 0; - $compared = $compare_bookmaker_id == $multiline->bookmaker_id ? 1 :0; - if($compared){ - $favorit = min($client?->h3w,$client?->d3w,$client?->a3w); + $compared = $compare_bookmaker_id == $multiline->bookmaker_id ? 1 : 0; + if ($compared) { + $favorit = min($client?->h3w, $client?->d3w, $client?->a3w); } @endphp @@ -26,7 +22,6 @@ ]) @switch ($getBettype()) - @case ('odds_2ways') @include('filament.tables.columns.multiline.odd-slots', [ 'odd' => $multiline->h2w, @@ -43,7 +38,6 @@ 'd' => 2, ]) @break; - @case ('odds_tq') @include('filament.tables.columns.multiline.odd', [ 'odd' => $multiline->htq, @@ -56,7 +50,6 @@ 'd' => 2, ]) @break; - @case ('odds_2ways_s1') @include('filament.tables.columns.multiline.odd', [ 'odd' => $multiline->h2w, @@ -69,7 +62,6 @@ 'd' => 2, ]) @break; - @case ('odds_3ways') @include('filament.tables.columns.multiline.odd-slots', [ 'odd' => $multiline?->h3w, @@ -93,7 +85,6 @@ 'd' => 2, ]) @break; - @case ('odds_3ways_ht') @include('filament.tables.columns.multiline.odd', [ 'odd' => $multiline->h3w, @@ -173,7 +164,6 @@ 'd' => 1, ]) @break; - @case ('odds_points_ht') @case ('odds_points_q1') @@ -193,7 +183,6 @@ 'd' => 1, ]) @break; - @case ('odds_totals') @case ('odds_totals_ht') @@ -227,15 +216,16 @@ @endif @endforeach - @if(!$taken) -
 
+ @if (!$taken) + @include('filament.tables.columns.multiline.bkm', [ + 'bookmaker_id' => $slot, + 'icon' => $getBookmakerIcon($slot), + ])
@if ($getColumns() == 3) -
+
@endif @endif - - @endforeach