* @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, ?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] = ''; break; case 'js': $links[$key] = ''; break; default: throw new Exception('Unknown file extension for file '. $link .' from manifest.json'); } } return implode("\n", $links); }