@@ -4,6 +4,7 @@ namespace Lc\SovBundle\Authenticator; | |||
use Lc\SovBundle\Model\User\UserInterface; | |||
use Lc\SovBundle\Doctrine\EntityManager; | |||
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; | |||
use Symfony\Component\HttpFoundation\RedirectResponse; | |||
use Symfony\Component\HttpFoundation\Request; | |||
use Symfony\Component\Security\Core\User\UserInterface as SfUserInterface; | |||
@@ -30,35 +31,39 @@ class LoginFormAuthenticator extends AbstractFormLoginAuthenticator implements P | |||
private $urlGenerator; | |||
private $csrfTokenManager; | |||
private $passwordEncoder; | |||
protected $parameterBag; | |||
public function __construct( | |||
EntityManager $entityManager, | |||
UrlGeneratorInterface $urlGenerator, | |||
CsrfTokenManagerInterface $csrfTokenManager, | |||
UserPasswordEncoderInterface $passwordEncoder | |||
) { | |||
EntityManager $entityManager, | |||
UrlGeneratorInterface $urlGenerator, | |||
CsrfTokenManagerInterface $csrfTokenManager, | |||
UserPasswordEncoderInterface $passwordEncoder, | |||
ParameterBagInterface $parameterBag | |||
) | |||
{ | |||
$this->entityManager = $entityManager; | |||
$this->urlGenerator = $urlGenerator; | |||
$this->csrfTokenManager = $csrfTokenManager; | |||
$this->passwordEncoder = $passwordEncoder; | |||
$this->parameterBag = $parameterBag; | |||
} | |||
public function supports(Request $request) | |||
{ | |||
return self::LOGIN_ROUTE === $request->attributes->get('_route') | |||
&& $request->isMethod('POST'); | |||
&& $request->isMethod('POST'); | |||
} | |||
public function getCredentials(Request $request) | |||
{ | |||
$credentials = [ | |||
'email' => $request->request->get('email'), | |||
'password' => $request->request->get('password'), | |||
'csrf_token' => $request->request->get('_csrf_token'), | |||
'email' => $request->request->get('email'), | |||
'password' => $request->request->get('password'), | |||
'csrf_token' => $request->request->get('_csrf_token'), | |||
]; | |||
$request->getSession()->set( | |||
Security::LAST_USERNAME, | |||
$credentials['email'] | |||
Security::LAST_USERNAME, | |||
$credentials['email'] | |||
); | |||
return $credentials; | |||
@@ -72,7 +77,7 @@ class LoginFormAuthenticator extends AbstractFormLoginAuthenticator implements P | |||
} | |||
$user = $this->entityManager->getRepository(UserInterface::class)->findOneBy( | |||
['email' => $credentials['email']] | |||
['email' => $credentials['email']] | |||
); | |||
if (!$user) { | |||
@@ -100,13 +105,32 @@ class LoginFormAuthenticator extends AbstractFormLoginAuthenticator implements P | |||
{ | |||
$routeName = 'home'; | |||
$email = $request->request->get('email'); | |||
$user = $this->entityManager->getRepository(UserInterface::class)->findOneBy(['email' => $email]); | |||
$loginRedirection = $this->parameterBag->get('lc_sov.login_redirection'); | |||
$useReferer = $loginRedirection['redirect_referer']; | |||
$rolesRedirection = $loginRedirection['roles_redirection']; | |||
if (isset($useReferer) && $useReferer == true) { | |||
$url = $request->request->get('_target_path'); | |||
} else { | |||
$user = $this->entityManager->getRepository(UserInterface::class)->findOneBy(['email' => $email]); | |||
if ($user && ($user->hasRole('ROLE_ADMIN') || $user->hasRole('ROLE_SUPER_ADMIN'))) { | |||
$routeName = 'admin_dashboard'; | |||
if (!empty($user)) { | |||
$roles = $user->getRoles(); | |||
foreach ($rolesRedirection as $roleRedirect) { | |||
if (array_search($roleRedirect['role'], $roles)) { | |||
$routeName = $roleRedirect['redirect']; | |||
} | |||
} | |||
} | |||
} | |||
return new RedirectResponse($this->urlGenerator->generate($routeName)); | |||
if (isset($url) && !empty($url)) { | |||
return new RedirectResponse($url); | |||
} else { | |||
return new RedirectResponse($this->urlGenerator->generate($routeName)); | |||
} | |||
} | |||
protected function getLoginUrl() |
@@ -46,26 +46,25 @@ use Symfony\Component\Form\Extension\Core\Type\CollectionType; | |||
use Symfony\Component\Form\Extension\Core\Type\TextType; | |||
use Symfony\Component\HttpFoundation\RequestStack; | |||
use Symfony\Component\HttpFoundation\Session\SessionInterface; | |||
use Twig\Environment; | |||
abstract class AbstractCrudController extends EaAbstractCrudController | |||
{ | |||
protected $session; | |||
protected $request; | |||
protected $em; | |||
protected $translatorAdmin; | |||
public function __construct( | |||
SessionInterface $session, | |||
RequestStack $request, | |||
EntityManager $em, | |||
Environment $twig, | |||
TranslatorAdmin $translatorAdmin | |||
) | |||
{ | |||
$this->session = $session; | |||
$this->request = $request; | |||
$this->em = $em; | |||
$this->twig = $twig; | |||
$this->translatorAdmin = $translatorAdmin; | |||
} | |||
@@ -232,7 +231,6 @@ abstract class AbstractCrudController extends EaAbstractCrudController | |||
public function configureResponseParameters(KeyValueStore $responseParameters): KeyValueStore | |||
{ | |||
// fields sur la page index | |||
if (Crud::PAGE_INDEX === $responseParameters->get('pageName')) { | |||
$responseParameters->set('fields', $this->configureFields('index')); | |||
} | |||
@@ -270,8 +268,6 @@ abstract class AbstractCrudController extends EaAbstractCrudController | |||
public function configureFields(string $pageName): iterable | |||
{ | |||
$seoPanel = $confPanel = array(); | |||
if ($this->isInstanceOf(SortableInterface::class)) { | |||
$seoPanel = [ | |||
FormField::addPanel('seo')->setTemplateName('crud/field/generic'), | |||
@@ -392,19 +388,19 @@ abstract class AbstractCrudController extends EaAbstractCrudController | |||
} | |||
public function createIndexQueryBuilder( | |||
SearchDto $searchDto, | |||
EntityDto $entityDto, | |||
FieldCollection $fields, | |||
FilterCollection $filters | |||
): QueryBuilder | |||
{ | |||
SearchDto $searchDto, | |||
EntityDto $entityDto, | |||
FieldCollection $fields, | |||
FilterCollection $filters | |||
): QueryBuilder { | |||
$queryBuilder = parent::createIndexQueryBuilder( | |||
$searchDto, | |||
$entityDto, | |||
$fields, | |||
$filters | |||
$searchDto, | |||
$entityDto, | |||
$fields, | |||
$filters | |||
); | |||
dump(get_defined_vars()); | |||
if ($this->isInstanceOf(TreeInterface::class)) { | |||
$entityId = $searchDto->getRequest()->get('entityId'); | |||
if ($entityId !== null) { | |||
@@ -420,29 +416,13 @@ abstract class AbstractCrudController extends EaAbstractCrudController | |||
} | |||
public function createSortQueryBuilder( | |||
SearchDto $searchDto, | |||
EntityDto $entityDto, | |||
FieldCollection $fields, | |||
FilterCollection $filters | |||
): QueryBuilder | |||
{ | |||
$queryBuilder = parent::createIndexQueryBuilder( | |||
$searchDto, | |||
$entityDto, | |||
$fields, | |||
$filters | |||
); | |||
if ($this->isInstanceOf(TreeInterface::class)) { | |||
$entityId = $searchDto->getRequest()->get('entityId'); | |||
if ($entityId !== null) { | |||
$queryBuilder->andWhere('entity.parent = :entityId'); | |||
$queryBuilder->setParameter('entityId', $searchDto->getRequest()->get('entityId')); | |||
} else { | |||
$queryBuilder->andWhere('entity.parent IS NULL'); | |||
} | |||
} | |||
SearchDto $searchDto, | |||
EntityDto $entityDto, | |||
FieldCollection $fields, | |||
FilterCollection $filters | |||
): QueryBuilder { | |||
$queryBuilder = $this->createIndexQueryBuilder($searchDto,$entityDto,$fields,$filters); | |||
return $queryBuilder; | |||
} |
@@ -12,21 +12,35 @@ use Symfony\Component\Config\Definition\ConfigurationInterface; | |||
*/ | |||
class Configuration implements ConfigurationInterface | |||
{ | |||
/** | |||
* {@inheritdoc} | |||
*/ | |||
public function getConfigTreeBuilder() | |||
{ | |||
$treeBuilder = new TreeBuilder('lc_sov'); | |||
$rootNode = $treeBuilder->getRootNode(); | |||
/** | |||
* {@inheritdoc} | |||
*/ | |||
public function getConfigTreeBuilder() | |||
{ | |||
$treeBuilder = new TreeBuilder('lc_sov'); | |||
$rootNode = $treeBuilder->getRootNode(); | |||
$rootNode | |||
->children() | |||
//->scalarNode('dashboard_default')->defaultValue('App\Controller\Admin\DashboardController')->end() | |||
->scalarNode('homepage_route')->end() | |||
->end(); | |||
$rootNode | |||
->children() | |||
//->scalarNode('dashboard_default')->defaultValue('App\Controller\Admin\DashboardController')->end() | |||
->scalarNode('homepage_route')->end() | |||
->arrayNode('login_redirection') | |||
->children() | |||
->scalarNode('redirect_referer') | |||
->defaultValue(true) | |||
->end() | |||
->arrayNode('roles_redirection') | |||
->arrayPrototype() | |||
->children() | |||
->scalarNode('role')->end() | |||
->scalarNode('redirect')->end() | |||
->end() | |||
->end() | |||
->end() | |||
->end() | |||
->end(); | |||
return $treeBuilder; | |||
} | |||
return $treeBuilder; | |||
} | |||
} |
@@ -9,130 +9,134 @@ use Doctrine\ORM\EntityRepository; | |||
use Doctrine\ORM\Query; | |||
use Doctrine\ORM\QueryBuilder; | |||
use Gedmo\Translatable\TranslatableListener; | |||
use Lc\CaracoleBundle\Doctrine\Extension\FilterMerchantInterface; | |||
use Lc\SovBundle\Doctrine\Extension\StatusInterface; | |||
abstract class AbstractRepository extends EntityRepository implements ServiceEntityRepositoryInterface, | |||
AbstractRepositoryInterface | |||
{ | |||
protected $defaultLocale; | |||
protected $defaultLocale; | |||
public function setDefaultLocale($locale) | |||
{ | |||
$this->defaultLocale = $locale; | |||
} | |||
public function setDefaultLocale($locale) | |||
{ | |||
$this->defaultLocale = $locale; | |||
} | |||
public function __construct(EntityManagerInterface $entityManager) | |||
{ | |||
parent::__construct($entityManager, $entityManager->getClassMetadata($this->getInterfaceClass())); | |||
} | |||
public function __construct(EntityManagerInterface $entityManager) | |||
{ | |||
parent::__construct($entityManager, $entityManager->getClassMetadata($this->getInterfaceClass())); | |||
} | |||
public function findOneByOldUrl($url) | |||
{ | |||
$qb = $this->createQueryBuilder('entity') | |||
->where('entity.oldUrls LIKE :oldUrl') | |||
->andWhere('entity.status = 1') | |||
->setParameter(':oldUrl', '%'.$url.'%'); | |||
public function findOneByOldUrl($url) | |||
{ | |||
$qb = $this->createQueryBuilder('entity') | |||
->where('entity.oldUrls LIKE :oldUrl') | |||
->andWhere('entity.status = 1') | |||
->setParameter(':oldUrl', '%'.$url.'%'); | |||
return $qb->getQuery()->getOneOrNullResult(); | |||
} | |||
return $qb->getQuery()->getOneOrNullResult(); | |||
} | |||
public function getOneOrNullResult(QueryBuilder $qb, $locale = null, $hydrationMode = null) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getOneOrNullResult($hydrationMode); | |||
} | |||
public function getOneOrNullResult(QueryBuilder $qb, $locale = null, $hydrationMode = null) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getOneOrNullResult($hydrationMode); | |||
} | |||
public function getResult(QueryBuilder $qb, $locale = null, $hydrationMode = AbstractQuery::HYDRATE_OBJECT) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getResult($hydrationMode); | |||
} | |||
public function getResult(QueryBuilder $qb, $locale = null, $hydrationMode = AbstractQuery::HYDRATE_OBJECT) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getResult($hydrationMode); | |||
} | |||
public function getArrayResult(QueryBuilder $qb, $locale = null) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getArrayResult(); | |||
} | |||
public function getArrayResult(QueryBuilder $qb, $locale = null) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getArrayResult(); | |||
} | |||
public function getSingleResult(QueryBuilder $qb, $locale = null, $hydrationMode = null) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getSingleResult($hydrationMode); | |||
} | |||
public function getSingleResult(QueryBuilder $qb, $locale = null, $hydrationMode = null) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getSingleResult($hydrationMode); | |||
} | |||
public function getScalarResult(QueryBuilder $qb, $locale = null) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getScalarResult(); | |||
} | |||
public function getScalarResult(QueryBuilder $qb, $locale = null) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getScalarResult(); | |||
} | |||
public function getSingleScalarResult(QueryBuilder $qb, $locale = null) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getSingleScalarResult(); | |||
} | |||
public function getSingleScalarResult(QueryBuilder $qb, $locale = null) | |||
{ | |||
return $this->getTranslatedQuery($qb, $locale)->getSingleScalarResult(); | |||
} | |||
protected function getTranslatedQuery(QueryBuilder $qb, $locale = null) | |||
{ | |||
$locale = null === $locale ? $this->defaultLocale : $locale; | |||
protected function getTranslatedQuery(QueryBuilder $qb, $locale = null) | |||
{ | |||
$locale = null === $locale ? $this->defaultLocale : $locale; | |||
$query = $qb->getQuery(); | |||
$query = $qb->getQuery(); | |||
$query->setHint( | |||
Query::HINT_CUSTOM_OUTPUT_WALKER, | |||
'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker' | |||
); | |||
$query->setHint( | |||
Query::HINT_CUSTOM_OUTPUT_WALKER, | |||
'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker' | |||
); | |||
$query->setHint(TranslatableListener::HINT_TRANSLATABLE_LOCALE, $locale); | |||
$query->setHint(TranslatableListener::HINT_TRANSLATABLE_LOCALE, $locale); | |||
return $query; | |||
} | |||
return $query; | |||
} | |||
public function findSimilarSlug($merchant) | |||
{ | |||
$qb = $this->createQueryBuilder('entity') | |||
->select('entity.id, COUNT(entity.slug) as niche') | |||
->andWhere('entity.status>=0') | |||
->andWhere('entity.merchant= :merchant') | |||
->setParameter('merchant', $merchant) | |||
->groupBy('entity.slug') | |||
->having('COUNT(entity.slug) >1'); | |||
public function findAll() | |||
{ | |||
return $this->findBy(array()); | |||
} | |||
return $qb->getQuery()->getResult(); | |||
} | |||
public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) | |||
{ | |||
$className = $this->getClassMetadata()->getName(); | |||
$entity = new $className; | |||
if($entity instanceof StatusInterface){ | |||
if (!isset($criteria['status'])) $criteria['status'] = 1; | |||
if ($criteria['status'] === false) unset($criteria['status']); | |||
} | |||
public function findAll() | |||
{ | |||
return $this->findBy(array()); | |||
} | |||
return parent::findBy($criteria, $orderBy, $limit, $offset); | |||
public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) | |||
{ | |||
$criteria = $this->setCriteria($criteria); | |||
} | |||
return parent::findBy($criteria, $orderBy, $limit, $offset); | |||
} | |||
public function findOneBy(array $criteria, array $orderBy = null) | |||
{ | |||
public function findOneBy(array $criteria, array $orderBy = null) | |||
{ | |||
$criteria = $this->setCriteria($criteria); | |||
$className = $this->getClassMetadata()->getName(); | |||
$entity = new $className; | |||
return parent::findOneBy($criteria, $orderBy); | |||
} | |||
if($entity instanceof StatusInterface){ | |||
if (!isset($criteria['status'])) $criteria['status'] = 1; | |||
if ($criteria['status'] === false) unset($criteria['status']); | |||
} | |||
protected function setCriteria(array $criteria) :array | |||
{ | |||
$className = $this->getClassMetadata()->getName(); | |||
$entity = new $className; | |||
return parent::findOneBy($criteria, $orderBy); | |||
if ($entity instanceof StatusInterface) { | |||
if (!isset($criteria['status'])) { | |||
$criteria['status'] = 1; | |||
} | |||
if ($criteria['status'] === false) { | |||
unset($criteria['status']); | |||
} | |||
} | |||
return $criteria; | |||
} | |||
public function findSimilarSlug($merchant){ | |||
$qb = $this->createQueryBuilder('entity') | |||
->select('entity.id, COUNT(entity.slug) as niche') | |||
->andWhere('entity.status>=0') | |||
->andWhere('entity.merchant= :merchant') | |||
->setParameter('merchant', $merchant) | |||
->groupBy('entity.slug') | |||
->having('COUNT(entity.slug) >1'); | |||
return $qb->getQuery()->getResult(); | |||
} | |||
} |