mirror of
https://github.com/Froxlor/Froxlor.git
synced 2024-09-21 10:27:29 +00:00
150858485d
Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
142 lines
4.2 KiB
PHP
142 lines
4.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* This file is part of the Froxlor project.
|
|
* Copyright (c) 2010 the Froxlor Team (see authors).
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program 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 General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, you can also view it online at
|
|
* https://files.froxlor.org/misc/COPYING.txt
|
|
*
|
|
* @copyright the authors
|
|
* @author Froxlor team <team@froxlor.org>
|
|
* @license https://files.froxlor.org/misc/COPYING.txt GPLv2
|
|
*/
|
|
|
|
use Froxlor\Language;
|
|
use Froxlor\UI\Request;
|
|
|
|
/**
|
|
* Render a template with the given data.
|
|
* Mostly used if we have no template-engine (twig).
|
|
*
|
|
* @param $template
|
|
* @param $attributes
|
|
* @return array|false|string|string[]
|
|
*/
|
|
function view($template, $attributes)
|
|
{
|
|
$view = file_get_contents(dirname(__DIR__) . '/templates/' . $template);
|
|
|
|
return str_replace(array_keys($attributes), array_values($attributes), $view);
|
|
}
|
|
|
|
/**
|
|
* Get the current translation for a given string.
|
|
*
|
|
* @param string $identifier
|
|
* @param array $arguments
|
|
* @return array|string
|
|
*/
|
|
function lng(string $identifier, array $arguments = [])
|
|
{
|
|
return Language::getTranslation($identifier, $arguments);
|
|
}
|
|
|
|
/**
|
|
* Get the value of a request variable.
|
|
*
|
|
* @param string $identifier
|
|
* @param string|null $default
|
|
* @param string|null $session
|
|
* @return mixed|string|null
|
|
*/
|
|
function old(string $identifier, string $default = null, string $session = null)
|
|
{
|
|
if ($session && isset($_SESSION[$session])) {
|
|
return $_SESSION[$session][$identifier] ?? $default;
|
|
}
|
|
return Request::any($identifier, $default);
|
|
}
|
|
|
|
/**
|
|
* Loading the mix manifest file from given theme.
|
|
* This file contains the hashed filenames of the assets.
|
|
* It must be always placed in the theme assets folder.
|
|
*
|
|
* @deprecated since 2.1.x no longer in use
|
|
* @param $filename
|
|
* @return mixed|string
|
|
*/
|
|
function mix($filename)
|
|
{
|
|
if (preg_match('/templates\/(.+)\/assets\/(.+)\/(.+)/', $filename, $matches)) {
|
|
$mixManifest = dirname(__DIR__) . '/templates/' . $matches[1] . '/assets/mix-manifest.json';
|
|
if (file_exists($mixManifest)) {
|
|
$manifest = json_decode(file_get_contents($mixManifest), true);
|
|
$key = '/' . $matches[2] . '/' . $matches[3];
|
|
if ($manifest && !empty($manifest[$key])) {
|
|
$filename = 'templates/' . $matches[1] . '/assets' . $manifest[$key];
|
|
}
|
|
}
|
|
}
|
|
return $filename;
|
|
}
|
|
|
|
/**
|
|
* Loading the vite manifest file from given theme.
|
|
* This file contains the hashed filenames of the assets.
|
|
* It must be always placed in the theme assets folder.
|
|
*
|
|
* @param string|null $basehref
|
|
* @param array $filenames
|
|
* @return string
|
|
* @throws Exception
|
|
*/
|
|
function vite($basehref, array $filenames): string
|
|
{
|
|
// Get the hashed filenames from the manifest file
|
|
$links = [];
|
|
foreach ($filenames as $filename) {
|
|
if (preg_match("/templates\/([^\/]+)(.*)/", $filename, $matches)) {
|
|
$assetDirectory = '/templates/' . $matches[1] . '/build/';
|
|
$viteManifest = dirname(__DIR__) . $assetDirectory . '/manifest.json';
|
|
$manifest = json_decode(file_get_contents($viteManifest), true);
|
|
if (!empty($manifest[$filename]['file'])) {
|
|
$links[] = $basehref . ltrim($assetDirectory, '/') . $manifest[$filename]['file'];
|
|
} else {
|
|
// additional asset from config.json that was not prebuilt on release (e.g. custom.css)
|
|
$links[] = $filename;
|
|
}
|
|
} else {
|
|
$links[] = $filename;
|
|
}
|
|
}
|
|
|
|
// Update the links to the correct html tags
|
|
foreach ($links as $key => $link) {
|
|
switch (pathinfo($link, PATHINFO_EXTENSION)) {
|
|
case 'css':
|
|
$links[$key] = '<link rel="stylesheet" href="'. $link . '">';
|
|
break;
|
|
case 'js':
|
|
$links[$key] = '<script src="' . $link . '" type="module"></script>';
|
|
break;
|
|
default:
|
|
throw new Exception('Unknown file extension for file '. $link .' from manifest.json');
|
|
}
|
|
}
|
|
|
|
return implode("\n", $links);
|
|
}
|