Add common isEmbeddable trait for public pages.

This commit is contained in:
Buster Neece 2024-01-20 17:03:14 -06:00
parent e1f7a745ad
commit 8c4a4b8a76
No known key found for this signature in database
4 changed files with 40 additions and 12 deletions

View File

@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App\Controller\Frontend\PublicPages;
use App\Container\EntityManagerAwareTrait;
use App\Controller\Frontend\PublicPages\Traits\IsEmbeddable;
use App\Controller\SingleActionInterface;
use App\Exception\NotFoundException;
use App\Http\Response;
@ -14,15 +15,13 @@ use Psr\Http\Message\ResponseInterface;
final class OnDemandAction implements SingleActionInterface
{
use EntityManagerAwareTrait;
use IsEmbeddable;
public function __invoke(
ServerRequest $request,
Response $response,
array $params
): ResponseInterface {
/** @var string|null $embed */
$embed = $params['embed'] ?? null;
$station = $request->getStation();
if (!$station->getEnablePublicPage()) {
@ -50,7 +49,7 @@ final class OnDemandAction implements SingleActionInterface
$router = $request->getRouter();
$pageClass = 'ondemand station-' . $station->getShortName();
if (null !== $embed) {
if ($this->isEmbedded($request, $params)) {
$pageClass .= ' embed';
}

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Controller\Frontend\PublicPages;
use App\Controller\Frontend\PublicPages\Traits\IsEmbeddable;
use App\Controller\SingleActionInterface;
use App\Entity\Repository\CustomFieldRepository;
use App\Exception\NotFoundException;
@ -14,6 +15,8 @@ use Psr\Http\Message\ResponseInterface;
final class PlayerAction implements SingleActionInterface
{
use IsEmbeddable;
public function __construct(
private readonly CustomFieldRepository $customFieldRepo,
private readonly NowPlayingComponent $nowPlayingComponent
@ -25,8 +28,7 @@ final class PlayerAction implements SingleActionInterface
Response $response,
array $params
): ResponseInterface {
/** @var string|null $embed */
$embed = $params['embed'] ?? null;
$embed = $this->isEmbedded($request, $params);
$response = $response
->withHeader('X-Frame-Options', '*')
@ -44,10 +46,10 @@ final class PlayerAction implements SingleActionInterface
$props = $this->nowPlayingComponent->getProps($request);
// Render embedded player.
if (!empty($embed)) {
if ($embed) {
$pageClasses = [];
$pageClasses[] = 'page-station-public-player-embed station-' . $station->getShortName();
$pageClasses[] = ('social' === $embed) ? 'embed-social' : 'embed';
$pageClasses[] = ('social' === ($params['embed'] ?? null)) ? 'embed-social' : 'embed';
$view = $request->getView();

View File

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace App\Controller\Frontend\PublicPages;
use App\Controller\Frontend\PublicPages\Traits\IsEmbeddable;
use App\Controller\SingleActionInterface;
use App\Exception\NotFoundException;
use App\Http\Response;
@ -12,14 +13,13 @@ use Psr\Http\Message\ResponseInterface;
final class ScheduleAction implements SingleActionInterface
{
use IsEmbeddable;
public function __invoke(
ServerRequest $request,
Response $response,
array $params
): ResponseInterface {
/** @var string|null $embed */
$embed = $params['embed'] ?? null;
$station = $request->getStation();
if (!$station->getEnablePublicPage()) {
@ -29,7 +29,7 @@ final class ScheduleAction implements SingleActionInterface
$router = $request->getRouter();
$pageClass = 'schedule station-' . $station->getShortName();
if (null !== $embed) {
if ($this->isEmbedded($request, $params)) {
$pageClass .= ' embed';
}

View File

@ -0,0 +1,27 @@
<?php
declare(strict_types=1);
namespace App\Controller\Frontend\PublicPages\Traits;
use App\Http\ServerRequest;
use App\Utilities\Types;
trait IsEmbeddable
{
private function isEmbedded(
ServerRequest $request,
array $params
): bool {
$embedParam = Types::stringOrNull($params['embed'] ?? null, true);
if (null !== $embedParam) {
return true;
}
return Types::bool(
$request->getQueryParam('embed'),
false,
true
);
}
}