<?php
namespace FaviconBundle\Event;
use FaviconBundle\DependencyInjection\FaviconExtension;
use FaviconBundle\Service\ImageGenerator;
use Pimcore\Config\Config;
use Pimcore\Controller\FrontendController;
use Pimcore\Model\Asset\Image;
use Pimcore\Model\WebsiteSetting;
use Pimcore\Model\Site;
use Pimcore\Twig\Extension\Templating\HeadLink;
use Pimcore\Twig\Extension\Templating\HeadMeta;
use Symfony\Component\HttpKernel\Event\KernelEvent;
class ControllerInitEvent {
private HeadMeta $headMeta;
private HeadLink $headLink;
private array $config;
private array $sitesConfig;
public function __construct(HeadLink $headLink, HeadMeta $headMeta) {
$this->headLink = $headLink;
$this->headMeta = $headMeta;
}
/**
* DependencyInjection
*
* @param $config
*/
public function setConfig($config) {
$this->config = $config;
}
/**
* DependencyInjection
*
* @param $sitesConfig
*/
public function setSitesConfig($sitesConfig) {
$this->sitesConfig = $sitesConfig;
}
public function onControllerInit(KernelEvent $e) {
if ($e->isMasterRequest() && \Pimcore\Tool::isFrontend()) {
$siteId = Site::isSiteRequest() ? Site::getCurrentSite()->getId() : null;
$config = FaviconExtension::mergeConfigs(
$siteId,
$this->config,
$this->sitesConfig
);
//
foreach ($config["items"] as $icon) {
if (!array_key_exists("href", $icon)) {
$faviconSetting = WebsiteSetting::getByName('favicon', $siteId);
$imagepath = '/public/build/img/favicon.png';
if (!empty($config["base_image"])) {
$imagepath = $config["base_image"];
} elseif ($faviconSetting instanceof WebsiteSetting && $faviconSetting->getData() instanceof Image) {
$imagepath = '/public/var/assets'.$faviconSetting->getData()->getFullPath();
}
$icon["href"] = ImageGenerator::generateIcon(
$imagepath,
$icon["rel"],
$icon["sizes"] ?? "100x100",
$icon["type"] ?? "image/png"
);
}
$this->headLink->append($this->headLink->createData($icon));
}
$this->headMeta->append($this->headMeta->createData(
"name",
"msapplication-TileColor",
$config["manifest"]["background_color"] ?? "#FFFFFF",
[]
));
$this->headMeta->append($this->headMeta->createData(
"name",
"theme-color",
$config["manifest"]["theme_color"] ?? "#FFFFFF",
[]
));
$this->headMeta->append($this->headMeta->createData(
"name",
"msapplication-config",
"/static/manifest/browserconfig.xml",
[]
));
}
}
}