Initial Upload
This commit is contained in:
88
lib/Middleware/Xtr.php
Normal file
88
lib/Middleware/Xtr.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (C) 2025 Xibo Signage Ltd
|
||||
*
|
||||
* Xibo - Digital Signage - https://xibosignage.com
|
||||
*
|
||||
* This file is part of Xibo.
|
||||
*
|
||||
* Xibo is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* any later version.
|
||||
*
|
||||
* Xibo is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with Xibo. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
namespace Xibo\Middleware;
|
||||
|
||||
use Illuminate\Support\Str;
|
||||
use Psr\Http\Message\ResponseInterface as Response;
|
||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||
use Psr\Http\Server\MiddlewareInterface as Middleware;
|
||||
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
|
||||
use Slim\App as App;
|
||||
use Xibo\Support\Exception\InstanceSuspendedException;
|
||||
|
||||
/**
|
||||
* Class Xtr
|
||||
* Middleware for XTR.
|
||||
* - sets the theme
|
||||
* - sets the module theme files
|
||||
* @package Xibo\Middleware
|
||||
*/
|
||||
class Xtr implements Middleware
|
||||
{
|
||||
/* @var App $app */
|
||||
private $app;
|
||||
|
||||
public function __construct($app)
|
||||
{
|
||||
$this->app = $app;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param RequestHandler $handler
|
||||
* @return Response
|
||||
* @throws \Twig\Error\LoaderError
|
||||
* @throws \Xibo\Support\Exception\InstanceSuspendedException
|
||||
*/
|
||||
public function process(Request $request, RequestHandler $handler): Response
|
||||
{
|
||||
// Inject our Theme into the Twig View (if it exists)
|
||||
$app = $this->app;
|
||||
$container = $app->getContainer();
|
||||
|
||||
// Check to see if the instance has been suspended, if so call the special route
|
||||
$instanceSuspended = $container->get('configService')->getSetting('INSTANCE_SUSPENDED');
|
||||
if ($instanceSuspended == 'yes' || $instanceSuspended == 'partial') {
|
||||
throw new InstanceSuspendedException();
|
||||
}
|
||||
|
||||
$container->get('configService')->loadTheme();
|
||||
$view = $container->get('view');
|
||||
// Provide the view path to Twig
|
||||
/* @var \Twig\Loader\FilesystemLoader $twig */
|
||||
$twig = $view->getLoader();
|
||||
$twig->setPaths([PROJECT_ROOT . '/views', PROJECT_ROOT . '/custom', PROJECT_ROOT . '/reports']);
|
||||
|
||||
// Does this theme provide an alternative view path?
|
||||
if ($container->get('configService')->getThemeConfig('view_path') != '') {
|
||||
$twig->prependPath(Str::replaceFirst(
|
||||
'..',
|
||||
PROJECT_ROOT,
|
||||
$container->get('configService')->getThemeConfig('view_path'),
|
||||
));
|
||||
}
|
||||
|
||||
// Call Next
|
||||
return $handler->handle($request);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user