Spaces:
No application file
No application file
File size: 2,761 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
<?php
namespace Mautic\CoreBundle\Twig\Helper;
use Mautic\CoreBundle\Exception\BadConfigurationException;
use Mautic\CoreBundle\Exception\FileNotFoundException;
use Mautic\CoreBundle\Helper\PathsHelper;
/**
* final class ThemeHelper.
*/
final class ThemeHelper
{
private string $themeDir;
private string $themePath;
/**
* @var mixed
*/
private $config;
/**
* @param string $theme
*
* @throws BadConfigurationException
* @throws FileNotFoundException
*/
public function __construct(
PathsHelper $pathsHelper,
private $theme
) {
$this->themeDir = $pathsHelper->getSystemPath('themes').'/'.$this->theme;
$this->themePath = $pathsHelper->getSystemPath('themes_root').'/'.$this->themeDir;
// check to make sure the theme exists
if (!file_exists($this->themePath)) {
throw new FileNotFoundException($this->theme.' not found!');
}
// get the config
if (file_exists($this->themePath.'/config.json')) {
$this->config = json_decode(file_get_contents($this->themePath.'/config.json'), true);
} else {
throw new BadConfigurationException($this->theme.' is missing a required config file');
}
if (!isset($this->config['name'])) {
throw new BadConfigurationException($this->theme.' does not have a valid config file');
}
}
/**
* Return name of the template.
*
* @return mixed
*/
public function getName()
{
return $this->config['name'];
}
/**
* Returns the theme folder name.
*
* @return string
*/
public function getTheme()
{
return $this->theme;
}
/**
* Get the theme's config.
*
* @return mixed
*/
public function getConfig()
{
return $this->config;
}
/**
* Get the theme's slots.
*
* @param string $type
*
* @return array<string, mixed>
*/
public function getSlots($type)
{
return $this->config['slots'][$type] ?? [];
}
/**
* Returns path to this theme.
*
* @param bool $relative
*/
public function getThemePath($relative = false): string
{
return ($relative) ? $this->themeDir : $this->themePath;
}
/**
* Returns template.
*
* @param string $code
*
* @return bool|string
*/
public function getErrorPageTemplate($code)
{
$errorPage = $this->getThemePath()."/error_{$code}.html.twig";
if (file_exists($errorPage)) {
return "@themes/{$this->theme}/error_{$code}.html.twig";
} else {
return false;
}
}
}
|