<?php
declare(strict_types=1);
namespace S360DeviceDetection\Subscriber;
use Shopware\Storefront\Page\Navigation\NavigationPageLoadedEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\EntitySearchResult;
use Shopware\Core\Framework\Routing\Annotation\RouteScope;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\Struct\ArrayStruct;
use Shopware\Core\System\SystemConfig\SystemConfigService;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
use Shopware\Storefront\Page\GenericPageLoadedEvent;
use S360DeviceDetection\Subscriber\Mobile_Detect;
class DeviceSubscriber implements EventSubscriberInterface {
/**
* @var RequestStack
*/
private $request_stack;
/**
* @var Session
*/
protected $session;
const SESSION_KEY = 'deviceType';
public function __construct (
RequestStack $request_stack,
Session $session
) {
$this->request_stack = $request_stack;
$this->session = $session;
}
public static function getSubscribedEvents(): array
{
return [
GenericPageLoadedEvent::class => 'addDeviceToSession'
];
}
public function addDeviceToSession() {
$request = $this->request_stack->getCurrentRequest();
if (!$request) {
return;
}
$device = new Mobile_Detect;
$session = $request->getSession();
if($session){
if($device->isMobile()){
$session->set(self::SESSION_KEY, "mobile");
} elseif ($device->isTablet()){
$session->set(self::SESSION_KEY, "tablet");
} else {
$session->set(self::SESSION_KEY, "desktop");
}
}
}
}