From df0a2a9de0de3529480589adb875e8fc98e7355a Mon Sep 17 00:00:00 2001 From: salam Date: Sat, 1 Aug 2026 11:42:47 +0200 Subject: [PATCH] move all to ss IDs --- Season-24-25-Major-Leagues.xlsx | Bin 0 -> 68679 bytes app/Actions/Selections/LoadPlayer.php | 6 +- app/Console/Commands/Grapper/Sofascore.php | 36 +- .../Grapper/Sofascore/Helper/ZipFolder.php | 4 +- .../Commands/Grapper/Sofascore/MakeExcel.php | 71 +++- .../CompetitionGroupResource.php | 5 - .../Resources/Countries/CountryResource.php | 5 - .../Resources/Elements/ElementResource.php | 5 - .../SofaScoreRosas/SofaScoreRosaResource.php | 2 + .../SofaScoreTasks/SofaScoreTaskResource.php | 2 +- .../Tables/SofaScoreTasksTable.php | 5 +- .../StatisticFixturesResource.php | 4 +- .../Tables/StatisticFixturesTable.php | 55 ++- .../StatistikoDetailResource.php | 4 +- .../StatistikoEventsResource.php | 4 +- .../Tables/StatistikoEventsTable.php | 21 +- .../StatistikaImportResource.php | 2 +- .../StatistikoPlayerResource.php | 4 +- app/Models/SofaScoreTournament.php | 5 + app/Models/StatisticFixtures.php | 2 +- app/Models/StatistikoEvent.php | 8 +- app/Providers/Filament/AdminPanelProvider.php | 5 +- composer.json | 1 + composer.lock | 372 +++++++++++++++++- 24 files changed, 527 insertions(+), 101 deletions(-) create mode 100644 Season-24-25-Major-Leagues.xlsx diff --git a/Season-24-25-Major-Leagues.xlsx b/Season-24-25-Major-Leagues.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7a985719c712522a73eedd36dd69f6a95d7c2cc8 GIT binary patch literal 68679 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 M{=@_9w#Na$e?nxS@Bjb+ literal 0 HcmV?d00001 diff --git a/app/Actions/Selections/LoadPlayer.php b/app/Actions/Selections/LoadPlayer.php index 5aa610f3..f22cd8af 100644 --- a/app/Actions/Selections/LoadPlayer.php +++ b/app/Actions/Selections/LoadPlayer.php @@ -62,15 +62,15 @@ class LoadPlayer $colorlevel = round($matches_count / 3); - $time_played = round($minues_played / 60) . ':'; - $time_played .= $minues_played % 60; + $time_played = round($minues_played / 60) . 'h:'; + $time_played .= $minues_played % 60 . 'm'; $position = $ss_positions_map[$val->details->position] ?? 'No Specific Position'; if ($events_played < $colorlevel) { $arr[$position][$val->ss_player_id] = '' . $val->details->player_name . '(' . $events_played . ') (' . $time_played . ')'; } else if ($events_played < $colorlevel * 2) { - $arr[$position][$val->ss_player_id] = '' . $val->details->player_name . ' (' . $events_played . ') (' . $time_played . ''; + $arr[$position][$val->ss_player_id] = '' . $val->details->player_name . ' (' . $events_played . ') (' . $time_played . ')'; } else { $arr[$position][$val->ss_player_id] = '' . $val->details->player_name . ' (' . $events_played . ') (' . $time_played . ')'; } diff --git a/app/Console/Commands/Grapper/Sofascore.php b/app/Console/Commands/Grapper/Sofascore.php index cafc8668..204679d3 100644 --- a/app/Console/Commands/Grapper/Sofascore.php +++ b/app/Console/Commands/Grapper/Sofascore.php @@ -24,7 +24,7 @@ class Sofascore { public static string $storage; - public static string $archive_name; + public static string $zipfile; public static string $excel_name; @@ -90,30 +90,40 @@ class Sofascore public static function setStorage() { $task = Nuh::$options['task']; + $debug = Nuh::$options['d']; - self::$storage = storage_path('sofascore_data') . '/'; - // for grapper to start with + $sofascore_data = storage_path('sofascore_data') . '/'; + $task = SofaScoreTask::where('id', $task)->first(); + if (!$task) { + Notice::note("No SofaScoreTask " . Nuh::$options['task'], 'r', 1); + } + $storage_name = Strings::clean($task->name); - $storage_name = Strings::clean(SofaScoreTask::where('id', $task)->value('name')) . '/'; - - switch ($task) { + switch ($task->id) { case 1: - self::$archive_name = Carbon::now()->subDays(3)->format('Y-m-d') . '.zip'; - self::$storage .= $storage_name . Carbon::now()->subDays(3)->format('Y-m-d'); + self::$storage = $sofascore_data . $storage_name . '/' . Carbon::now()->subDays(3)->format('Y-m-d'); + self::$zipfile = $sofascore_data . $storage_name . '/' . Carbon::now()->subDays(3)->format('Y-m-d') . '.zip'; break; case 2: + self::$storage = $sofascore_data . $storage_name . '/' . $task->day_from; + self::$zipfile = $sofascore_data . $storage_name . '/' . $task->day_from . '.zip'; + break; case 3: - self::$archive_name = $storage_name . '.zip'; - self::$storage .= $storage_name; + self::$storage = $sofascore_data . $storage_name . '-' . $task->day_from . '-' . $task->day_to; + self::$zipfile = $sofascore_data . $storage_name . '-' . $task->day_from . '-' . $task->day_to . '.zip'; break; case 4: - self::$archive_name = 'rosa-' . Carbon::now()->format('Y-m-d') . '.zip'; - self::$storage .= $storage_name . 'rosa-' . Carbon::now()->format('Y-m-d'); + self::$storage = $sofascore_data . $storage_name . '/rosa-' . Carbon::now()->format('Y-m-d'); + self::$zipfile = $sofascore_data . $storage_name . '/rosa-' . Carbon::now()->format('Y-m-d') . '.zip'; break; default: - self::$archive_name = 'archive.zip'; + self::$storage = $sofascore_data . $storage_name; + self::$zipfile = $sofascore_data . $storage_name . '/archive.zip'; break; } + + if ($debug) + Notice::note("\nStore:\t" . Sofascore::$storage . "\nZip:\t" . Sofascore::$zipfile, 'c'); } } diff --git a/app/Console/Commands/Grapper/Sofascore/Helper/ZipFolder.php b/app/Console/Commands/Grapper/Sofascore/Helper/ZipFolder.php index 5852da0e..1af1d902 100644 --- a/app/Console/Commands/Grapper/Sofascore/Helper/ZipFolder.php +++ b/app/Console/Commands/Grapper/Sofascore/Helper/ZipFolder.php @@ -12,11 +12,9 @@ class ZipFolder public static function create() { - $zipFilePath = Sofascore::$storage . Sofascore::$archive_name; - $zip = new ZipArchive(); - if ($zip->open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) { + if ($zip->open(Sofascore::$zipfile, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) { if (is_dir(Sofascore::$storage)) { diff --git a/app/Console/Commands/Grapper/Sofascore/MakeExcel.php b/app/Console/Commands/Grapper/Sofascore/MakeExcel.php index 84df6b6f..6a6196d8 100644 --- a/app/Console/Commands/Grapper/Sofascore/MakeExcel.php +++ b/app/Console/Commands/Grapper/Sofascore/MakeExcel.php @@ -3,37 +3,78 @@ namespace App\Console\Commands\Grapper\Sofascore; use App\Console\Commands\Grapper\Sofascore; -use App\Console\Commands\Grapper\Sofascore\Helper\Strings; use App\Console\Commands\Grapper\Sofascore\Helper\ZipFolder; use App\Console\Commands\Nuh; -use Spatie\SimpleExcel\SimpleExcelWriter; +use App\Utilities\Notice; +use PhpOffice\PhpSpreadsheet\IOFactory; +use PhpOffice\PhpSpreadsheet\Spreadsheet; class MakeExcel { + public static $FOLDER = 'Season-25-26-Major-Leagues'; + public static $MAXCOLUMNS = 1000; + public static function create() { - $files = ZipFolder::get_tree(Sofascore::$storage); + ini_set("memory_limit", -1); - $writer = SimpleExcelWriter::create(Sofascore::$storage . '.xlsx'); + $debug = Nuh::$options['d'] ?? 0; - foreach ($files as $file) { + if ($debug) { + Notice::note("Make Excel", 'bb'); + } - $name = str_replace('.json', '', basename($file)); - $writer->addHeader(['#TEAM# ' . $name]); + if ($debug) { + Notice::note("Folder to Import: " . self::$FOLDER . "\nMaximum in Excel: " . self::$MAXCOLUMNS, 'b'); + } - $data = file_get_contents($file); + $files = self::load_files(); - $arr = json_decode($data, true); + foreach ($files as $key => $value) { - if (isset($arr['players']) && is_array($arr['players'])) { - foreach ($arr['players'] as $value) { - if ($value) { - $writer->addRow([$name => json_encode($value)]); - } + $from = $key * self::$MAXCOLUMNS + 1; + $key++; + $to = $key * self::$MAXCOLUMNS; + $filename = self::$FOLDER . '-' . $from . '-' . $to . '.xlsx'; + + $spreadsheet = new Spreadsheet; + $spreadsheet->getProperties()->setTitle($filename); + $activeWorksheet = $spreadsheet->getActiveSheet(); + + $column = 1; + foreach ($value as $file) { + $data = file_get_contents($file); + $data = json_decode($data, true); + $json_string = json_encode($data, JSON_PRETTY_PRINT); + + $arr = explode(PHP_EOL, $json_string); + $row = 0; + foreach ($arr as $val) { + $row++; + $activeWorksheet->setCellValue([$column, $row], trim($val)); } + $column++; + } + + $spreadsheet->setActiveSheetIndex(0); + $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); + $writer->save(Sofascore::$storage . '/' . $filename); + } + } + + + public static function load_files() + { + $files = ZipFolder::get_tree(Sofascore::$storage . '/' . self::$FOLDER); + + $filtered = []; + foreach ($files as $file) { + $path_parts = pathinfo($file); + if (isset($path_parts['extension']) && $path_parts['extension'] == 'json') { + $filtered[] = $file; } } - $writer->close(); + return array_chunk($filtered, self::$MAXCOLUMNS); } } diff --git a/app/Filament/Clusters/StaticData/Resources/CompetitionGroups/CompetitionGroupResource.php b/app/Filament/Clusters/StaticData/Resources/CompetitionGroups/CompetitionGroupResource.php index 5b88c7e6..47676784 100644 --- a/app/Filament/Clusters/StaticData/Resources/CompetitionGroups/CompetitionGroupResource.php +++ b/app/Filament/Clusters/StaticData/Resources/CompetitionGroups/CompetitionGroupResource.php @@ -49,9 +49,4 @@ class CompetitionGroupResource extends Resource { return parent::getEloquentQuery()->count(); } - - public static function getNavigationBadgeColor(): ?string - { - return 'warning'; - } } diff --git a/app/Filament/Clusters/StaticData/Resources/Countries/CountryResource.php b/app/Filament/Clusters/StaticData/Resources/Countries/CountryResource.php index bfd77301..a4848304 100644 --- a/app/Filament/Clusters/StaticData/Resources/Countries/CountryResource.php +++ b/app/Filament/Clusters/StaticData/Resources/Countries/CountryResource.php @@ -142,11 +142,6 @@ class CountryResource extends Resource return parent::getEloquentQuery()->where('disabled', false)->count(); } - public static function getNavigationBadgeColor(): ?string - { - return 'warning'; - } - public static function getEloquentQuery(): Builder { return parent::getEloquentQuery()->where('disabled', false); diff --git a/app/Filament/Clusters/StaticData/Resources/Elements/ElementResource.php b/app/Filament/Clusters/StaticData/Resources/Elements/ElementResource.php index 8f35d27f..5aed9231 100644 --- a/app/Filament/Clusters/StaticData/Resources/Elements/ElementResource.php +++ b/app/Filament/Clusters/StaticData/Resources/Elements/ElementResource.php @@ -45,9 +45,4 @@ class ElementResource extends Resource { return parent::getEloquentQuery()->count(); } - - public static function getNavigationBadgeColor(): ?string - { - return 'warning'; - } } diff --git a/app/Filament/Clusters/StaticData/Resources/SofaScoreRosas/SofaScoreRosaResource.php b/app/Filament/Clusters/StaticData/Resources/SofaScoreRosas/SofaScoreRosaResource.php index 3bd74a1b..9eb4f95f 100644 --- a/app/Filament/Clusters/StaticData/Resources/SofaScoreRosas/SofaScoreRosaResource.php +++ b/app/Filament/Clusters/StaticData/Resources/SofaScoreRosas/SofaScoreRosaResource.php @@ -18,6 +18,8 @@ class SofaScoreRosaResource extends Resource protected static ?string $cluster = StaticDataCluster::class; + protected static ?int $navigationSort = 3; + protected static ?string $recordTitleAttribute = 'name'; protected static ?string $navigationLabel = 'Rosters'; diff --git a/app/Filament/Clusters/StaticData/Resources/SofaScoreTasks/SofaScoreTaskResource.php b/app/Filament/Clusters/StaticData/Resources/SofaScoreTasks/SofaScoreTaskResource.php index 8bc4597c..84b35765 100644 --- a/app/Filament/Clusters/StaticData/Resources/SofaScoreTasks/SofaScoreTaskResource.php +++ b/app/Filament/Clusters/StaticData/Resources/SofaScoreTasks/SofaScoreTaskResource.php @@ -24,7 +24,7 @@ class SofaScoreTaskResource extends Resource protected static ?string $modelLabel = 'Tasks'; - protected static ?int $navigationSort = 1; + protected static ?int $navigationSort = 2; protected static string|UnitEnum|null $navigationGroup = 'SofaScore'; diff --git a/app/Filament/Clusters/StaticData/Resources/SofaScoreTasks/Tables/SofaScoreTasksTable.php b/app/Filament/Clusters/StaticData/Resources/SofaScoreTasks/Tables/SofaScoreTasksTable.php index 8a97a813..ff57782e 100644 --- a/app/Filament/Clusters/StaticData/Resources/SofaScoreTasks/Tables/SofaScoreTasksTable.php +++ b/app/Filament/Clusters/StaticData/Resources/SofaScoreTasks/Tables/SofaScoreTasksTable.php @@ -22,9 +22,10 @@ class SofaScoreTasksTable ->icon(fn($record) => $record->sport->icon), TextColumn::make('sport.name'), TextColumn::make('mode') - ->label('Grapping dates') + ->label('Grapping Task') ->formatStateUsing(fn(string $state, $record): string => match ($state) { - 'daily' => 'Daily', + 'daily' => 'Daily run', + 'excel' => 'Import to Excel', 'date' => $record->day_from, 'range' => $record->day_from . ' <=> ' . $record->day_to, }), diff --git a/app/Filament/Clusters/StaticData/Resources/StatisticFixtures/StatisticFixturesResource.php b/app/Filament/Clusters/StaticData/Resources/StatisticFixtures/StatisticFixturesResource.php index 125ab4d5..d4155346 100644 --- a/app/Filament/Clusters/StaticData/Resources/StatisticFixtures/StatisticFixturesResource.php +++ b/app/Filament/Clusters/StaticData/Resources/StatisticFixtures/StatisticFixturesResource.php @@ -20,9 +20,9 @@ class StatisticFixturesResource extends Resource protected static ?string $modelLabel = 'Fixtures'; - protected static string|UnitEnum|null $navigationGroup = 'Statistiko'; + protected static string|UnitEnum|null $navigationGroup = 'SofaScore'; - protected static ?int $navigationSort = 2; + protected static ?int $navigationSort = 5; protected static ?string $cluster = StaticDataCluster::class; diff --git a/app/Filament/Clusters/StaticData/Resources/StatisticFixtures/Tables/StatisticFixturesTable.php b/app/Filament/Clusters/StaticData/Resources/StatisticFixtures/Tables/StatisticFixturesTable.php index 9a6c4680..7faf01a7 100644 --- a/app/Filament/Clusters/StaticData/Resources/StatisticFixtures/Tables/StatisticFixturesTable.php +++ b/app/Filament/Clusters/StaticData/Resources/StatisticFixtures/Tables/StatisticFixturesTable.php @@ -3,15 +3,19 @@ namespace App\Filament\Clusters\StaticData\Resources\StatisticFixtures\Tables; use App\Actions\LoadStatisticFixturesLeaguesOptions; +use App\Models\Sport; use Filament\Actions\BulkActionGroup; use Filament\Actions\DeleteAction; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; +use Filament\Forms\Components\Select; +use Filament\Schemas\Components\Utilities\Get; use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\TextColumn; use Filament\Tables\Enums\FiltersLayout; -use Filament\Tables\Filters\SelectFilter; +use Filament\Tables\Filters\Filter; use Filament\Tables\Table; +use Illuminate\Database\Eloquent\Builder; class StatisticFixturesTable { @@ -30,30 +34,51 @@ class StatisticFixturesTable TextColumn::make('league.name') ->label('League') ->searchable() - ->wrap() - ->tooltip(fn($record) => $record->league_id) - ->hidden(fn() => auth()->user()->sport_id == 5) - ->description(fn($record) => ucwords($record->league?->country->name)), + ->description( + fn($record) => $record->league->sofascore_category->name + ), TextColumn::make('starttime')->dateTime('Y-m-d H:i'), - TextColumn::make('home.name') + TextColumn::make('home.ss_team_name') ->tooltip(fn($record) => $record->home_id) ->color('primary') ->searchable(), - TextColumn::make('away.name') + TextColumn::make('away.ss_team_name') ->tooltip(fn($record) => $record->away_id) ->color('success') ->searchable(), - // TextColumn::make('exp_home')->alignCenter()->numeric(), - // TextColumn::make('exp_away')->alignCenter()->numeric(), TextColumn::make('updated_at')->alignCenter()->date(), ]) ->filters([ - SelectFilter::make('league_id') - ->options(fn() => LoadStatisticFixturesLeaguesOptions::load(1)) - ->preload() - ->searchable() - ->columnSpan(2) - ->label('League'), + Filter::make('fixture_filters') + ->columns(3) + ->columnSpan(3) + ->schema([ + Select::make('sport_id') + ->default(1) + ->options(fn() => Sport::query()->where('is_active', 1)->pluck('name', 'id')) + ->selectablePlaceholder(false) + ->label('Sport') + ->live(), + Select::make('league_id') + ->options(fn(Get $get) => LoadStatisticFixturesLeaguesOptions::load($get('sport_id'))) + ->preload() + ->searchable() + ->columnSpan(2) + ->label('League'), + ])->query(function (Builder $query, array $data): Builder { + return $query->when( + $data['league_id'], + function (Builder $query, $league_id) { + $query->where('league_id', $league_id)->orderBy('league_id'); + } + )->when( + $data['sport_id'], + function (Builder $query, $away_id) { + $query->where('sport_id', (int) $away_id); + } + ); + }), + ], layout: FiltersLayout::AboveContent) ->deferFilters(false) ->recordActions([ diff --git a/app/Filament/Clusters/StaticData/Resources/StatistikoDetails/StatistikoDetailResource.php b/app/Filament/Clusters/StaticData/Resources/StatistikoDetails/StatistikoDetailResource.php index 40287fe1..22286956 100644 --- a/app/Filament/Clusters/StaticData/Resources/StatistikoDetails/StatistikoDetailResource.php +++ b/app/Filament/Clusters/StaticData/Resources/StatistikoDetails/StatistikoDetailResource.php @@ -20,11 +20,11 @@ class StatistikoDetailResource extends Resource protected static ?string $modelLabel = 'Details'; - protected static string|UnitEnum|null $navigationGroup = 'Statistiko'; + protected static string|UnitEnum|null $navigationGroup = 'SofaScore'; protected static ?string $cluster = StaticDataCluster::class; - protected static ?int $navigationSort = 4; + protected static ?int $navigationSort = 9; protected static ?string $recordTitleAttribute = 'player_name'; diff --git a/app/Filament/Clusters/StaticData/Resources/StatistikoEvents/StatistikoEventsResource.php b/app/Filament/Clusters/StaticData/Resources/StatistikoEvents/StatistikoEventsResource.php index 3ffd6adf..65982900 100644 --- a/app/Filament/Clusters/StaticData/Resources/StatistikoEvents/StatistikoEventsResource.php +++ b/app/Filament/Clusters/StaticData/Resources/StatistikoEvents/StatistikoEventsResource.php @@ -20,9 +20,9 @@ class StatistikoEventsResource extends Resource protected static ?string $modelLabel = 'Events'; - protected static string|UnitEnum|null $navigationGroup = 'Statistiko'; + protected static string|UnitEnum|null $navigationGroup = 'SofaScore'; - protected static ?int $navigationSort = 3; + protected static ?int $navigationSort = 6; protected static ?string $cluster = StaticDataCluster::class; diff --git a/app/Filament/Clusters/StaticData/Resources/StatistikoEvents/Tables/StatistikoEventsTable.php b/app/Filament/Clusters/StaticData/Resources/StatistikoEvents/Tables/StatistikoEventsTable.php index 65332c44..7b3e6525 100644 --- a/app/Filament/Clusters/StaticData/Resources/StatistikoEvents/Tables/StatistikoEventsTable.php +++ b/app/Filament/Clusters/StaticData/Resources/StatistikoEvents/Tables/StatistikoEventsTable.php @@ -35,23 +35,12 @@ class StatistikoEventsTable TextColumn::make('match_id') ->sortable(), TextColumn::make('league.name') - ->searchable() - ->copyable() - ->copyMessage('Liga name copied') - ->description(fn($record) => ucwords($record->league?->country->name)) - ->copyMessageDuration(1500), - TextColumn::make('home.name') - ->searchable() - ->copyable() - ->copyMessage('Home team name copied') - ->copyMessageDuration(1500), - TextColumn::make('away.name') - ->searchable() - ->copyable() - ->copyMessage('Away team name copied') - ->copyMessageDuration(1500), + ->searchable(), + TextColumn::make('home.ss_team_name')->color('info') + ->searchable(), + TextColumn::make('away.ss_team_name')->color('success') + ->searchable(), TextColumn::make('starttime')->dateTime('Y-m-d H:i'), - ]) ->filters([ Filter::make('event_filters') diff --git a/app/Filament/Clusters/StaticData/Resources/StatistikoImports/StatistikaImportResource.php b/app/Filament/Clusters/StaticData/Resources/StatistikoImports/StatistikaImportResource.php index 15fda088..3c21423d 100644 --- a/app/Filament/Clusters/StaticData/Resources/StatistikoImports/StatistikaImportResource.php +++ b/app/Filament/Clusters/StaticData/Resources/StatistikoImports/StatistikaImportResource.php @@ -20,7 +20,7 @@ class StatistikaImportResource extends Resource protected static ?string $modelLabel = 'File Uploads'; - protected static string|UnitEnum|null $navigationGroup = 'Statistiko'; + protected static string|UnitEnum|null $navigationGroup = 'SofaScore'; protected static ?int $navigationSort = 1; diff --git a/app/Filament/Clusters/StaticData/Resources/StatistikoPlayers/StatistikoPlayerResource.php b/app/Filament/Clusters/StaticData/Resources/StatistikoPlayers/StatistikoPlayerResource.php index 6d52f902..17492452 100644 --- a/app/Filament/Clusters/StaticData/Resources/StatistikoPlayers/StatistikoPlayerResource.php +++ b/app/Filament/Clusters/StaticData/Resources/StatistikoPlayers/StatistikoPlayerResource.php @@ -20,11 +20,11 @@ class StatistikoPlayerResource extends Resource protected static ?string $modelLabel = 'Player'; - protected static string|UnitEnum|null $navigationGroup = 'Statistiko'; + protected static string|UnitEnum|null $navigationGroup = 'SofaScore'; protected static ?string $cluster = StaticDataCluster::class; - protected static ?int $navigationSort = 5; + protected static ?int $navigationSort = 8; protected static ?string $recordTitleAttribute = 'player.name'; diff --git a/app/Models/SofaScoreTournament.php b/app/Models/SofaScoreTournament.php index 0e248f81..cc287bcd 100644 --- a/app/Models/SofaScoreTournament.php +++ b/app/Models/SofaScoreTournament.php @@ -3,9 +3,14 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use MongoDB\Laravel\Eloquent\HybridRelations; class SofaScoreTournament extends Model { + use HybridRelations; + + protected $connection = 'mariadb'; + protected $fillable = [ 'id', 'sport_id', diff --git a/app/Models/StatisticFixtures.php b/app/Models/StatisticFixtures.php index 32fc660d..3bbef192 100644 --- a/app/Models/StatisticFixtures.php +++ b/app/Models/StatisticFixtures.php @@ -30,7 +30,7 @@ class StatisticFixtures extends Model public function league() { - return $this->belongsTo(CompetitionGroup::class); + return $this->belongsTo(SofaScoreTournament::class, 'league_id', 'tournament_id'); } public function home() diff --git a/app/Models/StatistikoEvent.php b/app/Models/StatistikoEvent.php index 235062e1..a793964e 100644 --- a/app/Models/StatistikoEvent.php +++ b/app/Models/StatistikoEvent.php @@ -53,18 +53,18 @@ class StatistikoEvent extends Model return $this->belongsTo(Sport::class, 'sport_id', 'id'); } - public function league(): BelongsTo + public function league() { - return $this->belongsTo(CompetitionGroup::class, 'league_id', 'id'); + return $this->belongsTo(SofaScoreTournament::class, 'league_id', 'tournament_id'); } public function home(): BelongsTo { - return $this->belongsTo(Element::class, 'home_id', 'id'); + return $this->belongsTo(SofaScoreRosa::class, 'home_id', 'ss_team_id'); } public function away(): BelongsTo { - return $this->belongsTo(Element::class, 'away_id', 'id'); + return $this->belongsTo(SofaScoreRosa::class, 'away_id', 'ss_team_id'); } } diff --git a/app/Providers/Filament/AdminPanelProvider.php b/app/Providers/Filament/AdminPanelProvider.php index 6f466825..e15ebaea 100644 --- a/app/Providers/Filament/AdminPanelProvider.php +++ b/app/Providers/Filament/AdminPanelProvider.php @@ -19,6 +19,7 @@ use Filament\Http\Middleware\Authenticate; use Filament\Http\Middleware\AuthenticateSession; use Filament\Http\Middleware\DisableBladeIconComponents; use Filament\Http\Middleware\DispatchServingFilamentEvent; +use Filament\Navigation\NavigationGroup; use Filament\Panel; use Filament\PanelProvider; use Filament\Support\Enums\Width; @@ -64,7 +65,6 @@ class AdminPanelProvider extends PanelProvider ->emailChangeVerification() ->databaseNotifications() ->databaseNotificationsPolling('10s') // default is 30 - ->sidebarCollapsibleOnDesktop() ->profile(isSimple: false) ->default() ->globalSearch(false) @@ -85,11 +85,10 @@ class AdminPanelProvider extends PanelProvider ->viteTheme('resources/css/filament/admin/theme.css') ->discoverResources(in: app_path('Filament/Resources'), for: 'App\Filament\Resources') ->discoverPages(in: app_path('Filament/Pages'), for: 'App\Filament\Pages') - // ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\Filament\Widgets') + ->discoverWidgets(in: app_path('Filament/Widgets'), for: 'App\Filament\Widgets') ->discoverClusters(in: app_path('Filament/Clusters'), for: 'App\\Filament\\Clusters') ->maxContentWidth(Width::ScreenTwoExtraLarge) ->breadcrumbs(false) - ->topNavigation() ->sidebarCollapsibleOnDesktop(false) ->userMenuItems([ 'profile' => Action::make('profile') diff --git a/composer.json b/composer.json index 424c7921..cbe5e486 100644 --- a/composer.json +++ b/composer.json @@ -22,6 +22,7 @@ "mongodb/laravel-mongodb": "^5.1", "mongodb/mongodb": "^2.2", "outhebox/blade-flags": "*", + "phpoffice/phpspreadsheet": "^5.9", "spatie/simple-excel": "^3.9", "stevebauman/location": "*", "swisnl/filament-backgrounds": "^2.0" diff --git a/composer.lock b/composer.lock index e56b8761..db60ab76 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "96261ec0c9ff5e24cff0f1ea3568f040", + "content-hash": "b00c887f246ff78cec67da8281097834", "packages": [ { "name": "agencetwogether/hookshelper", @@ -1023,6 +1023,82 @@ ], "time": "2026-07-18T12:35:13+00:00" }, + { + "name": "composer/pcre", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed", + "reference": "d5a341b3fb61f3001970940afb1d332968a183ed", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<2.2.2" + }, + "require-dev": { + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.4.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2026-06-07T11:47:49+00:00" + }, { "name": "danharrin/date-format-converter", "version": "v0.3.1", @@ -4089,6 +4165,191 @@ ], "time": "2026-06-27T03:16:11+00:00" }, + { + "name": "maennchen/zipstream-php", + "version": "3.2.2", + "source": { + "type": "git", + "url": "https://github.com/maennchen/ZipStream-PHP.git", + "reference": "77bebeb4c6c340bb3c11c843b2cffd8bbfde4d5e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/77bebeb4c6c340bb3c11c843b2cffd8bbfde4d5e", + "reference": "77bebeb4c6c340bb3c11c843b2cffd8bbfde4d5e", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "ext-zlib": "*", + "php-64bit": "^8.3" + }, + "require-dev": { + "brianium/paratest": "^7.7", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.86", + "guzzlehttp/guzzle": "^7.5", + "mikey179/vfsstream": "^1.6", + "php-coveralls/php-coveralls": "^2.5", + "phpunit/phpunit": "^12.0", + "vimeo/psalm": "^6.0" + }, + "suggest": { + "guzzlehttp/psr7": "^2.4", + "psr/http-message": "^2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZipStream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Paul Duncan", + "email": "pabs@pablotron.org" + }, + { + "name": "Jonatan Männchen", + "email": "jonatan@maennchen.ch" + }, + { + "name": "Jesse Donat", + "email": "donatj@gmail.com" + }, + { + "name": "András Kolesár", + "email": "kolesar@kolesar.hu" + } + ], + "description": "ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the disk at all on the server.", + "keywords": [ + "stream", + "zip" + ], + "support": { + "issues": "https://github.com/maennchen/ZipStream-PHP/issues", + "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.2.2" + }, + "funding": [ + { + "url": "https://github.com/maennchen", + "type": "github" + } + ], + "time": "2026-04-11T18:38:28+00:00" + }, + { + "name": "markbaker/complex", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPComplex.git", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPComplex/zipball/95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "reference": "95c56caa1cf5c766ad6d65b6344b807c1e8405b9", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Complex\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@lange.demon.co.uk" + } + ], + "description": "PHP Class for working with complex numbers", + "homepage": "https://github.com/MarkBaker/PHPComplex", + "keywords": [ + "complex", + "mathematics" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPComplex/issues", + "source": "https://github.com/MarkBaker/PHPComplex/tree/3.0.2" + }, + "time": "2022-12-06T16:21:08+00:00" + }, + { + "name": "markbaker/matrix", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/MarkBaker/PHPMatrix.git", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/MarkBaker/PHPMatrix/zipball/728434227fe21be27ff6d86621a1b13107a2562c", + "reference": "728434227fe21be27ff6d86621a1b13107a2562c", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-master", + "phpcompatibility/php-compatibility": "^9.3", + "phpdocumentor/phpdocumentor": "2.*", + "phploc/phploc": "^4.0", + "phpmd/phpmd": "2.*", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", + "sebastian/phpcpd": "^4.0", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "autoload": { + "psr-4": { + "Matrix\\": "classes/src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mark Baker", + "email": "mark@demon-angel.eu" + } + ], + "description": "PHP Class for working with matrices", + "homepage": "https://github.com/MarkBaker/PHPMatrix", + "keywords": [ + "mathematics", + "matrix", + "vector" + ], + "support": { + "issues": "https://github.com/MarkBaker/PHPMatrix/issues", + "source": "https://github.com/MarkBaker/PHPMatrix/tree/3.0.1" + }, + "time": "2022-12-02T22:17:43+00:00" + }, { "name": "masterminds/html5", "version": "2.10.1", @@ -5334,6 +5595,115 @@ }, "time": "2025-09-24T15:06:41+00:00" }, + { + "name": "phpoffice/phpspreadsheet", + "version": "5.9.0", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", + "reference": "05e99ebf61238a70227b4d9cc02d0030d34f6339" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/05e99ebf61238a70227b4d9cc02d0030d34f6339", + "reference": "05e99ebf61238a70227b4d9cc02d0030d34f6339", + "shasum": "" + }, + "require": { + "composer/pcre": "^1||^2||^3", + "ext-ctype": "*", + "ext-dom": "*", + "ext-fileinfo": "*", + "ext-filter": "*", + "ext-gd": "*", + "ext-iconv": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-simplexml": "*", + "ext-xml": "*", + "ext-xmlreader": "*", + "ext-xmlwriter": "*", + "ext-zip": "*", + "ext-zlib": "*", + "maennchen/zipstream-php": "^2.1 || ^3.0", + "markbaker/complex": "^3.0", + "markbaker/matrix": "^3.0", + "php": "^8.2", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "dev-main", + "dompdf/dompdf": "^2.0 || ^3.0", + "ext-intl": "*", + "friendsofphp/php-cs-fixer": "^3.2", + "mitoteam/jpgraph": "^10.5", + "mpdf/mpdf": "^8.1.1", + "phpcompatibility/php-compatibility": "^9.3", + "phpstan/phpstan": "^1.1 || ^2.0", + "phpstan/phpstan-deprecation-rules": "^1.0 || ^2.0", + "phpstan/phpstan-phpunit": "^1.0 || ^2.0", + "phpunit/phpunit": "^10.5 || ^11.0", + "squizlabs/php_codesniffer": "^3.7", + "tecnickcom/tcpdf": "^6.5" + }, + "suggest": { + "dompdf/dompdf": "Option for rendering PDF with PDF Writer", + "ext-intl": "PHP Internationalization Functions, required for NumberFormat Wizard and StringHelper::setLocale()", + "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", + "mpdf/mpdf": "Option for rendering PDF with PDF Writer", + "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" + }, + "type": "library", + "autoload": { + "psr-4": { + "PhpOffice\\PhpSpreadsheet\\": "src/PhpSpreadsheet" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "https://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker", + "homepage": "https://markbakeruk.net" + }, + { + "name": "Franck Lefevre", + "homepage": "https://rootslabs.net" + }, + { + "name": "Erik Tilt" + }, + { + "name": "Adrien Crivelli" + }, + { + "name": "Owen Leibman" + } + ], + "description": "PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "https://github.com/PHPOffice/PhpSpreadsheet", + "keywords": [ + "OpenXML", + "excel", + "gnumeric", + "ods", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "support": { + "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/5.9.0" + }, + "time": "2026-07-12T19:17:39+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.5",