<?php
namespace AvenueAdminBundle\Authentication\Storage;
use AvenueAdminBundle\Document\AbstractDocument;
use Doctrine\ODM\MongoDB\DocumentManager;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
class Session
{
/**
* Default session object member name
*/
const MEMBER_DEFAULT = 'AvenueAdminSession';
/**
* @var SessionInterface
*/
private $session;
/**
* Session object member
*
*/
private $member = self::MEMBER_DEFAULT;
/** @var DocumentManager */
private $documentManager;
private $identityClass;
/**
* Sets session storage options and initializes session namespace object
*
* @param SessionInterface $session
* @param string $member
*/
public function __construct(SessionInterface $session, DocumentManager $documentManager, $identityClass, $member = null)
{
$this->session = $session;
$this->documentManager = $documentManager;
$this->identityClass = $identityClass;
if ($member) {
$this->member = $member;
}
}
/**
* Defined by Zend\Authentication\Storage\StorageInterface
*
* @return bool
*/
public function isEmpty()
{
return !$this->read();
}
public function read(): ?AbstractDocument
{
if (!$this->identityClass) {
throw new \Exception('parameter admin_identity_class is empty');
}
$id = $this->session->get($this->member);
if ($id) {
return $this->documentManager->getRepository($this->identityClass)->find($id);
}
return null;
}
public function write(AbstractDocument $obj)
{
$this->session->set($this->member, $obj->getId());
}
/**
* Defined by Zend\Authentication\Storage\StorageInterface
*
* @return void
*/
public function clear()
{
$this->session->remove($this->member);
}
}