@php /** * Campanhas da biblioteca, no card da /radio/home. * * library_add e catalogo global da Brascast: a mesma campanha vale para * todas as radios, e por isso a consulta nao filtra por porta. * * Substitui o calendarWidget, que era o widget antigo em Bootstrap com * fontes de 9 a 12px. O dado exibido e o mesmo: estacao do ano, a campanha * no ar com quanto falta para acabar, e as proximas com a data de estreia. */ $hoje = \Illuminate\Support\Carbon::today(); $mes = $hoje->month; $dia = $hoje->day; /* Icone do Font Awesome e cor propria por estacao, no lugar do emoji, que muda de desenho conforme o sistema de quem olha e nao aceita cor. */ if (($mes == 12 && $dia >= 21) || $mes <= 2 || ($mes == 3 && $dia <= 20)) { $estacao = ['nome' => __('radio.calendar_season_summer'), 'icone' => 'fa-sun', 'chave' => 'summer']; } elseif (($mes == 3 && $dia >= 21) || ($mes >= 4 && $mes <= 5) || ($mes == 6 && $dia <= 20)) { $estacao = ['nome' => __('radio.calendar_season_autumn'), 'icone' => 'fa-leaf', 'chave' => 'autumn']; } elseif (($mes == 6 && $dia >= 21) || ($mes >= 7 && $mes <= 8) || ($mes == 9 && $dia <= 22)) { $estacao = ['nome' => __('radio.calendar_season_winter'), 'icone' => 'fa-snowflake', 'chave' => 'winter']; } else { $estacao = ['nome' => __('radio.calendar_season_spring'), 'icone' => 'fa-seedling', 'chave' => 'spring']; } /** * O icone sai do assunto da campanha, pelo nome dela. * * Nao ha coluna de icone em library_add. Aqui era emoji, que muda de * desenho conforme o sistema de quem olha e nao aceita cor; icone do Font * Awesome, que a tela ja carrega, desenha igual em todo lugar e herda a cor * do bloco. */ $iconeDe = function (string $nome): string { $n = mb_strtolower($nome, 'UTF-8'); $mapa = [ 'fa-heart-pulse' => ['câncer', 'cancer', 'saúde', 'vacinação', 'dengue', 'fumo', 'obesidade', 'bucal', 'dst', 'hepatite', 'autismo', 'alzheimer', 'mamografia'], 'fa-venus' => ['mulher', 'mãe', 'mães', 'violência', 'agosto lilás', 'feminicídio'], 'fa-child-reaching' => ['criança', 'crianças', 'adoção'], 'fa-heart' => ['namorados'], 'fa-droplet' => ['sangue', 'órgãos', 'orgaos'], 'fa-water' => ['água', 'oceanos', 'rio'], 'fa-tree' => ['floresta', 'ecolog', 'amazônia', 'meio ambiente'], 'fa-flag' => ['independência', 'república', 'tiradentes', 'soldado', 'símbolos', 'constituição', 'proclamação'], 'fa-ghost' => ['halloween', 'bruxas', 'finados'], 'fa-masks-theater' => ['carnaval'], 'fa-book-open' => ['professor', 'escola', 'educação', 'alfabetização', 'escritor', 'comunicação', 'imprensa', 'jornalista'], 'fa-people-roof' => ['pai', 'família', 'familia'], 'fa-hand-fist' => ['negro', 'consciência negra', 'direitos humanos', 'holocausto', 'indígena', 'intolerância', 'lgbt'], 'fa-mug-hot' => ['café'], 'fa-music' => ['música', 'musica', 'rock', 'rádio', 'radio', 'radialista', 'músico'], 'fa-seedling' => ['agricultor', 'agricultur'], 'fa-check-to-slot' => ['voto', 'eleição', 'eleições'], 'fa-bag-shopping' => ['cliente', 'consumidor', 'compras', 'natal', 'black friday'], ]; foreach ($mapa as $icone => $palavras) { foreach ($palavras as $palavra) { if (str_contains($n, $palavra)) { return $icone; } } } return 'fa-calendar-day'; }; /** * O nome da campanha escrito como se escreve em portugues. * * O catalogo tem nome de todo jeito ("Setembro amarelo", "outubro rosa"), * e Str::title() subia tudo, inclusive ligacao: "Dia Das Criancas". Aqui * cada palavra sobe, menos as ligacoes, que so sobem quando abrem o nome. * Sigla passa intacta: palavra com maiuscula fora da primeira letra nao e * mexida. */ $tituloDe = function (string $nome): string { $ligacoes = ['a', 'as', 'à', 'às', 'ao', 'aos', 'da', 'das', 'de', 'do', 'dos', 'e', 'em', 'na', 'nas', 'no', 'nos', 'o', 'os', 'ou', 'para', 'pela', 'pelo', 'por', 'com', 'sem', 'sob', 'sobre']; $palavras = preg_split('/(\s+)/u', trim($nome), -1, PREG_SPLIT_DELIM_CAPTURE); $primeira = true; foreach ($palavras as $i => $palavra) { if (trim($palavra) === '') { continue; } $resto = mb_substr($palavra, 1); /* sigla ou nome ja escrito com maiuscula no meio fica como esta */ if ($resto !== mb_strtolower($resto, 'UTF-8')) { $primeira = false; continue; } $baixa = mb_strtolower($palavra, 'UTF-8'); $palavras[$i] = (! $primeira && in_array($baixa, $ligacoes, true)) ? $baixa : mb_strtoupper(mb_substr($baixa, 0, 1), 'UTF-8') . mb_substr($baixa, 1); $primeira = false; } return implode('', $palavras); }; $ativas = []; $proximas = []; $linhas = \Illuminate\Support\Facades\DB::table('library_add') ->where('type', '2') ->whereNotNull('campaign_start_date') ->whereNotNull('campaign_end_date') ->get(); foreach ($linhas as $linha) { try { $ini = \Illuminate\Support\Carbon::parse($linha->campaign_start_date)->startOfDay(); $fim = \Illuminate\Support\Carbon::parse($linha->campaign_end_date)->endOfDay(); } catch (\Throwable $e) { continue; } $item = ['nome' => $tituloDe((string) $linha->name), 'ini' => $ini, 'fim' => $fim]; if ($hoje->between($ini, $fim)) { /* dias inteiros entre hoje e o ultimo dia: o que acaba hoje da zero, e zero tem frase propria porque "0 dias restantes" parece defeito */ $item['restam'] = max(0, (int) $hoje->diffInDays($fim->copy()->startOfDay(), true)); $ativas[] = $item; } elseif ($hoje->lt($ini)) { $item['faltam'] = (int) $hoje->diffInDays($ini, true); $proximas[] = $item; } } usort($ativas, fn ($a, $b) => $a['fim'] <=> $b['fim']); usort($proximas, fn ($a, $b) => $a['ini'] <=> $b['ini']); /* sem nenhuma no ar, a proxima assume o destaque */ $destaque = $ativas ?: array_slice($proximas, 0, 1); $lista = $ativas ? array_slice($proximas, 0, 3) : array_slice($proximas, 1, 3); @endphp

{{ __('radio.calendar_title') }}

{{ $estacao['nome'] }}
@forelse($destaque as $campanha)
{{ $campanha['nome'] }} @if(isset($campanha['restam'])) @if($campanha['restam'] === 0) {{ __('radio.calendar_last_day') }} @else {{ trans_choice('radio.calendar_left', $campanha['restam'], ['n' => $campanha['restam']]) }} @endif @else {{ trans_choice('radio.calendar_to_start', $campanha['faltam'], ['n' => $campanha['faltam']]) }} @endif
@empty

{{ __('radio.calendar_empty') }}

@endforelse @if($lista)

{{ __('radio.calendar_next') }}

@endif