@php
/*
|--------------------------------------------------------------------------
| Hora correcta para Bolivia
|--------------------------------------------------------------------------
*/
$fechaBolivia = now()->timezone('America/La_Paz')->format('d/m/Y H:i');
/*
|--------------------------------------------------------------------------
| Buscar imagen local
|--------------------------------------------------------------------------
*/
$buscarImagenPublica = function ($base, $carpetas = ['img']) {
$extensiones = ['png', 'jpg', 'jpeg', 'webp', 'svg'];
foreach ($carpetas as $carpeta) {
foreach ($extensiones as $ext) {
$ruta = "{$carpeta}/{$base}.{$ext}";
if (file_exists(public_path($ruta))) {
return asset($ruta);
}
}
}
return null;
};
$imagenCopa = $buscarImagenPublica('copa', ['img', 'img/welcome']);
/*
|--------------------------------------------------------------------------
| Código FIFA a ISO para banderas
|--------------------------------------------------------------------------
*/
$codigoIsoBandera = [
'MEX' => 'mx', 'RSA' => 'za', 'KOR' => 'kr', 'CZE' => 'cz',
'USA' => 'us', 'PAR' => 'py', 'CAN' => 'ca', 'BIH' => 'ba',
'POR' => 'pt', 'SUI' => 'ch', 'ECU' => 'ec', 'GER' => 'de',
'CIV' => 'ci', 'NED' => 'nl', 'BRA' => 'br', 'MAR' => 'ma',
'FRA' => 'fr', 'ARG' => 'ar', 'CRO' => 'hr', 'ENG' => 'gb-eng',
'ESP' => 'es', 'ITA' => 'it', 'BEL' => 'be', 'URU' => 'uy',
'COL' => 'co', 'JPN' => 'jp', 'GHA' => 'gh', 'ALG' => 'dz',
'AUS' => 'au', 'AUT' => 'at', 'DEN' => 'dk', 'NOR' => 'no',
'SWE' => 'se', 'POL' => 'pl', 'SEN' => 'sn', 'EGY' => 'eg',
'TUN' => 'tn', 'IRN' => 'ir', 'IRQ' => 'iq', 'KSA' => 'sa',
'SAU' => 'sa', 'JOR' => 'jo', 'UZB' => 'uz', 'NZL' => 'nz',
'PAN' => 'pa', 'CRC' => 'cr', 'CUR' => 'cw', 'CUW' => 'cw',
'CPV' => 'cv', 'COD' => 'cd', 'DRC' => 'cd', 'QAT' => 'qa',
'UAE' => 'ae', 'CHI' => 'cl', 'CHL' => 'cl', 'PER' => 'pe',
'BOL' => 'bo', 'VEN' => 've', 'UKR' => 'ua', 'TUR' => 'tr',
'GRE' => 'gr', 'ROU' => 'ro', 'SRB' => 'rs', 'HAI' => 'ht',
'JAM' => 'jm', 'SCO' => 'gb-sct', 'WAL' => 'gb-wls',
];
/*
|--------------------------------------------------------------------------
| Nombre a ISO para banderas
|--------------------------------------------------------------------------
*/
$isoPorNombre = [
'mexico' => 'mx',
'sudafrica' => 'za',
'corea del sur' => 'kr',
'republica checa' => 'cz',
'estados unidos' => 'us',
'paraguay' => 'py',
'canada' => 'ca',
'bosnia y herzegovina' => 'ba',
'portugal' => 'pt',
'suiza' => 'ch',
'ecuador' => 'ec',
'alemania' => 'de',
'costa de marfil' => 'ci',
'paises bajos' => 'nl',
'brasil' => 'br',
'marruecos' => 'ma',
'francia' => 'fr',
'argentina' => 'ar',
'croacia' => 'hr',
'inglaterra' => 'gb-eng',
'espana' => 'es',
'italia' => 'it',
'belgica' => 'be',
'uruguay' => 'uy',
'colombia' => 'co',
'japon' => 'jp',
'ghana' => 'gh',
'argelia' => 'dz',
'australia' => 'au',
'austria' => 'at',
'dinamarca' => 'dk',
'noruega' => 'no',
'suecia' => 'se',
'polonia' => 'pl',
'senegal' => 'sn',
'egipto' => 'eg',
'tunez' => 'tn',
'iran' => 'ir',
'irak' => 'iq',
'arabia saudita' => 'sa',
'jordania' => 'jo',
'uzbekistan' => 'uz',
'nueva zelanda' => 'nz',
'panama' => 'pa',
'costa rica' => 'cr',
'curazao' => 'cw',
'cabo verde' => 'cv',
'rd congo' => 'cd',
'republica democratica del congo' => 'cd',
'escocia' => 'gb-sct',
'gales' => 'gb-wls',
'haiti' => 'ht',
];
$normalizarTexto = function ($texto) {
$texto = mb_strtolower(trim((string) $texto), 'UTF-8');
$buscar = ['á','é','í','ó','ú','ñ','ü'];
$reemplazar = ['a','e','i','o','u','n','u'];
return str_replace($buscar, $reemplazar, $texto);
};
$codigoEquipo = function ($equipo, $origen = null) {
if ($equipo) {
return strtoupper($equipo->codigo ?? mb_substr($equipo->nombre ?? 'EQ', 0, 3));
}
return strtoupper($origen ?: '---');
};
$nombreEquipo = function ($equipo, $origen = null) {
if ($equipo) {
return $equipo->nombre ?? $equipo->codigo ?? 'Equipo';
}
return $origen ?: 'Pendiente';
};
$banderaEquipo = function ($equipo) use ($codigoIsoBandera, $isoPorNombre, $normalizarTexto) {
if (!$equipo) {
return null;
}
$bandera = $equipo->bandera ?? null;
$codigo = strtoupper(trim((string) ($equipo->codigo ?? '')));
$nombre = trim((string) ($equipo->nombre ?? ''));
if ($bandera) {
if (str_starts_with($bandera, 'http')) {
return $bandera;
}
$posiblesRutas = [
$bandera,
'storage/' . $bandera,
'img/flags/' . $bandera,
'img/banderas/' . $bandera,
];
foreach ($posiblesRutas as $ruta) {
if (file_exists(public_path($ruta))) {
return asset($ruta);
}
}
}
$candidatos = [];
if ($codigo) {
$candidatos[] = strtolower($codigo);
$candidatos[] = strtoupper($codigo);
if (isset($codigoIsoBandera[$codigo])) {
$candidatos[] = $codigoIsoBandera[$codigo];
}
}
if ($nombre) {
$nombreNormalizado = $normalizarTexto($nombre);
if (isset($isoPorNombre[$nombreNormalizado])) {
$candidatos[] = $isoPorNombre[$nombreNormalizado];
}
}
$extensiones = ['png', 'jpg', 'jpeg', 'webp', 'svg'];
foreach (array_unique($candidatos) as $base) {
foreach ($extensiones as $ext) {
$rutas = [
"img/flags/{$base}.{$ext}",
"img/banderas/{$base}.{$ext}",
"flags/{$base}.{$ext}",
"banderas/{$base}.{$ext}",
];
foreach ($rutas as $ruta) {
if (file_exists(public_path($ruta))) {
return asset($ruta);
}
}
}
}
$iso = null;
if ($codigo && isset($codigoIsoBandera[$codigo])) {
$iso = $codigoIsoBandera[$codigo];
}
if (!$iso && $nombre) {
$nombreNormalizado = $normalizarTexto($nombre);
$iso = $isoPorNombre[$nombreNormalizado] ?? null;
}
if ($iso) {
return "https://flagcdn.com/w80/{$iso}.png";
}
return null;
};
$renderBandera = function ($equipo, $origen = null) use ($banderaEquipo, $codigoEquipo) {
$src = $banderaEquipo($equipo);
$codigo = $codigoEquipo($equipo, $origen);
if ($src) {
return '
' . e($codigo) . '
';
}
return '' . e($codigo) . '';
};
$partidoN = function ($numero) use ($partidos) {
return $partidos->firstWhere('numero', $numero);
};
$equipoLocal = function ($partido) use ($pronosticos) {
if (!$partido) return null;
$p = $pronosticos[$partido->id] ?? null;
if ($partido->numero <= 72) {
return $partido->local;
}
return $p?->local ?: $partido->local;
};
$equipoVisitante = function ($partido) use ($pronosticos) {
if (!$partido) return null;
$p = $pronosticos[$partido->id] ?? null;
if ($partido->numero <= 72) {
return $partido->visitante;
}
return $p?->visitante ?: $partido->visitante;
};
$scoreLocal = function ($partido) use ($pronosticos) {
if (!$partido) return '-';
$p = $pronosticos[$partido->id] ?? null;
return $p?->goles_local !== null ? $p->goles_local : '-';
};
$scoreVisitante = function ($partido) use ($pronosticos) {
if (!$partido) return '-';
$p = $pronosticos[$partido->id] ?? null;
return $p?->goles_visitante !== null ? $p->goles_visitante : '-';
};
$ganadorPenales = function ($partido) use ($pronosticos) {
if (!$partido) return null;
$p = $pronosticos[$partido->id] ?? null;
if (!$p) return null;
if (
$p->goles_local !== null &&
$p->goles_visitante !== null &&
(int) $p->goles_local === (int) $p->goles_visitante &&
$p->ganador_pronosticado_id
) {
return \App\Models\Equipo::find($p->ganador_pronosticado_id);
}
return null;
};
$matchBox = function ($numero) use (
$partidoN,
$equipoLocal,
$equipoVisitante,
$scoreLocal,
$scoreVisitante,
$ganadorPenales,
$renderBandera,
$nombreEquipo,
$codigoEquipo
) {
$partido = $partidoN($numero);
if (!$partido) {
return '
| # | Equipo | PTS | DG |
|---|---|---|---|
| {{ $f['posicion'] ?? '-' }} |
{!! $renderBandera($eq) !!}
{{ $eq->codigo ?? mb_substr($eq->nombre ?? '---', 0, 10) }}
|
{{ $f['pts'] ?? 0 }} | {{ $f['dg'] ?? 0 }} |
| # | Equipo | PTS | DG |
|---|---|---|---|
| {{ $f['posicion'] ?? '-' }} |
{!! $renderBandera($eq) !!}
{{ $eq->codigo ?? mb_substr($eq->nombre ?? '---', 0, 10) }}
|
{{ $f['pts'] ?? 0 }} | {{ $f['dg'] ?? 0 }} |