changes to grapper wip

This commit is contained in:
salam committed 2026-06-24 15:56:43 +02:00
1 parent 361e5ed3ed
commit 9214da8a15
9 files changed
+445 -201

No files matched your search

+22 -8
View File
@@ -3,6 +3,7 @@
namespace App\Console\Commands\Grapper; namespace App\Console\Commands\Grapper;
use App\Console\Commands\Grapper\Sofascore\Events; use App\Console\Commands\Grapper\Sofascore\Events;
use App\Console\Commands\Grapper\Sofascore\EventsDatabase;
use App\Console\Commands\Grapper\Sofascore\Special; use App\Console\Commands\Grapper\Sofascore\Special;
use App\Console\Commands\Grapper\Sofascore\Tournament; use App\Console\Commands\Grapper\Sofascore\Tournament;
use App\Console\Commands\Nuh; use App\Console\Commands\Nuh;
@@ -17,8 +18,11 @@ use Illuminate\Support\Carbon;
class Sofascore class Sofascore
{ {
public static $auth_header = []; public static $auth_header = [];
public static $base_url = ''; public static $base_url = '';
public static $_days = []; public static $_days = [];
public static $sport = [1]; public static $sport = [1];
public static function switch() public static function switch()
@@ -35,13 +39,14 @@ class Sofascore
if (Nuh::$options['t']) { if (Nuh::$options['t']) {
self::$_days[] = Carbon::now()->format('Y-m-d'); self::$_days[] = Carbon::now()->format('Y-m-d');
} else if (Nuh::$options['day']) { } elseif (Nuh::$options['day']) {
if (self::validateDate(Nuh::$options['day'])) { $day = self::validateDate(Nuh::$options['day']);
self::$_days[] = Nuh::$options['day']; if ($day) {
self::$_days[] = $day;
} else { } else {
Notice::note('date not valid ' . Nuh::$options['day'], 'r', 1); Notice::note('date not valid '.Nuh::$options['day'], 'r', 1);
} }
} else if (Nuh::$options['days']) { } elseif (Nuh::$options['days']) {
$to = Carbon::now()->subDays(Nuh::$options['days']); $to = Carbon::now()->subDays(Nuh::$options['days']);
$from = Carbon::now()->subDay(); $from = Carbon::now()->subDay();
while ($from >= $to) { while ($from >= $to) {
@@ -51,9 +56,9 @@ class Sofascore
} }
if ($debug) { if ($debug) {
Notice::note(Nuh::$options['sport'] . ' ' . Nuh::$options['name'], 'bb'); Notice::note(Nuh::$options['sport'].' '.Nuh::$options['name'], 'bb');
} }
switch (Nuh::$options['name']) { switch (Nuh::$options['name']) {
case 'TOURNAMENTS': case 'TOURNAMENTS':
Tournament::load(); Tournament::load();
@@ -61,6 +66,9 @@ class Sofascore
case 'EVENTS': case 'EVENTS':
Events::load(); Events::load();
break; break;
case 'EVENTSDB':
EventsDatabase::load();
break;
case 'SPECIAL': case 'SPECIAL':
Special::load(); Special::load();
break; break;
@@ -73,7 +81,13 @@ class Sofascore
public static function validateDate($date, $format = 'Y-m-d') public static function validateDate($date, $format = 'Y-m-d')
{ {
if (is_numeric($date)) {
$date = date('Y').'-'.date('m').'-'.$date;
}
$d = DateTime::createFromFormat($format, $date); $d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
if ($d && $d->format($format) == $date) {
return $d->format($format);
}
} }
} }
@@ -1,2 +1 @@
/grapped /grapped
/worldcup-teams
@@ -2,7 +2,6 @@
namespace App\Console\Commands\Grapper\Sofascore; namespace App\Console\Commands\Grapper\Sofascore;
use App\Console\Commands\Grapper\Sofascore;
use App\Console\Commands\Nuh; use App\Console\Commands\Nuh;
use App\Models\SofaScoreDayTournament; use App\Models\SofaScoreDayTournament;
use App\Utilities\Notice; use App\Utilities\Notice;
@@ -18,20 +17,20 @@ class Events
$debug = Nuh::$options['d'] ?? 0; $debug = Nuh::$options['d'] ?? 0;
$print = Nuh::$options['p'] ?? 0; $print = Nuh::$options['p'] ?? 0;
$sport_id = Nuh::$options['sport_id']; $sport_id = Nuh::$options['sport_id'];
$dback = Nuh::$options['days'] ?? 1; $dback = Nuh::$options['days'] ?? 1;
$singleday = Nuh::$options['day'] ?? 0; $singleday = Nuh::$options['day'] ?? 0;
if($singleday){ if ($singleday) {
$dback = 1; $dback = 1;
} }
if($print){ if ($print) {
for ($i = 1; $i <= $dback; $i++) { for ($i = 1; $i <= $dback; $i++) {
$day = Carbon::now()->subDays($i)->format('Y-m-d'); $day = Carbon::now()->subDays($i)->format('Y-m-d');
if ($debug) { if ($debug) {
Notice::note($day, 'p'); Notice::note($day, 'p');
} }
if(Nuh::$options['groups']){ if (Nuh::$options['groups']) {
$tornaments = explode(',', Nuh::$options['groups']) ?? 0; $tornaments = explode(',', Nuh::$options['groups']) ?? 0;
$ss_days = SofaScoreDayTournament::with('tournament') $ss_days = SofaScoreDayTournament::with('tournament')
->when($tornaments, function ($query) use ($tornaments) { ->when($tornaments, function ($query) use ($tornaments) {
@@ -52,38 +51,22 @@ class Events
* finland veikkaus => 41 * finland veikkaus => 41
*/ */
$tornaments = explode(',', Nuh::$options['groups']) ?? 0; $tornaments = explode(',', Nuh::$options['groups']) ?? 0;
if (array_sum($tornaments)) {
if ($debug) {
// for ($i = 1; $i <= $dback; $i++) { Notice::note('groups and day(s) used from comandline', 'p');
// // remove one day to start yesterday }
// $day = Carbon::now()->subDays($i)->format('Y-m-d'); if (! Nuh::$options['days'] or ! Nuh::$options['day']) {
// if ($debug) { Notice::note('no day(s) option in comandline (--day=1)', 'r', 1);
// Notice::note($day, 'p'); }
// } }
// $ss_days = SofaScoreDayTournament::with('tournament')
// ->when($tornaments, function ($query) use ($tornaments) {
// return $query->whereIn('tournament_id', $tornaments);
// })
// ->whereHas('tournament', function ($query) use ($sport_id) {
// $query->where('sport_id', $sport_id);
// })
// ->where('day', $day)->get();
// foreach ($ss_days as $ss_day) {
// $sofa_score_categorie_id = $ss_day->tournament->sofa_score_categorie_id;
// // https://www.sofascore.com/api/v1/unique-tournament/16/scheduled-events/2026-06-19
// $url = Nuh::$options['base_url'] . "api/v1/category/$sofa_score_categorie_id/scheduled-events/$day";
// Notice::note($url, 'p');
// }
// }
// exit;
for ($i = 1; $i <= $dback; $i++) { for ($i = 1; $i <= $dback; $i++) {
// remove one day to start yesterday // remove one day to start yesterday
$day = Carbon::now()->subDays($i)->format('Y-m-d'); $day = Carbon::now()->subDays($i)->format('Y-m-d');
// call for spezific day // call for spezific day
if($singleday){ if ($singleday) {
$dback = 1; $dback = 1;
$day = $singleday; $day = $singleday;
} }
@@ -102,13 +85,14 @@ class Events
->where('day', $day)->get(); ->where('day', $day)->get();
foreach ($ss_days as $ss_day) { foreach ($ss_days as $ss_day) {
$sofa_score_categorie_id = $ss_day->tournament->sofa_score_categorie_id; $sofa_score_categorie_id = $ss_day->tournament->sofa_score_categorie_id;
$tournament_id = $ss_day->tournament_id; $tournament_id = $ss_day->tournament_id;
// $url = Nuh::$options['base_url'] . "api/v1/category/$sofa_score_categorie_id/scheduled-events/$day"; // $url = Nuh::$options['base_url'] . "api/v1/category/$sofa_score_categorie_id/scheduled-events/$day";
$url = Nuh::$options['base_url'] . "api/v1/unique-tournament/$tournament_id/scheduled-events/$day"; $url = Nuh::$options['base_url']."api/v1/unique-tournament/$tournament_id/scheduled-events/$day";
$rand = rand(500000, 1000000); $rand = rand(500000, 1000000);
if ($debug) { if ($debug) {
@@ -120,13 +104,13 @@ class Events
Nuh::$options['s'] = 0; Nuh::$options['s'] = 0;
Nuh::$options['r'] = 0; Nuh::$options['r'] = 0;
foreach ($data['events'] as $event) { foreach ($data['events'] as $event) {
Notice::note($event['season']['name'].' '. $ss_day->day, 'bb'); Notice::note($event['season']['name'].' '.$ss_day->day, 'bb');
$folder = app_path() . self::$storage_path . $ss_day->day . '/' . $event['tournament']['slug'] . '/' . $event['slug']; $folder = app_path().self::$storage_path.$ss_day->day.'/'.$event['tournament']['slug'].'/'.$event['slug'];
File::makeDirectory($folder, 0775, true, true); File::makeDirectory($folder, 0775, true, true);
@@ -134,7 +118,7 @@ class Events
* EVENT event * EVENT event
*********************************/ *********************************/
File::put($folder . '/event.json', json_encode($event)); File::put($folder.'/event.json', json_encode($event));
/********************************* /*********************************
* EVENT statistics * EVENT statistics
@@ -142,7 +126,7 @@ class Events
$event_id = $event['id']; $event_id = $event['id'];
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/statistics"; $url = Nuh::$options['base_url']."api/v1/event/$event_id/statistics";
$rand = rand(500000, 1000000); $rand = rand(500000, 1000000);
if ($debug) { if ($debug) {
@@ -152,7 +136,7 @@ class Events
$data = CurlSofa::load($url); $data = CurlSofa::load($url);
File::put($folder . '/statistics.json', json_encode($data)); File::put($folder.'/statistics.json', json_encode($data));
/********************************* /*********************************
* EVENT lineups * EVENT lineups
@@ -160,7 +144,7 @@ class Events
$event_id = $event['id']; $event_id = $event['id'];
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/lineups"; $url = Nuh::$options['base_url']."api/v1/event/$event_id/lineups";
$rand = rand(500000, 1000000); $rand = rand(500000, 1000000);
if ($debug) { if ($debug) {
@@ -170,8 +154,7 @@ class Events
$data = CurlSofa::load($url); $data = CurlSofa::load($url);
File::put($folder . '/lineups.json', json_encode($data)); File::put($folder.'/lineups.json', json_encode($data));
/********************************* /*********************************
* EVENT lineups * EVENT lineups
@@ -179,7 +162,7 @@ class Events
$event_id = $event['id']; $event_id = $event['id'];
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/odds/1/all"; $url = Nuh::$options['base_url']."api/v1/event/$event_id/odds/1/all";
$rand = rand(500000, 1000000); $rand = rand(500000, 1000000);
if ($debug) { if ($debug) {
@@ -189,7 +172,7 @@ class Events
$data = CurlSofa::load($url); $data = CurlSofa::load($url);
File::put($folder . '/odds.json', json_encode($data)); File::put($folder.'/odds.json', json_encode($data));
} }
} }
} }
@@ -0,0 +1,137 @@
<?php
namespace App\Console\Commands\Grapper\Sofascore;
use App\Console\Commands\Nuh;
use App\Models\SofaScoreDay;
use App\Models\SofaScoreTournament;
use App\Utilities\Notice;
use Illuminate\Support\Facades\File;
class EventsDatabase
{
public static $storage_path = '/Console/Commands/Grapper/Sofascore/grapped/';
public static function load()
{
$debug = Nuh::$options['d'] ?? 0;
$print = Nuh::$options['p'] ?? 0;
$sport_id = Nuh::$options['sport_id'];
$days = SofaScoreDay::where('sport_id', $sport_id)->where('enabled', 1)->pluck('day')->toArray();
$tornaments = SofaScoreTournament::where('sport_id', $sport_id)->where('enabled', 1)->get();
if (! $days) {
Notice::note('No days active in DB', 'r', 1);
}
if (! $tornaments) {
Notice::note('No tornaments active in DB', 'r', 1);
}
if ($print) {
dd($days, $tornaments);
}
foreach ($days as $day) {
if ($debug) {
Notice::note($day, 'b');
}
foreach ($tornaments as $tournament) {
if ($debug) {
Notice::note($tournament->name, 'b');
}
$url = Nuh::$options['base_url']."api/v1/unique-tournament/$tournament->tournament_id/scheduled-events/$day";
$rand = rand(500000, 1000000);
if ($debug) {
Notice::note("Sleep $rand msec", 'y');
}
usleep($rand);
$data = CurlSofa::load($url);
Nuh::$options['s'] = 0;
Nuh::$options['r'] = 0;
if (isset($data['events'])) {
foreach ($data['events'] as $event) {
Notice::note($event['season']['name'].' '.$day, 'bb');
$folder = app_path().self::$storage_path.$day.'/'.$event['tournament']['slug'].'/'.$event['slug'];
File::makeDirectory($folder, 0775, true, true);
/*********************************
* EVENT event
*********************************/
File::put($folder.'/event.json', json_encode($event));
/*********************************
* EVENT statistics
*********************************/
$event_id = $event['id'];
$url = Nuh::$options['base_url']."api/v1/event/$event_id/statistics";
$rand = rand(500000, 1000000);
if ($debug) {
Notice::note("Sleep $rand msec", 'y');
}
usleep($rand);
$data = CurlSofa::load($url);
File::put($folder.'/statistics.json', json_encode($data));
/*********************************
* EVENT lineups
*********************************/
$event_id = $event['id'];
$url = Nuh::$options['base_url']."api/v1/event/$event_id/lineups";
$rand = rand(500000, 1000000);
if ($debug) {
Notice::note("Sleep $rand msec", 'y');
}
usleep($rand);
$data = CurlSofa::load($url);
File::put($folder.'/lineups.json', json_encode($data));
/*********************************
* EVENT lineups
*********************************/
$event_id = $event['id'];
$url = Nuh::$options['base_url']."api/v1/event/$event_id/odds/1/all";
$rand = rand(500000, 1000000);
if ($debug) {
Notice::note("Sleep $rand msec", 'y');
}
usleep($rand);
$data = CurlSofa::load($url);
File::put($folder.'/odds.json', json_encode($data));
}
}
}
}
}
}
@@ -11,8 +11,8 @@ ini_set('magic_quotes_runtime', false);
class Special class Special
{ {
public static $max_days = 30; public static $max_days = 30;
public static Carbon $days_back; public static Carbon $days_back;
public static $storage_path = '/Console/Commands/Grapper/Sofascore/worldcup-teams/'; public static $storage_path = '/Console/Commands/Grapper/Sofascore/worldcup-teams/';
@@ -21,7 +21,7 @@ class Special
{ {
$debug = Nuh::$options['d'] ?? 0; $debug = Nuh::$options['d'] ?? 0;
$url = Nuh::$options['base_url'] . "/api/v1/world-cup/meet-the-team"; $url = Nuh::$options['base_url'].'/api/v1/world-cup/meet-the-team';
$rand = rand(500000, 1000000); $rand = rand(500000, 1000000);
if ($debug) { if ($debug) {
@@ -38,7 +38,7 @@ class Special
$teams[] = [ $teams[] = [
'id' => $team['team']['id'], 'id' => $team['team']['id'],
'slug' => $team['team']['slug'], 'slug' => $team['team']['slug'],
'name' => $team['team']['name'] 'name' => $team['team']['name'],
]; ];
} }
} }
@@ -47,9 +47,9 @@ class Special
Nuh::$options['s'] = 0; Nuh::$options['s'] = 0;
Nuh::$options['r'] = 0; Nuh::$options['r'] = 0;
$url = 'https://www.sofascore.com/api/v1/team/' . $team['id'] . '/events/last/0'; $url = 'https://www.sofascore.com/api/v1/team/'.$team['id'].'/events/last/0';
$data = CurlSofa::load($url); $data = CurlSofa::load($url);
@@ -66,7 +66,7 @@ class Special
$starttime = Carbon::createFromTimestamp($event['startTimestamp'])->format('Y-m-d'); $starttime = Carbon::createFromTimestamp($event['startTimestamp'])->format('Y-m-d');
$folder = app_path() . self::$storage_path . $starttime . '/' . $event['tournament']['slug'] . '/' . $event['slug']; $folder = app_path().self::$storage_path.$starttime.'/'.$event['tournament']['slug'].'/'.$event['slug'];
File::makeDirectory($folder, 0775, true, true); File::makeDirectory($folder, 0775, true, true);
@@ -74,13 +74,13 @@ class Special
* EVENT event basic * EVENT event basic
*********************************/ *********************************/
File::put($folder . '/event.json', json_encode($event)); File::put($folder.'/event.json', json_encode($event));
/********************************* /*********************************
* EVENT statistics * EVENT statistics
*********************************/ *********************************/
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/statistics"; $url = Nuh::$options['base_url']."api/v1/event/$event_id/statistics";
$rand = rand(500000, 1000000); $rand = rand(500000, 1000000);
if ($debug) { if ($debug) {
@@ -90,13 +90,13 @@ class Special
$data = CurlSofa::load($url); $data = CurlSofa::load($url);
File::put($folder . '/statistics.json', json_encode($data)); File::put($folder.'/statistics.json', json_encode($data));
/********************************* /*********************************
* EVENT lineups * EVENT lineups
*********************************/ *********************************/
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/lineups"; $url = Nuh::$options['base_url']."api/v1/event/$event_id/lineups";
$rand = rand(500000, 1000000); $rand = rand(500000, 1000000);
if ($debug) { if ($debug) {
@@ -106,14 +106,14 @@ class Special
$data = CurlSofa::load($url); $data = CurlSofa::load($url);
File::put($folder . '/lineups.json', json_encode($data)); File::put($folder.'/lineups.json', json_encode($data));
/********************************* /*********************************
* EVENT lineups * EVENT lineups
*********************************/ *********************************/
$event_id = $event['id']; $event_id = $event['id'];
$url = Nuh::$options['base_url'] . "api/v1/event/$event_id/odds/1/all"; $url = Nuh::$options['base_url']."api/v1/event/$event_id/odds/1/all";
$rand = rand(500000, 1000000); $rand = rand(500000, 1000000);
if ($debug) { if ($debug) {
@@ -123,7 +123,7 @@ class Special
$data = CurlSofa::load($url); $data = CurlSofa::load($url);
File::put($folder . '/odds.json', json_encode($data)); File::put($folder.'/odds.json', json_encode($data));
} }
} }
} }
@@ -13,7 +13,6 @@ use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction; use Filament\Actions\EditAction;
use Filament\Forms\Components\TextInput; use Filament\Forms\Components\TextInput;
use Filament\Support\Enums\FontWeight; use Filament\Support\Enums\FontWeight;
use Filament\Support\Enums\Size;
use Filament\Support\Enums\TextSize; use Filament\Support\Enums\TextSize;
use Filament\Tables\Columns\Layout\Split; use Filament\Tables\Columns\Layout\Split;
use Filament\Tables\Columns\Layout\Stack; use Filament\Tables\Columns\Layout\Stack;
@@ -42,7 +41,7 @@ class SupervisorsTable
->weight(FontWeight::Black) ->weight(FontWeight::Black)
->size(TextSize::Large), ->size(TextSize::Large),
TextColumn::make('provider.name') TextColumn::make('provider.name')
->color(fn($record): string => match ($record->provider_id) { ->color(fn ($record): string => match ($record->provider_id) {
1 => 'danger', 1 => 'danger',
8 => 'danger', 8 => 'danger',
2 => 'success', 2 => 'success',
@@ -107,7 +106,8 @@ class SupervisorsTable
case 12: case 12:
return [ return [
'TOURNAMENTS' => 'TOURNAMENTS', 'TOURNAMENTS' => 'TOURNAMENTS',
'EVENTS' => 'EVENTS', 'EVENTS' => 'EVENTS Comandline',
'EVENTSDB' => 'EVENTS Database',
'SPECIAL' => 'SPECIAL', 'SPECIAL' => 'SPECIAL',
]; ];
default: default:
@@ -118,7 +118,7 @@ class SupervisorsTable
->hidden(function (ListSupervisors $livewire) { ->hidden(function (ListSupervisors $livewire) {
return in_array($livewire->tableFilters['provider_id']['value'], [11]); return in_array($livewire->tableFilters['provider_id']['value'], [11]);
}) })
->options(fn() => Sport::where('is_active', 1)->pluck('name', 'id')) ->options(fn () => Sport::where('is_active', 1)->pluck('name', 'id'))
->placeholder('All'), ->placeholder('All'),
SelectColumn::make('txodds_market_id') SelectColumn::make('txodds_market_id')
->visible(function (ListSupervisors $livewire) { ->visible(function (ListSupervisors $livewire) {
@@ -153,7 +153,7 @@ class SupervisorsTable
TextColumn::make('lastcall') TextColumn::make('lastcall')
->prefix('Lastcall: ') ->prefix('Lastcall: ')
->badge() ->badge()
->color(fn($state): string => ($state > 0 && $state > time() - 300) ? 'success' : 'danger') ->color(fn ($state): string => ($state > 0 && $state > time() - 300) ? 'success' : 'danger')
->dateTime() ->dateTime()
->visible(function (ListSupervisors $livewire) { ->visible(function (ListSupervisors $livewire) {
return $livewire->tableFilters['provider_id']['value'] == 8; return $livewire->tableFilters['provider_id']['value'] == 8;
@@ -5,12 +5,8 @@ namespace App\Filament\Clusters\StaticData\Resources\SofaScoreDays\Tables;
use App\Models\SofaScoreDay; use App\Models\SofaScoreDay;
use App\Models\Sport; use App\Models\Sport;
use Filament\Actions\Action; use Filament\Actions\Action;
use Filament\Actions\BulkActionGroup;
use Filament\Actions\DeleteBulkAction;
use Filament\Actions\EditAction;
use Filament\Forms\Components\Select; use Filament\Forms\Components\Select;
use Filament\Forms\Components\Toggle; use Filament\Forms\Components\Toggle;
use Filament\Tables\Columns\IconColumn;
use Filament\Tables\Columns\TextColumn; use Filament\Tables\Columns\TextColumn;
use Filament\Tables\Columns\ToggleColumn; use Filament\Tables\Columns\ToggleColumn;
use Filament\Tables\Enums\FiltersLayout; use Filament\Tables\Enums\FiltersLayout;
@@ -26,16 +22,53 @@ class SofaScoreDaysTable
{ {
return $table return $table
->description('For days checked events active in tournaments will be grapped.') ->description('For days checked events active in tournaments will be grapped.')
->headerActions([ ->headerActions([
Action::make('reset')->icon('phosphor-power')->action(fn() => SofaScoreDay::query()->update(['football' => 0])), Action::make('generate')->icon('phosphor-calendar')
->schema([
Select::make('sport_id')
->options(Sport::where('is_active', 1)
->pluck('name', 'id'))
->required(),
Select::make('year')
->options(self::years())
->required(),
Select::make('month')
->options(self::month())
->required(),
])
->action(function (array $data, $table): void {
$sport_id = $data['sport_id'];
$date = Carbon::createFromDate($data['year'], $data['month'], 1)->startOfMonth();
$daysCount = $date->daysInMonth;
$allDates = [];
for ($i = 1; $i <= $daysCount; $i++) {
$allDates[] = $date->copy()->day($i)->format('Y-m-d');
}
foreach ($allDates as $day) {
SofaScoreDay::updateOrCreate(['day' => $day, 'sport_id' => $sport_id]);
}
}),
Action::make('reset')
->icon('phosphor-power')
->schema([
Select::make('sport_id')
->options(Sport::where('is_active', 1)
->pluck('name', 'id'))
->required(),
])
->action(function (array $data): void {
$sport_id = $data['sport_id'];
SofaScoreDay::where('sport_id', $sport_id)->update(['enabled' => 0]);
}),
]) ])
->columns([ ->columns([
TextColumn::make('day')->sortable(),
TextColumn::make('sport.name'), TextColumn::make('sport.name'),
TextColumn::make('day')->sortable(),
ToggleColumn::make('enabled'), ToggleColumn::make('enabled'),
]) ])
->filters([ ->filters([
Filter::make('day') Filter::make('filter')
->columns(4)->columnSpan(4) ->columns(4)->columnSpan(4)
->schema([ ->schema([
Select::make('sport_id') Select::make('sport_id')
@@ -50,13 +83,13 @@ class SofaScoreDaysTable
->query(function (Builder $query, array $data): Builder { ->query(function (Builder $query, array $data): Builder {
return $query->when( return $query->when(
$data['year'], $data['year'],
fn(Builder $query, $year): Builder => $query->whereYear('day', $year), fn (Builder $query, $year): Builder => $query->whereYear('day', $year),
)->when( )->when(
$data['month'], $data['month'],
fn(Builder $query, $month): Builder => $query->whereMonth('day', $month), fn (Builder $query, $month): Builder => $query->whereMonth('day', $month),
)->when( )->when(
$data['enabled'], $data['enabled'],
fn(Builder $query, $enabled): Builder => $query->where('enabled', $enabled), fn (Builder $query, $enabled): Builder => $query->where('enabled', $enabled),
); );
})->indicateUsing(function (array $data): array { })->indicateUsing(function (array $data): array {
$indicators = []; $indicators = [];
@@ -66,31 +99,29 @@ class SofaScoreDaysTable
if ($data['month'] ?? null) { if ($data['month'] ?? null) {
$indicators[] = Indicator::make('Month: '.$data['month']); $indicators[] = Indicator::make('Month: '.$data['month']);
} }
return $indicators;
}), return $indicators;
}),
], layout: FiltersLayout::AboveContent) ], layout: FiltersLayout::AboveContent)
->deferFilters(false) ->persistFiltersInSession()
->recordActions([ ->deferFilters(false);
EditAction::make(),
])
->toolbarActions([
BulkActionGroup::make([
// DeleteBulkAction::make(),
]),
]);
} }
public static function years() { public static function years()
$years = range(date('Y'), date('Y')-10); {
$years = range(date('Y'), date('Y') - 10);
return array_combine($years, $years); return array_combine($years, $years);
} }
public static function month() { public static function month()
{
$months = []; $months = [];
for ($m = 1; $m <= 12; $m++) { for ($m = 1; $m <= 12; $m++) {
$date = Carbon::create(null, $m, 1); $date = Carbon::create(null, $m, 1);
$months[$date->format('m')] = $date->format('F'); $months[$date->format('m')] = $date->format('F');
} }
return $months; return $months;
} }
} }
@@ -33,121 +33,121 @@ class SofaScoreTournamentsTable
->icon('phosphor-power') ->icon('phosphor-power')
->requiresConfirmation() ->requiresConfirmation()
->modalDescription('This will disable all leagues for soccer') ->modalDescription('This will disable all leagues for soccer')
->action(fn() => SofaScoreTournament::where('sport_id', 1)->update(['enabled' => 0]) ->action(fn () => SofaScoreTournament::where('sport_id', 1)->update(['enabled' => 0])
), ),
Action::make('ice-hockey') Action::make('ice-hockey')
->icon('phosphor-power') ->icon('phosphor-power')
->requiresConfirmation() ->requiresConfirmation()
->modalDescription('This will disable all leagues for ice hockey') ->modalDescription('This will disable all leagues for ice hockey')
->action(fn() => SofaScoreTournament::where('sport_id', 2)->update(['enabled' => 0]) ->action(fn () => SofaScoreTournament::where('sport_id', 2)->update(['enabled' => 0])
), ),
Action::make('basketball') Action::make('basketball')
->icon('phosphor-power') ->icon('phosphor-power')
->requiresConfirmation() ->requiresConfirmation()
->modalDescription('This will disable all leagues for basketball') ->modalDescription('This will disable all leagues for basketball')
->action(fn() => SofaScoreTournament::where('sport_id', 3)->update(['enabled' => 0]) ->action(fn () => SofaScoreTournament::where('sport_id', 3)->update(['enabled' => 0])
), ),
Action::make('tennis') Action::make('tennis')
->icon('phosphor-power') ->icon('phosphor-power')
->requiresConfirmation() ->requiresConfirmation()
->modalDescription('This will disable all leagues for tennis') ->modalDescription('This will disable all leagues for tennis')
->action(fn() => SofaScoreTournament::where('sport_id', 5)->update(['enabled' => 0]) ->action(fn () => SofaScoreTournament::where('sport_id', 5)->update(['enabled' => 0])
), ),
]) ])
->poll() ->poll()
->columns([ ->columns([
IconColumn::make('sport.icon') IconColumn::make('sport.icon')
->label('') ->label('')
->grow(false) ->grow(false)
->width(30) ->width(30)
->color(fn($record) => $record->sport->color) ->color(fn ($record) => $record->sport->color)
->icon(fn($record) => $record->sport->icon) ->icon(fn ($record) => $record->sport->icon)
->size(IconSize::Medium) ->size(IconSize::Medium)
->tooltip(fn($record) => $record->id) ->tooltip(fn ($record) => $record->id)
->visibleFrom('lg'), ->visibleFrom('lg'),
TextColumn::make('tournament_id')->sortable(), TextColumn::make('tournament_id')->sortable()->searchable(),
TextColumn::make('sport.name'), TextColumn::make('sport.name'),
TextColumn::make('sofascore_category.name') TextColumn::make('sofascore_category.name')
->icon(fn($record) => $record->sofascore_category->country->icon), ->icon(fn ($record) => $record->sofascore_category->country->icon),
TextColumn::make('name')->searchable()->sortable(), TextColumn::make('name')->searchable()->sortable(),
ToggleColumn::make('enabled'), ToggleColumn::make('enabled'),
]) ])
->filters([ ->filters([
Filter::make('filters') Filter::make('filters')
->columns(3)->columnSpan(3) ->columns(3)->columnSpan(3)
->schema([ ->schema([
Select::make('sport_id') Select::make('sport_id')
->default(1) ->default(1)
->selectablePlaceholder(false) ->selectablePlaceholder(false)
->label('Sport') ->label('Sport')
->options(Sport::where('is_active', 1)->pluck('name', 'id')) ->options(Sport::where('is_active', 1)->pluck('name', 'id'))
->afterStateUpdated(function (callable $set) { ->afterStateUpdated(function (callable $set) {
$set('sofa_score_categorie_id', null); $set('sofa_score_categorie_id', null);
}) })
->live(), ->live(),
Select::make('sofa_score_categorie_id') Select::make('sofa_score_categorie_id')
->searchable() ->searchable()
->multiple() ->multiple()
->label('Categorie') ->label('Categorie')
->options(function (Get $get) { ->options(function (Get $get) {
$res = SofaScoreTournament::where('sport_id', $get('sport_id')) $res = SofaScoreTournament::where('sport_id', $get('sport_id'))
->groupBy('sofa_score_categorie_id') ->groupBy('sofa_score_categorie_id')
->pluck('sofa_score_categorie_id') ->pluck('sofa_score_categorie_id')
->toArray(); ->toArray();
return SofaScoreCategorie::query()->whereIn('id', $res)->orderBy('name')->pluck('name', 'id'); return SofaScoreCategorie::query()->whereIn('id', $res)->orderBy('name')->pluck('name', 'id');
}) })
->live(), ->live(),
DatePicker::make('day')->live(), DatePicker::make('day')->live(),
]) ])
->query(function (Builder $query, array $data): Builder { ->query(function (Builder $query, array $data): Builder {
return $query->when( return $query->when(
$data['sport_id'], $data['sport_id'],
fn(Builder $query, $sport_id) => $query->where('sport_id', $sport_id) fn (Builder $query, $sport_id) => $query->where('sport_id', $sport_id)
)->when( )->when(
$data['sofa_score_categorie_id'], $data['sofa_score_categorie_id'],
function (Builder $query, $sofa_score_categorie_id) { function (Builder $query, $sofa_score_categorie_id) {
if (is_array($sofa_score_categorie_id)) { if (is_array($sofa_score_categorie_id)) {
$query->whereIn('sofa_score_categorie_id', $sofa_score_categorie_id); $query->whereIn('sofa_score_categorie_id', $sofa_score_categorie_id);
} else { } else {
$query->where('sofa_score_categorie_id', $sofa_score_categorie_id); $query->where('sofa_score_categorie_id', $sofa_score_categorie_id);
}
} }
} )->when(
)->when( $data['day'],
$data['day'], function (Builder $query, $day) {
function (Builder $query, $day) { $res = SofaScoreDayTournament::where('day', $day)->pluck('tournament_id')->toArray();
$res = SofaScoreDayTournament::where('day', $day)->pluck('tournament_id')->toArray(); $query->whereIn('tournament_id', $res);
$query->whereIn('tournament_id', $res); }
} );
); }),
}), TernaryFilter::make('enabled')->placeholder('All'),
TernaryFilter::make('enabled')->placeholder('All'),
], layout: FiltersLayout::AboveContent) ], layout: FiltersLayout::AboveContent)
->deferFilters(false) ->deferFilters(false)
->toolbarActions([ ->toolbarActions([
BulkActionGroup::make([ BulkActionGroup::make([
BulkAction::make('Enable') BulkAction::make('Enable')
->icon('phosphor-toggle-right-fill') ->icon('phosphor-toggle-right-fill')
->color('primary') ->color('primary')
->action(function (Collection $records): void { ->action(function (Collection $records): void {
foreach ($records as $record) { foreach ($records as $record) {
SofaScoreTournament::where('id', '=', $record->id) SofaScoreTournament::where('id', '=', $record->id)
->update( ->update(
['enabled' => 1] ['enabled' => 1]
); );
} }
}), }),
BulkAction::make('Disable') BulkAction::make('Disable')
->icon('phosphor-toggle-left-fill') ->icon('phosphor-toggle-left-fill')
->color('gray') ->color('gray')
->action(function (Collection $records): void { ->action(function (Collection $records): void {
foreach ($records as $record) { foreach ($records as $record) {
SofaScoreTournament::where('id', '=', $record->id) SofaScoreTournament::where('id', '=', $record->id)
->update( ->update(
['enabled' => 0] ['enabled' => 0]
); );
} }
}), }),
]), ]),
]); ]);
} }
Generated
+92 -12
View File
@@ -4457,24 +4457,24 @@
}, },
{ {
"name": "mongodb/mongodb", "name": "mongodb/mongodb",
"version": "2.2.0", "version": "2.3.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/mongodb/mongo-php-library.git", "url": "https://github.com/mongodb/mongo-php-library",
"reference": "bbb13f969e37e047fd822527543df55fdc1c9298" "reference": "12e56461166d915e3dd8e4969ad0940ed5207d88"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/bbb13f969e37e047fd822527543df55fdc1c9298", "url": "https://api.github.com/repos/mongodb/mongo-php-library/zipball/12e56461166d915e3dd8e4969ad0940ed5207d88",
"reference": "bbb13f969e37e047fd822527543df55fdc1c9298", "reference": "12e56461166d915e3dd8e4969ad0940ed5207d88",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"composer-runtime-api": "^2.0", "composer-runtime-api": "^2.0",
"ext-mongodb": "^2.2", "ext-mongodb": "^2.3",
"php": "^8.1", "php": "^8.1",
"psr/log": "^1.1.4|^2|^3", "psr/log": "^1.1.4|^2|^3",
"symfony/polyfill-php85": "^1.32" "symfony/polyfill-php85": "^1.33"
}, },
"replace": { "replace": {
"mongodb/builder": "*" "mongodb/builder": "*"
@@ -4526,11 +4526,7 @@
"mongodb", "mongodb",
"persistence" "persistence"
], ],
"support": { "time": "2026-04-28T12:50:06+00:00"
"issues": "https://github.com/mongodb/mongo-php-library/issues",
"source": "https://github.com/mongodb/mongo-php-library/tree/2.2.0"
},
"time": "2026-02-11T11:39:56+00:00"
}, },
{ {
"name": "monolog/monolog", "name": "monolog/monolog",
@@ -8027,6 +8023,90 @@
], ],
"time": "2026-04-10T16:19:22+00:00" "time": "2026-04-10T16:19:22+00:00"
}, },
{
"name": "symfony/polyfill-iconv",
"version": "v1.37.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-iconv.git",
"reference": "2c5729fd241b4b22f6e4b436bc3354a4f262df57"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/2c5729fd241b4b22f6e4b436bc3354a4f262df57",
"reference": "2c5729fd241b4b22f6e4b436bc3354a4f262df57",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
"provide": {
"ext-iconv": "*"
},
"suggest": {
"ext-iconv": "For best performance"
},
"type": "library",
"extra": {
"thanks": {
"url": "https://github.com/symfony/polyfill",
"name": "symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Iconv\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Nicolas Grekas",
"email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for the Iconv extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"iconv",
"polyfill",
"portable",
"shim"
],
"support": {
"source": "https://github.com/symfony/polyfill-iconv/tree/v1.37.0"
},
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://github.com/nicolas-grekas",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2026-04-10T16:19:22+00:00"
},
{ {
"name": "symfony/polyfill-intl-grapheme", "name": "symfony/polyfill-intl-grapheme",
"version": "v1.38.1", "version": "v1.38.1",