diff --git a/src/Sylius/Bundle/CoreBundle/Resources/config/app/sylius.yml b/src/Sylius/Bundle/CoreBundle/Resources/config/app/sylius.yml index a0366dacaa1..b2c8020bab2 100644 --- a/src/Sylius/Bundle/CoreBundle/Resources/config/app/sylius.yml +++ b/src/Sylius/Bundle/CoreBundle/Resources/config/app/sylius.yml @@ -100,7 +100,8 @@ sylius_variation: variant: model: Sylius\Component\Core\Model\ProductVariant repository: Sylius\Bundle\CoreBundle\Doctrine\ORM\ProductVariantRepository - form: Sylius\Bundle\CoreBundle\Form\Type\ProductVariantType + form: + default: Sylius\Bundle\CoreBundle\Form\Type\ProductVariantType sylius_taxation: classes: diff --git a/src/Sylius/Bundle/ProductBundle/DependencyInjection/SyliusProductExtension.php b/src/Sylius/Bundle/ProductBundle/DependencyInjection/SyliusProductExtension.php index 8df5bea5e97..479860644b6 100644 --- a/src/Sylius/Bundle/ProductBundle/DependencyInjection/SyliusProductExtension.php +++ b/src/Sylius/Bundle/ProductBundle/DependencyInjection/SyliusProductExtension.php @@ -88,11 +88,13 @@ private function prependVariation(ContainerBuilder $container, array $config) $container->prependExtensionConfig('sylius_variation', array( 'classes' => array( 'product' => array( - 'variable' => $config['classes']['product']['model'], - 'variant' => array( - 'model' => 'Sylius\Component\Product\Model\Variant', + 'variable' => $config['classes']['product']['model'], + 'variant' => array( + 'model' => 'Sylius\Component\Product\Model\Variant', 'controller' => 'Sylius\Bundle\ProductBundle\Controller\VariantController', - 'form' => 'Sylius\Bundle\ProductBundle\Form\Type\VariantType' + 'form' => array( + 'default' => 'Sylius\Bundle\ProductBundle\Form\Type\VariantType' + ), ), 'option' => array( 'model' => 'Sylius\Component\Product\Model\Option', diff --git a/src/Sylius/Bundle/UserBundle/Controller/CustomerController.php b/src/Sylius/Bundle/UserBundle/Controller/CustomerController.php index 2e7f3cd21eb..8c1c98e3543 100644 --- a/src/Sylius/Bundle/UserBundle/Controller/CustomerController.php +++ b/src/Sylius/Bundle/UserBundle/Controller/CustomerController.php @@ -24,6 +24,7 @@ class CustomerController extends ResourceController { /** * @param Request $request + * * @return Response */ public function updateProfileAction(Request $request) diff --git a/src/Sylius/Bundle/UserBundle/Controller/UserController.php b/src/Sylius/Bundle/UserBundle/Controller/UserController.php index 5799d333f60..ecb61ae2470 100644 --- a/src/Sylius/Bundle/UserBundle/Controller/UserController.php +++ b/src/Sylius/Bundle/UserBundle/Controller/UserController.php @@ -154,8 +154,8 @@ protected function createResourceForm($type, $resource) } /** - * @param Request $request - * @param UserInterface $user + * @param Request $request + * @param UserInterface $user * * @return RedirectResponse */ @@ -208,8 +208,8 @@ protected function handleResetPasswordRequest(TokenProviderInterface $generator, } /** - * @param UserInterface $user - * @param string $newPassword + * @param UserInterface $user + * @param string $newPassword * * @return RedirectResponse */ @@ -233,8 +233,9 @@ protected function handleResetPassword(UserInterface $user, $newPassword) } /** - * @param UserInterface $user - * @param string $newPassword + * @param UserInterface $user + * @param string $newPassword + * * @return RedirectResponse */ protected function handleChangePassword(UserInterface $user, $newPassword) diff --git a/src/Sylius/Bundle/UserBundle/Doctrine/ORM/CustomerRepository.php b/src/Sylius/Bundle/UserBundle/Doctrine/ORM/CustomerRepository.php index ae7630eb49e..93f3d607068 100644 --- a/src/Sylius/Bundle/UserBundle/Doctrine/ORM/CustomerRepository.php +++ b/src/Sylius/Bundle/UserBundle/Doctrine/ORM/CustomerRepository.php @@ -11,6 +11,7 @@ namespace Sylius\Bundle\UserBundle\Doctrine\ORM; +use Pagerfanta\Pagerfanta; use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository; use Sylius\Component\Core\Model\UserInterface; @@ -50,7 +51,7 @@ public function findForDetailsPage($id) * @param array $sorting * @param bool $deleted * - * @return PagerfantaInterface + * @return Pagerfanta */ public function createFilterPaginator($criteria = array(), $sorting = array(), $deleted = false) { diff --git a/src/Sylius/Bundle/UserBundle/Doctrine/ORM/UserRepository.php b/src/Sylius/Bundle/UserBundle/Doctrine/ORM/UserRepository.php index 7edf4fe0c98..df927442a6d 100644 --- a/src/Sylius/Bundle/UserBundle/Doctrine/ORM/UserRepository.php +++ b/src/Sylius/Bundle/UserBundle/Doctrine/ORM/UserRepository.php @@ -11,6 +11,8 @@ namespace Sylius\Bundle\UserBundle\Doctrine\ORM; +use Doctrine\ORM\NonUniqueResultException; +use Doctrine\ORM\QueryBuilder; use Pagerfanta\PagerfantaInterface; use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository; use Sylius\Component\Core\Model\UserInterface; @@ -89,6 +91,7 @@ public function findForDetailsPage($id) ->getQuery() ->getOneOrNullResult() ; + $this->_em->getFilters()->enable('softdeleteable'); return $result; @@ -118,6 +121,11 @@ public function countBetweenDates(\DateTime $from, \DateTime $to, $status = null ; } + /** + * @param array $configuration + * + * @return array + */ public function getRegistrationStatistic(array $configuration = array()) { $groupBy = ''; @@ -145,18 +153,13 @@ public function getRegistrationStatistic(array $configuration = array()) ->fetchAll(); } - protected function getCollectionQueryBuilderBetweenDates(\DateTime $from, \DateTime $to) - { - $queryBuilder = $this->getCollectionQueryBuilder(); - - return $queryBuilder - ->andWhere($queryBuilder->expr()->gte('o.createdAt', ':from')) - ->andWhere($queryBuilder->expr()->lte('o.createdAt', ':to')) - ->setParameter('from', $from) - ->setParameter('to', $to) - ; - } - + /** + * @param string $email + * + * @return mixed + * + * @throws NonUniqueResultException + */ public function findOneByEmail($email) { $queryBuilder = $this->getQueryBuilder(); @@ -172,4 +175,22 @@ public function findOneByEmail($email) ->getOneOrNullResult() ; } + + /** + * @param \DateTime $from + * @param \DateTime $to + * + * @return QueryBuilder + */ + protected function getCollectionQueryBuilderBetweenDates(\DateTime $from, \DateTime $to) + { + $queryBuilder = $this->getCollectionQueryBuilder(); + + return $queryBuilder + ->andWhere($queryBuilder->expr()->gte('o.createdAt', ':from')) + ->andWhere($queryBuilder->expr()->lte('o.createdAt', ':to')) + ->setParameter('from', $from) + ->setParameter('to', $to) + ; + } } diff --git a/src/Sylius/Bundle/UserBundle/EventListener/DefaultUsernameListener.php b/src/Sylius/Bundle/UserBundle/EventListener/DefaultUsernameORMListener.php similarity index 64% rename from src/Sylius/Bundle/UserBundle/EventListener/DefaultUsernameListener.php rename to src/Sylius/Bundle/UserBundle/EventListener/DefaultUsernameORMListener.php index b29658f1ca1..ac1cee8c844 100644 --- a/src/Sylius/Bundle/UserBundle/EventListener/DefaultUsernameListener.php +++ b/src/Sylius/Bundle/UserBundle/EventListener/DefaultUsernameORMListener.php @@ -20,21 +20,22 @@ * * @author Michał Marcinkowski */ -class DefaultUsernameListener +class DefaultUsernameORMListener { /** * @param LifecycleEventArgs $event */ public function prePersist(LifecycleEventArgs $event) { - $item = $event->getEntity(); + $user = $event->getEntity(); - if (!$item instanceof UserInterface) { + if (!$user instanceof UserInterface) { return; } - $customer = $item->getCustomer(); - if (null !== $customer && $customer->getEmail() !== $item->getUsername()) { - $item->setUsername($customer->getEmail()); + + $customer = $user->getCustomer(); + if (null !== $customer && $customer->getEmail() !== $user->getUsername()) { + $user->setUsername($customer->getEmail()); } } @@ -43,14 +44,15 @@ public function prePersist(LifecycleEventArgs $event) */ public function preUpdate(LifecycleEventArgs $event) { - $item = $event->getEntity(); + $customer = $event->getEntity(); - if (!$item instanceof CustomerInterface) { + if (!$customer instanceof CustomerInterface) { return; } - $user = $item->getUser(); - if (null !== $user && $user->getUsername() !== $item->getEmail()) { - $user->setUsername($item->getEmail()); + + $user = $customer->getUser(); + if (null !== $user && $user->getUsername() !== $customer->getEmail()) { + $user->setUsername($customer->getEmail()); $entityManager = $event->getEntityManager(); $entityManager->persist($user); $entityManager->flush($user); diff --git a/src/Sylius/Bundle/UserBundle/EventListener/MailerListener.php b/src/Sylius/Bundle/UserBundle/EventListener/MailerListener.php index db27875f0cf..7f106b138fd 100644 --- a/src/Sylius/Bundle/UserBundle/EventListener/MailerListener.php +++ b/src/Sylius/Bundle/UserBundle/EventListener/MailerListener.php @@ -18,7 +18,7 @@ use Symfony\Component\EventDispatcher\GenericEvent; /** - * Mailer listener for User actions + * Mailer listener for User actions. * * @author Łukasz Chruściel */ diff --git a/src/Sylius/Bundle/UserBundle/EventListener/UserDeleteListener.php b/src/Sylius/Bundle/UserBundle/EventListener/UserDeleteListener.php index 402c12d464e..e8bbaf60167 100644 --- a/src/Sylius/Bundle/UserBundle/EventListener/UserDeleteListener.php +++ b/src/Sylius/Bundle/UserBundle/EventListener/UserDeleteListener.php @@ -37,8 +37,8 @@ class UserDeleteListener protected $session; /** - * @param SecurityContextInterface $securityContext - * @param SessionInterface $session + * @param SecurityContextInterface $securityContext + * @param SessionInterface $session */ public function __construct(SecurityContextInterface $securityContext, SessionInterface $session) { diff --git a/src/Sylius/Bundle/UserBundle/EventListener/UserLastLoginListener.php b/src/Sylius/Bundle/UserBundle/EventListener/UserLastLoginSubscriber.php similarity index 96% rename from src/Sylius/Bundle/UserBundle/EventListener/UserLastLoginListener.php rename to src/Sylius/Bundle/UserBundle/EventListener/UserLastLoginSubscriber.php index 7cbdbe1ec61..16c5e1b7265 100644 --- a/src/Sylius/Bundle/UserBundle/EventListener/UserLastLoginListener.php +++ b/src/Sylius/Bundle/UserBundle/EventListener/UserLastLoginSubscriber.php @@ -19,7 +19,7 @@ use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; use Symfony\Component\Security\Http\SecurityEvents; -class UserLastLoginListener implements EventSubscriberInterface +class UserLastLoginSubscriber implements EventSubscriberInterface { /** * @var ObjectManager diff --git a/src/Sylius/Bundle/UserBundle/Form/Model/PasswordReset.php b/src/Sylius/Bundle/UserBundle/Form/Model/PasswordReset.php index 515874683e1..4ad9acde10c 100644 --- a/src/Sylius/Bundle/UserBundle/Form/Model/PasswordReset.php +++ b/src/Sylius/Bundle/UserBundle/Form/Model/PasswordReset.php @@ -12,7 +12,7 @@ namespace Sylius\Bundle\UserBundle\Form\Model; /** - * Model class for email validation + * Model class for email validation. * * @author Łukasz Chruściel */ diff --git a/src/Sylius/Bundle/UserBundle/Form/Type/CustomerProfileType.php b/src/Sylius/Bundle/UserBundle/Form/Type/CustomerProfileType.php index 1075e0c8db3..da7d2f0873f 100644 --- a/src/Sylius/Bundle/UserBundle/Form/Type/CustomerProfileType.php +++ b/src/Sylius/Bundle/UserBundle/Form/Type/CustomerProfileType.php @@ -22,7 +22,7 @@ class CustomerProfileType extends AbstractResourceType /** * {@inheritdoc} */ - public function buildForm(FormBuilderInterface $builder, array $options) + public function buildForm(FormBuilderInterface $builder, array $options = array()) { $builder ->add('firstName', 'text', array( diff --git a/src/Sylius/Bundle/UserBundle/Form/Type/CustomerRegistrationType.php b/src/Sylius/Bundle/UserBundle/Form/Type/CustomerRegistrationType.php index 7af95c9e1f0..5777eb6d4a2 100644 --- a/src/Sylius/Bundle/UserBundle/Form/Type/CustomerRegistrationType.php +++ b/src/Sylius/Bundle/UserBundle/Form/Type/CustomerRegistrationType.php @@ -42,7 +42,7 @@ public function __construct($dataClass, array $validationGroups = array(), Repos /** * {@inheritdoc} */ - public function buildForm(FormBuilderInterface $builder, array $options) + public function buildForm(FormBuilderInterface $builder, array $options = array()) { $builder ->add('firstName', 'text', array( @@ -71,7 +71,7 @@ public function setDefaultOptions(OptionsResolverInterface $resolver) $resolver->setDefaults(array( 'data_class' => $this->dataClass, 'validation_groups' => $this->validationGroups, - 'cascade_validation' => true + 'cascade_validation' => true, )); } diff --git a/src/Sylius/Bundle/UserBundle/Form/Type/CustomerType.php b/src/Sylius/Bundle/UserBundle/Form/Type/CustomerType.php index 062fdb05fca..e6f20d8175b 100644 --- a/src/Sylius/Bundle/UserBundle/Form/Type/CustomerType.php +++ b/src/Sylius/Bundle/UserBundle/Form/Type/CustomerType.php @@ -29,7 +29,7 @@ public function buildForm(FormBuilderInterface $builder, array $options) ->add('groups', 'sylius_group_choice', array( 'label' => 'sylius.form.customer.groups', 'multiple' => true, - 'required' => false + 'required' => false, )) ->add('user', 'sylius_user') ; diff --git a/src/Sylius/Bundle/UserBundle/Form/Type/GenderType.php b/src/Sylius/Bundle/UserBundle/Form/Type/GenderType.php index ad05f16946e..da18a0b48fe 100644 --- a/src/Sylius/Bundle/UserBundle/Form/Type/GenderType.php +++ b/src/Sylius/Bundle/UserBundle/Form/Type/GenderType.php @@ -30,7 +30,7 @@ public function setDefaultOptions(OptionsResolverInterface $resolver) CustomerInterface::UNKNOWN_GENDER => ' ', CustomerInterface::MALE_GENDER => 'sylius.gender.male', CustomerInterface::FEMALE_GENDER => 'sylius.gender.female', - ) + ), )); } diff --git a/src/Sylius/Bundle/UserBundle/Form/Type/GroupType.php b/src/Sylius/Bundle/UserBundle/Form/Type/GroupType.php index a23c17e4bec..22756ca1a88 100644 --- a/src/Sylius/Bundle/UserBundle/Form/Type/GroupType.php +++ b/src/Sylius/Bundle/UserBundle/Form/Type/GroupType.php @@ -24,7 +24,7 @@ class GroupType extends AbstractResourceType /** * {@inheritdoc} */ - public function buildForm(FormBuilderInterface $builder, array $options) + public function buildForm(FormBuilderInterface $builder, array $options = array()) { $builder ->add('name', 'text', array( diff --git a/src/Sylius/Bundle/UserBundle/Form/Type/UserRegistrationType.php b/src/Sylius/Bundle/UserBundle/Form/Type/UserRegistrationType.php index 2f116b540ff..09693f52578 100644 --- a/src/Sylius/Bundle/UserBundle/Form/Type/UserRegistrationType.php +++ b/src/Sylius/Bundle/UserBundle/Form/Type/UserRegistrationType.php @@ -13,7 +13,6 @@ use Symfony\Component\Form\FormBuilderInterface; use Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType; -use Symfony\Component\OptionsResolver\OptionsResolverInterface; /** * @author Łukasz Chruściel diff --git a/src/Sylius/Bundle/UserBundle/OAuth/UserProvider.php b/src/Sylius/Bundle/UserBundle/OAuth/UserProvider.php index 82c9b953745..265682fc3e0 100644 --- a/src/Sylius/Bundle/UserBundle/OAuth/UserProvider.php +++ b/src/Sylius/Bundle/UserBundle/OAuth/UserProvider.php @@ -54,8 +54,13 @@ class UserProvider extends BaseUserProvider implements AccountConnectorInterface * @param ObjectManager $userManager * @param CanonicalizerInterface $canonicalizer */ - public function __construct(RepositoryInterface $customerRepository, UserRepositoryInterface $userRepository, RepositoryInterface $oauthRepository, ObjectManager $userManager, CanonicalizerInterface $canonicalizer) - { + public function __construct( + RepositoryInterface $customerRepository, + UserRepositoryInterface $userRepository, + RepositoryInterface $oauthRepository, + ObjectManager $userManager, + CanonicalizerInterface $canonicalizer + ) { parent::__construct($userRepository, $canonicalizer); $this->customerRepository = $customerRepository; $this->oauthRepository = $oauthRepository; @@ -96,7 +101,7 @@ public function connect(UserInterface $user, UserResponseInterface $response) } /** - * Ad-hoc creation of user + * Ad-hoc creation of user. * * @param UserResponseInterface $response * @@ -126,7 +131,7 @@ protected function createUserByOAuthUserResponse(UserResponseInterface $response } /** - * Attach OAuth sign-in provider account to existing user + * Attach OAuth sign-in provider account to existing user. * * @param UserInterface $user * @param UserResponseInterface $response diff --git a/src/Sylius/Bundle/UserBundle/Provider/UserProvider.php b/src/Sylius/Bundle/UserBundle/Provider/AbstractUserProvider.php similarity index 97% rename from src/Sylius/Bundle/UserBundle/Provider/UserProvider.php rename to src/Sylius/Bundle/UserBundle/Provider/AbstractUserProvider.php index 35418e75b57..68f8a52c7b4 100644 --- a/src/Sylius/Bundle/UserBundle/Provider/UserProvider.php +++ b/src/Sylius/Bundle/UserBundle/Provider/AbstractUserProvider.php @@ -21,7 +21,7 @@ /** * @author Łukasz Chruściel */ -abstract class UserProvider implements UserProviderInterface +abstract class AbstractUserProvider implements UserProviderInterface { /** * @var string diff --git a/src/Sylius/Bundle/UserBundle/Provider/EmailProvider.php b/src/Sylius/Bundle/UserBundle/Provider/EmailProvider.php index 706d163f41d..8e2f79805af 100644 --- a/src/Sylius/Bundle/UserBundle/Provider/EmailProvider.php +++ b/src/Sylius/Bundle/UserBundle/Provider/EmailProvider.php @@ -14,7 +14,7 @@ /** * @author Łukasz Chruściel */ -class EmailProvider extends UserProvider +class EmailProvider extends AbstractUserProvider { /** * {@inheritDoc} diff --git a/src/Sylius/Bundle/UserBundle/Provider/UsernameOrEmailProvider.php b/src/Sylius/Bundle/UserBundle/Provider/UsernameOrEmailProvider.php index 9f9ed0bb5cb..563cdfbae59 100644 --- a/src/Sylius/Bundle/UserBundle/Provider/UsernameOrEmailProvider.php +++ b/src/Sylius/Bundle/UserBundle/Provider/UsernameOrEmailProvider.php @@ -14,7 +14,7 @@ /** * @author Łukasz Chruściel */ -class UsernameOrEmailProvider extends UserProvider +class UsernameOrEmailProvider extends AbstractUserProvider { /** * {@inheritDoc} diff --git a/src/Sylius/Bundle/UserBundle/Provider/UsernameProvider.php b/src/Sylius/Bundle/UserBundle/Provider/UsernameProvider.php index 9aa98a266bf..4c5b4d40dcc 100644 --- a/src/Sylius/Bundle/UserBundle/Provider/UsernameProvider.php +++ b/src/Sylius/Bundle/UserBundle/Provider/UsernameProvider.php @@ -14,7 +14,7 @@ /** * @author Łukasz Chruściel */ -class UsernameProvider extends UserProvider +class UsernameProvider extends AbstractUserProvider { /** * {@inheritDoc} diff --git a/src/Sylius/Bundle/UserBundle/Reloader/UserReloader.php b/src/Sylius/Bundle/UserBundle/Reloader/UserReloader.php index 894432d4559..1a6e96c3139 100644 --- a/src/Sylius/Bundle/UserBundle/Reloader/UserReloader.php +++ b/src/Sylius/Bundle/UserBundle/Reloader/UserReloader.php @@ -15,8 +15,8 @@ use Sylius\Component\User\Model\UserInterface; /** -* @author Łukasz Chruściel -*/ + * @author Łukasz Chruściel + */ class UserReloader implements UserReloaderInterface { /** diff --git a/src/Sylius/Bundle/UserBundle/Reloader/UserReloaderInterface.php b/src/Sylius/Bundle/UserBundle/Reloader/UserReloaderInterface.php index b4e25c96c8f..2f7fee90a43 100644 --- a/src/Sylius/Bundle/UserBundle/Reloader/UserReloaderInterface.php +++ b/src/Sylius/Bundle/UserBundle/Reloader/UserReloaderInterface.php @@ -14,8 +14,8 @@ use Sylius\Component\User\Model\UserInterface; /** -* @author Łukasz Chruściel -*/ + * @author Łukasz Chruściel + */ interface UserReloaderInterface { /** diff --git a/src/Sylius/Bundle/UserBundle/Resources/config/services.xml b/src/Sylius/Bundle/UserBundle/Resources/config/services.xml index 218fea9c1b8..e467dc2b655 100644 --- a/src/Sylius/Bundle/UserBundle/Resources/config/services.xml +++ b/src/Sylius/Bundle/UserBundle/Resources/config/services.xml @@ -40,12 +40,12 @@ Sylius\Bundle\UserBundle\Form\Type\UserResetPasswordType Sylius\Bundle\UserBundle\Form\Type\UserChangePasswordType - Sylius\Bundle\UserBundle\EventListener\DefaultUsernameListener + Sylius\Bundle\UserBundle\EventListener\DefaultUsernameORMListener Sylius\Bundle\UserBundle\EventListener\CustomerAwareListener Sylius\Bundle\UserBundle\EventListener\UserDeleteListener Sylius\Bundle\UserBundle\EventListener\CanonicalizerListener Sylius\Bundle\UserBundle\EventListener\PasswordUpdaterListener - Sylius\Bundle\UserBundle\EventListener\UserLastLoginListener + Sylius\Bundle\UserBundle\EventListener\UserLastLoginSubscriber Sylius\Bundle\UserBundle\EventListener\UserAutoLoginListener Sylius\Bundle\UserBundle\EventListener\UserReloaderListener Sylius\Bundle\UserBundle\EventListener\MailerListener diff --git a/src/Sylius/Bundle/UserBundle/Security/UserLogin.php b/src/Sylius/Bundle/UserBundle/Security/UserLogin.php index 6a91d93e568..a20b72c5564 100644 --- a/src/Sylius/Bundle/UserBundle/Security/UserLogin.php +++ b/src/Sylius/Bundle/UserBundle/Security/UserLogin.php @@ -20,9 +20,9 @@ use Symfony\Component\Security\Core\User\UserCheckerInterface; /** -* @author Łukasz Chruściel -* @author Michał Marcinkowski -*/ + * @author Łukasz Chruściel + * @author Michał Marcinkowski + */ class UserLogin implements UserLoginInterface { /** diff --git a/src/Sylius/Bundle/UserBundle/Security/UserLoginInterface.php b/src/Sylius/Bundle/UserBundle/Security/UserLoginInterface.php index 997ba28da11..4758806bd5a 100644 --- a/src/Sylius/Bundle/UserBundle/Security/UserLoginInterface.php +++ b/src/Sylius/Bundle/UserBundle/Security/UserLoginInterface.php @@ -14,8 +14,8 @@ use Sylius\Component\User\Model\UserInterface; /** -* @author Łukasz Chruściel -*/ + * @author Łukasz Chruściel + */ interface UserLoginInterface { /** diff --git a/src/Sylius/Bundle/UserBundle/UserEvents.php b/src/Sylius/Bundle/UserBundle/UserEvents.php index 4cda121c959..aeb3d008f3b 100644 --- a/src/Sylius/Bundle/UserBundle/UserEvents.php +++ b/src/Sylius/Bundle/UserBundle/UserEvents.php @@ -12,7 +12,7 @@ namespace Sylius\Bundle\UserBundle; /** - * Contains all events thrown in the SyliusUserBundle + * Contains all events thrown in the SyliusUserBundle. */ final class UserEvents { diff --git a/src/Sylius/Bundle/UserBundle/spec/Doctrine/ORM/CustomerRepositorySpec.php b/src/Sylius/Bundle/UserBundle/spec/Doctrine/ORM/CustomerRepositorySpec.php new file mode 100644 index 00000000000..a536d00dedd --- /dev/null +++ b/src/Sylius/Bundle/UserBundle/spec/Doctrine/ORM/CustomerRepositorySpec.php @@ -0,0 +1,96 @@ +getFilters()->willReturn($collection); + + $this->beConstructedWith($em, $classMetadata); + } + + function it_is_initializable() + { + $this->shouldHaveType('Sylius\Bundle\UserBundle\Doctrine\ORM\CustomerRepository'); + } + + function it_is_a_repository() + { + $this->shouldHaveType('Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository'); + } + + function it_finds_details($em, $collection, QueryBuilder $builder, Expr $expr, AbstractQuery $query) + { + $collection->disable('softdeleteable')->shouldBeCalled(); + + $builder->expr()->shouldBeCalled()->willReturn($expr); + $expr->eq('o.id', ':id')->shouldBeCalled()->willReturn($expr); + + $em->createQueryBuilder()->shouldBeCalled()->willReturn($builder); + $builder->select('o')->shouldBeCalled()->willReturn($builder); + $builder->from(Argument::any(), 'o')->shouldBeCalled()->willReturn($builder); + $builder->andWhere($expr)->shouldBeCalled()->willReturn($builder); + $builder->setParameter('id', 1)->shouldBeCalled()->willReturn($builder); + $builder->getQuery()->shouldBeCalled()->willReturn($query); + $query->getOneOrNullResult()->shouldBeCalled(); + + + $collection->enable('softdeleteable')->shouldBeCalled(); + + $this->findForDetailsPage(1); + } + + function it_creates_paginator( + $em, + $collection, + QueryBuilder $builder, + Expr $expr, + AbstractQuery $query + ) { + $collection->disable('softdeleteable')->shouldBeCalled(); + + $em->createQueryBuilder()->shouldBeCalled()->willReturn($builder); + $builder->select('o')->shouldBeCalled()->willReturn($builder); + $builder->from(Argument::any(), 'o')->shouldBeCalled()->willReturn($builder); + $builder->leftJoin('o.user', 'user')->shouldBeCalled()->willReturn($builder); + + $builder->expr()->willReturn($expr); + $expr->like(Argument::any(), Argument::any())->willReturn($expr); + $expr->eq(Argument::any(), Argument::any())->willReturn($expr); + + // enable + $builder->andWhere(Argument::type('Doctrine\ORM\Query\Expr'))->shouldBeCalled()->willReturn($builder); + $builder->setParameter('enabled', true)->shouldBeCalled()->willReturn($builder); + + // Query + $builder->where(Argument::type('Doctrine\ORM\Query\Expr'))->shouldBeCalled()->willReturn($builder); + $builder->orWhere(Argument::type('Doctrine\ORM\Query\Expr'))->shouldBeCalled()->willReturn($builder); + $builder->orWhere(Argument::type('Doctrine\ORM\Query\Expr'))->shouldBeCalled()->willReturn($builder); + $builder->orWhere(Argument::type('Doctrine\ORM\Query\Expr'))->shouldBeCalled()->willReturn($builder); + $builder->setParameter('query', '%arnaud%')->shouldBeCalled()->willReturn($builder); + + // Sort + $builder->addOrderBy('o.name', 'asc')->shouldBeCalled(); + $builder->getQuery()->shouldBeCalled()->willReturn($query); + + $this->createFilterPaginator( + array( + 'enabled' => true, + 'query' => 'arnaud' + ), + array('name' => 'asc'), + true + )->shouldHaveType('Pagerfanta\Pagerfanta'); + } +} diff --git a/src/Sylius/Bundle/UserBundle/spec/Doctrine/ORM/GroupRepositorySpec.php b/src/Sylius/Bundle/UserBundle/spec/Doctrine/ORM/GroupRepositorySpec.php new file mode 100644 index 00000000000..b5918f98cfc --- /dev/null +++ b/src/Sylius/Bundle/UserBundle/spec/Doctrine/ORM/GroupRepositorySpec.php @@ -0,0 +1,36 @@ +beConstructedWith($em, $classMetadata); + } + + function it_is_initializable() + { + $this->shouldHaveType('Sylius\Bundle\UserBundle\Doctrine\ORM\GroupRepository'); + } + + function it_is_a_repository() + { + $this->shouldHaveType('Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository'); + } + + function it_has_a_form_query_buidler($em, QueryBuilder $builder) + { + $em->createQueryBuilder()->shouldBeCalled()->willReturn($builder); + $builder->select('o')->shouldBeCalled()->willReturn($builder); + $builder->from(Argument::any(), 'o')->shouldBeCalled(); + + $this->getFormQueryBuilder(); + } +} diff --git a/src/Sylius/Bundle/UserBundle/spec/Doctrine/ORM/UserRepositorySpec.php b/src/Sylius/Bundle/UserBundle/spec/Doctrine/ORM/UserRepositorySpec.php new file mode 100644 index 00000000000..bc4da5a03eb --- /dev/null +++ b/src/Sylius/Bundle/UserBundle/spec/Doctrine/ORM/UserRepositorySpec.php @@ -0,0 +1,167 @@ +getFilters()->willReturn($collection); + + $this->beConstructedWith($em, $classMetadata); + } + + function it_is_initializable() + { + $this->shouldHaveType('Sylius\Bundle\UserBundle\Doctrine\ORM\UserRepository'); + } + + function it_is_a_repository() + { + $this->shouldHaveType('Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository'); + } + + function it_create_paginator( + $em, + $collection, + QueryBuilder $builder, + Expr $expr, + AbstractQuery $query + ) { + $collection->disable('softdeleteable')->shouldBeCalled(); + + $em->createQueryBuilder()->shouldBeCalled()->willReturn($builder); + $builder->select('o')->shouldBeCalled()->willReturn($builder); + $builder->from(Argument::any(), 'o')->shouldBeCalled()->willReturn($builder); + + $builder->expr()->willReturn($expr); + $expr->like(Argument::any(), Argument::any())->willReturn($expr); + $expr->eq(Argument::any(), Argument::any())->willReturn($expr); + + // enable + $builder->andWhere('o.enabled = :enabled')->shouldBeCalled()->willReturn($builder); + $builder->setParameter('enabled', true)->shouldBeCalled()->willReturn($builder); + + // Query + $builder->leftJoin('o.customer', 'customer')->shouldBeCalled()->willReturn($builder); + $builder->where('customer.emailCanonical LIKE :query')->shouldBeCalled()->willReturn($builder); + $builder->orWhere('customer.firstName LIKE :query')->shouldBeCalled()->willReturn($builder); + $builder->orWhere('customer.lastName LIKE :query')->shouldBeCalled()->willReturn($builder); + $builder->orWhere('o.username LIKE :query')->shouldBeCalled()->willReturn($builder); + $builder->setParameter('query', '%arnaud%')->shouldBeCalled()->willReturn($builder); + + // Sort + $builder->addOrderBy('o.name', 'asc')->shouldBeCalled(); + $builder->getQuery()->shouldBeCalled()->willReturn($query); + + $this->createFilterPaginator( + array( + 'enabled' => true, + 'query' => 'arnaud' + ), + array('name' => 'asc'), + true + )->shouldHaveType('Pagerfanta\Pagerfanta'); + } + + function it_finds_details($em, $collection, QueryBuilder $builder, Expr $expr, AbstractQuery $query) + { + $collection->disable('softdeleteable')->shouldBeCalled(); + + $builder->expr()->shouldBeCalled()->willReturn($expr); + $expr->eq('o.id', ':id')->shouldBeCalled()->willReturn($expr); + + $em->createQueryBuilder()->shouldBeCalled()->willReturn($builder); + $builder->select('o')->shouldBeCalled()->willReturn($builder); + $builder->from(Argument::any(), 'o')->shouldBeCalled()->willReturn($builder); + $builder->leftJoin('o.customer', 'customer')->shouldBeCalled()->willReturn($builder); + $builder->addSelect('customer')->shouldBeCalled()->willReturn($builder); + $builder->where($expr)->shouldBeCalled()->willReturn($builder); + $builder->setParameter('id', 10)->shouldBeCalled()->willReturn($builder); + + $builder->getQuery()->shouldBeCalled()->willReturn($query); + $query->getOneOrNullResult()->shouldBeCalled(); + + $collection->enable('softdeleteable')->shouldBeCalled(); + + $this->findForDetailsPage(10); + } + + function it_counts_user_user_repository( + $em, + QueryBuilder $builder, + \DateTime $from, + \DateTime $to, + AbstractQuery $query, + Expr $expr + ) { + $em->createQueryBuilder()->shouldBeCalled()->willReturn($builder); + + $builder->expr()->shouldBeCalled()->willReturn($expr); + $expr->gte(Argument::any(), Argument::any())->shouldBeCalled()->willReturn($expr); + $expr->lte(Argument::any(), Argument::any())->shouldBeCalled()->willReturn($expr); + + $builder->select('o')->shouldBeCalled()->willReturn($builder); + $builder->from(Argument::any(), 'o')->shouldBeCalled()->willReturn($builder); + $builder->andWhere(Argument::type('Doctrine\ORM\Query\Expr'))->shouldBeCalled()->willReturn($builder); + $builder->setParameter('from', $from)->shouldBeCalled()->willReturn($builder); + $builder->setParameter('to', $to)->shouldBeCalled()->willReturn($builder); + $builder->andWhere('o.status = :status')->shouldBeCalled()->willReturn($builder); + $builder->setParameter('status', 'status')->shouldBeCalled()->willReturn($builder); + $builder->select('count(o.id)')->shouldBeCalled()->willReturn($builder); + + $builder->getQuery()->shouldBeCalled()->willReturn($query); + $query->getSingleScalarResult()->shouldBeCalled(); + + $this->countBetweenDates($from, $to, 'status'); + } + + function it_finds_one_by_email( + $collection, + $em, + QueryBuilder $builder, + Expr $expr, + AbstractQuery $query + ) { + $collection->disable('softdeleteable')->shouldBeCalled(); + + $em->createQueryBuilder()->shouldBeCalled()->willReturn($builder); + $builder->select('o')->shouldBeCalled()->willReturn($builder); + $builder->from(Argument::any(), 'o')->shouldBeCalled()->willReturn($builder); + + $builder->leftJoin('o.customer', 'customer')->shouldBeCalled()->willReturn($builder); + $builder->addSelect('customer')->shouldBeCalled()->willReturn($builder); + + $builder->expr()->shouldBeCalled()->willReturn($expr); + $expr->eq('o.id', ':id')->shouldBeCalled()->willReturn($expr); + + $builder->where($expr)->shouldBeCalled()->willReturn($builder); + $builder->setParameter('id', 10)->shouldBeCalled()->willReturn($builder); + + $builder->getQuery()->shouldBeCalled()->willReturn($query); + $query->getOneOrNullResult()->shouldBeCalled(); + + $collection->enable('softdeleteable')->shouldBeCalled(); + + $this->findForDetailsPage(10); + } +} diff --git a/src/Sylius/Bundle/UserBundle/spec/Event/UserEventSpec.php b/src/Sylius/Bundle/UserBundle/spec/Event/UserEventSpec.php new file mode 100644 index 00000000000..eb176e1505a --- /dev/null +++ b/src/Sylius/Bundle/UserBundle/spec/Event/UserEventSpec.php @@ -0,0 +1,25 @@ +beConstructedWith($user); + } + + function it_is_initializable() + { + $this->shouldHaveType('Sylius\Bundle\UserBundle\Event\UserEvent'); + } + + function it_has_user($user) + { + $this->getUser()->shouldReturn($user); + } +} diff --git a/src/Sylius/Bundle/UserBundle/spec/EventListener/DefaultUsernameORMListenerSpec.php b/src/Sylius/Bundle/UserBundle/spec/EventListener/DefaultUsernameORMListenerSpec.php new file mode 100644 index 00000000000..553c10f8fc0 --- /dev/null +++ b/src/Sylius/Bundle/UserBundle/spec/EventListener/DefaultUsernameORMListenerSpec.php @@ -0,0 +1,56 @@ +shouldHaveType('Sylius\Bundle\UserBundle\EventListener\DefaultUsernameORMListener'); + } + + function it_update_username_on_pre_persit( + LifecycleEventArgs $event, + UserInterface $user, + CustomerInterface $customer + ) { + $event->getEntity()->shouldBeCalled()->willReturn($user); + $user->getCustomer()->shouldBeCalled()->willReturn($customer); + + $customer->getEmail()->shouldBeCalled()->willReturn('email@email.com'); + $user->getUsername()->shouldBeCalled()->willReturn('user'); + + $user->setUsername('email@email.com')->shouldBeCalled(); + + $this->prePersist($event); + } + + function it_update_username_on_pre_update( + LifecycleEventArgs $event, + UserInterface $user, + CustomerInterface $customer, + EntityManager $entityManager + ) { + $event->getEntityManager()->shouldBeCalled()->willReturn($entityManager); + + $event->getEntity()->shouldBeCalled()->willReturn($customer); + $customer->getUser()->shouldBeCalled()->willReturn($user); + + $customer->getEmail()->shouldBeCalled()->willReturn('email@email.com'); + $user->getUsername()->shouldBeCalled()->willReturn('user'); + + $user->setUsername('email@email.com')->shouldBeCalled(); + + $entityManager->persist($user); + $entityManager->flush($user); + + $this->preUpdate($event); + } +} diff --git a/src/Sylius/Bundle/UserBundle/spec/EventListener/UserLastLoginSubscriberSpec.php b/src/Sylius/Bundle/UserBundle/spec/EventListener/UserLastLoginSubscriberSpec.php new file mode 100644 index 00000000000..305e8ce7539 --- /dev/null +++ b/src/Sylius/Bundle/UserBundle/spec/EventListener/UserLastLoginSubscriberSpec.php @@ -0,0 +1,64 @@ +beConstructedWith($userManager); + } + + function it_is_initializable() + { + $this->shouldHaveType('Sylius\Bundle\UserBundle\EventListener\UserLastLoginSubscriber'); + } + + function it_is_subscriber() + { + $this->shouldImplement('Sylius\Bundle\UserBundle\EventListener\UserLastLoginSubscriber'); + } + + function it_subscriber_to_event() + { + $this::getSubscribedEvents()->shouldReturn(array( + SecurityEvents::INTERACTIVE_LOGIN => 'onSecurityInteractiveLogin', + UserEvents::SECURITY_IMPLICIT_LOGIN => 'onImplicitLogin', + )); + } + + function it_updates_user_last_login_on_security_interactive_login( + InteractiveLoginEvent $event, + TokenInterface $token, + UserInterface $user, + $userManager + ) { + $event->getAuthenticationToken()->shouldBeCalled()->willReturn($token); + $token->getUser()->shouldBeCalled()->willReturn($user); + + $userManager->persist($user)->shouldBeCalled(); + $userManager->flush($user)->shouldBeCalled(); + + $this->onSecurityInteractiveLogin($event); + } + + function it_updates_user_last_login_on_implicit_login(UserEvent $event, UserInterface $user, $userManager) + { + $event->getUser()->shouldBeCalled()->willReturn($user); + + $userManager->persist($user)->shouldBeCalled(); + $userManager->flush($user)->shouldBeCalled(); + + $this->onImplicitLogin($event); + } +} diff --git a/src/Sylius/Bundle/UserBundle/spec/Form/Type/CustomerProfileTypeSpec.php b/src/Sylius/Bundle/UserBundle/spec/Form/Type/CustomerProfileTypeSpec.php new file mode 100644 index 00000000000..92968106f67 --- /dev/null +++ b/src/Sylius/Bundle/UserBundle/spec/Form/Type/CustomerProfileTypeSpec.php @@ -0,0 +1,41 @@ +beConstructedWith('Customer', array('sylius')); + } + + function it_is_initializable() + { + $this->shouldHaveType('Sylius\Bundle\UserBundle\Form\Type\CustomerProfileType'); + } + + function it_is_a_form() + { + $this->shouldHaveType('Symfony\Component\Form\AbstractType'); + } + + function it_builds_a_form(FormBuilderInterface $builder) + { + $builder->add('firstName', 'text', Argument::type('array'))->shouldbeCalled()->willReturn($builder); + $builder->add('lastName', 'text', Argument::type('array'))->shouldbeCalled()->willReturn($builder); + $builder->add('email', 'email', Argument::type('array'))->shouldbeCalled()->willReturn($builder); + $builder->add('birthday', 'birthday', Argument::type('array'))->shouldbeCalled()->willReturn($builder); + $builder->add('gender', 'sylius_gender')->shouldbeCalled()->willReturn($builder); + + $this->buildForm($builder); + } + + function it_has_a_name() + { + $this->getName()->shouldReturn('sylius_customer_profile'); + } +} diff --git a/src/Sylius/Bundle/UserBundle/spec/Form/Type/CustomerRegistrationTypeSpec.php b/src/Sylius/Bundle/UserBundle/spec/Form/Type/CustomerRegistrationTypeSpec.php new file mode 100644 index 00000000000..9adca205e48 --- /dev/null +++ b/src/Sylius/Bundle/UserBundle/spec/Form/Type/CustomerRegistrationTypeSpec.php @@ -0,0 +1,60 @@ +beConstructedWith('Customer', array('sylius'), $customerRepository); + } + + function it_is_initializable() + { + $this->shouldHaveType('Sylius\Bundle\UserBundle\Form\Type\CustomerRegistrationType'); + } + + function it_is_a_form() + { + $this->shouldHaveType('Sylius\Bundle\ResourceBundle\Form\Type\AbstractResourceType'); + } + + function it_builds_a_form(FormBuilderInterface $builder) + { + $builder->add('firstName', 'text', Argument::type('array'))->shouldbeCalled()->willReturn($builder); + $builder->add('lastName', 'text', Argument::type('array'))->shouldbeCalled()->willReturn($builder); + $builder->add('email', 'email', Argument::type('array'))->shouldbeCalled()->willReturn($builder); + $builder->add('user', 'sylius_user_registration', Argument::type('array'))->shouldbeCalled()->willReturn($builder); + $builder->addEventSubscriber( + Argument::type('Sylius\Bundle\UserBundle\Form\EventListener\CustomerRegistrationFormListener') + )->shouldbeCalled()->willReturn($builder); + $builder->addEventSubscriber( + Argument::type('Sylius\Bundle\UserBundle\Form\EventListener\UserRegistrationFormListener') + )->shouldbeCalled()->willReturn($builder); + $builder->setDataLocked(false)->shouldbeCalled()->willReturn($builder); + + $this->buildForm($builder); + } + + function it_has_options(OptionsResolverInterface $resolver) + { + $resolver->setDefaults(array( + 'data_class' => 'Customer', + 'validation_groups' => array('sylius'), + 'cascade_validation' => true + ))->shouldBeCalled(); + + $this->setDefaultOptions($resolver); + } + + function it_has_a_name() + { + $this->getName()->shouldReturn('sylius_customer_registration'); + } +} diff --git a/src/Sylius/Bundle/UserBundle/spec/Form/Type/GenderTypeSpec.php b/src/Sylius/Bundle/UserBundle/spec/Form/Type/GenderTypeSpec.php new file mode 100644 index 00000000000..cefd528139d --- /dev/null +++ b/src/Sylius/Bundle/UserBundle/spec/Form/Type/GenderTypeSpec.php @@ -0,0 +1,44 @@ +shouldHaveType('Sylius\Bundle\UserBundle\Form\Type\GenderType'); + } + + function it_is_a_form() + { + $this->shouldHaveType('Symfony\Component\Form\AbstractType'); + } + + function it_has_options(OptionsResolverInterface $resolver) + { + $resolver->setDefaults(array( + 'choices' => array( + CustomerInterface::UNKNOWN_GENDER => ' ', + CustomerInterface::MALE_GENDER => 'sylius.gender.male', + CustomerInterface::FEMALE_GENDER => 'sylius.gender.female', + ) + ))->shouldBeCalled(); + + $this->setDefaultOptions($resolver); + } + + function it_has_a_name() + { + $this->getName()->shouldReturn('sylius_gender'); + } + + function it_has_a_parent() + { + $this->getParent()->shouldReturn('choice'); + } +} diff --git a/src/Sylius/Bundle/UserBundle/spec/Form/Type/GroupTypeSpec.php b/src/Sylius/Bundle/UserBundle/spec/Form/Type/GroupTypeSpec.php new file mode 100644 index 00000000000..527e11763ab --- /dev/null +++ b/src/Sylius/Bundle/UserBundle/spec/Form/Type/GroupTypeSpec.php @@ -0,0 +1,37 @@ +beConstructedWith('Group', array('sylius')); + } + + function it_is_initializable() + { + $this->shouldHaveType('Sylius\Bundle\UserBundle\Form\Type\GroupType'); + } + + function it_is_a_form() + { + $this->shouldHaveType('Symfony\Component\Form\AbstractType'); + } + + function it_builds_a_form(FormBuilderInterface $builder) + { + $builder->add('name', 'text', Argument::type('array'))->shouldbeCalled()->willReturn($builder); + + $this->buildForm($builder); + } + + function it_has_a_name() + { + $this->getName()->shouldReturn('sylius_group'); + } +} diff --git a/src/Sylius/Bundle/UserBundle/spec/OAuth/UserProviderSpec.php b/src/Sylius/Bundle/UserBundle/spec/OAuth/UserProviderSpec.php index 7d390b5e480..a41fd0b9f3e 100644 --- a/src/Sylius/Bundle/UserBundle/spec/OAuth/UserProviderSpec.php +++ b/src/Sylius/Bundle/UserBundle/spec/OAuth/UserProviderSpec.php @@ -15,7 +15,6 @@ use HWI\Bundle\OAuthBundle\OAuth\Response\UserResponseInterface; use PhpSpec\ObjectBehavior; use Sylius\Bundle\UserBundle\Doctrine\ORM\CustomerRepository; -use Sylius\Bundle\UserBundle\Doctrine\ORM\UserRepository; use Sylius\Component\Resource\Repository\RepositoryInterface; use Sylius\Component\User\Canonicalizer\CanonicalizerInterface; use Sylius\Component\User\Model\CustomerInterface; @@ -26,8 +25,13 @@ class UserProviderSpec extends ObjectBehavior { - function let(CustomerRepository $customerRepository, UserRepositoryInterface $userRepository, RepositoryInterface $oauthRepository, ObjectManager $userManager, CanonicalizerInterface $canonicalizer) - { + function let( + CustomerRepository $customerRepository, + UserRepositoryInterface $userRepository, + RepositoryInterface $oauthRepository, + ObjectManager $userManager, + CanonicalizerInterface $canonicalizer + ) { $this->beConstructedWith($customerRepository, $userRepository, $oauthRepository, $userManager, $canonicalizer); } diff --git a/src/Sylius/Bundle/UserBundle/spec/Provider/EmailProviderSpec.php b/src/Sylius/Bundle/UserBundle/spec/Provider/EmailProviderSpec.php index 4404e00b5f5..fb78266fe09 100644 --- a/src/Sylius/Bundle/UserBundle/spec/Provider/EmailProviderSpec.php +++ b/src/Sylius/Bundle/UserBundle/spec/Provider/EmailProviderSpec.php @@ -38,7 +38,7 @@ function it_implements_symfony_user_provider_interface() function it_should_extend_user_provider() { - $this->shouldHaveType('Sylius\Bundle\UserBundle\Provider\UserProvider'); + $this->shouldHaveType('Sylius\Bundle\UserBundle\Provider\AbstractUserProvider'); } function it_supports_sylius_user_model() diff --git a/src/Sylius/Bundle/UserBundle/spec/Provider/UsernameOrEmailProviderSpec.php b/src/Sylius/Bundle/UserBundle/spec/Provider/UsernameOrEmailProviderSpec.php index ed91e3e2c99..75865706397 100644 --- a/src/Sylius/Bundle/UserBundle/spec/Provider/UsernameOrEmailProviderSpec.php +++ b/src/Sylius/Bundle/UserBundle/spec/Provider/UsernameOrEmailProviderSpec.php @@ -41,7 +41,7 @@ function it_implements_symfony_user_provider_interface() function it_should_extend_user_provider() { - $this->shouldHaveType('Sylius\Bundle\UserBundle\Provider\UserProvider'); + $this->shouldHaveType('Sylius\Bundle\UserBundle\Provider\AbstractUserProvider'); } function it_supports_sylius_user_model() diff --git a/src/Sylius/Bundle/UserBundle/spec/Provider/UsernameProviderSpec.php b/src/Sylius/Bundle/UserBundle/spec/Provider/UsernameProviderSpec.php index 1ad99690435..b002251c4de 100644 --- a/src/Sylius/Bundle/UserBundle/spec/Provider/UsernameProviderSpec.php +++ b/src/Sylius/Bundle/UserBundle/spec/Provider/UsernameProviderSpec.php @@ -38,7 +38,7 @@ function it_implements_symfony_user_provider_interface() function it_should_extend_user_provider() { - $this->shouldHaveType('Sylius\Bundle\UserBundle\Provider\UserProvider'); + $this->shouldHaveType('Sylius\Bundle\UserBundle\Provider\AbstractUserProvider'); } function it_supports_sylius_user_model() diff --git a/src/Sylius/Bundle/VariationBundle/DependencyInjection/Configuration.php b/src/Sylius/Bundle/VariationBundle/DependencyInjection/Configuration.php index b3b649e0f5c..a777d6ddfc7 100644 --- a/src/Sylius/Bundle/VariationBundle/DependencyInjection/Configuration.php +++ b/src/Sylius/Bundle/VariationBundle/DependencyInjection/Configuration.php @@ -121,8 +121,8 @@ private function addClassesSection(ArrayNodeDefinition $node) ->arrayNode('form') ->addDefaultsIfNotSet() ->children() - ->scalarNode('default')->defaultValue('Sylius\Bundle\VariationBundle\Form\Type\OptionType') - ->scalarNode('choice')->defaultValue('Sylius\Bundle\ResourceBundle\Form\Type\ResourceChoiceType') + ->scalarNode('default')->defaultValue('Sylius\Bundle\VariationBundle\Form\Type\OptionType')->end() + ->scalarNode('choice')->defaultValue('Sylius\Bundle\ResourceBundle\Form\Type\ResourceChoiceType')->end() ->end() ->end() ->arrayNode('translation') diff --git a/src/Sylius/Bundle/VariationBundle/DependencyInjection/SyliusVariationExtension.php b/src/Sylius/Bundle/VariationBundle/DependencyInjection/SyliusVariationExtension.php index 0fa1b8a0717..12fd0bf1080 100644 --- a/src/Sylius/Bundle/VariationBundle/DependencyInjection/SyliusVariationExtension.php +++ b/src/Sylius/Bundle/VariationBundle/DependencyInjection/SyliusVariationExtension.php @@ -28,12 +28,22 @@ class SyliusVariationExtension extends AbstractResourceExtension */ public function load(array $config, ContainerBuilder $container) { - $this->configure( + list($config, $loader) = $this->configure( $config, new Configuration(), $container, self::CONFIGURE_LOADER | self::CONFIGURE_DATABASE | self::CONFIGURE_PARAMETERS | self::CONFIGURE_VALIDATORS | self::CONFIGURE_TRANSLATIONS | self::CONFIGURE_FORMS ); + + foreach ($config['classes'] as $name => $parameters) { + $formDefinition = $container->getDefinition('sylius.form.type.'.$name); + $formDefinition->addArgument($parameters['variable']); + + if (isset($parameters['translation'])) { + $formTranslationDefinition = $container->getDefinition('sylius.form.type.'.$name.'_translation'); + $formTranslationDefinition->addArgument($parameters['variable']); + } + } } /** @@ -50,9 +60,10 @@ public function process(array $config, ContainerBuilder $container) foreach ($parameters as $resource => $classes) { $convertedConfig[$variable.'_'.$resource] = $classes; + $convertedConfig[$variable.'_'.$resource]['variable'] = $variable; } - $this->createvariableServices($container, $config['driver'], $variable, $convertedConfig); + $this->createvariableServices($container, $variable); if (!isset($config['validation_groups'][$variable]['variant'])) { $config['validation_groups'][$variable]['variant'] = array('sylius'); @@ -88,29 +99,13 @@ public function process(array $config, ContainerBuilder $container) * Create services for every variable object. * * @param ContainerBuilder $container - * @param string $driver * @param string $variable - * @param array $config */ - private function createVariableServices(ContainerBuilder $container, $driver, $variable, array $config) + private function createVariableServices(ContainerBuilder $container, $variable) { $variantAlias = $variable.'_variant'; - $optionAlias = $variable.'_option'; - $optionTranslationAlias = $variable.'_option_translation'; $optionValueAlias = $variable.'_option_value'; - $variantClasses = $config[$variantAlias]; - $optionClasses = $config[$optionAlias]; - $optionTranslationClasses = $optionClasses['translation']; - $optionValueClasses = $config[$optionValueAlias]; - - $variantFormType = new Definition($variantClasses['form']['default']); - $variantFormType - ->setArguments(array($variantClasses['model'], '%sylius.validation_group.'.$variantAlias.'%', $variable)) - ->addTag('form.type', array('alias' => 'sylius_'.$variantAlias)) - ; - - $container->setDefinition('sylius.form.type.'.$variantAlias, $variantFormType); $variantChoiceFormType = new Definition('Sylius\Bundle\VariationBundle\Form\Type\VariantChoiceType'); $variantChoiceFormType @@ -128,41 +123,6 @@ private function createVariableServices(ContainerBuilder $container, $driver, $v $container->setDefinition('sylius.form.type.'.$variantAlias.'_match', $variantMatchFormType); - $optionFormType = new Definition($optionClasses['form']['default']); - $optionFormType - ->setArguments(array($optionClasses['model'], '%sylius.validation_group.'.$optionAlias.'%', $variable)) - ->addTag('form.type', array('alias' => 'sylius_'.$optionAlias)) - ; - - $container->setDefinition('sylius.form.type.'.$optionAlias, $optionFormType); - - $optionTranslationFormType = new Definition($optionTranslationClasses['form']['default']); - $optionTranslationFormType - ->setArguments(array($optionTranslationClasses['model'], '%sylius.validation_group.'.$optionTranslationAlias.'%', $variable)) - ->addTag('form.type', array('alias' => 'sylius_'.$optionTranslationAlias)) - ; - - $container->setDefinition('sylius.form.type.'.$optionTranslationAlias, $optionTranslationFormType); - - $choiceTypeClasses = array( - SyliusResourceBundle::DRIVER_DOCTRINE_ORM => 'Sylius\Bundle\VariationBundle\Form\Type\OptionEntityChoiceType', - ); - - $optionChoiceFormType = new Definition($choiceTypeClasses[$driver]); - $optionChoiceFormType - ->setArguments(array($variable, $optionClasses['model'])) - ->addTag('form.type', array('alias' => 'sylius_'.$optionAlias.'_choice')) - ; - - $container->setDefinition('sylius.form.type.'.$optionAlias.'_choice', $optionChoiceFormType); - - $optionValueFormType = new Definition($optionValueClasses['form']['default']); - $optionValueFormType - ->setArguments(array($optionValueClasses['model'], '%sylius.validation_group.'.$optionValueAlias.'%', $variable)) - ->addTag('form.type', array('alias' => 'sylius_'.$optionValueAlias)) - ; - - $container->setDefinition('sylius.form.type.'.$optionValueAlias, $optionValueFormType); $optionValueChoiceFormType = new Definition('Sylius\Bundle\VariationBundle\Form\Type\OptionValueChoiceType'); $optionValueChoiceFormType diff --git a/src/Sylius/Bundle/VariationBundle/spec/DependencyInjection/SyliusVariationExtensionSpec.php b/src/Sylius/Bundle/VariationBundle/spec/DependencyInjection/SyliusVariationExtensionSpec.php index f75af7cb376..a6d0e0e742a 100644 --- a/src/Sylius/Bundle/VariationBundle/spec/DependencyInjection/SyliusVariationExtensionSpec.php +++ b/src/Sylius/Bundle/VariationBundle/spec/DependencyInjection/SyliusVariationExtensionSpec.php @@ -43,14 +43,6 @@ function it_processes_the_configuration_and_registers_services_per_variable(Cont ) ); - $variantFormType = new Definition('Some\App\Product\Form\ProductVariantType'); - $variantFormType - ->setArguments(array('Some\App\Product\Entity\ProductVariant', '%sylius.validation_group.product_variant%', 'product')) - ->addTag('form.type', array('alias' => 'sylius_product_variant')) - ; - - $container->setDefinition('sylius.form.type.product_variant', $variantFormType)->shouldBeCalled(); - $variantChoiceFormType = new Definition('Sylius\Bundle\VariationBundle\Form\Type\VariantChoiceType'); $variantChoiceFormType ->setArguments(array('product')) @@ -67,48 +59,6 @@ function it_processes_the_configuration_and_registers_services_per_variable(Cont $container->setDefinition('sylius.form.type.product_variant_match', $variantMatchFormType)->shouldBeCalled(); - $optionFormType = new Definition('Some\App\Product\Form\OptionType'); - $optionFormType - ->setArguments(array('Some\App\Product\Entity\Option', - '%sylius.validation_group.product_option%', - 'product' - )) - ->addTag('form.type', array('alias' => 'sylius_product_option')) - ; - - $container->setDefinition('sylius.form.type.product_option', $optionFormType)->shouldBeCalled(); - - $optionTranslationFormType = new Definition('Some\App\Product\Form\OptionTranslationType'); - $optionTranslationFormType - ->setArguments(array('Some\App\Product\Entity\OptionTranslation', - '%sylius.validation_group.product_option_translation%', - 'product' - )) - ->addTag('form.type', array('alias' => 'sylius_product_option_translation')) - ; - - $container->setDefinition('sylius.form.type.product_option_translation', $optionTranslationFormType)->shouldBeCalled(); - - $optionChoiceFormType = new Definition('Sylius\Bundle\VariationBundle\Form\Type\OptionEntityChoiceType'); - $optionChoiceFormType - ->setArguments(array('product', 'Some\App\Product\Entity\Option')) - ->addTag('form.type', array('alias' => 'sylius_product_option_choice')); - ; - - $container->setDefinition('sylius.form.type.product_option_choice', $optionChoiceFormType)->shouldBeCalled(); - - $optionValueFormType = new Definition('Some\App\Product\Form\OptionValueType'); - $optionValueFormType - ->setArguments(array( - 'Some\App\Product\Entity\OptionValue', - '%sylius.validation_group.product_option_value%', - 'product' - )) - ->addTag('form.type', array('alias' => 'sylius_product_option_value')) - ; - - $container->setDefinition('sylius.form.type.product_option_value', $optionValueFormType)->shouldBeCalled(); - $optionValueChoiceFormType = new Definition('Sylius\Bundle\VariationBundle\Form\Type\OptionValueChoiceType'); $optionValueChoiceFormType ->setArguments(array('product')) @@ -205,18 +155,21 @@ function it_processes_the_configuration_and_registers_services_per_variable(Cont 'default' => 'Some\App\Product\Form\OptionTranslationType', ) ), + 'variable' => 'product', ), 'product_option_value' => array( 'model' => 'Some\App\Product\Entity\OptionValue', 'form' => array( 'default' => 'Some\App\Product\Form\OptionValueType', ), + 'variable' => 'product', ), 'product_variant' => array( 'model' => 'Some\App\Product\Entity\ProductVariant', 'form' => array( 'default' => 'Some\App\Product\Form\ProductVariantType', ), + 'variable' => 'product', ), ), 'validation_groups' => array( diff --git a/src/Sylius/Bundle/VariationBundle/spec/Form/Type/OptionValueCollectionTypeSpec.php b/src/Sylius/Bundle/VariationBundle/spec/Form/Type/OptionValueCollectionTypeSpec.php index 0eb969eff4c..66e86e5dbbf 100644 --- a/src/Sylius/Bundle/VariationBundle/spec/Form/Type/OptionValueCollectionTypeSpec.php +++ b/src/Sylius/Bundle/VariationBundle/spec/Form/Type/OptionValueCollectionTypeSpec.php @@ -36,7 +36,7 @@ function it_builds_a_form(FormBuilderInterface $builder, OptionInterface $option ))->shouldBeCalled(); $this->buildForm($builder, array( - 'options' => [$option] + 'options' => array($option) )); } diff --git a/src/Sylius/Bundle/VariationBundle/spec/Form/Type/VariantMatchTypeSpec.php b/src/Sylius/Bundle/VariationBundle/spec/Form/Type/VariantMatchTypeSpec.php index 3c6a631c6f5..4682aa215fb 100644 --- a/src/Sylius/Bundle/VariationBundle/spec/Form/Type/VariantMatchTypeSpec.php +++ b/src/Sylius/Bundle/VariationBundle/spec/Form/Type/VariantMatchTypeSpec.php @@ -28,7 +28,7 @@ function it_is_a_form_type() function it_builds_a_form(FormBuilderInterface $builder, VariableInterface $variable, OptionInterface $option) { - $variable->getOptions()->shouldBeCalled()->willReturn([$option]); + $variable->getOptions()->shouldBeCalled()->willReturn(array($option)); $option->getName()->shouldBeCalled()->willReturn('option_name'); $option->getPresentation()->shouldBeCalled()->willReturn('option_presentation');