<?php
namespace FOS\UserBundle\CouchDocument;
use Doctrine\ODM\CouchDB\DocumentManager;
use FOS\UserBundle\Model\UserInterface;
use FOS\UserBundle\Model\UserManager as BaseUserManager;
use FOS\UserBundle\Util\CanonicalizerInterface;
use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface;
use Symfony\Component\Validator\Constraint;
class UserManager extends BaseUserManager
{
/**
* @var DocumentManager
*/
protected $dm;
/**
* @var DocumentRepository
*/
protected $repository;
/**
* @var string
*/
protected $class;
/**
* Constructor.
*
* @param EncoderFactoryInterface $encoderFactory
* @param string $algorithm
* @param CanonicalizerInterface $usernameCanonicalizer
* @param CanonicalizerInterface $emailCanonicalizer
* @param DocumentManager $dm
* @param string $class
*/
public function __construct(EncoderFactoryInterface $encoderFactory, $algorithm, CanonicalizerInterface $usernameCanonicalizer, CanonicalizerInterface $emailCanonicalizer, DocumentManager $dm, $class)
{
parent::__construct($encoderFactory, $algorithm, $usernameCanonicalizer, $emailCanonicalizer);
$this->dm = $dm;
$this->repository = $dm->getRepository($class);
$metadata = $dm->getClassMetadata($class);
$this->class = $metadata->name;
}
/**
* {@inheritDoc}
*/
public function deleteUser(UserInterface $user)
{
$this->dm->remove($user);
$this->dm->flush();
}
/**
* {@inheritDoc}
*/
public function getClass()
{
return $this->class;
}
/**
* {@inheritDoc}
*/
public function findUserBy(array $criteria)
{
return $this->repository->findOneBy($criteria);
}
/**
* {@inheritDoc}
*/
public function findUsers()
{
return $this->repository->findAll();
}
/**
* Updates a user.
*
* @param UserInterface $user
* @param Boolean $andFlush Whether to flush the changes (default true)
*/
public function updateUser(UserInterface $user, $andFlush = true)
{
$this->updateCanonicalFields($user);
$this->updatePassword($user);
$this->dm->persist($user);
if ($andFlush) {
$this->dm->flush();
}
}
/**
* {@inheritDoc}
*/
public function validateUnique(UserInterface $value, Constraint $constraint)
{
// for now unique checks are not implemented in Doctrine CouchDB yet
return true;
}
public function reloadUser(UserInterface $user)
{
$this->dm->refresh($user);
}
}