160 lines
6.6 KiB
PHP
160 lines
6.6 KiB
PHP
<?php
|
|
|
|
namespace App\Filament\Pages\Selections;
|
|
|
|
use App\Filament\Pages\Selections\Helper\GetSeason;
|
|
use App\Models\StatistikoDetail;
|
|
use App\Models\StatistikoEvent;
|
|
use App\Models\StatistikoPlayer;
|
|
|
|
class LoadPlayerSelection
|
|
{
|
|
public static function load(?array $arr)
|
|
{
|
|
$team_id = $arr['team_id'];
|
|
|
|
$team_position = $arr['team_position'];
|
|
|
|
$season = GetSeason::load($arr['season'], $arr['season_mode']);
|
|
|
|
$matches = StatistikoEvent::whereIn('season', $season)
|
|
->where(function ($query) use ($team_id, $team_position) {
|
|
switch ($team_position) {
|
|
case 'home':
|
|
return $query->where('home_id', '=', $team_id);
|
|
case 'away':
|
|
return $query->where('away_id', '=', $team_id);
|
|
default:
|
|
return $query->where('home_id', '=', $team_id)
|
|
->orWhere('away_id', '=', $team_id);
|
|
}
|
|
})->get();
|
|
|
|
$matches_count = $matches->count();
|
|
|
|
$positions_map = LoadPositions::load();
|
|
$player_name_map = [];
|
|
$res = StatistikoDetail::where('ss_team_id', $team_id)->get();
|
|
foreach ($res as $val) {
|
|
$player_name_map[$val->ss_player_id]['name'] = $val->player_name;
|
|
$player_name_map[$val->ss_player_id]['pos'] = $val->position;
|
|
$player_name_map[$val->ss_player_id]['foot'] = $val->preferred_foot;
|
|
}
|
|
|
|
$arr = [];
|
|
foreach ($matches as $match) {
|
|
$players = StatistikoPlayer::where('match_id', $match->match_id)->get();
|
|
foreach ($players as $val) {
|
|
$ss_player_id = (int) $val->ss_player_id;
|
|
|
|
if (isset($player_name_map[$ss_player_id])) {
|
|
|
|
$activeteam_id = (int) $val->activeteam_id;
|
|
$minutes_played = (int) $val->minutes_played;
|
|
|
|
if (! isset($arr[$ss_player_id])) {
|
|
self::array_template($arr, $ss_player_id);
|
|
$arr[$ss_player_id]['player_name'] = $player_name_map[$ss_player_id]['name'] ?? '';
|
|
$arr[$ss_player_id]['preferred_foot'] = $player_name_map[$ss_player_id]['foot'] ?? '';
|
|
$arr[$ss_player_id]['player_position'] = $player_name_map[$ss_player_id]['pos'] ?? '';
|
|
$arr[$ss_player_id]['color_level'] = round($matches_count / 3);
|
|
}
|
|
|
|
if ($activeteam_id == $match->home_id) {
|
|
$arr[$ss_player_id]['events_played_home'] += 1;
|
|
$arr[$ss_player_id]['minutes_played_home'] += $minutes_played;
|
|
$arr[$ss_player_id]['events_played_home'] += 1;
|
|
$arr[$ss_player_id]['minutes_played_home'] += $minutes_played;
|
|
} elseif ($activeteam_id == $match->away_id) {
|
|
$arr[$ss_player_id]['events_played_away'] += 1;
|
|
$arr[$ss_player_id]['minutes_played_away'] += $minutes_played;
|
|
$arr[$ss_player_id]['events_played_away'] += 1;
|
|
$arr[$ss_player_id]['minutes_played_away'] += $minutes_played;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$result = [];
|
|
foreach ($arr as $player_id => $val) {
|
|
|
|
switch ($team_position) {
|
|
case 'home':
|
|
$events_played = $val['events_played_home'];
|
|
$minues_played = $val['minutes_played_home'];
|
|
break;
|
|
case 'away':
|
|
$events_played = $val['events_played_away'];
|
|
$minues_played = $val['minutes_played_away'];
|
|
break;
|
|
default:
|
|
$events_played = $val['events_played_home'] + $val['events_played_away'];
|
|
$minues_played = $val['minutes_played_home'] + $val['minutes_played_home'];
|
|
break;
|
|
}
|
|
|
|
$colorlevel = round($matches_count / 3);
|
|
|
|
if (in_array($val['player_position'], $positions_map['MIDFIELD'])) {
|
|
$position = 'MIDFIELD';
|
|
} elseif (in_array($val['player_position'], $positions_map['DEFENCE'])) {
|
|
$position = 'DEFENCE';
|
|
} elseif (in_array($val['player_position'], $positions_map['ATTACK'])) {
|
|
$position = 'ATTACK';
|
|
} elseif (in_array($val['player_position'], $positions_map['GOALKEEPER'])) {
|
|
$position = 'GOALKEEPER';
|
|
} else {
|
|
$position = 'NO SPECIFIC POSITION';
|
|
}
|
|
|
|
$infostring = '';
|
|
|
|
if ($colorlevel > 1 && $events_played < $colorlevel) {
|
|
$infostring = '<div class="w-full text-red-600 dark:text-red-500 cursor-pointer flex flex-row gap-1">';
|
|
} elseif ($events_played < $colorlevel * 2) {
|
|
$infostring = '<div class="w-full text-blue-600 dark:text-blue-500 cursor-pointer flex flex-row gap-1">';
|
|
} else {
|
|
$infostring = '<div class="w-full text-green-600 dark:text-green-500 cursor-pointer flex flex-row gap-1">';
|
|
}
|
|
$infostring .= '<div class="flex-1 font-bold">'.$val['player_name'].' '.$val['player_position'].'</div>';
|
|
$infostring .= '<div>'.$events_played.' Events,</div>';
|
|
$infostring .= '<div>'.$val['preferred_foot'].' foot,</div>';
|
|
if ($events_played) {
|
|
$infostring .= '<div>Av. on field '.round($minues_played / $events_played).'min</div>';
|
|
}
|
|
$infostring .= '</div>';
|
|
$result[$position][$player_id] = $infostring;
|
|
}
|
|
|
|
// if ($result) {
|
|
// SofaScorePlayerCache::updateOrCreate(['hash' => $hash], ['players' => $result]);
|
|
// }
|
|
|
|
return $result;
|
|
}
|
|
|
|
public static function convertToHoursMins(int $time, $format = '%02dh:%02dm')
|
|
{
|
|
if ($time < 1) {
|
|
return;
|
|
}
|
|
|
|
$hours = floor($time / 60);
|
|
$minutes = $time % 60;
|
|
|
|
return sprintf($format, $hours, $minutes);
|
|
}
|
|
|
|
public static function array_template(array &$arr, int $ss_player_id)
|
|
{
|
|
$arr[$ss_player_id]['ss_player_id'] = 0;
|
|
$arr[$ss_player_id]['color_level'] = 0;
|
|
$arr[$ss_player_id]['preferred_foot'] = '';
|
|
$arr[$ss_player_id]['player_position'] = '';
|
|
$arr[$ss_player_id]['events_played_home'] = 0;
|
|
$arr[$ss_player_id]['events_played_away'] = 0;
|
|
$arr[$ss_player_id]['minutes_played_home'] = 0;
|
|
$arr[$ss_player_id]['minutes_played_away'] = 0;
|
|
}
|
|
}
|