Spaces:
No application file
No application file
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; | |
} | |
} | |
} | |