├── .docheader ├── .env ├── .env.test ├── .github ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ ├── question.md │ └── regression.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ └── tests.yml ├── .gitignore ├── CHANGELOG.md ├── LICENSE.txt ├── README.md ├── UPGRADE-1.1.md ├── UPGRADE-1.2.md ├── UPGRADE-1.3.md ├── behat.yml.dist ├── bin ├── .gitignore └── console ├── build.xml ├── composer.json ├── composer.lock ├── config ├── bootstrap.php ├── bundles.php ├── jwt │ └── .gitignore ├── packages │ ├── dev │ │ ├── monolog.yaml │ │ ├── nelmio_alice.yaml │ │ ├── routing.yaml │ │ └── web_profiler.yaml │ ├── doctrine.yaml │ ├── ergonode_account.yaml │ ├── ergonode_api.yaml │ ├── ergonode_core.yaml │ ├── ergonode_event_sourcing.yaml │ ├── ergonode_segment.yaml │ ├── framework.yaml │ ├── gesdinet_jwt_refresh_token.yaml │ ├── lexik_jwt_authentication.yaml │ ├── mailer.yaml │ ├── messenger.yaml │ ├── monolog.yaml │ ├── nelmio_api_doc.yaml │ ├── nelmio_cors.yaml │ ├── prod │ │ └── monolog.yaml │ ├── routing.yaml │ ├── security.yaml │ ├── test │ │ ├── ergonode_batch_action.yaml │ │ ├── ergonode_core.yaml │ │ ├── ergonode_event_sourcing.yaml │ │ ├── ergonode_segment.yaml │ │ ├── ergonode_workflow.yaml │ │ ├── framework.yaml │ │ ├── monolog.yaml │ │ ├── nelmio_alice.yaml │ │ └── web_profiler.yaml │ ├── translation.yaml │ ├── twig.yaml │ └── vich_uploader.yaml ├── routes.yaml ├── routes │ ├── dev │ │ ├── twig.yaml │ │ └── web_profiler.yaml │ └── nelmio_api_doc.yaml ├── services.yaml └── services_test.yaml ├── depfile.yaml ├── ergonode.svg ├── export └── .gitignore ├── features └── deepl.feature ├── import └── .gitignore ├── infection.json.dist ├── module ├── account │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── account-activitylog.feature │ │ ├── account-avatar.feature │ │ ├── account-behatch.feature │ │ ├── account-not-authenticated.feature │ │ ├── account-privileges.feature │ │ ├── account-token.feature │ │ ├── account.feature │ │ ├── avatar-test-empty-image.png │ │ ├── avatar-test-image.ico │ │ ├── avatar-test-image.jpg │ │ ├── avatar-test-image.png │ │ ├── role-autocomplete.feature │ │ └── role.json │ ├── migrations │ │ ├── Version20180401062601.php │ │ ├── Version20201027125000.php │ │ ├── Version20201103070049.php │ │ ├── Version20210105100000.php │ │ ├── Version20210105120000.php │ │ ├── Version20210309120000.php │ │ ├── Version20210615120000.php │ │ └── Version20210728123000.php │ ├── src │ │ ├── Application │ │ │ ├── Command │ │ │ │ └── CreateUserCommand.php │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── Account │ │ │ │ │ ├── AvatarChangeAction.php │ │ │ │ │ ├── AvatarDeleteAction.php │ │ │ │ │ ├── AvatarReadAction.php │ │ │ │ │ ├── PasswordChangeAction.php │ │ │ │ │ ├── UserChangeAction.php │ │ │ │ │ ├── UserCreateAction.php │ │ │ │ │ ├── UserReadAction.php │ │ │ │ │ └── UsersReadAction.php │ │ │ │ │ ├── Dictionary │ │ │ │ │ └── PrivilegeReadAction.php │ │ │ │ │ ├── Log │ │ │ │ │ ├── AccountReadAction.php │ │ │ │ │ └── ProfileReadAction.php │ │ │ │ │ ├── PasswordToken │ │ │ │ │ ├── UserResetPasswordTokenGenerateAction.php │ │ │ │ │ ├── UserRestPasswordTokenApplyAction.php │ │ │ │ │ └── UserRestPasswordTokenValidationAction.php │ │ │ │ │ ├── ProfileReadAction.php │ │ │ │ │ └── Role │ │ │ │ │ ├── RoleAutocompleteAction.php │ │ │ │ │ ├── RoleChangeAction.php │ │ │ │ │ ├── RoleCreateAction.php │ │ │ │ │ ├── RoleDeleteAction.php │ │ │ │ │ ├── RoleGridReadAction.php │ │ │ │ │ └── RoleReadAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeAccountExtension.php │ │ │ ├── Form │ │ │ │ ├── AvatarUploadForm.php │ │ │ │ ├── CreateUserForm.php │ │ │ │ ├── DataTransformer │ │ │ │ │ ├── LanguagePrivilegesDataTransformer.php │ │ │ │ │ └── PrivilegeDataTransformer.php │ │ │ │ ├── GenerateUserTokenForm.php │ │ │ │ ├── Model │ │ │ │ │ ├── AvatarUploadModel.php │ │ │ │ │ ├── CreateUserFormModel.php │ │ │ │ │ ├── GenerateUserTokenModel.php │ │ │ │ │ ├── RoleFormModel.php │ │ │ │ │ ├── UpdateUserFormModel.php │ │ │ │ │ └── UserApplyTokenModel.php │ │ │ │ ├── RoleForm.php │ │ │ │ ├── Type │ │ │ │ │ ├── LanguagePrivilegesType.php │ │ │ │ │ └── PrivilegeType.php │ │ │ │ ├── UpdateUserForm.php │ │ │ │ └── UserApplyTokenForm.php │ │ │ ├── Security │ │ │ │ ├── Checker │ │ │ │ │ └── UserActivityChecker.php │ │ │ │ └── Voter │ │ │ │ │ ├── ErgonodeRoleVoter.php │ │ │ │ │ ├── LanguageVoter.php │ │ │ │ │ ├── UserActivityVoter.php │ │ │ │ │ └── UserRoleVoter.php │ │ │ ├── Serializer │ │ │ │ └── Normalizer │ │ │ │ │ └── PasswordNormalizer.php │ │ │ └── Validator │ │ │ │ ├── HostAvailable.php │ │ │ │ ├── HostAvailableValidator.php │ │ │ │ ├── LanguageActive.php │ │ │ │ ├── LanguageActiveValidator.php │ │ │ │ ├── LanguageCodeExists.php │ │ │ │ ├── LanguageCodeExistsValidator.php │ │ │ │ ├── LanguagePrivilegesRelations.php │ │ │ │ ├── LanguagePrivilegesRelationsValidator.php │ │ │ │ ├── LanguageRead.php │ │ │ │ ├── LanguageReadValidator.php │ │ │ │ ├── PrivilegeRelations.php │ │ │ │ ├── PrivilegeRelationsValidator.php │ │ │ │ ├── RoleExists.php │ │ │ │ ├── RoleExistsValidator.php │ │ │ │ ├── RoleNameUnique.php │ │ │ │ ├── RoleNameUniqueValidator.php │ │ │ │ ├── TokenAvailable.php │ │ │ │ ├── TokenAvailableValidator.php │ │ │ │ ├── UserExists.php │ │ │ │ ├── UserExistsValidator.php │ │ │ │ ├── UserUnique.php │ │ │ │ └── UserUniqueValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── AccountCommandInterface.php │ │ │ │ ├── Role │ │ │ │ │ ├── CreateRoleCommand.php │ │ │ │ │ ├── DeleteRoleCommand.php │ │ │ │ │ └── UpdateRoleCommand.php │ │ │ │ └── User │ │ │ │ │ ├── ApplyUserResetTokenCommand.php │ │ │ │ │ ├── ChangeUserAvatarCommand.php │ │ │ │ │ ├── ChangeUserPasswordCommand.php │ │ │ │ │ ├── CreateUserCommand.php │ │ │ │ │ ├── DeleteUserAvatarCommand.php │ │ │ │ │ ├── GenerateUserResetPasswordTokenCommand.php │ │ │ │ │ └── UpdateUserCommand.php │ │ │ ├── Entity │ │ │ │ ├── Role.php │ │ │ │ ├── User.php │ │ │ │ └── UserResetPasswordToken.php │ │ │ ├── Event │ │ │ │ ├── Role │ │ │ │ │ ├── AddPrivilegeToRoleEvent.php │ │ │ │ │ ├── RemovePrivilegeFromRoleEvent.php │ │ │ │ │ ├── RoleCreatedEvent.php │ │ │ │ │ ├── RoleDeletedEvent.php │ │ │ │ │ ├── RoleDescriptionChangedEvent.php │ │ │ │ │ ├── RoleNameChangedEvent.php │ │ │ │ │ └── RolePrivilegesChangedEvent.php │ │ │ │ └── User │ │ │ │ │ ├── UserActivatedEvent.php │ │ │ │ │ ├── UserAvatarChangedEvent.php │ │ │ │ │ ├── UserAvatarDeletedEvent.php │ │ │ │ │ ├── UserCreatedEvent.php │ │ │ │ │ ├── UserDeactivatedEvent.php │ │ │ │ │ ├── UserFirstNameChangedEvent.php │ │ │ │ │ ├── UserLanguageChangedEvent.php │ │ │ │ │ ├── UserLanguagePrivilegesCollectionChangedEvent.php │ │ │ │ │ ├── UserLastNameChangedEvent.php │ │ │ │ │ ├── UserPasswordChangedEvent.php │ │ │ │ │ ├── UserResetTokenGeneratedEvent.php │ │ │ │ │ └── UserRoleChangedEvent.php │ │ │ ├── Exception │ │ │ │ └── InvalidEmailException.php │ │ │ ├── Factory │ │ │ │ └── RoleFactory.php │ │ │ ├── Mail │ │ │ │ ├── ResetTokenMail.php │ │ │ │ └── UserPasswordChangedMail.php │ │ │ ├── Provider │ │ │ │ ├── PrivilegeCodeProvider.php │ │ │ │ ├── PrivilegeDictionaryProvider.php │ │ │ │ └── PrivilegeGroupedByAreaProvider.php │ │ │ ├── Query │ │ │ │ ├── AccountGridQueryInterface.php │ │ │ │ ├── AccountQueryInterface.php │ │ │ │ ├── LogGridQueryInterface.php │ │ │ │ ├── PrivilegeQueryInterface.php │ │ │ │ ├── ProfileQueryInterface.php │ │ │ │ ├── RoleGridQueryInterface.php │ │ │ │ ├── RoleQueryInterface.php │ │ │ │ └── UserQueryInterface.php │ │ │ ├── Repository │ │ │ │ ├── RoleRepositoryInterface.php │ │ │ │ ├── UserRepositoryInterface.php │ │ │ │ └── UserResetPasswordTokenRepositoryInterface.php │ │ │ ├── Validator │ │ │ │ └── TokenValidator.php │ │ │ └── ValueObject │ │ │ │ ├── Password.php │ │ │ │ ├── Privilege.php │ │ │ │ ├── PrivilegeEndPoint.php │ │ │ │ └── ResetToken.php │ │ ├── ErgonodeAccountBundle.php │ │ ├── Infrastructure │ │ │ ├── Builder │ │ │ │ └── PasswordValidationBuilder.php │ │ │ ├── Encoder │ │ │ │ ├── DomainUserPasswordEncoder.php │ │ │ │ └── UserPasswordEncoderInterface.php │ │ │ ├── Generator │ │ │ │ ├── DefaultResetTokenGenerator.php │ │ │ │ └── ResetTokenGeneratorInterface.php │ │ │ ├── Grid │ │ │ │ ├── AccountGridBuilder.php │ │ │ │ ├── Column │ │ │ │ │ ├── LogColumn.php │ │ │ │ │ └── Renderer │ │ │ │ │ │ └── LogColumnRenderer.php │ │ │ │ ├── LogGridBuilder.php │ │ │ │ └── RoleGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── ChangeUserAvatarCommandHandler.php │ │ │ │ ├── ChangeUserPasswordCommandHandler.php │ │ │ │ ├── CreateUserCommandHandler.php │ │ │ │ ├── DeleteUserAvatarCommandHandler.php │ │ │ │ ├── Event │ │ │ │ │ ├── Application │ │ │ │ │ │ └── LanguageTreeUpdatedEventHandler.php │ │ │ │ │ ├── UserPasswordChangedEventHandler.php │ │ │ │ │ └── UserResetTokenGeneratedEventHandler.php │ │ │ │ ├── Role │ │ │ │ │ ├── CreateRoleCommandHandler.php │ │ │ │ │ ├── DeleteRoleCommandHandler.php │ │ │ │ │ └── UpdateRoleCommandHandler.php │ │ │ │ ├── UpdateUserCommandHandler.php │ │ │ │ └── User │ │ │ │ │ ├── ApplyUserResetTokenCommandHandler.php │ │ │ │ │ └── GenerateUserResetPasswordTokenCommandHandler.php │ │ │ ├── Persistence │ │ │ │ ├── Projector │ │ │ │ │ ├── Role │ │ │ │ │ │ ├── DbalRoleCreatedEventProjector.php │ │ │ │ │ │ ├── DbalRoleDeletedEventProjector.php │ │ │ │ │ │ ├── DbalRoleDescriptionChangedEventProjector.php │ │ │ │ │ │ ├── DbalRoleNameChangedEventProjector.php │ │ │ │ │ │ └── DbalRolePrivilegesChangedEventProjector.php │ │ │ │ │ └── User │ │ │ │ │ │ ├── DbalUserActivatedEventProjector.php │ │ │ │ │ │ ├── DbalUserAvatarChangedEventProjector.php │ │ │ │ │ │ ├── DbalUserAvatarDeletedEventProjector.php │ │ │ │ │ │ ├── DbalUserCreatedEventProjector.php │ │ │ │ │ │ ├── DbalUserDeactivatedEventProjector.php │ │ │ │ │ │ ├── DbalUserFirstNameChangedEventProjector.php │ │ │ │ │ │ ├── DbalUserLanguageChangedEventProjector.php │ │ │ │ │ │ ├── DbalUserLanguagePrivilegesCollectionChangedEventProjector.php │ │ │ │ │ │ ├── DbalUserLastNameChangedEventProjector.php │ │ │ │ │ │ ├── DbalUserPasswordChangedEventProjector.php │ │ │ │ │ │ └── DbalUserRoleChangedEventProjector.php │ │ │ │ ├── Query │ │ │ │ │ ├── DbalAccountGridQuery.php │ │ │ │ │ ├── DbalAccountQuery.php │ │ │ │ │ ├── DbalLogGridQuery.php │ │ │ │ │ ├── DbalPrivilegeQuery.php │ │ │ │ │ ├── DbalProfileQuery.php │ │ │ │ │ ├── DbalRoleGridQuery.php │ │ │ │ │ ├── DbalRoleQuery.php │ │ │ │ │ └── DbalUserQuery.php │ │ │ │ └── Repository │ │ │ │ │ ├── DbalUserResetPasswordTokenRepository.php │ │ │ │ │ ├── EventStoreRoleRepository.php │ │ │ │ │ ├── EventStoreUserRepository.php │ │ │ │ │ └── Mapper │ │ │ │ │ └── DbalUserResetPasswordTokenMapper.php │ │ │ ├── Provider │ │ │ │ ├── AuthenticatedUserProviderInterface.php │ │ │ │ ├── RoleProvider.php │ │ │ │ ├── RoleProviderInterface.php │ │ │ │ └── SimpleAuthenticatedUserProvider.php │ │ │ ├── Resolver │ │ │ │ ├── PrivilegeTypeResolver.php │ │ │ │ └── PrivilegeTypeResolverInterface.php │ │ │ ├── Strategy │ │ │ │ └── Relationship │ │ │ │ │ └── RoleUserRelationshipStrategy.php │ │ │ └── Subscriber │ │ │ │ └── LocaleSubscriber.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── flysystem.yaml │ │ │ ├── nelmio_api_doc.yaml │ │ │ ├── routes.yml │ │ │ └── services.yml │ │ │ ├── translations │ │ │ ├── log.en.yaml │ │ │ ├── log.pl.yaml │ │ │ ├── mailer.en.yaml │ │ │ ├── mailer.pl.yaml │ │ │ ├── privilege.en.yaml │ │ │ └── privilege.pl.yaml │ │ │ └── views │ │ │ └── message │ │ │ ├── password_changed.html.twig │ │ │ └── token.html.twig │ └── tests │ │ ├── Application │ │ ├── Form │ │ │ └── DataTransformer │ │ │ │ └── PrivilegeDataTransformerTest.php │ │ ├── Security │ │ │ └── Voter │ │ │ │ ├── ErgonodeRoleVoterTest.php │ │ │ │ ├── LanguageVoterTest.php │ │ │ │ └── UserRoleVoterTest.php │ │ └── Validator │ │ │ ├── HostAvailableValidatorTest.php │ │ │ ├── LanguageActiveValidatorTest.php │ │ │ ├── LanguageCodeExistsValidatorTest.php │ │ │ ├── PrivilegeRelationsValidatorTest.php │ │ │ ├── RoleNameUniqueValidatorTest.php │ │ │ ├── TokenAvailableValidatorTest.php │ │ │ └── UserUniqueValidatorTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── Role │ │ │ │ ├── CreateRoleCommandTest.php │ │ │ │ ├── DeleteRoleCommandTest.php │ │ │ │ └── UpdateRoleCommandTest.php │ │ │ └── User │ │ │ │ ├── ApplyUserResetTokenCommandTest.php │ │ │ │ ├── ChangeUserAvatarCommandTest.php │ │ │ │ ├── ChangeUserPasswordCommandTest.php │ │ │ │ ├── CreateUserCommandTest.php │ │ │ │ ├── GenerateUserResetPasswordTokenCommandTest.php │ │ │ │ └── UpdateUserCommandTest.php │ │ ├── Entity │ │ │ ├── RoleTest.php │ │ │ ├── UserResetPasswordTokenTest.php │ │ │ └── UserTest.php │ │ ├── Event │ │ │ ├── Role │ │ │ │ ├── AddPrivilegeToRoleEventTest.php │ │ │ │ ├── RemovePrivilegeFromRoleEventTest.php │ │ │ │ ├── RoleDeletedEventTest.php │ │ │ │ ├── RoleDescriptionChangedEventTest.php │ │ │ │ ├── RoleNameChangedEventTest.php │ │ │ │ └── RolePrivilegesChangedEventTest.php │ │ │ ├── User │ │ │ │ ├── UserActivatedEventTest.php │ │ │ │ ├── UserDeactivatedEventTest.php │ │ │ │ └── UserResetTokenGeneratedEventTest.php │ │ │ ├── UserAvatarChangedEventTest.php │ │ │ ├── UserCreatedEventTest.php │ │ │ ├── UserFirstNameChangedEventTest.php │ │ │ ├── UserLanguageChangedEventTest.php │ │ │ ├── UserLastNameChangedEventTest.php │ │ │ ├── UserPasswordChangedEventTest.php │ │ │ └── UserRoleChangedEventTest.php │ │ ├── Factory │ │ │ └── RoleFactoryTest.php │ │ ├── Provider │ │ │ ├── PrivilegeCodeProviderTest.php │ │ │ ├── PrivilegeDictionaryProviderTest.php │ │ │ └── PrivilegeGroupedByAreaProviderTest.php │ │ ├── Validator │ │ │ └── TokenValidatorTest.php │ │ └── ValueObject │ │ │ ├── PasswordTest.php │ │ │ ├── PrivilegeEndPointTest.php │ │ │ ├── PrivilegeTest.php │ │ │ └── ResetTokenTest.php │ │ └── Infrastructure │ │ ├── Generator │ │ └── DefaultResetTokenGeneratorTest.php │ │ └── Resolver │ │ └── PrivilegeTypeResolverTest.php ├── api │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ └── .gitkeep │ ├── src │ │ ├── Application │ │ │ ├── Config │ │ │ │ └── Definition │ │ │ │ │ └── ErgonodeApiConfiguration.php │ │ │ ├── DependencyInjection │ │ │ │ └── ErgonodeApiExtension.php │ │ │ ├── EventListener │ │ │ │ ├── ExceptionListener.php │ │ │ │ ├── RequestBodyListener.php │ │ │ │ ├── ResponseFormatterListener.php │ │ │ │ └── ResponseSubscriber.php │ │ │ ├── Exception │ │ │ │ ├── FormValidationHttpException.php │ │ │ │ └── ViolationsHttpException.php │ │ │ ├── HttpKernel │ │ │ │ └── Controller │ │ │ │ │ └── DTOInputValueResolver.php │ │ │ ├── Mapper │ │ │ │ ├── ExceptionMapper.php │ │ │ │ └── ExceptionMapperInterface.php │ │ │ ├── Response │ │ │ │ ├── AbstractResponse.php │ │ │ │ ├── AcceptedResponse.php │ │ │ │ ├── CreatedResponse.php │ │ │ │ ├── EmptyResponse.php │ │ │ │ ├── ExceptionResponse.php │ │ │ │ ├── FileContentResponse.php │ │ │ │ ├── MethodNotAllowedResponse.php │ │ │ │ └── SuccessResponse.php │ │ │ └── Serializer │ │ │ │ └── Normalizer │ │ │ │ ├── ExceptionNormalizer.php │ │ │ │ ├── FormValidationExceptionNormalizer.php │ │ │ │ └── ViolationExceptionNormalizer.php │ │ ├── ErgonodeApiBundle.php │ │ ├── Infrastructure │ │ │ └── Normalizer │ │ │ │ ├── ExceptionDebugNormalizer.php │ │ │ │ ├── ExceptionNormalizer.php │ │ │ │ └── ExceptionNormalizerInterface.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── nelmio_api_doc.yaml │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── api.en.yaml │ │ │ └── api.pl.yaml │ └── tests │ │ └── Application │ │ ├── EventListener │ │ ├── ExceptionListenerTest.php │ │ ├── RequestBodyListenerTest.php │ │ ├── ResponseFormatterListenerTest.php │ │ └── ResponseSubscriberTest.php │ │ ├── HttpKernel │ │ └── Controller │ │ │ └── DTOInputValueResolverTest.php │ │ └── Mapper │ │ └── ExceptionMapperTest.php ├── attribute │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── attribute-autocomplete.feature │ │ ├── attribute-date.feature │ │ ├── attribute-dictionaries.feature │ │ ├── attribute-file.feature │ │ ├── attribute-gallery.feature │ │ ├── attribute-grid.feature │ │ ├── attribute-group.feature │ │ ├── attribute-groups-autocomplete.feature │ │ ├── attribute-image.feature │ │ ├── attribute-multi-select.feature │ │ ├── attribute-not-authenticated.feature │ │ ├── attribute-numeric.feature │ │ ├── attribute-price.feature │ │ ├── attribute-select.feature │ │ ├── attribute-text-area.feature │ │ ├── attribute-text.feature │ │ ├── attribute-unit.feature │ │ ├── attribute-validate.feature │ │ ├── attribute-validation.feature │ │ └── attribute.json │ ├── migrations │ │ ├── Version20180401083834.php │ │ ├── Version20201027130500.php │ │ ├── Version20201125121916.php │ │ ├── Version20210105100100.php │ │ ├── Version20210105120100.php │ │ ├── Version20210616120100.php │ │ ├── Version20211025100000.php │ │ ├── Version20211102104000.php │ │ ├── Version20211102105000.php │ │ └── Version20211117000000.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── Attribute │ │ │ │ │ ├── AttributeAutocompleteAction.php │ │ │ │ │ ├── AttributeChangeAction.php │ │ │ │ │ ├── AttributeCreateAction.php │ │ │ │ │ ├── AttributeDeleteAction.php │ │ │ │ │ ├── AttributeGridReadAction.php │ │ │ │ │ ├── AttributeReadAction.php │ │ │ │ │ ├── AttributeValidationAction.php │ │ │ │ │ └── SystemAttributeGridReadAction.php │ │ │ │ │ ├── AttributeGroup │ │ │ │ │ ├── AttributeGroupAutocompleteAction.php │ │ │ │ │ ├── AttributeGroupChangeAction.php │ │ │ │ │ ├── AttributeGroupCreateAction.php │ │ │ │ │ ├── AttributeGroupDeleteAction.php │ │ │ │ │ ├── AttributeGroupGridReadAction.php │ │ │ │ │ └── AttributeGroupReadAction.php │ │ │ │ │ ├── Dictionary │ │ │ │ │ ├── AttributeGroupReadAction.php │ │ │ │ │ ├── AttributeTypeReadAction.php │ │ │ │ │ ├── CurrencyReadAction.php │ │ │ │ │ └── DateFormatReadAction.php │ │ │ │ │ └── Option │ │ │ │ │ ├── OptionChangeAction.php │ │ │ │ │ ├── OptionCreateAction.php │ │ │ │ │ ├── OptionDeleteAction.php │ │ │ │ │ ├── OptionGridAction.php │ │ │ │ │ ├── OptionMoveAction.php │ │ │ │ │ ├── OptionReadAction.php │ │ │ │ │ └── OptionsReadAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ │ ├── AttributeFormCompilerPass.php │ │ │ │ │ ├── AttributeTypeCompilerPass.php │ │ │ │ │ ├── AttributeValueConstraintStrategyInterfaceCompilerPass.php │ │ │ │ │ ├── CreateAttributeCommandFactoryProviderInterfaceCompilerPass.php │ │ │ │ │ └── UpdateAttributeCommandFactoryProviderInterfaceCompilerPass.php │ │ │ │ └── ErgonodeAttributeExtension.php │ │ │ ├── Event │ │ │ │ ├── AttributeCreatedEvent.php │ │ │ │ ├── AttributeDeletedEvent.php │ │ │ │ └── AttributeUpdatedEvent.php │ │ │ ├── Form │ │ │ │ ├── Attribute │ │ │ │ │ ├── AttributeFormInterface.php │ │ │ │ │ ├── Configuration │ │ │ │ │ │ ├── DateAttributeConfigurationForm.php │ │ │ │ │ │ ├── PriceAttributeConfigurationForm.php │ │ │ │ │ │ ├── TextareaAttributeConfigurationForm.php │ │ │ │ │ │ └── UnitAttributeConfigurationForm.php │ │ │ │ │ ├── DateAttributeForm.php │ │ │ │ │ ├── FileAttributeForm.php │ │ │ │ │ ├── GalleryAttributeForm.php │ │ │ │ │ ├── ImageAttributeForm.php │ │ │ │ │ ├── MultiSelectAttributeForm.php │ │ │ │ │ ├── NumericAttributeForm.php │ │ │ │ │ ├── PriceAttributeForm.php │ │ │ │ │ ├── SelectAttributeForm.php │ │ │ │ │ ├── TextAttributeForm.php │ │ │ │ │ ├── TextareaAttributeForm.php │ │ │ │ │ └── UnitAttributeForm.php │ │ │ │ ├── AttributeGroupCreateForm.php │ │ │ │ ├── AttributeGroupUpdateForm.php │ │ │ │ ├── AttributeTypeForm.php │ │ │ │ ├── Model │ │ │ │ │ ├── CreateAttributeGroupFormModel.php │ │ │ │ │ ├── Option │ │ │ │ │ │ ├── OptionMoveModel.php │ │ │ │ │ │ └── SimpleOptionModel.php │ │ │ │ │ └── UpdateAttributeGroupFormModel.php │ │ │ │ ├── OptionMoveForm.php │ │ │ │ ├── SimpleOptionForm.php │ │ │ │ ├── Transformer │ │ │ │ │ └── OptionKeyDataTransformer.php │ │ │ │ └── Type │ │ │ │ │ ├── CurrencyFormType.php │ │ │ │ │ ├── DateFormatFormType.php │ │ │ │ │ └── OptionKeyType.php │ │ │ ├── Model │ │ │ │ ├── Attribute │ │ │ │ │ ├── AttributeFormModel.php │ │ │ │ │ ├── DateAttributeFormModel.php │ │ │ │ │ ├── PriceAttributeFormModel.php │ │ │ │ │ ├── Property │ │ │ │ │ │ ├── DateAttributePropertyModel.php │ │ │ │ │ │ ├── PriceAttributePropertyModel.php │ │ │ │ │ │ ├── TextareaAttributePropertyModel.php │ │ │ │ │ │ └── UnitAttributePropertyModel.php │ │ │ │ │ ├── TextareaAttributeFormModel.php │ │ │ │ │ └── UnitAttributeFormModel.php │ │ │ │ └── AttributeTypeFormModel.php │ │ │ ├── Provider │ │ │ │ ├── AttributeFormProvider.php │ │ │ │ └── AttributeTypeProvider.php │ │ │ ├── Serializer │ │ │ │ └── Normalizer │ │ │ │ │ └── AttributeNormalizer.php │ │ │ └── Validator │ │ │ │ ├── AttributeCode.php │ │ │ │ ├── AttributeCodeUnique.php │ │ │ │ ├── AttributeCodeUniqueValidator.php │ │ │ │ ├── AttributeCodeValidator.php │ │ │ │ ├── AttributeExists.php │ │ │ │ ├── AttributeExistsValidator.php │ │ │ │ ├── AttributeGroupCode.php │ │ │ │ ├── AttributeGroupCodeUnique.php │ │ │ │ ├── AttributeGroupCodeUniqueValidator.php │ │ │ │ ├── AttributeGroupCodeValidator.php │ │ │ │ ├── AttributeGroupExists.php │ │ │ │ ├── AttributeGroupExistsValidator.php │ │ │ │ ├── AttributeHasOption.php │ │ │ │ ├── AttributeHasOptionValidator.php │ │ │ │ ├── AttributeTypeExists.php │ │ │ │ ├── AttributeTypeExistsValidator.php │ │ │ │ ├── AttributeTypeValid.php │ │ │ │ ├── AttributeTypeValidValidator.php │ │ │ │ ├── OptionCodeExists.php │ │ │ │ ├── OptionCodeExistsValidator.php │ │ │ │ ├── OptionExists.php │ │ │ │ ├── OptionExistsValidator.php │ │ │ │ ├── TypeOrEmpty.php │ │ │ │ └── TypeOrEmptyValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── Attribute │ │ │ │ │ ├── AbstractCreateAttributeCommand.php │ │ │ │ │ ├── AbstractUpdateAttributeCommand.php │ │ │ │ │ ├── Create │ │ │ │ │ │ ├── CreateDateAttributeCommand.php │ │ │ │ │ │ ├── CreateFileAttributeCommand.php │ │ │ │ │ │ ├── CreateGalleryAttributeCommand.php │ │ │ │ │ │ ├── CreateImageAttributeCommand.php │ │ │ │ │ │ ├── CreateMultiSelectAttributeCommand.php │ │ │ │ │ │ ├── CreateNumericAttributeCommand.php │ │ │ │ │ │ ├── CreatePriceAttributeCommand.php │ │ │ │ │ │ ├── CreateSelectAttributeCommand.php │ │ │ │ │ │ ├── CreateTextAttributeCommand.php │ │ │ │ │ │ ├── CreateTextareaAttributeCommand.php │ │ │ │ │ │ └── CreateUnitAttributeCommand.php │ │ │ │ │ ├── CreateAttributeCommandInterface.php │ │ │ │ │ └── Update │ │ │ │ │ │ ├── UpdateDateAttributeCommand.php │ │ │ │ │ │ ├── UpdateFileAttributeCommand.php │ │ │ │ │ │ ├── UpdateGalleryAttributeCommand.php │ │ │ │ │ │ ├── UpdateImageAttributeCommand.php │ │ │ │ │ │ ├── UpdateMultiSelectAttributeCommand.php │ │ │ │ │ │ ├── UpdateNumericAttributeCommand.php │ │ │ │ │ │ ├── UpdatePriceAttributeCommand.php │ │ │ │ │ │ ├── UpdateSelectAttributeCommand.php │ │ │ │ │ │ ├── UpdateTextAttributeCommand.php │ │ │ │ │ │ ├── UpdateTextareaAttributeCommand.php │ │ │ │ │ │ └── UpdateUnitAttributeCommand.php │ │ │ │ ├── AttributeCommandInterface.php │ │ │ │ ├── DeleteAttributeCommand.php │ │ │ │ ├── Group │ │ │ │ │ ├── CreateAttributeGroupCommand.php │ │ │ │ │ ├── DeleteAttributeGroupCommand.php │ │ │ │ │ └── UpdateAttributeGroupCommand.php │ │ │ │ └── Option │ │ │ │ │ ├── CreateOptionCommand.php │ │ │ │ │ ├── DeleteOptionCommand.php │ │ │ │ │ ├── MoveOptionCommand.php │ │ │ │ │ └── UpdateOptionCommand.php │ │ │ ├── Entity │ │ │ │ ├── AbstractAttribute.php │ │ │ │ ├── AbstractOption.php │ │ │ │ ├── Attribute │ │ │ │ │ ├── AbstractCollectionAttribute.php │ │ │ │ │ ├── AbstractDateAttribute.php │ │ │ │ │ ├── AbstractImageAttribute.php │ │ │ │ │ ├── AbstractNumericAttribute.php │ │ │ │ │ ├── AbstractOptionAttribute.php │ │ │ │ │ ├── AbstractPriceAttribute.php │ │ │ │ │ ├── AbstractTextAttribute.php │ │ │ │ │ ├── AbstractTextareaAttribute.php │ │ │ │ │ ├── AbstractUnitAttribute.php │ │ │ │ │ ├── DateAttribute.php │ │ │ │ │ ├── FileAttribute.php │ │ │ │ │ ├── GalleryAttribute.php │ │ │ │ │ ├── ImageAttribute.php │ │ │ │ │ ├── MultiSelectAttribute.php │ │ │ │ │ ├── NumericAttribute.php │ │ │ │ │ ├── PriceAttribute.php │ │ │ │ │ ├── SelectAttribute.php │ │ │ │ │ ├── TextAttribute.php │ │ │ │ │ ├── TextareaAttribute.php │ │ │ │ │ └── UnitAttribute.php │ │ │ │ ├── AttributeGroup.php │ │ │ │ ├── AttributeInterface.php │ │ │ │ └── Option │ │ │ │ │ └── SimpleOption.php │ │ │ ├── Event │ │ │ │ ├── Attribute │ │ │ │ │ ├── AttributeBoolParameterChangeEvent.php │ │ │ │ │ ├── AttributeCreatedEvent.php │ │ │ │ │ ├── AttributeDeletedEvent.php │ │ │ │ │ ├── AttributeHintChangedEvent.php │ │ │ │ │ ├── AttributeLabelChangedEvent.php │ │ │ │ │ ├── AttributeOptionAddedEvent.php │ │ │ │ │ ├── AttributeOptionMovedEvent.php │ │ │ │ │ ├── AttributeOptionRemovedEvent.php │ │ │ │ │ ├── AttributePlaceholderChangedEvent.php │ │ │ │ │ ├── AttributeScopeChangedEvent.php │ │ │ │ │ └── AttributeStringParameterChangeEvent.php │ │ │ │ ├── AttributeGroupAddedEvent.php │ │ │ │ ├── AttributeGroupRemovedEvent.php │ │ │ │ ├── Group │ │ │ │ │ ├── AttributeGroupCreatedEvent.php │ │ │ │ │ ├── AttributeGroupDeletedEvent.php │ │ │ │ │ └── AttributeGroupNameChangedEvent.php │ │ │ │ └── Option │ │ │ │ │ ├── OptionCodeChangedEvent.php │ │ │ │ │ ├── OptionCreatedEvent.php │ │ │ │ │ ├── OptionLabelChangedEvent.php │ │ │ │ │ └── OptionRemovedEvent.php │ │ │ ├── Factory │ │ │ │ └── Group │ │ │ │ │ └── AttributeGroupFactory.php │ │ │ ├── Provider │ │ │ │ ├── AttributeParametersProvider.php │ │ │ │ └── Dictionary │ │ │ │ │ ├── AttributeGroupDictionaryProvider.php │ │ │ │ │ └── AttributeTypeDictionaryProvider.php │ │ │ ├── Query │ │ │ │ ├── AttributeGridQueryInterface.php │ │ │ │ ├── AttributeGroupQueryInterface.php │ │ │ │ ├── AttributeQueryInterface.php │ │ │ │ ├── CurrencyQueryInterface.php │ │ │ │ ├── OptionQueryInterface.php │ │ │ │ └── OptionTranslationQueryInterface.php │ │ │ ├── Repository │ │ │ │ ├── AttributeGroupRepositoryInterface.php │ │ │ │ ├── AttributeRepositoryInterface.php │ │ │ │ └── OptionRepositoryInterface.php │ │ │ ├── ValueObject │ │ │ │ ├── AttributeCode.php │ │ │ │ ├── AttributeGroupCode.php │ │ │ │ ├── AttributeScope.php │ │ │ │ ├── AttributeType.php │ │ │ │ ├── DateFormat.php │ │ │ │ ├── OptionInterface.php │ │ │ │ ├── OptionKey.php │ │ │ │ └── OptionValue │ │ │ │ │ ├── MultilingualOption.php │ │ │ │ │ └── StringOption.php │ │ │ └── View │ │ │ │ ├── AttributeViewModel.php │ │ │ │ └── Factory │ │ │ │ └── AttributeViewModelFactory.php │ │ ├── ErgonodeAttributeBundle.php │ │ ├── Infrastructure │ │ │ ├── Factory │ │ │ │ └── Command │ │ │ │ │ ├── Create │ │ │ │ │ ├── CreateDateAttributeCommandFactory.php │ │ │ │ │ ├── CreateFileAttributeCommandFactory.php │ │ │ │ │ ├── CreateGalleryAttributeCommandFactory.php │ │ │ │ │ ├── CreateImageAttributeCommandFactory.php │ │ │ │ │ ├── CreateMultiSelectAttributeCommandFactory.php │ │ │ │ │ ├── CreateNumericAttributeCommandFactory.php │ │ │ │ │ ├── CreatePriceAttributeCommandFactory.php │ │ │ │ │ ├── CreateSelectAttributeCommandFactory.php │ │ │ │ │ ├── CreateTextAttributeCommandFactory.php │ │ │ │ │ ├── CreateTextareaAttributeCommandFactory.php │ │ │ │ │ └── CreateUnitAttributeCommandFactory.php │ │ │ │ │ ├── CreateAttributeCommandFactoryInterface.php │ │ │ │ │ ├── Update │ │ │ │ │ ├── UpdateDateAttributeCommandFactory.php │ │ │ │ │ ├── UpdateFileAttributeCommandFactory.php │ │ │ │ │ ├── UpdateGalleryAttributeCommandFactory.php │ │ │ │ │ ├── UpdateImageAttributeCommandFactory.php │ │ │ │ │ ├── UpdateMultiSelectAttributeCommandFactory.php │ │ │ │ │ ├── UpdateNumericAttributeCommandFactory.php │ │ │ │ │ ├── UpdatePriceAttributeCommandFactory.php │ │ │ │ │ ├── UpdateSelectAttributeCommandFactory.php │ │ │ │ │ ├── UpdateTextAttributeCommandFactory.php │ │ │ │ │ ├── UpdateTextareaAttributeCommandFactory.php │ │ │ │ │ └── UpdateUnitAttributeCommandFactory.php │ │ │ │ │ └── UpdateAttributeCommandFactoryInterface.php │ │ │ ├── Grid │ │ │ │ ├── AttributeGridBuilder.php │ │ │ │ ├── AttributeGroupGridBuilder.php │ │ │ │ └── OptionGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── Attribute │ │ │ │ │ ├── AbstractUpdateAttributeCommandHandler.php │ │ │ │ │ ├── Create │ │ │ │ │ │ ├── CreateDateAttributeCommandHandler.php │ │ │ │ │ │ ├── CreateFileAttributeCommandHandler.php │ │ │ │ │ │ ├── CreateGalleryAttributeCommandHandler.php │ │ │ │ │ │ ├── CreateImageAttributeCommandHandler.php │ │ │ │ │ │ ├── CreateMultiSelectAttributeCommandHandler.php │ │ │ │ │ │ ├── CreateNumericAttributeCommandHandler.php │ │ │ │ │ │ ├── CreatePriceAttributeCommandHandler.php │ │ │ │ │ │ ├── CreateSelectAttributeCommandHandler.php │ │ │ │ │ │ ├── CreateTextAttributeCommandHandler.php │ │ │ │ │ │ ├── CreateTextareaAttributeCommandHandler.php │ │ │ │ │ │ └── CreateUnitAttributeCommandHandler.php │ │ │ │ │ └── Update │ │ │ │ │ │ ├── UpdateDateAttributeCommandHandler.php │ │ │ │ │ │ ├── UpdateFileAttributeCommandHandler.php │ │ │ │ │ │ ├── UpdateGalleryAttributeCommandHandler.php │ │ │ │ │ │ ├── UpdateImageAttributeCommandHandler.php │ │ │ │ │ │ ├── UpdateMultiSelectAttributeCommandHandler.php │ │ │ │ │ │ ├── UpdateNumericAttributeCommandHandler.php │ │ │ │ │ │ ├── UpdatePriceAttributeCommandHandler.php │ │ │ │ │ │ ├── UpdateSelectAttributeCommandHandler.php │ │ │ │ │ │ ├── UpdateTextAttributeCommandHandler.php │ │ │ │ │ │ ├── UpdateTextareaAttributeCommandHandler.php │ │ │ │ │ │ └── UpdateUnitAttributeCommandHandler.php │ │ │ │ ├── DeleteAttributeCommandHandler.php │ │ │ │ ├── Group │ │ │ │ │ ├── CreateAttributeGroupCommandHandler.php │ │ │ │ │ ├── DeleteAttributeGroupCommandHandler.php │ │ │ │ │ └── UpdateAttributeGroupCommandHandler.php │ │ │ │ └── Option │ │ │ │ │ ├── CreateOptionCommandHandler.php │ │ │ │ │ ├── DeleteOptionCommandHandler.php │ │ │ │ │ ├── MoveOptionCommandHandler.php │ │ │ │ │ └── UpdateOptionCommandHandler.php │ │ │ ├── Mapper │ │ │ │ ├── AttributeValueMapper.php │ │ │ │ └── Strategy │ │ │ │ │ ├── AttributeMapperStrategyInterface.php │ │ │ │ │ ├── ContextAwareAttributeMapperStrategyInterface.php │ │ │ │ │ ├── DateAttributeMapperStrategy.php │ │ │ │ │ ├── FileAttributeMapperStrategy.php │ │ │ │ │ ├── GalleryAttributeMapperStrategy.php │ │ │ │ │ ├── ImageAttributeMapperStrategy.php │ │ │ │ │ ├── MultiSelectAttributeMapperStrategy.php │ │ │ │ │ ├── NumericAttributeMapperStrategy.php │ │ │ │ │ ├── PriceAttributeMapperStrategy.php │ │ │ │ │ ├── SelectAttributeMapperStrategy.php │ │ │ │ │ ├── TextAttributeMapperStrategy.php │ │ │ │ │ ├── TextareaAttributeMapperStrategy.php │ │ │ │ │ └── UnitAttributeMapperStrategy.php │ │ │ ├── Persistence │ │ │ │ ├── Projector │ │ │ │ │ ├── Attribute │ │ │ │ │ │ ├── AbstractDbalAttributeOptionEventProjector.php │ │ │ │ │ │ ├── AbstractDbalAttributeParameterChangeEventProjector.php │ │ │ │ │ │ ├── DbalAttributeBoolParameterChangeEventProjector.php │ │ │ │ │ │ ├── DbalAttributeCreatedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeDeletedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeGroupAddedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeGroupRemovedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeHintChangedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeLabelChangedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeOptionAddedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeOptionMovedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeOptionRemovedEventProjector.php │ │ │ │ │ │ ├── DbalAttributePlaceholderChangedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeScopeChangedEventProjector.php │ │ │ │ │ │ └── DbalAttributeStringParameterChangeEventProjector.php │ │ │ │ │ ├── Group │ │ │ │ │ │ ├── DbalAttributeGroupCreatedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeGroupDeletedEventProjector.php │ │ │ │ │ │ └── DbalAttributeGroupNameChangedEventProjector.php │ │ │ │ │ └── Option │ │ │ │ │ │ ├── DbalOptionCodeChangedEventProjector.php │ │ │ │ │ │ ├── DbalOptionCreatedEventProjector.php │ │ │ │ │ │ ├── DbalOptionLabelChangedEventProjector.php │ │ │ │ │ │ └── DbalOptionRemovedEventProjector.php │ │ │ │ ├── Query │ │ │ │ │ ├── DbalAttributeGridQuery.php │ │ │ │ │ ├── DbalAttributeGroupQuery.php │ │ │ │ │ ├── DbalAttributeQuery.php │ │ │ │ │ ├── DbalCurrencyQuery.php │ │ │ │ │ ├── DbalOptionQuery.php │ │ │ │ │ └── DbalOptionTranslationQuery.php │ │ │ │ └── Repository │ │ │ │ │ ├── EventStoreAttributeGroupRepository.php │ │ │ │ │ ├── EventStoreAttributeRepository.php │ │ │ │ │ └── EventStoreOptionRepository.php │ │ │ ├── Provider │ │ │ │ ├── AttributeValueConstraintProvider.php │ │ │ │ ├── AttributeValueConstraintStrategyInterface.php │ │ │ │ ├── ContextAwareAttributeValueConstraintStrategyInterface.php │ │ │ │ ├── CreateAttributeCommandFactoryProvider.php │ │ │ │ ├── DateFormatProvider.php │ │ │ │ ├── Strategy │ │ │ │ │ ├── DateAttributeValueConstraintStrategy.php │ │ │ │ │ ├── FileAttributeValueConstraintStrategy.php │ │ │ │ │ ├── GalleryAttributeValueConstraintStrategy.php │ │ │ │ │ ├── ImageAttributeValueConstraintStrategy.php │ │ │ │ │ ├── NumericAttributeValueConstraintStrategy.php │ │ │ │ │ ├── OptionAttributeValueConstraintStrategy.php │ │ │ │ │ ├── PriceAttributeValueConstraintStrategy.php │ │ │ │ │ ├── TextAttributeValueConstraintStrategy.php │ │ │ │ │ ├── TextareaAttributeValueConstraintStrategy.php │ │ │ │ │ └── UnitAttributeValueConstraintStrategy.php │ │ │ │ └── UpdateAttributeCommandFactoryProvider.php │ │ │ ├── Relation │ │ │ │ └── AttributeMultimediaRelation.php │ │ │ └── Strategy │ │ │ │ └── Relationship │ │ │ │ ├── AttributeAttributeGroupRelationshipStrategy.php │ │ │ │ └── AttributeUnitRelationshipStrategy.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── nelmio_api_doc.yaml │ │ │ ├── routes.yml │ │ │ ├── serialization.yaml │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── attribute.en.yaml │ │ │ ├── attribute.pl.yaml │ │ │ ├── grid.en.yaml │ │ │ ├── grid.pl.yaml │ │ │ ├── log.en.yaml │ │ │ ├── log.pl.yaml │ │ │ ├── privilege.en.yaml │ │ │ └── privilege.pl.yaml │ └── tests │ │ ├── Application │ │ ├── Form │ │ │ ├── Attribute │ │ │ │ ├── DateAttributeFormTest.php │ │ │ │ ├── GalleryAttributeFormTest.php │ │ │ │ ├── ImageAttributeFormTest.php │ │ │ │ ├── MultiSelectAttributeFormTest.php │ │ │ │ ├── NumericAttributeFormTest.php │ │ │ │ ├── PriceAttributeFormTest.php │ │ │ │ ├── SelectAttributeFormTest.php │ │ │ │ ├── TextAttributeFormTest.php │ │ │ │ ├── TextareaAttributeFormTest.php │ │ │ │ └── UnitAttributeFormTest.php │ │ │ └── Transformer │ │ │ │ └── OptionKeyDataTransformerTest.php │ │ ├── Provider │ │ │ ├── AttributeFormProviderTest.php │ │ │ └── AttributeTypeProviderTest.php │ │ ├── Serializer │ │ │ └── Normalizer │ │ │ │ └── AttributeNormalizerTest.php │ │ └── Validator │ │ │ ├── AttributeCodeUniqueValidatorTest.php │ │ │ ├── AttributeCodeValidatorTest.php │ │ │ ├── AttributeGroupCodeUniqueValidatorTest.php │ │ │ └── AttributeGroupCodeValidatorTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── Attribute │ │ │ │ ├── Create │ │ │ │ │ ├── CreateDateAttributeCommandTest.php │ │ │ │ │ ├── CreatePriceAttributeCommandTest.php │ │ │ │ │ └── CreateUnitAttributeCommandTest.php │ │ │ │ └── Update │ │ │ │ │ ├── UpdateDateAttributeCommandTest.php │ │ │ │ │ ├── UpdatePriceAttributeCommandTest.php │ │ │ │ │ └── UpdateUnitAttributeCommandTest.php │ │ │ ├── DeleteAttributeCommandTest.php │ │ │ ├── Group │ │ │ │ ├── CreateAttributeGroupCommandTest.php │ │ │ │ ├── DeleteAttributeGroupCommandTest.php │ │ │ │ └── UpdateAttributeGroupCommandTest.php │ │ │ └── Option │ │ │ │ ├── CreateOptionCommandTest.php │ │ │ │ ├── DeleteOptionCommandTest.php │ │ │ │ └── UpdateOptionCommandTest.php │ │ ├── Entity │ │ │ ├── AbstractAttributeTest.php │ │ │ ├── AbstractOptionTest.php │ │ │ ├── Attribute │ │ │ │ ├── AbstractOptionAttributeTest.php │ │ │ │ ├── DateAttributeTest.php │ │ │ │ ├── GalleryAttributeTest.php │ │ │ │ ├── ImageAttributeTest.php │ │ │ │ ├── MultiSelectAttributeTest.php │ │ │ │ ├── NumericAttributeTest.php │ │ │ │ ├── PriceAttributeTest.php │ │ │ │ ├── SelectAttributeTest.php │ │ │ │ ├── TextareaAttributeTest.php │ │ │ │ └── UnitAttributeTest.php │ │ │ └── AttributeGroupTest.php │ │ ├── Event │ │ │ ├── Attribute │ │ │ │ ├── AttributeBoolParameterChangeEventTest.php │ │ │ │ ├── AttributeCreatedEventTest.php │ │ │ │ ├── AttributeDeletedEventTest.php │ │ │ │ ├── AttributeHintChangedEventTest.php │ │ │ │ ├── AttributeLabelChangedEventTest.php │ │ │ │ ├── AttributeOptionAddedEventTest.php │ │ │ │ ├── AttributeOptionMovedEventTest.php │ │ │ │ ├── AttributeOptionRemovedEventTest.php │ │ │ │ ├── AttributePlaceholderChangedEventTest.php │ │ │ │ └── AttributeStringParameterChangeEventTest.php │ │ │ ├── AttributeGroupAddedEventTest.php │ │ │ ├── AttributeGroupRemovedEventTest.php │ │ │ ├── Group │ │ │ │ ├── AttributeGroupDeletedEventTest.php │ │ │ │ └── AttributeGroupNameChangedEventTest.php │ │ │ └── Option │ │ │ │ ├── OptionChangedEventTest.php │ │ │ │ ├── OptionCreatedEventTest.php │ │ │ │ └── OptionRemovedEventTest.php │ │ ├── Factory │ │ │ └── Group │ │ │ │ └── AttributeGroupFactoryTest.php │ │ ├── Provider │ │ │ ├── AttributeParametersProviderTest.php │ │ │ └── Dictionary │ │ │ │ ├── AttributeGroupDictionaryProviderTest.php │ │ │ │ └── AttributeTypeDictionaryProviderTest.php │ │ └── ValueObject │ │ │ ├── AttributeCodeTest.php │ │ │ ├── AttributeGroupCodeTest.php │ │ │ ├── AttributeScopeTest.php │ │ │ ├── OptionKeyTest.php │ │ │ └── OptionValue │ │ │ ├── MultilingualOptionTest.php │ │ │ └── StringOptionTest.php │ │ └── Infrastructure │ │ ├── Factory │ │ └── Command │ │ │ ├── Create │ │ │ ├── AbstractCreateAttributeCommandFactoryTest.php │ │ │ ├── CreateDateAttributeCommandFactoryTest.php │ │ │ ├── CreateGalleryAttributeCommandFactoryTest.php │ │ │ ├── CreateImageAttributeCommandFactoryTest.php │ │ │ ├── CreateMultiSelectAttributeCommandFactoryTest.php │ │ │ ├── CreateNumericAttributeCommandFactoryTest.php │ │ │ ├── CreatePriceAttributeCommandFactoryTest.php │ │ │ ├── CreateSelectAttributeCommandFactoryTest.php │ │ │ ├── CreateTextAttributeCommandFactoryTest.php │ │ │ ├── CreateTextareaAttributeCommandFactoryTest.php │ │ │ └── CreateUnitAttributeCommandFactoryTest.php │ │ │ └── Update │ │ │ ├── AbstractUpdateAttributeCommandFactoryTest.php │ │ │ ├── UpdateDateAttributeCommandFactoryTest.php │ │ │ ├── UpdateGalleryAttributeCommandFactoryTest.php │ │ │ ├── UpdateImageAttributeCommandFactoryTest.php │ │ │ ├── UpdateMultiSelectAttributeCommandFactoryTest.php │ │ │ ├── UpdateNumericAttributeCommandFactoryTest.php │ │ │ ├── UpdatePriceAttributeCommandFactoryTest.php │ │ │ ├── UpdateSelectAttributeCommandFactoryTest.php │ │ │ ├── UpdateTextAttributeCommandFactoryTest.php │ │ │ ├── UpdateTextareaAttributeCommandFactoryTest.php │ │ │ └── UpdateUnitAttributeCommandFactoryTest.php │ │ ├── Handler │ │ ├── Attribute │ │ │ ├── Create │ │ │ │ ├── CreateDateAttributeCommandHandlerTest.php │ │ │ │ ├── CreateGalleryAttributeCommandHandlerTest.php │ │ │ │ ├── CreateImageAttributeCommandHandlerTest.php │ │ │ │ ├── CreateMultiSelectAttributeCommandHandlerTest.php │ │ │ │ ├── CreateNumericAttributeCommandHandlerTest.php │ │ │ │ ├── CreatePriceAttributeCommandHandlerTest.php │ │ │ │ ├── CreateSelectAttributeCommandHandlerTest.php │ │ │ │ ├── CreateTextAreaAttributeCommandHandlerTest.php │ │ │ │ ├── CreateTextAttributeCommandHandlerTest.php │ │ │ │ └── CreateUnitAttributeCommandHandlerTest.php │ │ │ └── Update │ │ │ │ ├── UpdateDateAttributeCommandHandlerTest.php │ │ │ │ ├── UpdateGalleryAttributeCommandHandlerTest.php │ │ │ │ ├── UpdateImageAttributeCommandHandlerTest.php │ │ │ │ ├── UpdateMultiSelectAttributeCommandHandlerTest.php │ │ │ │ ├── UpdateNumericAttributeCommandHandlerTest.php │ │ │ │ ├── UpdatePriceAttributeCommandHandlerTest.php │ │ │ │ ├── UpdateSelectAttributeCommandHandlerTest.php │ │ │ │ ├── UpdateTextAttributeCommandHandlerTest.php │ │ │ │ ├── UpdateTextareaAttributeCommandHandlerTest.php │ │ │ │ └── UpdateUnitAttributeCommandHandlerTest.php │ │ ├── DeleteAttributeCommandHandlerTest.php │ │ └── Group │ │ │ ├── CreateAttributeGroupCommandHandlerTest.php │ │ │ ├── DeleteAttributeGroupCommandHandlerTest.php │ │ │ └── UpdateAttributeGroupCommandHandlerTest.php │ │ ├── Mapper │ │ ├── AttributeValueMapperTest.php │ │ └── Strategy │ │ │ ├── DateAttributeMapperStrategyTest.php │ │ │ ├── FileAttributeMapperStrategyTest.php │ │ │ ├── GalleryAttributeMapperStrategyTest.php │ │ │ ├── ImageAttributeMapperStrategyTest.php │ │ │ ├── MultiSelectAttributeMapperStrategyTest.php │ │ │ ├── NumericAttributeMapperStrategyTest.php │ │ │ ├── PriceAttributeMapperStrategyTest.php │ │ │ ├── SelectAttributeMapperStrategyTest.php │ │ │ ├── TextAttributeMapperStrategyTest.php │ │ │ ├── TextareaAttributeMapperStrategyTest.php │ │ │ └── UnitAttributeMapperStrategyTest.php │ │ ├── Provider │ │ └── Strategy │ │ │ ├── DateAttributeValueConstraintStrategyTest.php │ │ │ ├── ImageAttributeValueConstraintStrategyTest.php │ │ │ ├── NumericAttributeValueConstraintStrategyTest.php │ │ │ ├── OptionAttributeValueConstraintStrategyTest.php │ │ │ ├── PriceAttributeValueConstraintStrategyTest.php │ │ │ ├── TextAttributeValueConstraintStrategyTest.php │ │ │ ├── TextareaAttributeValueConstraintStrategyTest.php │ │ │ └── UnitAttributeValueConstraintStrategyTest.php │ │ └── Strategy │ │ └── Relationship │ │ └── AttributeUnitRelationshipStrategyTest.php ├── authentication │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── authenticate-refresh.feature │ │ └── authenticate.feature │ ├── migrations │ │ └── Version20201026073142.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ └── AuthenticationAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── Compiler │ │ │ │ │ ├── JWTManagerPass.php │ │ │ │ │ └── UniqueRefreshTokenValidatorPass.php │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeAuthenticationExtension.php │ │ │ ├── RefreshToken │ │ │ │ └── Doctrine │ │ │ │ │ ├── Mapping │ │ │ │ │ ├── RefreshTokenMetadata.php │ │ │ │ │ └── RefreshTokenMetadataFactory.php │ │ │ │ │ ├── RefreshTokenManager.php │ │ │ │ │ └── RefreshTokenRepositoryInterface.php │ │ │ ├── Security │ │ │ │ ├── JWT │ │ │ │ │ └── JWTManager.php │ │ │ │ └── Provider │ │ │ │ │ ├── EmailUserProvider.php │ │ │ │ │ └── IdUserProvider.php │ │ │ └── Validator │ │ │ │ └── UniqueRefreshTokenValidator.php │ │ ├── ErgonodeAuthenticationBundle.php │ │ ├── Infrastructure │ │ │ └── Persistence │ │ │ │ └── DbalRefreshTokenRepository.php │ │ ├── Resources │ │ │ └── config │ │ │ │ ├── gesdinet_jwt_refresh_token.yaml │ │ │ │ ├── nelmio_api_doc.yaml │ │ │ │ ├── refresh_token_without_orm.yaml │ │ │ │ ├── routes.yml │ │ │ │ └── services.yml │ │ └── Test │ │ │ └── Behat │ │ │ └── Service │ │ │ └── RequestAuthenticator.php │ └── tests │ │ ├── .gitignore │ │ └── Application │ │ ├── RefreshToken │ │ └── Doctrine │ │ │ └── RefreshTokenManagerTest.php │ │ └── Security │ │ └── Provider │ │ ├── EmailUserProviderTest.php │ │ └── IdUserProviderTest.php ├── batch-action │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── batch-action-count.feature │ │ ├── batch-action-grid.feature │ │ ├── batch-action-notification.feature │ │ └── batch-action.feature │ ├── migrations │ │ ├── Version20201102124000.php │ │ ├── Version20210809134500.php │ │ └── Version20210909142000.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── CreateBatchAction.php │ │ │ │ │ ├── EndBatchAction.php │ │ │ │ │ ├── Factory │ │ │ │ │ └── BatchActionFilterFactory.php │ │ │ │ │ ├── GetBatchAction.php │ │ │ │ │ ├── GetBatchActionEntryGridAction.php │ │ │ │ │ ├── GetResourcesCountAction.php │ │ │ │ │ ├── Notification │ │ │ │ │ └── BatchActionNotificationAction.php │ │ │ │ │ └── ReprocessBatchAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeBatchActionExtension.php │ │ │ ├── Form │ │ │ │ ├── AbstractBatchActionForm.php │ │ │ │ ├── AbstractBatchActionReprocessForm.php │ │ │ │ ├── BatchActionCountForm.php │ │ │ │ ├── BatchActionFormInterface.php │ │ │ │ ├── BatchActionReprocessFormInterface.php │ │ │ │ ├── Model │ │ │ │ │ ├── BatchActionCountFormModel.php │ │ │ │ │ ├── BatchActionFilterFormModel.php │ │ │ │ │ ├── BatchActionFilterIdsFormModel.php │ │ │ │ │ ├── BatchActionFormModel.php │ │ │ │ │ └── BatchActionReprocessFormModel.php │ │ │ │ └── Type │ │ │ │ │ ├── BatchActionFilterIdsType.php │ │ │ │ │ └── BatchActionFilterType.php │ │ │ ├── Provider │ │ │ │ ├── BatchActionFormProvider.php │ │ │ │ └── BatchActionReprocessFormProvider.php │ │ │ ├── Request │ │ │ │ └── ParamConverter │ │ │ │ │ └── BatchActionParamConverter.php │ │ │ ├── Serializer │ │ │ │ └── Normalizer │ │ │ │ │ └── PayloadCommandNormalizer.php │ │ │ ├── Transport │ │ │ │ ├── BatchActionTransport.php │ │ │ │ └── BatchActionTransportFactory.php │ │ │ └── Validator │ │ │ │ ├── AllFilterDisabled.php │ │ │ │ ├── AllFilterDisabledValidator.php │ │ │ │ ├── BatchActionFilter.php │ │ │ │ └── BatchActionFilterValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── AbstractPayloadCommand.php │ │ │ │ ├── CreateBatchActionCommand.php │ │ │ │ ├── EndBatchActionCommand.php │ │ │ │ ├── ProcessBatchActionCommand.php │ │ │ │ ├── ProcessBatchActionEntryCommand.php │ │ │ │ └── ReprocessBatchActionCommand.php │ │ │ ├── Count │ │ │ │ ├── Count.php │ │ │ │ └── CountInterface.php │ │ │ ├── Entity │ │ │ │ ├── BatchAction.php │ │ │ │ └── BatchActionId.php │ │ │ ├── Event │ │ │ │ ├── BatchActionEndedEvent.php │ │ │ │ └── BatchActionWaitingForDecisionEvent.php │ │ │ ├── Model │ │ │ │ ├── BatchActionEntryModel.php │ │ │ │ └── BatchActionInformationModel.php │ │ │ ├── Notification │ │ │ │ └── BatchActionEndedNotification.php │ │ │ ├── Query │ │ │ │ ├── BatchActionEntryGridQueryInterface.php │ │ │ │ └── BatchActionQueryInterface.php │ │ │ ├── Repository │ │ │ │ └── BatchActionRepositoryInterface.php │ │ │ └── ValueObject │ │ │ │ ├── BatchActionFilter.php │ │ │ │ ├── BatchActionFilterDisabled.php │ │ │ │ ├── BatchActionFilterInterface.php │ │ │ │ ├── BatchActionIds.php │ │ │ │ ├── BatchActionMessage.php │ │ │ │ ├── BatchActionStatus.php │ │ │ │ └── BatchActionType.php │ │ ├── ErgonodeBatchActionBundle.php │ │ ├── Infrastructure │ │ │ ├── Grid │ │ │ │ ├── BatchActionEntryGridBuilder.php │ │ │ │ ├── BatchActionFilterGridConfiguration.php │ │ │ │ ├── Column │ │ │ │ │ └── BatchActionMessageColumn.php │ │ │ │ └── Renderer │ │ │ │ │ └── BatchActionMessageColumnRenderer.php │ │ │ ├── Handler │ │ │ │ ├── BatchActionEndedEventHandler.php │ │ │ │ ├── CreateBatchActionCommandHandler.php │ │ │ │ ├── EndBatchActionCommandHandler.php │ │ │ │ ├── ProcessBatchActionCommandHandler.php │ │ │ │ ├── ProcessBatchActionEntryCommandHandler.php │ │ │ │ └── ReprocessBatchActionCommandHandler.php │ │ │ ├── Persistence │ │ │ │ ├── Query │ │ │ │ │ ├── DbalBatchActionEntryGridQuery.php │ │ │ │ │ └── DbalBatchActionQuery.php │ │ │ │ └── Repository │ │ │ │ │ ├── DbalBatchActionRepository.php │ │ │ │ │ └── Mapper │ │ │ │ │ └── DbalBatchActionMapper.php │ │ │ └── Provider │ │ │ │ ├── BatchActionFilterIdsInterface.php │ │ │ │ ├── BatchActionFilterIdsProvider.php │ │ │ │ ├── BatchActionProcessorInterface.php │ │ │ │ └── BatchActionProcessorProvider.php │ │ ├── Resources │ │ │ ├── config │ │ │ │ ├── messenger.yaml │ │ │ │ ├── nelmio_api_doc.yaml │ │ │ │ ├── routes.yml │ │ │ │ ├── serialization.yaml │ │ │ │ ├── services.yml │ │ │ │ └── test.yaml │ │ │ └── translations │ │ │ │ ├── notification.en.yml │ │ │ │ └── notification.pl.yml │ │ └── Test │ │ │ └── Infrastructure │ │ │ └── Handler │ │ │ ├── TestCreateBatchActionCommandHandler.php │ │ │ └── TestReprocessBatchActionCommandHandler.php │ └── tests │ │ ├── Application │ │ └── Serializer │ │ │ └── Normalizer │ │ │ └── PayloadCommandNormalizerTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── CreateBatchActionCommandTest.php │ │ │ └── ProcessBatchActionEntryCommandTest.php │ │ ├── Entity │ │ │ └── BatchActionTest.php │ │ ├── Event │ │ │ └── BatchActionEndedEventTest.php │ │ ├── Notification │ │ │ └── BatchActionEndedNotificationTest.php │ │ └── ValueObject │ │ │ ├── BatchActionFilterTest.php │ │ │ ├── BatchActionIdsTest.php │ │ │ ├── BatchActionMessageTest.php │ │ │ └── BatchActionTypeTest.php │ │ └── Infrastructure │ │ ├── Grid │ │ └── BatchActionFilterGridConfigurationTest.php │ │ ├── Handler │ │ ├── BatchActionEndedEventHandlerTest.php │ │ ├── CreateBatchActionCommandHandlerTest.php │ │ ├── ProcessBatchActionCommandHandlerTest.php │ │ └── ProcessBatchActionEntryCommandHandlerTest.php │ │ └── Persistence │ │ └── Repository │ │ └── Mapper │ │ └── DbalBatchActionMapperTest.php ├── category │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── category-autocomplete.feature │ │ ├── category-not-authenticated.feature │ │ ├── category-privileges.feature │ │ ├── category-tree-autocomplete.feature │ │ ├── category-tree-grid.feature │ │ ├── category-tree-privileges.feature │ │ ├── category-tree.feature │ │ ├── category.feature │ │ └── category.json │ ├── migrations │ │ ├── Version20180619083700.php │ │ ├── Version20201125121917.php │ │ ├── Version20210105100200.php │ │ ├── Version20210105120200.php │ │ └── Version20210209125000.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── CategoryAutocompleteAction.php │ │ │ │ │ ├── CategoryChangeAction.php │ │ │ │ │ ├── CategoryCreateAction.php │ │ │ │ │ ├── CategoryDeleteAction.php │ │ │ │ │ ├── CategoryGridReadAction.php │ │ │ │ │ ├── CategoryReadAction.php │ │ │ │ │ ├── CategoryTypeConfigurationAction.php │ │ │ │ │ ├── CategoryTypeReadAction.php │ │ │ │ │ └── Tree │ │ │ │ │ ├── CategoryTreeAutocompleteAction.php │ │ │ │ │ ├── CategoryTreeChangeAction.php │ │ │ │ │ ├── CategoryTreeCreateAction.php │ │ │ │ │ ├── CategoryTreeDeleteAction.php │ │ │ │ │ ├── CategoryTreeGridReadAction.php │ │ │ │ │ └── CategoryTreeReadAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ │ ├── CategoryFormCompilerPass.php │ │ │ │ │ ├── CategoryTypeCompilerPass.php │ │ │ │ │ ├── CreateCategoryCommandFactoryProviderInterfaceCompilerPass.php │ │ │ │ │ └── UpdateCategoryCommandFactoryProviderInterfaceCompilerPass.php │ │ │ │ └── ErgonodeCategoryExtension.php │ │ │ ├── Event │ │ │ │ ├── CategoryCreateEvent.php │ │ │ │ ├── CategoryDeletedEvent.php │ │ │ │ └── CategoryUpdatedEvent.php │ │ │ ├── Form │ │ │ │ ├── CategoryForm.php │ │ │ │ ├── CategoryFormInterface.php │ │ │ │ ├── Tree │ │ │ │ │ ├── CategoryTreeCreateForm.php │ │ │ │ │ ├── CategoryTreeUpdateForm.php │ │ │ │ │ └── TreeNodeForm.php │ │ │ │ └── Type │ │ │ │ │ └── CategoryType.php │ │ │ ├── Model │ │ │ │ ├── CategoryFormModel.php │ │ │ │ └── Tree │ │ │ │ │ ├── CategoryTreeCreateFormModel.php │ │ │ │ │ ├── CategoryTreeUpdateFormModel.php │ │ │ │ │ └── TreeNodeFormModel.php │ │ │ ├── Provider │ │ │ │ ├── CategoryFormProvider.php │ │ │ │ └── CategoryTypeProvider.php │ │ │ └── Validator │ │ │ │ ├── CategoryCode.php │ │ │ │ ├── CategoryCodeUnique.php │ │ │ │ ├── CategoryCodeUniqueValidator.php │ │ │ │ ├── CategoryCodeValidator.php │ │ │ │ ├── CategoryExists.php │ │ │ │ ├── CategoryExistsValidator.php │ │ │ │ ├── CategoryTreeCodeUnique.php │ │ │ │ ├── CategoryTreeCodeUniqueValidator.php │ │ │ │ ├── CategoryTreeExists.php │ │ │ │ └── CategoryTreeExistsValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── CategoryCommandInterface.php │ │ │ │ ├── CreateCategoryCommand.php │ │ │ │ ├── CreateCategoryCommandInterface.php │ │ │ │ ├── DeleteCategoryCommand.php │ │ │ │ ├── Tree │ │ │ │ │ ├── CreateTreeCommand.php │ │ │ │ │ ├── DeleteTreeCommand.php │ │ │ │ │ └── UpdateTreeCommand.php │ │ │ │ └── UpdateCategoryCommand.php │ │ │ ├── Entity │ │ │ │ ├── AbstractCategory.php │ │ │ │ ├── Attribute │ │ │ │ │ └── CategorySystemAttribute.php │ │ │ │ ├── Category.php │ │ │ │ ├── CategoryInterface.php │ │ │ │ └── CategoryTree.php │ │ │ ├── Event │ │ │ │ ├── CategoryCreatedEvent.php │ │ │ │ ├── CategoryDeletedEvent.php │ │ │ │ ├── CategoryNameChangedEvent.php │ │ │ │ └── Tree │ │ │ │ │ ├── CategoryTreeCategoriesChangedEvent.php │ │ │ │ │ ├── CategoryTreeCategoryAddedEvent.php │ │ │ │ │ ├── CategoryTreeCategoryRemovedEvent.php │ │ │ │ │ ├── CategoryTreeCreatedEvent.php │ │ │ │ │ ├── CategoryTreeDeletedEvent.php │ │ │ │ │ └── CategoryTreeNameChangedEvent.php │ │ │ ├── Factory │ │ │ │ └── CategoryFactory.php │ │ │ ├── Provider │ │ │ │ └── Dictionary │ │ │ │ │ └── CategoryTypeDictionaryProvider.php │ │ │ ├── Query │ │ │ │ ├── CategoryGridQueryInterface.php │ │ │ │ ├── CategoryQueryInterface.php │ │ │ │ ├── TreeGridQueryInterface.php │ │ │ │ └── TreeQueryInterface.php │ │ │ ├── Repository │ │ │ │ ├── CategoryRepositoryInterface.php │ │ │ │ └── TreeRepositoryInterface.php │ │ │ └── ValueObject │ │ │ │ ├── CategoryCode.php │ │ │ │ └── Node.php │ │ ├── ErgonodeCategoryBundle.php │ │ ├── Infrastructure │ │ │ ├── Factory │ │ │ │ └── Command │ │ │ │ │ ├── CreateCategoryCommandFactory.php │ │ │ │ │ ├── CreateCategoryCommandFactoryInterface.php │ │ │ │ │ ├── UpdateCategoryCommandFactory.php │ │ │ │ │ └── UpdateCategoryCommandFactoryInterface.php │ │ │ ├── Grid │ │ │ │ ├── Builder │ │ │ │ │ └── Query │ │ │ │ │ │ └── CategorySystemAttributeDataSetQueryBuilder.php │ │ │ │ ├── CategoryGridBuilder.php │ │ │ │ ├── Column │ │ │ │ │ └── Builder │ │ │ │ │ │ └── CategorySystemAttributeColumnBuilderStrategy.php │ │ │ │ └── TreeGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── CreateCategoryCommandHandler.php │ │ │ │ ├── DeleteCategoryCommandHandler.php │ │ │ │ ├── Tree │ │ │ │ │ ├── CreateTreeCommandHandler.php │ │ │ │ │ ├── DeleteTreeCommandHandler.php │ │ │ │ │ └── UpdateTreeCommandHandler.php │ │ │ │ └── UpdateCategoryCommandHandler.php │ │ │ ├── Persistence │ │ │ │ ├── Projector │ │ │ │ │ ├── Category │ │ │ │ │ │ ├── DbalCategoryCreatedEventProjector.php │ │ │ │ │ │ ├── DbalCategoryDeletedEventProjector.php │ │ │ │ │ │ └── DbalCategoryNameChangedEventProjector.php │ │ │ │ │ └── Tree │ │ │ │ │ │ ├── DbalCategoryTreeCategoriesChangedEventProjector.php │ │ │ │ │ │ ├── DbalCategoryTreeCategoryAddedEventProjector.php │ │ │ │ │ │ ├── DbalCategoryTreeCreatedEventProjector.php │ │ │ │ │ │ ├── DbalCategoryTreeDeletedEventProjector.php │ │ │ │ │ │ └── DbalCategoryTreeNameChangedEventProjector.php │ │ │ │ ├── Query │ │ │ │ │ ├── DbalCategoryGridQuery.php │ │ │ │ │ ├── DbalCategoryQuery.php │ │ │ │ │ ├── DbalTreeGridQuery.php │ │ │ │ │ └── DbalTreeQuery.php │ │ │ │ └── Repository │ │ │ │ │ ├── EventStoreCategoryRepository.php │ │ │ │ │ └── EventStoreTreeRepository.php │ │ │ ├── Provider │ │ │ │ ├── CreateCategoryCommandFactoryProvider.php │ │ │ │ └── UpdateCategoryCommandFactoryProvider.php │ │ │ └── Strategy │ │ │ │ └── Relationship │ │ │ │ └── CategoryInCategoryTreeRelationshipStrategy.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── nelmio_api_doc.yaml │ │ │ ├── routes.yml │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── category.en.yaml │ │ │ ├── category.pl.yaml │ │ │ ├── log.en.yaml │ │ │ └── log.pl.yaml │ └── tests │ │ ├── .gitignore │ │ ├── Application │ │ ├── Form │ │ │ ├── CategoryCreateFormTest.php │ │ │ ├── CategoryUpdateFormTest.php │ │ │ └── Tree │ │ │ │ ├── CategoryTreeCreateFormTest.php │ │ │ │ └── CategoryTreeUpdateFormTest.php │ │ ├── Provider │ │ │ ├── CategoryFormProviderTest.php │ │ │ └── CategoryTypeProviderTest.php │ │ └── Validator │ │ │ ├── CategoryCodeUniqueValidatorTest.php │ │ │ ├── CategoryCodeValidatorTest.php │ │ │ ├── CategoryExistsValidatorTest.php │ │ │ ├── CategoryTreeCodeUniqueValidatorTest.php │ │ │ └── CategoryTreeExistsValidatorTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── CreateCategoryCommandTest.php │ │ │ ├── DeleteCategoryCommandTest.php │ │ │ ├── Tree │ │ │ │ ├── CreateTreeCommandTest.php │ │ │ │ ├── DeleteTreeCommandTest.php │ │ │ │ └── UpdateTreeCommandTest.php │ │ │ └── UpdateCategoryCommandTest.php │ │ ├── Entity │ │ │ ├── AbstractCategoryTest.php │ │ │ ├── Attribute │ │ │ │ └── CategorySystemAttributeTest.php │ │ │ └── CategoryTreeTest.php │ │ ├── Event │ │ │ ├── CategoryCreatedEventTest.php │ │ │ ├── CategoryDeletedEventTest.php │ │ │ ├── CategoryNameChangedEventTest.php │ │ │ └── Tree │ │ │ │ ├── CategoryTreeCategoriesChangedEventTest.php │ │ │ │ ├── CategoryTreeCategoryAddedEventTest.php │ │ │ │ ├── CategoryTreeCategoryRemovedEventTest.php │ │ │ │ ├── CategoryTreeCreatedEventTest.php │ │ │ │ ├── CategoryTreeDeletedEventTest.php │ │ │ │ └── CategoryTreeNameChangedEventTest.php │ │ ├── Factory │ │ │ └── CategoryFactoryTest.php │ │ ├── Provider │ │ │ └── Dictionary │ │ │ │ └── CategoryTypeDictionaryProviderTest.php │ │ └── ValueObject │ │ │ ├── CategoryCodeTest.php │ │ │ └── NodeTest.php │ │ └── Infrastructure │ │ ├── Factory │ │ └── Command │ │ │ ├── CreateCategoryCommandFactoryTest.php │ │ │ └── UpdateCategoryCommandFactoryTest.php │ │ ├── Grid │ │ ├── Builder │ │ │ └── Query │ │ │ │ └── CategorySystemAttributeDataSetQueryBuilderTest.php │ │ ├── CategoryGridTest.php │ │ ├── Column │ │ │ └── Builder │ │ │ │ └── CategorySystemAttributeColumnBuilderStrategyTest.php │ │ └── TreeGridTest.php │ │ ├── Handler │ │ ├── CreateCategoryCommandHandlerTest.php │ │ ├── DeleteCategoryCommandHandlerTest.php │ │ ├── Tree │ │ │ ├── CreateTreeCommandHandlerTest.php │ │ │ ├── DeleteTreeCommandHandlerTest.php │ │ │ └── UpdateTreeCommandHandlerTest.php │ │ └── UpdateCategoryCommandHandlerTest.php │ │ └── Provider │ │ ├── CreateCategoryCommandFactoryProviderTest.php │ │ └── UpdateCategoryCommandFactoryProviderTest.php ├── channel │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── channel-privileges.feature │ │ ├── channel.feature │ │ └── notification.feature │ ├── migrations │ │ ├── Version20191120151840.php │ │ ├── Version20200122064958.php │ │ ├── Version20201116083650.php │ │ ├── Version20210105101200.php │ │ ├── Version20210115150000.php │ │ └── Version20210215121148.php │ ├── src │ │ ├── Application │ │ │ ├── Command │ │ │ │ └── ChannelExportScheduleConsoleCommand.php │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── ChannelChangeAction.php │ │ │ │ │ ├── ChannelCreateAction.php │ │ │ │ │ ├── ChannelDeleteAction.php │ │ │ │ │ ├── ChannelGridReadAction.php │ │ │ │ │ ├── ChannelReadAction.php │ │ │ │ │ ├── ChannelTypeConfigurationAction.php │ │ │ │ │ ├── ChannelTypeDictionaryAction.php │ │ │ │ │ ├── Export │ │ │ │ │ ├── ChannelExportAction.php │ │ │ │ │ ├── ChannelExportCreateAction.php │ │ │ │ │ ├── ChannelExportDownloadAction.php │ │ │ │ │ ├── ChannelExportErrorGridAction.php │ │ │ │ │ └── ChannelExportGridAction.php │ │ │ │ │ ├── Notification │ │ │ │ │ └── ExportNotificationAction.php │ │ │ │ │ └── Scheduler │ │ │ │ │ ├── SchedulerChangeAction.php │ │ │ │ │ └── SchedulerGetAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ │ ├── ChannelFormFactoryCompilerPass.php │ │ │ │ │ ├── ChannelTypeCompilerPass.php │ │ │ │ │ ├── CreateChannelCommandBuilderCompilerPass.php │ │ │ │ │ ├── ExportProcessCompilerPass.php │ │ │ │ │ └── UpdateChannelCommandBuilderCompilerPass.php │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeChannelExtension.php │ │ │ ├── Form │ │ │ │ ├── ChannelTypeForm.php │ │ │ │ ├── Model │ │ │ │ │ ├── ChannelTypeFormModel.php │ │ │ │ │ └── SchedulerModel.php │ │ │ │ └── SchedulerForm.php │ │ │ ├── Provider │ │ │ │ ├── ChannelFormFactoryInterface.php │ │ │ │ ├── ChannelFormFactoryProvider.php │ │ │ │ ├── ChannelTypeDictionaryProvider.php │ │ │ │ ├── ChannelTypeProvider.php │ │ │ │ ├── CreateChannelCommandBuilderInterface.php │ │ │ │ ├── CreateChannelCommandBuilderProvider.php │ │ │ │ ├── UpdateChannelCommandBuilderInterface.php │ │ │ │ └── UpdateChannelCommandBuilderProvider.php │ │ │ ├── Request │ │ │ │ └── ParamConverter │ │ │ │ │ ├── ChannelParamConverter.php │ │ │ │ │ └── ExportParamConverter.php │ │ │ └── Validator │ │ │ │ ├── Scheduler.php │ │ │ │ └── SchedulerValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── ChannelCommandInterface.php │ │ │ │ ├── CreateChannelCommandInterface.php │ │ │ │ ├── DeleteChannelCommand.php │ │ │ │ ├── Export │ │ │ │ │ ├── DeleteExportCommand.php │ │ │ │ │ └── ProcessExportCommand.php │ │ │ │ ├── ExportChannelCommand.php │ │ │ │ ├── ExporterCommandInterface.php │ │ │ │ ├── Schedule │ │ │ │ │ └── ScheduleCommand.php │ │ │ │ └── UpdateSchedulerCommand.php │ │ │ ├── Entity │ │ │ │ ├── AbstractChannel.php │ │ │ │ ├── ChannelInterface.php │ │ │ │ ├── Export.php │ │ │ │ └── Scheduler.php │ │ │ ├── Provider │ │ │ │ └── SchedulerProvider.php │ │ │ ├── Query │ │ │ │ ├── ChannelGridQueryInterface.php │ │ │ │ ├── ChannelQueryInterface.php │ │ │ │ ├── ExportErrorGridQueryInterface.php │ │ │ │ ├── ExportGridQueryInterface.php │ │ │ │ ├── ExportQueryInterface.php │ │ │ │ └── SchedulerQueryInterface.php │ │ │ ├── Repository │ │ │ │ ├── ChannelRepositoryInterface.php │ │ │ │ ├── ExportRepositoryInterface.php │ │ │ │ └── SchedulerRepositoryInterface.php │ │ │ ├── Service │ │ │ │ └── ChannelServiceInterface.php │ │ │ └── ValueObject │ │ │ │ ├── ExportLineId.php │ │ │ │ └── ExportStatus.php │ │ ├── ErgonodeChannelBundle.php │ │ ├── Infrastructure │ │ │ ├── Exception │ │ │ │ ├── ChannelException.php │ │ │ │ ├── ChannelGeneratorProviderNotFoundException.php │ │ │ │ └── ExportException.php │ │ │ ├── Grid │ │ │ │ ├── ChannelGridBuilder.php │ │ │ │ ├── ExportErrorsGridBuilder.php │ │ │ │ └── ExportGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── DeleteChannelCommandHandler.php │ │ │ │ ├── Export │ │ │ │ │ └── DeleteExportCommandHandler.php │ │ │ │ ├── ExportChannelCommandHandler.php │ │ │ │ ├── Schedule │ │ │ │ │ └── ChannelExportScheduleCommandHandler.php │ │ │ │ └── UpdateScheduleCommandHandler.php │ │ │ ├── Persistence │ │ │ │ ├── Query │ │ │ │ │ ├── DbalChannelGridQuery.php │ │ │ │ │ ├── DbalChannelQuery.php │ │ │ │ │ ├── DbalExportErrorGridQuery.php │ │ │ │ │ ├── DbalExportGridQuery.php │ │ │ │ │ ├── DbalExportQuery.php │ │ │ │ │ └── DbalSchedulerQuery.php │ │ │ │ └── Repository │ │ │ │ │ ├── DbalChannelRepository.php │ │ │ │ │ ├── DbalExportRepository.php │ │ │ │ │ ├── DbalSchedulerRepository.php │ │ │ │ │ ├── Factory │ │ │ │ │ ├── DbalChannelFactory.php │ │ │ │ │ ├── DbalExportFactory.php │ │ │ │ │ └── DbalSchedulerFactory.php │ │ │ │ │ └── Mapper │ │ │ │ │ ├── DbalChannelMapper.php │ │ │ │ │ ├── DbalExportMapper.php │ │ │ │ │ └── DbalSchedulerMapper.php │ │ │ ├── Processor │ │ │ │ └── ExportProcessorInterface.php │ │ │ ├── Provider │ │ │ │ └── ExportProcessorProvider.php │ │ │ ├── Service │ │ │ │ ├── DirectoryCompressorInterface.php │ │ │ │ ├── FileRemoverInterface.php │ │ │ │ ├── ZipDirectoryCompressor.php │ │ │ │ └── ZipFileRemover.php │ │ │ └── Strategy │ │ │ │ └── Relationship │ │ │ │ ├── ActiveExportRelationshipStrategy.php │ │ │ │ └── ChannelActiveExportRelationshipStrategy.php │ │ └── Resources │ │ │ └── config │ │ │ ├── flysystem.yaml │ │ │ ├── messenger.yaml │ │ │ ├── monolog.yaml │ │ │ ├── nelmio_api_doc.yaml │ │ │ ├── routes.yml │ │ │ └── services.yml │ └── tests │ │ ├── Application │ │ ├── Provider │ │ │ ├── ChannelFormFactoryProviderTest.php │ │ │ ├── CreateChannelCommandBuilderProviderTest.php │ │ │ └── UpdateChannelCommandBuilderProviderTest.php │ │ ├── Request │ │ │ └── ParamConverter │ │ │ │ ├── ChannelParamConverterTest.php │ │ │ │ └── ExportParamConverterTest.php │ │ └── Validator │ │ │ └── SchedulerValidatorTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── DeleteChannelCommandTest.php │ │ │ ├── Export │ │ │ │ └── ProcessExportCommandTest.php │ │ │ ├── ExportChannelCommandTest.php │ │ │ ├── Schedule │ │ │ │ └── ScheduleCommandTest.php │ │ │ └── UpdateSchedulerCommandTest.php │ │ ├── Entity │ │ │ ├── ChannelTest.php │ │ │ ├── ExportTest.php │ │ │ └── SchedulerTest.php │ │ └── ValueObject │ │ │ └── ExportStatusTest.php │ │ └── Infrastructure │ │ └── Grid │ │ ├── ChannelGridTest.php │ │ ├── ExportErrorsGridTest.php │ │ └── ExportGridTest.php ├── comment │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── comment-privileges.feature │ │ └── comment.feature │ ├── migrations │ │ ├── Version20191104140000.php │ │ └── Version20210105100300.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── CommentChangeAction.php │ │ │ │ │ ├── CommentCreateAction.php │ │ │ │ │ ├── CommentDeleteAction.php │ │ │ │ │ ├── CommentGridAction.php │ │ │ │ │ └── CommentReadAction.php │ │ │ ├── DependencyInjection │ │ │ │ └── ErgonodeCommentExtension.php │ │ │ └── Form │ │ │ │ ├── CreateCommentForm.php │ │ │ │ ├── Model │ │ │ │ ├── CreateCommentFormModel.php │ │ │ │ └── UpdateCommentFormModel.php │ │ │ │ └── UpdateCommentForm.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── CommentCommandInterface.php │ │ │ │ ├── CreateCommentCommand.php │ │ │ │ ├── DeleteCommentCommand.php │ │ │ │ └── UpdateCommentCommand.php │ │ │ ├── Entity │ │ │ │ └── Comment.php │ │ │ ├── Event │ │ │ │ ├── CommentContentChangedEvent.php │ │ │ │ ├── CommentCreatedEvent.php │ │ │ │ └── CommentDeletedEvent.php │ │ │ ├── Factory │ │ │ │ ├── CommentFactory.php │ │ │ │ └── CommentFactoryInterface.php │ │ │ ├── Query │ │ │ │ └── CommentGridQueryInterface.php │ │ │ └── Repository │ │ │ │ └── CommentRepositoryInterface.php │ │ ├── ErgonodeCommentBundle.php │ │ ├── Infrastructure │ │ │ ├── Grid │ │ │ │ └── CommentGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── CreateCommentCommandHandler.php │ │ │ │ ├── DeleteCommentCommandHandler.php │ │ │ │ └── UpdateCommentCommandHandler.php │ │ │ └── Persistence │ │ │ │ ├── Projector │ │ │ │ ├── DbalCommentContentChangedEventProjector.php │ │ │ │ ├── DbalCommentCreatedEventProjector.php │ │ │ │ └── DbalCommentDeletedEventProjector.php │ │ │ │ ├── Query │ │ │ │ └── DbalCommentGridQuery.php │ │ │ │ └── Repository │ │ │ │ └── EventStoreCommentRepository.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── nelmio_api_doc.yaml │ │ │ ├── routes.yml │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── log.en.yaml │ │ │ └── log.pl.yaml │ └── tests │ │ ├── Application │ │ └── Form │ │ │ ├── CreateCommentFormTest.php │ │ │ └── UpdateCommentFormTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── CreateCommentCommandTest.php │ │ │ ├── DeleteCommentCommandTest.php │ │ │ └── UpdateCommentCommandTest.php │ │ ├── Entity │ │ │ └── CommentTest.php │ │ ├── Event │ │ │ ├── CommentContentChangedEventTest.php │ │ │ └── CommentCreatedEventTest.php │ │ └── Factory │ │ │ └── CommentFactoryTest.php │ │ └── Infrastructure │ │ ├── Grid │ │ └── CommentGridBuilderTest.php │ │ └── Handler │ │ ├── CreateCommentCommandHandlerTest.php │ │ ├── DeleteCommentCommandHandlerTest.php │ │ └── UpdateCommentCommandHandlerTest.php ├── completeness │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── completeness-widget.feature │ │ └── product-completness.feature │ ├── migrations │ │ ├── Version20200811070000.php │ │ ├── Version20201125123500.php │ │ ├── Version20210309200000.php │ │ └── Version20210818160000.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── CompletenessReadAction.php │ │ │ │ │ └── Dashboard │ │ │ │ │ └── WidgetCompletenessCountAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeCompletenessExtension.php │ │ │ ├── Event │ │ │ │ └── ProductCompletenessCalculatedEvent.php │ │ │ ├── Serializer │ │ │ │ └── Normalizer │ │ │ │ │ ├── CompletenessCalculatorLineNormalizer.php │ │ │ │ │ ├── CompletenessElementReadModelNormalizer.php │ │ │ │ │ └── CompletenessReadModelNormalizer.php │ │ │ └── Transport │ │ │ │ ├── CompletenessTransport.php │ │ │ │ └── CompletenessTransportFactory.php │ │ ├── Domain │ │ │ ├── Calculator │ │ │ │ ├── AttributeTemplateElementCompletenessCalculator.php │ │ │ │ ├── CompletenessCalculator.php │ │ │ │ ├── CompletenessCalculatorLine.php │ │ │ │ └── CompletenessInformationBuilder.php │ │ │ ├── Command │ │ │ │ ├── CompletenessCommandInterface.php │ │ │ │ └── ProductCompletenessCalculateCommand.php │ │ │ ├── Entity │ │ │ │ └── Attribute │ │ │ │ │ └── CompletenessSystemAttribute.php │ │ │ ├── Query │ │ │ │ └── CompletenessQueryInterface.php │ │ │ └── ReadModel │ │ │ │ ├── CompletenessElementReadModel.php │ │ │ │ ├── CompletenessReadModel.php │ │ │ │ └── CompletenessWidgetModel.php │ │ ├── ErgonodeCompletenessBundle.php │ │ ├── Infrastructure │ │ │ ├── Grid │ │ │ │ ├── Builder │ │ │ │ │ └── Query │ │ │ │ │ │ └── CompletenessSystemAttributeDataSetQueryBuilder.php │ │ │ │ └── Column │ │ │ │ │ └── Provider │ │ │ │ │ └── Strategy │ │ │ │ │ └── CompletenessSystemAttributeColumnBuilderStrategy.php │ │ │ ├── Handler │ │ │ │ ├── Command │ │ │ │ │ └── ProductCompletenessCalculateCommandHandler.php │ │ │ │ └── Event │ │ │ │ │ └── Application │ │ │ │ │ ├── LanguageTreeUpdatedEventHandler.php │ │ │ │ │ ├── ProductCreatedEventHandler.php │ │ │ │ │ ├── ProductDeletedEventHandler.php │ │ │ │ │ ├── ProductUpdatedEventHandler.php │ │ │ │ │ └── TemplateUpdateEventHandler.php │ │ │ └── Persistence │ │ │ │ ├── Manager │ │ │ │ └── CompletenessManager.php │ │ │ │ └── Query │ │ │ │ └── CompletenessQuery.php │ │ └── Resources │ │ │ └── config │ │ │ ├── messenger.yaml │ │ │ ├── routes.yml │ │ │ └── services.yml │ └── tests │ │ ├── .gitignore │ │ ├── Application │ │ └── Serializer │ │ │ └── Normalizer │ │ │ ├── CompletenessCalculatorLineNormalizerTest.php │ │ │ ├── CompletenessElementReadModelNormalizerTest.php │ │ │ └── CompletenessReadModelNormalizerTest.php │ │ └── Domain │ │ ├── Calculator │ │ ├── AttributeTemplateElementCompletenessCalculatorTest.php │ │ └── CompletenessCalculatorTest.php │ │ ├── Entity │ │ └── Attribute │ │ │ └── CompletenessSystemAttributeTest.php │ │ └── ReadModel │ │ ├── CompletenessElementReadModelTest.php │ │ ├── CompletenessReadModelTest.php │ │ └── CompletenessWidgetModelTest.php ├── condition │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── condition-attribute-exists-value.feature │ │ ├── condition-language-completeness.feature │ │ ├── condition-not-authenticated.feature │ │ ├── condition-numeric-attribute-value.feature │ │ ├── condition-product-belong-category-tree.feature │ │ ├── condition-product-belong-category.feature │ │ ├── condition-product-has-status.feature │ │ ├── condition-product-has-template.feature │ │ ├── condition-product-sku-exists.feature │ │ ├── condition-text-attribute-value.feature │ │ └── condition.feature │ ├── migrations │ │ ├── Version20190910151314.php │ │ ├── Version20201119103017.php │ │ └── Version20201130110000.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── Condition │ │ │ │ │ └── ConditionConfigurationReadAction.php │ │ │ │ │ ├── ConditionSet │ │ │ │ │ ├── ConditionSetChangeAction.php │ │ │ │ │ ├── ConditionSetCreateAction.php │ │ │ │ │ ├── ConditionSetDeleteAction.php │ │ │ │ │ └── ConditionSetReadAction.php │ │ │ │ │ └── Dictionary │ │ │ │ │ └── ConditionReadAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── AddConditionsNodeSection.php │ │ │ │ ├── CompilerPass │ │ │ │ │ ├── ConditionCalculatorCompilerPass.php │ │ │ │ │ ├── ConditionConfiguratorCompilerPass.php │ │ │ │ │ ├── ConditionConstraintCompilerPass.php │ │ │ │ │ └── ProvideConditionDictionaryCompilerPass.php │ │ │ │ └── ErgonodeConditionExtension.php │ │ │ └── Validator │ │ │ │ ├── ConditionSetExists.php │ │ │ │ └── ConditionSetExistsValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── ConditionCommandInterface.php │ │ │ │ ├── CreateConditionSetCommand.php │ │ │ │ ├── DeleteConditionSetCommand.php │ │ │ │ └── UpdateConditionSetCommand.php │ │ │ ├── Condition │ │ │ │ ├── AttributeExistsCondition.php │ │ │ │ ├── AttributeTranslationExistsCondition.php │ │ │ │ ├── LanguageCompletenessCondition.php │ │ │ │ ├── NumericAttributeValueCondition.php │ │ │ │ ├── OptionAttributeValueCondition.php │ │ │ │ ├── ProductBelongCategoryCondition.php │ │ │ │ ├── ProductBelongCategoryTreeCondition.php │ │ │ │ ├── ProductCompletenessCondition.php │ │ │ │ ├── ProductHasStatusCondition.php │ │ │ │ ├── ProductHasTemplateCondition.php │ │ │ │ ├── ProductSkuExistsCondition.php │ │ │ │ ├── RoleExactlyCondition.php │ │ │ │ ├── TextAttributeValueCondition.php │ │ │ │ └── UserExactlyCondition.php │ │ │ ├── ConditionInterface.php │ │ │ ├── Entity │ │ │ │ └── ConditionSet.php │ │ │ ├── Event │ │ │ │ ├── ConditionSetConditionsChangedEvent.php │ │ │ │ ├── ConditionSetCreatedEvent.php │ │ │ │ └── ConditionSetDeletedEvent.php │ │ │ ├── Exception │ │ │ │ └── ConditionStrategyNotFoundException.php │ │ │ ├── Provider │ │ │ │ └── ConditionDictionaryProvider.php │ │ │ ├── Query │ │ │ │ └── ConditionSetQueryInterface.php │ │ │ ├── Repository │ │ │ │ └── ConditionSetRepositoryInterface.php │ │ │ └── Service │ │ │ │ ├── ConditionCalculator.php │ │ │ │ └── ConditionConfigurator.php │ │ ├── ErgonodeConditionBundle.php │ │ ├── Infrastructure │ │ │ ├── Builder │ │ │ │ └── ConditionSetValidatorBuilder.php │ │ │ ├── Condition │ │ │ │ ├── Calculator │ │ │ │ │ ├── AttributeExistsConditionCalculatorStrategy.php │ │ │ │ │ ├── AttributeTranslationExistsConditionCalculatorStrategy.php │ │ │ │ │ ├── LanguageCompletenessConditionCalculatorStrategy.php │ │ │ │ │ ├── NumericAttributeValueConditionCalculatorStrategy.php │ │ │ │ │ ├── OptionAttributeValueConditionCalculatorStrategy.php │ │ │ │ │ ├── ProductBelongCategoryConditionCalculatorStrategy.php │ │ │ │ │ ├── ProductBelongCategoryTreeConditionCalculatorStrategy.php │ │ │ │ │ ├── ProductCompletenessConditionCalculatorStrategy.php │ │ │ │ │ ├── ProductHasStatusConditionCalculatorStrategy.php │ │ │ │ │ ├── ProductHasTemplateConditionCalculatorStrategy.php │ │ │ │ │ ├── ProductSkuExistsConditionCalculatorStrategy.php │ │ │ │ │ ├── RoleExactlyConditionCalculatorStrategy.php │ │ │ │ │ ├── TextAttributeValueConditionCalculatorStrategy.php │ │ │ │ │ └── UserExactlyConditionCalculatorStrategy.php │ │ │ │ ├── ConditionCalculatorStrategyInterface.php │ │ │ │ ├── ConditionConfigurationStrategyInterface.php │ │ │ │ ├── ConditionValidatorStrategyInterface.php │ │ │ │ ├── Configuration │ │ │ │ │ ├── AttributeExistsConditionConditionConfigurationStrategy.php │ │ │ │ │ ├── AttributeTranslationExistsConditionConfigurationStrategy.php │ │ │ │ │ ├── LanguageCompletenessConditionConditionConfigurationStrategy.php │ │ │ │ │ ├── NumericAttributeValueConditionConditionConfigurationStrategy.php │ │ │ │ │ ├── OptionAttributeValueConditionConditionConfigurationStrategy.php │ │ │ │ │ ├── ProductBelongCategoryConditionConfigurationStrategy.php │ │ │ │ │ ├── ProductBelongCategoryTreeConditionConfigurationStrategy.php │ │ │ │ │ ├── ProductCompletenessConditionConditionConfigurationStrategy.php │ │ │ │ │ ├── ProductHasStatusConditionConfigurationStrategy.php │ │ │ │ │ ├── ProductHasTemplateConditionConfigurationStrategy.php │ │ │ │ │ ├── ProductSkuExistsConditionConfigurationStrategy.php │ │ │ │ │ ├── RoleExactlyConditionConditionConfigurationStrategy.php │ │ │ │ │ ├── TextAttributeValueConditionConditionConfigurationStrategy.php │ │ │ │ │ └── UserExactlyConditionConditionConfigurationStrategy.php │ │ │ │ └── Validator │ │ │ │ │ ├── AttributeExistsConditionValidatorStrategy.php │ │ │ │ │ ├── AttributeTranslationExistsConditionValidatorStrategy.php │ │ │ │ │ ├── LanguageCompletenessConditionValidatorStrategy.php │ │ │ │ │ ├── NumericAttributeValueConditionValidatorStrategy.php │ │ │ │ │ ├── OptionAttributeValueConditionValidatorStrategy.php │ │ │ │ │ ├── ProductBelongCategoryConditionValidatorStrategy.php │ │ │ │ │ ├── ProductBelongCategoryTreeConditionValidatorStrategy.php │ │ │ │ │ ├── ProductCompletenessConditionValidatorStrategy.php │ │ │ │ │ ├── ProductHasStatusConditionValidatorStrategy.php │ │ │ │ │ ├── ProductHasTemplateConditionValidatorStrategy.php │ │ │ │ │ ├── ProductSkuExistsConditionValidatorStrategy.php │ │ │ │ │ ├── RoleExactlyConditionValidatorStrategy.php │ │ │ │ │ ├── TextAttributeValueConditionValidatorStrategy.php │ │ │ │ │ └── UserExactlyConditionValidatorStrategy.php │ │ │ ├── Handler │ │ │ │ ├── CreateConditionSetCommandHandler.php │ │ │ │ ├── DeleteConditionSetCommandHandler.php │ │ │ │ └── UpdateConditionSetCommandHandler.php │ │ │ ├── Persistence │ │ │ │ ├── Projector │ │ │ │ │ ├── DbalConditionSetConditionsChangedEventProjector.php │ │ │ │ │ ├── DbalConditionSetCreatedEventProjector.php │ │ │ │ │ └── DbalConditionSetDeletedEventProjector.php │ │ │ │ ├── Query │ │ │ │ │ └── DbalConditionSetQuery.php │ │ │ │ └── Repository │ │ │ │ │ └── EventStoreConditionSetRepository.php │ │ │ ├── Provider │ │ │ │ ├── ConditionCalculatorProvider.php │ │ │ │ ├── ConditionConfigurationProvider.php │ │ │ │ └── ConditionConstraintProvider.php │ │ │ └── Strategy │ │ │ │ └── Relationship │ │ │ │ ├── ConditionSetAttributeRelationshipStrategy.php │ │ │ │ ├── ConditionSetCategoryRelationshipStrategy.php │ │ │ │ └── ConditionSetLanguageRelationshipStrategy.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── nelmio_api_doc.yaml │ │ │ ├── routes.yml │ │ │ ├── serialization.yaml │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── condition.en.yaml │ │ │ ├── condition.pl.yaml │ │ │ ├── grid.en.yaml │ │ │ ├── grid.pl.yaml │ │ │ ├── log.en.yaml │ │ │ ├── log.pl.yaml │ │ │ ├── privilege.en.yaml │ │ │ └── privilege.pl.yaml │ └── tests │ │ ├── Application │ │ └── Validator │ │ │ └── ConditionSetExistsValidatorTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── CreateConditionSetCommandTest.php │ │ │ ├── DeleteConditionSetCommandTest.php │ │ │ └── UpdateConditionSetCommandTest.php │ │ ├── Condition │ │ │ ├── AttributeExistsConditionTest.php │ │ │ ├── LanguageCompletenessConditionTest.php │ │ │ ├── NumericAttributeValueConditionTest.php │ │ │ ├── OptionAttributeValueConditionTest.php │ │ │ ├── ProductBelongCategoryConditionTest.php │ │ │ ├── ProductBelongCategoryTreeConditionTest.php │ │ │ ├── ProductCompletenessConditionTest.php │ │ │ ├── ProductHasStatusConditionTest.php │ │ │ ├── ProductHasTemplateConditionTest.php │ │ │ ├── ProductSkuExistsConditionTest.php │ │ │ ├── RoleExactlyConditionTest.php │ │ │ ├── TextAttributeValueConditionTest.php │ │ │ └── UserExactlyConditionTest.php │ │ ├── Entity │ │ │ └── ConditionSetTest.php │ │ ├── Event │ │ │ ├── ConditionSetConditionsChangedEventTest.php │ │ │ └── ConditionSetDeletedEventTest.php │ │ ├── Provider │ │ │ └── ConditionDictionaryProviderTest.php │ │ └── Service │ │ │ └── ConditionCalculatorTest.php │ │ └── Infrastructure │ │ └── Condition │ │ └── Calculator │ │ ├── AttributeTranslationExistsConditionCalculatorStrategyTest.php │ │ ├── NumericAttributeValueConditionCalculatorStrategyTest.php │ │ ├── OptionAttributeValueConditionCalculatorStrategyTest.php │ │ ├── ProductBelongCategoryConditionCalculatorStrategyTest.php │ │ ├── ProductBelongCategoryTreeConditionCalculatorStrategyTest.php │ │ ├── ProductHasStatusConditionCalculatorStrategyTest.php │ │ ├── ProductHasTemplateConditionCalculatorStrategyTest.php │ │ ├── ProductSkuExistsConditionCalculatorStrategyTest.php │ │ └── TextAttributeValueConditionCalculatorStrategyTest.php ├── core │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── .gitkeep │ │ ├── api-doc.feature │ │ ├── core-not-authenticated.feature │ │ ├── language-tree.feature │ │ ├── language.feature │ │ ├── language.json │ │ ├── transactional-feature1.feature │ │ ├── transactional-feature2.feature │ │ └── unit.feature │ ├── migrations │ │ ├── Version20180610093112.php │ │ ├── Version20210105100400.php │ │ └── Version20210318100000.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── Language │ │ │ │ │ ├── LanguageGridReadAction.php │ │ │ │ │ └── LanguageReadAction.php │ │ │ │ │ ├── LanguageTree │ │ │ │ │ ├── LanguageTreeChangeAction.php │ │ │ │ │ └── LanguageTreeReadAction.php │ │ │ │ │ └── Unit │ │ │ │ │ ├── UnitChangeAction.php │ │ │ │ │ ├── UnitCreateAction.php │ │ │ │ │ ├── UnitDeleteAction.php │ │ │ │ │ ├── UnitGridReadAction.php │ │ │ │ │ └── UnitReadAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ │ ├── ExternalDocDescriberCompilerPass.php │ │ │ │ │ ├── RelationshipStrategyInterfaceCompilerPass.php │ │ │ │ │ └── SerializerCompilerPass.php │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeCoreExtension.php │ │ │ ├── Event │ │ │ │ └── LanguageTreeUpdatedEvent.php │ │ │ ├── Exception │ │ │ │ └── NotImplementedException.php │ │ │ ├── Form │ │ │ │ ├── DataTransformer │ │ │ │ │ ├── BooleanDataTransformer.php │ │ │ │ │ ├── ColorDataTransformer.php │ │ │ │ │ ├── DateTimeTransformer.php │ │ │ │ │ ├── LanguageDataTransformer.php │ │ │ │ │ └── TranslationDataTransformer.php │ │ │ │ ├── Extension │ │ │ │ │ ├── DescriptionFormExtension.php │ │ │ │ │ └── TitleFormExtension.php │ │ │ │ ├── LanguageTree │ │ │ │ │ ├── LanguageTreeNodeForm.php │ │ │ │ │ └── LanguageTreeUpdateForm.php │ │ │ │ ├── Type │ │ │ │ │ ├── BooleanType.php │ │ │ │ │ ├── ColorType.php │ │ │ │ │ ├── DateTimeType.php │ │ │ │ │ ├── LanguageActiveType.php │ │ │ │ │ ├── LanguageType.php │ │ │ │ │ ├── TranslationType.php │ │ │ │ │ └── UnitIdFormType.php │ │ │ │ └── UnitForm.php │ │ │ ├── HttpFoundation │ │ │ │ └── FileContentResponse.php │ │ │ ├── Messenger │ │ │ │ ├── ApplicationEventBus.php │ │ │ │ ├── CommandBus.php │ │ │ │ ├── DomainEventBus.php │ │ │ │ ├── Middleware │ │ │ │ │ ├── AuthenticationMiddleware.php │ │ │ │ │ └── GetUserMiddleware.php │ │ │ │ └── Stamp │ │ │ │ │ └── UserStamp.php │ │ │ ├── Model │ │ │ │ ├── LanguageTree │ │ │ │ │ ├── LanguageTreeNodeFormModel.php │ │ │ │ │ └── LanguageTreeUpdateFormModel.php │ │ │ │ └── UnitFormModel.php │ │ │ ├── Nelmio │ │ │ │ └── ExternalDocDescriber.php │ │ │ ├── PropertyInfo │ │ │ │ └── Extractor │ │ │ │ │ └── ReflectionExtractor.php │ │ │ ├── Provider │ │ │ │ ├── DirectoryProviderInterface.php │ │ │ │ └── SimpleDirectoryProvider.php │ │ │ ├── Request │ │ │ │ └── ParamConverter │ │ │ │ │ ├── AggregateRootParamConverter.php │ │ │ │ │ └── LanguageParamConverter.php │ │ │ ├── Security │ │ │ │ ├── Security.php │ │ │ │ ├── Token │ │ │ │ │ └── UserToken.php │ │ │ │ └── User │ │ │ │ │ └── CachedUser.php │ │ │ ├── Serializer │ │ │ │ ├── Normalizer │ │ │ │ │ ├── AggregateRootNormalizer.php │ │ │ │ │ ├── AssocArrayDenormalizer.php │ │ │ │ │ ├── EntityNormalizer.php │ │ │ │ │ ├── LanguageNormalizer.php │ │ │ │ │ ├── ObjectPropertyNormalizer.php │ │ │ │ │ ├── ScalarValueObjectNormalizer.php │ │ │ │ │ └── UuidNormalizer.php │ │ │ │ └── SymfonySerializer.php │ │ │ └── Validator │ │ │ │ ├── LanguageCode.php │ │ │ │ ├── LanguageCodeActive.php │ │ │ │ ├── LanguageCodeActiveValidator.php │ │ │ │ ├── LanguageCodeExists.php │ │ │ │ ├── LanguageCodeExistsValidator.php │ │ │ │ ├── LanguageCodeValidator.php │ │ │ │ ├── LanguageIdExists.php │ │ │ │ ├── LanguageIdExistsValidator.php │ │ │ │ ├── LanguageTreeLanguageRelation.php │ │ │ │ ├── LanguageTreeLanguageRelationValidator.php │ │ │ │ ├── UnitForm.php │ │ │ │ └── UnitFormValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── CoreCommandInterface.php │ │ │ │ ├── CreateUnitCommand.php │ │ │ │ ├── DeleteUnitCommand.php │ │ │ │ ├── LanguageTree │ │ │ │ │ ├── CreateLanguageTreeCommand.php │ │ │ │ │ └── UpdateLanguageTreeCommand.php │ │ │ │ └── UpdateUnitCommand.php │ │ │ ├── Entity │ │ │ │ ├── LanguageTree.php │ │ │ │ └── Unit.php │ │ │ ├── Event │ │ │ │ ├── AbstractTranslatableStringBasedChangedEvent.php │ │ │ │ ├── UnitCreatedEvent.php │ │ │ │ ├── UnitDeletedEvent.php │ │ │ │ ├── UnitNameChangedEvent.php │ │ │ │ └── UnitSymbolChangedEvent.php │ │ │ ├── Factory │ │ │ │ └── UnitFactory.php │ │ │ ├── Query │ │ │ │ ├── Builder │ │ │ │ │ ├── DefaultImageQueryBuilderInterface.php │ │ │ │ │ └── DefaultLabelQueryBuilderInterface.php │ │ │ │ ├── LanguageQueryInterface.php │ │ │ │ ├── LanguageTreeQueryInterface.php │ │ │ │ └── UnitQueryInterface.php │ │ │ ├── Repository │ │ │ │ ├── LanguageRepositoryInterface.php │ │ │ │ ├── LanguageTreeRepositoryInterface.php │ │ │ │ └── UnitRepositoryInterface.php │ │ │ ├── User │ │ │ │ ├── LanguageCollectionAwareInterface.php │ │ │ │ └── UserInterface.php │ │ │ └── ValueObject │ │ │ │ ├── Color.php │ │ │ │ ├── Language.php │ │ │ │ ├── LanguageNode.php │ │ │ │ ├── LanguagePrivileges.php │ │ │ │ ├── Range.php │ │ │ │ ├── State.php │ │ │ │ └── TranslatableString.php │ │ ├── ErgonodeCoreBundle.php │ │ ├── Infrastructure │ │ │ ├── Builder │ │ │ │ ├── ExistingRelationshipMessageBuilderInterface.php │ │ │ │ ├── ExistingRelationshipTypeMessageBuilder.php │ │ │ │ └── LanguageTree │ │ │ │ │ ├── Branch.php │ │ │ │ │ ├── LanguageTreeBuilder.php │ │ │ │ │ └── NestedSetTree.php │ │ │ ├── Cache │ │ │ │ └── CacheInterface.php │ │ │ ├── EventListener │ │ │ │ └── ConnectionWorkerEventSubscriber.php │ │ │ ├── Exception │ │ │ │ ├── AccessDeniedDownloaderException.php │ │ │ │ ├── BadRequestDownloaderException.php │ │ │ │ ├── DownloaderException.php │ │ │ │ ├── ExistingRelationshipsException.php │ │ │ │ ├── FileNotFoundDownloaderException.php │ │ │ │ └── NotAcceptedHeaderTypeException.php │ │ │ ├── Grid │ │ │ │ ├── LanguageGridBuilder.php │ │ │ │ └── UnitGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── CreateUnitCommandHandler.php │ │ │ │ ├── DeleteUnitCommandHandler.php │ │ │ │ ├── LanguageTree │ │ │ │ │ ├── CreateLanguageTreeCommandHandler.php │ │ │ │ │ └── UpdateLanguageTreeCommandHandler.php │ │ │ │ └── UpdateUnitCommandHandler.php │ │ │ ├── Mapper │ │ │ │ ├── FormErrorMapper.php │ │ │ │ ├── FormErrorMapperMessageProvider.php │ │ │ │ ├── LanguageMapper.php │ │ │ │ ├── LanguageTreeMapper.php │ │ │ │ └── SnakeCaseMapper.php │ │ │ ├── Model │ │ │ │ ├── Relationship.php │ │ │ │ └── RelationshipGroup.php │ │ │ ├── Persistence │ │ │ │ ├── Projector │ │ │ │ │ └── Unit │ │ │ │ │ │ ├── DbalUnitCreatedEventProjector.php │ │ │ │ │ │ ├── DbalUnitDeletedEventProjector.php │ │ │ │ │ │ ├── DbalUnitNameChangedEventProjector.php │ │ │ │ │ │ └── DbalUnitSymbolChangedEventProjector.php │ │ │ │ ├── Query │ │ │ │ │ ├── Builder │ │ │ │ │ │ ├── DbalDefaultImageQueryBuilder.php │ │ │ │ │ │ └── DbalDefaultLabelQueryBuilder.php │ │ │ │ │ ├── DbalLanguageQuery.php │ │ │ │ │ ├── DbalLanguageTreeQuery.php │ │ │ │ │ └── DbalUnitQuery.php │ │ │ │ └── Repository │ │ │ │ │ ├── DbalLanguageRepository.php │ │ │ │ │ ├── DbalLanguageTreeRepository.php │ │ │ │ │ ├── EventStoreUnitRepository.php │ │ │ │ │ └── Factory │ │ │ │ │ └── DbalLanguageTreeFactory.php │ │ │ ├── Provider │ │ │ │ ├── LanguageProvider.php │ │ │ │ ├── LanguageProviderInterface.php │ │ │ │ ├── LanguageTreeProvider.php │ │ │ │ └── LanguageTreeProviderInterface.php │ │ │ ├── Resolver │ │ │ │ ├── RelationshipsResolver.php │ │ │ │ └── RelationshipsResolverInterface.php │ │ │ ├── Service │ │ │ │ ├── CurlDownloader.php │ │ │ │ ├── Decorator │ │ │ │ │ └── CacheDownloaderDecorator.php │ │ │ │ ├── DownloaderInterface.php │ │ │ │ ├── GuzzleDownloader.php │ │ │ │ ├── Header.php │ │ │ │ └── TempFileStorage.php │ │ │ └── Strategy │ │ │ │ └── RelationshipStrategyInterface.php │ │ ├── Resources │ │ │ ├── config │ │ │ │ ├── messenger.yaml │ │ │ │ ├── nelmio_api_doc.yaml │ │ │ │ ├── routes.yml │ │ │ │ ├── services.yml │ │ │ │ └── test.yaml │ │ │ └── translations │ │ │ │ ├── grid.en.yaml │ │ │ │ ├── grid.pl.yaml │ │ │ │ ├── language.en.yaml │ │ │ │ └── language.pl.yaml │ │ └── Test │ │ │ ├── Behat │ │ │ ├── Context │ │ │ │ ├── ApiAuthContext.php │ │ │ │ ├── ApiAuthTokenContext.php │ │ │ │ ├── AuthenticationContext.php │ │ │ │ ├── DAMA │ │ │ │ │ └── StaticDriver.php │ │ │ │ ├── ExtendJsonContext.php │ │ │ │ ├── ResolveVarsContext.php │ │ │ │ ├── StorageContext.php │ │ │ │ ├── StoreRestResponseParamContext.php │ │ │ │ ├── TransactionalContext.php │ │ │ │ ├── UploadFileContext.php │ │ │ │ └── UserContext.php │ │ │ ├── Extension │ │ │ │ ├── BehatchBridgeExtension.php │ │ │ │ ├── DAMAStaticConnectionExtension.php │ │ │ │ └── EnvVarProcessorExtension.php │ │ │ └── Service │ │ │ │ └── RequestAuthenticatorInterface.php │ │ │ ├── Fixtures │ │ │ └── Messenger │ │ │ │ └── Transport │ │ │ │ ├── TestTransport.php │ │ │ │ └── TestTransportFactory.php │ │ │ └── TestDownloaderDecorator.php │ └── tests │ │ ├── .gitignore │ │ ├── Application │ │ ├── Form │ │ │ └── DataTransformer │ │ │ │ ├── BooleanDataTransformerTest.php │ │ │ │ ├── ColorDataTransformerTest.php │ │ │ │ ├── DateTimeTransformerTest.php │ │ │ │ └── LanguageDataTransformerTest.php │ │ ├── Messenger │ │ │ ├── Middleware │ │ │ │ ├── AuthenticationMiddlewareTest.php │ │ │ │ └── GetUserMiddlewareTest.php │ │ │ └── Stamp │ │ │ │ └── UserStampTest.php │ │ ├── Request │ │ │ └── ParamConverter │ │ │ │ └── AggregateRootParamConverterTest.php │ │ ├── Serializer │ │ │ └── Normalizer │ │ │ │ ├── AggregateRootNormalizerTest.php │ │ │ │ ├── EntityNormalizerTest.php │ │ │ │ ├── Fixtures │ │ │ │ ├── AbstractClass.php │ │ │ │ └── PrivateConstructorClass.php │ │ │ │ └── ScalarValueObjectNormalizerTest.php │ │ └── Validator │ │ │ ├── LanguageCodeActiveValidatorTest.php │ │ │ ├── LanguageCodeExistsValidatorTest.php │ │ │ ├── LanguageCodeValidatorTest.php │ │ │ └── UnitFormValidatorTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── CreateUnitCommandTest.php │ │ │ ├── DeleteUnitCommandTest.php │ │ │ ├── LanguageTree │ │ │ │ ├── CreateLanguageTreeCommandTest.php │ │ │ │ └── UpdateLanguageTreeCommandTest.php │ │ │ └── UpdateUnitCommandTest.php │ │ ├── Entity │ │ │ ├── LanguageTreeTest.php │ │ │ └── UnitTest.php │ │ ├── Event │ │ │ ├── UnitDeletedEventTest.php │ │ │ ├── UnitNameChangedEventTest.php │ │ │ └── UnitSymbolChangedEventTest.php │ │ ├── Factory │ │ │ └── UnitFactoryTest.php │ │ └── ValueObject │ │ │ ├── ColorTest.php │ │ │ ├── LanguageNodeTest.php │ │ │ ├── LanguagePrivilegesTest.php │ │ │ ├── LanguageTest.php │ │ │ ├── RangeTest.php │ │ │ └── TranslatableStringTest.php │ │ └── Infrastructure │ │ ├── Builder │ │ └── LanguageTree │ │ │ ├── BranchTest.php │ │ │ └── NestedSetTreeTest.php │ │ ├── EventListener │ │ └── ConnectionWorkerEventSubscriberTest.php │ │ ├── Mapper │ │ ├── FormErrorMapperTest.php │ │ ├── LanguageMapperTest.php │ │ ├── LanguageTreeMapperTest.php │ │ └── SnakeCaseMapperTest.php │ │ ├── Model │ │ └── RelationshipTest.php │ │ └── Resolver │ │ └── RelationshipsResolverTest.php ├── designer │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── attribute-grid-extension.feature │ │ ├── designer-autocomplete.feature │ │ ├── designer-not-authenticated.feature │ │ ├── designer.feature │ │ ├── image │ │ │ └── test.jpg │ │ └── template.json │ ├── migrations │ │ ├── Version20180719132703.php │ │ ├── Version20201116125500.php │ │ ├── Version20210105100600.php │ │ ├── Version20210125121500.php │ │ ├── Version20210421113000.php │ │ └── Version20210823140000.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── Template │ │ │ │ │ ├── TemplateAutocompleteAction.php │ │ │ │ │ ├── TemplateChangeAction.php │ │ │ │ │ ├── TemplateCreateAction.php │ │ │ │ │ ├── TemplateDeleteAction.php │ │ │ │ │ ├── TemplateGridReadAction.php │ │ │ │ │ └── TemplateReadAction.php │ │ │ │ │ ├── TemplateGroup │ │ │ │ │ └── TemplateGroupGridReadAction.php │ │ │ │ │ └── TemplateType │ │ │ │ │ └── TemplateTypeGridReadAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ │ └── TemplateElementProviderCompilerPass.php │ │ │ │ └── ErgonodeDesignerExtension.php │ │ │ ├── Event │ │ │ │ ├── TemplateCreatedEvent.php │ │ │ │ ├── TemplateDeletedEvent.php │ │ │ │ └── TemplateUpdatedEvent.php │ │ │ ├── Form │ │ │ │ ├── TemplateForm.php │ │ │ │ ├── Transformer │ │ │ │ │ ├── PositionFormDataTransformer.php │ │ │ │ │ └── SizeFormDataTransformer.php │ │ │ │ └── Type │ │ │ │ │ ├── PositionFormType.php │ │ │ │ │ ├── Properties │ │ │ │ │ ├── AttributeElementPropertyType.php │ │ │ │ │ └── SegmentElementPropertyType.php │ │ │ │ │ ├── SizeFormType.php │ │ │ │ │ └── TemplateElementType.php │ │ │ ├── Model │ │ │ │ └── Form │ │ │ │ │ ├── TemplateFormModel.php │ │ │ │ │ └── Type │ │ │ │ │ ├── Property │ │ │ │ │ ├── AttributeElementPropertyTypeModel.php │ │ │ │ │ └── SegmentElementPropertyTypeModel.php │ │ │ │ │ └── TemplateElementTypeModel.php │ │ │ ├── Resolver │ │ │ │ └── TemplateElementFormTypeResolver.php │ │ │ └── Validator │ │ │ │ ├── TemplateCode.php │ │ │ │ ├── TemplateCodeUnique.php │ │ │ │ ├── TemplateCodeUniqueValidator.php │ │ │ │ ├── TemplateCodeValidator.php │ │ │ │ ├── TemplateExists.php │ │ │ │ └── TemplateExistsValidator.php │ │ ├── Domain │ │ │ ├── Builder │ │ │ │ ├── BuilderTemplateElementStrategyInterface.php │ │ │ │ ├── Strategy │ │ │ │ │ ├── AttributeViewTemplateElementStrategy.php │ │ │ │ │ └── SectionViewTemplateElementStrategy.php │ │ │ │ └── ViewTemplateBuilder.php │ │ │ ├── Command │ │ │ │ ├── CreateTemplateCommand.php │ │ │ │ ├── DeleteTemplateCommand.php │ │ │ │ ├── TemplateCommandInterface.php │ │ │ │ └── UpdateTemplateCommand.php │ │ │ ├── Entity │ │ │ │ ├── Attribute │ │ │ │ │ ├── DefaultImageSystemAttribute.php │ │ │ │ │ ├── DefaultLabelSystemAttribute.php │ │ │ │ │ └── TemplateSystemAttribute.php │ │ │ │ ├── Element │ │ │ │ │ ├── AbstractTemplateElement.php │ │ │ │ │ ├── AttributeTemplateElement.php │ │ │ │ │ └── UiTemplateElement.php │ │ │ │ ├── Template.php │ │ │ │ ├── TemplateElementInterface.php │ │ │ │ └── TemplateGroup.php │ │ │ ├── Event │ │ │ │ ├── Group │ │ │ │ │ └── TemplateGroupCreatedEvent.php │ │ │ │ ├── TemplateCreatedEvent.php │ │ │ │ ├── TemplateDefaultImageAddedEvent.php │ │ │ │ ├── TemplateDefaultImageChangedEvent.php │ │ │ │ ├── TemplateDefaultImageRemovedEvent.php │ │ │ │ ├── TemplateDefaultLabelAddedEvent.php │ │ │ │ ├── TemplateDefaultLabelChangedEvent.php │ │ │ │ ├── TemplateDefaultLabelRemovedEvent.php │ │ │ │ ├── TemplateElementAddedEvent.php │ │ │ │ ├── TemplateElementChangedEvent.php │ │ │ │ ├── TemplateElementRemovedEvent.php │ │ │ │ ├── TemplateGroupChangedEvent.php │ │ │ │ ├── TemplateImageAddedEvent.php │ │ │ │ ├── TemplateImageChangedEvent.php │ │ │ │ ├── TemplateImageRemovedEvent.php │ │ │ │ ├── TemplateNameChangedEvent.php │ │ │ │ └── TemplateRemovedEvent.php │ │ │ ├── Factory │ │ │ │ ├── TemplateElementFactory.php │ │ │ │ └── TemplateFactory.php │ │ │ ├── Provider │ │ │ │ └── ViewTemplateElementProvider.php │ │ │ ├── Query │ │ │ │ ├── TemplateElementGridQueryInterface.php │ │ │ │ ├── TemplateGridQueryInterface.php │ │ │ │ ├── TemplateGroupGridQueryInterface.php │ │ │ │ ├── TemplateGroupQueryInterface.php │ │ │ │ └── TemplateQueryInterface.php │ │ │ ├── Repository │ │ │ │ ├── TemplateGroupRepositoryInterface.php │ │ │ │ └── TemplateRepositoryInterface.php │ │ │ ├── Resolver │ │ │ │ └── TemplateElementTypeResolver.php │ │ │ ├── ValueObject │ │ │ │ ├── Position.php │ │ │ │ ├── Size.php │ │ │ │ └── TemplateCode.php │ │ │ └── View │ │ │ │ └── ViewTemplateElement.php │ │ ├── ErgonodeDesignerBundle.php │ │ ├── Infrastructure │ │ │ ├── Factory │ │ │ │ └── TemplateCommandFactory.php │ │ │ ├── Grid │ │ │ │ ├── AttributeGridBuilderDecorator.php │ │ │ │ ├── Builder │ │ │ │ │ └── Query │ │ │ │ │ │ ├── DefaultImageSystemAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── DefaultLabelSystemAttributeDataSetQueryBuilder.php │ │ │ │ │ │ └── TemplateSystemAttributeDataSetQueryBuilder.php │ │ │ │ ├── Column │ │ │ │ │ └── Provider │ │ │ │ │ │ └── Strategy │ │ │ │ │ │ ├── DefaultImageSystemAttributeColumnBuilderStrategy.php │ │ │ │ │ │ ├── DefaultLabelSystemAttributeColumnBuilderStrategy.php │ │ │ │ │ │ └── TemplateSystemAttributeColumnStrategy.php │ │ │ │ ├── TemplateGridBuilder.php │ │ │ │ ├── TemplateGroupGridBuilder.php │ │ │ │ └── TemplateTypeDictionaryGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── CreateTemplateHandler.php │ │ │ │ ├── DeleteTemplateHandler.php │ │ │ │ └── UpdateTemplateHandler.php │ │ │ ├── Mapper │ │ │ │ └── TemplateResultMapper.php │ │ │ ├── Persistence │ │ │ │ ├── Projector │ │ │ │ │ ├── AttributeTemplateElement │ │ │ │ │ │ ├── DbalAttributeTemplateElementAddedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeTemplateElementChangedEventProjector.php │ │ │ │ │ │ ├── DbalAttributeTemplateElementRemovedEventProjector.php │ │ │ │ │ │ └── DbalTemplateRemovedEventProjector.php │ │ │ │ │ ├── DbalTemplateCreatedEventProjector.php │ │ │ │ │ ├── DbalTemplateDefaultImageAddedEventProjector.php │ │ │ │ │ ├── DbalTemplateDefaultImageChangedEventProjector.php │ │ │ │ │ ├── DbalTemplateDefaultImageRemovedEventProjector.php │ │ │ │ │ ├── DbalTemplateDefaultLabelRemovedEventProjector.php │ │ │ │ │ ├── DbalTemplateDefaultTextAddedEventProjector.php │ │ │ │ │ ├── DbalTemplateDefaultTextChangedEventProjector.php │ │ │ │ │ ├── DbalTemplateElementAddedEventProjector.php │ │ │ │ │ ├── DbalTemplateElementChangedEventProjector.php │ │ │ │ │ ├── DbalTemplateElementRemovedEventProjector.php │ │ │ │ │ ├── DbalTemplateGroupChangedEventProjector.php │ │ │ │ │ ├── DbalTemplateImageAddedEventProjector.php │ │ │ │ │ ├── DbalTemplateImageChangedEventProjector.php │ │ │ │ │ ├── DbalTemplateImageRemovedEventProjector.php │ │ │ │ │ ├── DbalTemplateNameChangedEventProjector.php │ │ │ │ │ ├── DbalTemplateRemovedEventProjector.php │ │ │ │ │ └── Group │ │ │ │ │ │ └── DbalTemplateGroupCreatedEventProjector.php │ │ │ │ ├── Query │ │ │ │ │ ├── AttributeGridQueryDecorator.php │ │ │ │ │ ├── DbalTemplateElementGridQuery.php │ │ │ │ │ ├── DbalTemplateGridQuery.php │ │ │ │ │ ├── DbalTemplateGroupGridQuery.php │ │ │ │ │ ├── DbalTemplateGroupQuery.php │ │ │ │ │ └── DbalTemplateQuery.php │ │ │ │ └── Repository │ │ │ │ │ ├── EventStoreTemplateGroupRepository.php │ │ │ │ │ └── EventStoreTemplateRepository.php │ │ │ ├── Relation │ │ │ │ └── TemplateMultimediaRelation.php │ │ │ └── Strategy │ │ │ │ └── Relationship │ │ │ │ ├── ProductTemplateRelationshipStrategy.php │ │ │ │ ├── TemplateAttributeRelationshipStrategy.php │ │ │ │ └── TemplateMultimediaRelationshipStrategy.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── nelmio_api_doc.yaml │ │ │ ├── routes.yml │ │ │ ├── serialization.yaml │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── grid.en.yaml │ │ │ ├── grid.pl.yaml │ │ │ ├── log.en.yaml │ │ │ ├── log.pl.yaml │ │ │ ├── template.en.yaml │ │ │ └── template.pl.yaml │ └── tests │ │ ├── Application │ │ ├── Form │ │ │ └── Transformer │ │ │ │ ├── PositionFormDataTransformerTest.php │ │ │ │ └── SizeFormDataTransformerTest.php │ │ └── Validator │ │ │ └── TemplateExistsValidatorTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── CreateDesignerTemplateCommandTest.php │ │ │ ├── DeleteDesignerTemplateCommandTest.php │ │ │ └── UpdateDesignerTemplateCommandTest.php │ │ ├── Entity │ │ │ ├── Attribute │ │ │ │ ├── DefaultImageSystemAttributeTest.php │ │ │ │ ├── DefaultLabelSystemAttributeTest.php │ │ │ │ └── TemplateSystemAttributeTest.php │ │ │ ├── TemplateElement │ │ │ │ ├── AttributeTemplateElementTest.php │ │ │ │ └── UiTemplateElementTest.php │ │ │ └── TemplateTest.php │ │ ├── Event │ │ │ ├── Group │ │ │ │ └── TemplateGroupCreatedEventTest.php │ │ │ ├── TemplateElementAddedEventTest.php │ │ │ ├── TemplateElementChangedEventTest.php │ │ │ ├── TemplateElementRemovedEventTest.php │ │ │ ├── TemplateGroupChangedEventTest.php │ │ │ ├── TemplateImageAddedEventTest.php │ │ │ ├── TemplateImageChangedEventTest.php │ │ │ ├── TemplateImageRemovedEventTest.php │ │ │ ├── TemplateNameChangedEventTest.php │ │ │ └── TemplateRemovedEventTest.php │ │ ├── Factory │ │ │ ├── TemplateElementFactoryTest.php │ │ │ └── TemplateFactoryTest.php │ │ └── ValueObject │ │ │ ├── PositionTest.php │ │ │ └── SizeTest.php │ │ └── Infrastructure │ │ ├── Grid │ │ └── Column │ │ │ └── Provider │ │ │ └── Strategy │ │ │ └── TemplateSystemAttributeColumnStrategyTest.php │ │ └── Strategy │ │ └── Relationship │ │ └── TemplateAttributeRelationshipStrategyTest.php ├── event-sourcing │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── migrations │ │ └── Version20180101000000.php │ ├── src │ │ ├── Application │ │ │ └── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ └── ProjectorCompilerPass.php │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeEventSourcingExtension.php │ │ ├── Domain │ │ │ ├── AbstractAggregateRoot.php │ │ │ ├── AbstractEntity.php │ │ │ └── Event │ │ │ │ └── AbstractStringBasedChangedEvent.php │ │ ├── ErgonodeEventSourcingBundle.php │ │ ├── Infrastructure │ │ │ ├── AbstractDeleteEvent.php │ │ │ ├── DomainEventFactoryInterface.php │ │ │ ├── DomainEventProjectorInterface.php │ │ │ ├── DomainEventReprojectorInterface.php │ │ │ ├── DomainEventStorageInterface.php │ │ │ ├── DomainEventStoreInterface.php │ │ │ ├── Envelope │ │ │ │ └── DomainEventEnvelope.php │ │ │ ├── Factory │ │ │ │ └── SimpleDomainEventFactory.php │ │ │ ├── Manager │ │ │ │ ├── AggregateBuilder.php │ │ │ │ ├── AggregateBuilderInterface.php │ │ │ │ ├── AggregateQuery.php │ │ │ │ ├── Decorator │ │ │ │ │ └── EventStoreManagerCacheDecorator.php │ │ │ │ ├── EventStoreManager.php │ │ │ │ ├── EventStoreManagerInterface.php │ │ │ │ └── SnapshotBuilderDecorator.php │ │ │ ├── Middleware │ │ │ │ └── DbalTransactionMiddleware.php │ │ │ ├── Projector │ │ │ │ ├── DomainEventProjector.php │ │ │ │ ├── DomainEventReprojector.php │ │ │ │ └── ProjectorProvider.php │ │ │ ├── Provider │ │ │ │ ├── DomainEventProvider.php │ │ │ │ └── DomainEventProviderInterface.php │ │ │ ├── Snapshot │ │ │ │ ├── AggregateSnapshotInterface.php │ │ │ │ └── DbalAggregateSnapshot.php │ │ │ ├── Storage │ │ │ │ ├── CacheDomainEventStorage.php │ │ │ │ └── DbalDomainEventStorage.php │ │ │ ├── Store │ │ │ │ └── DbalDomainEventStore.php │ │ │ └── Stream │ │ │ │ └── DomainEventStream.php │ │ └── Resources │ │ │ └── config │ │ │ ├── cache.yaml │ │ │ └── services.yml │ └── tests │ │ ├── Domain │ │ └── AbstractAggregateRootTest.php │ │ └── Infrastructure │ │ ├── Envelope │ │ └── DomainEventEnvelopeTest.php │ │ └── Manager │ │ └── EventStoreManagerTest.php ├── exporter-file │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── export-channel-file.feature │ │ └── scheduler.feature │ ├── migrations │ │ └── Version20220119200000.php │ ├── src │ │ ├── Application │ │ │ ├── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ │ └── FileWriterCompilerPass.php │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeExporterFileExtension.php │ │ │ ├── Factory │ │ │ │ └── ExportFileChannelFormFactory.php │ │ │ ├── Form │ │ │ │ └── ExporterFileConfigurationForm.php │ │ │ ├── Model │ │ │ │ └── ExporterFileConfigurationModel.php │ │ │ └── Validator │ │ │ │ ├── SegmentNotChanged.php │ │ │ │ └── SegmentNotChangedValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── CreateFileExportChannelCommand.php │ │ │ │ ├── Export │ │ │ │ │ ├── EndFileExportCommand.php │ │ │ │ │ ├── ProcessAttributeCommand.php │ │ │ │ │ ├── ProcessCategoryCommand.php │ │ │ │ │ ├── ProcessMultimediaCommand.php │ │ │ │ │ ├── ProcessOptionCommand.php │ │ │ │ │ ├── ProcessProductCommand.php │ │ │ │ │ ├── ProcessTemplateCommand.php │ │ │ │ │ └── StartFileExportCommand.php │ │ │ │ └── UpdateFileExportChannelCommand.php │ │ │ ├── Entity │ │ │ │ └── FileExportChannel.php │ │ │ └── Query │ │ │ │ └── ExporterFileQueryInterface.php │ │ ├── ErgonodeExporterFileBundle.php │ │ ├── Infrastructure │ │ │ ├── Builder │ │ │ │ ├── Attribute │ │ │ │ │ ├── ExportDateAttributeBuilder.php │ │ │ │ │ ├── ExportPriceAttributeBuilder.php │ │ │ │ │ ├── ExportTextareaAttributeBuilder.php │ │ │ │ │ └── ExportUnitAttributeBuilder.php │ │ │ │ ├── Command │ │ │ │ │ ├── CreateFileExportChannelCommandBuilder.php │ │ │ │ │ └── UpdateFileExportChannelCommandBuilder.php │ │ │ │ ├── ExportAttributeBuilder.php │ │ │ │ ├── ExportAttributeBuilderInterface.php │ │ │ │ ├── ExportCategoryBuilder.php │ │ │ │ ├── ExportCategoryBuilderInterface.php │ │ │ │ ├── ExportExtensionBuilderInterface.php │ │ │ │ ├── ExportHeaderBuilderInterface.php │ │ │ │ ├── ExportMultimediaBuilder.php │ │ │ │ ├── ExportMultimediaBuilderInterface.php │ │ │ │ ├── ExportOptionBuilder.php │ │ │ │ ├── ExportOptionBuilderInterface.php │ │ │ │ ├── ExportProductBuilder.php │ │ │ │ ├── ExportProductBuilderInterface.php │ │ │ │ ├── ExportTemplateBuilder.php │ │ │ │ ├── ExportTemplateBuilderInterface.php │ │ │ │ ├── ExportTemplateElementBuilder.php │ │ │ │ ├── ExportTemplateElementBuilderInterface.php │ │ │ │ ├── Multimedia │ │ │ │ │ ├── ExportMultimediaNameBuilder.php │ │ │ │ │ └── ExportMultimediaUrlBuilder.php │ │ │ │ ├── Option │ │ │ │ │ └── ExportOptionAttributeBuilder.php │ │ │ │ ├── Product │ │ │ │ │ ├── ExportAssociatedExportProductBuilder.php │ │ │ │ │ ├── ExportProductCategoryBuilder.php │ │ │ │ │ ├── ExportProductImageAttributeBuilder.php │ │ │ │ │ ├── ExportProductMultiSelectAttributeBuilder.php │ │ │ │ │ ├── ExportProductMultimediaAttributeBuilder.php │ │ │ │ │ ├── ExportProductRelationAttributeBuilder.php │ │ │ │ │ ├── ExportProductSelectAttributeBuilder.php │ │ │ │ │ ├── ExportProductSimpleAttributeBuilder.php │ │ │ │ │ ├── ExportProductTemplateBuilder.php │ │ │ │ │ └── ExportVariableExportProductBuilder.php │ │ │ │ └── Template │ │ │ │ │ ├── ExportAttributeTemplateElementBuilder.php │ │ │ │ │ └── ExportLabelTemplateElementBuilder.php │ │ │ ├── DataStructure │ │ │ │ ├── ExportData.php │ │ │ │ └── ExportLineData.php │ │ │ ├── Dictionary │ │ │ │ └── WriterTypeDictionary.php │ │ │ ├── Handler │ │ │ │ ├── CreateFileExportChannelCommandHandler.php │ │ │ │ ├── Export │ │ │ │ │ ├── DeleteExportCommandHandler.php │ │ │ │ │ ├── EndProcessCommandHandler.php │ │ │ │ │ ├── ProcessAttributeCommandHandler.php │ │ │ │ │ ├── ProcessCategoryCommandHandler.php │ │ │ │ │ ├── ProcessMultimediaCommandHandler.php │ │ │ │ │ ├── ProcessOptionCommandHandler.php │ │ │ │ │ ├── ProcessProductCommandHandler.php │ │ │ │ │ ├── ProcessTemplateCommandHandler.php │ │ │ │ │ └── StartProcessCommandHandler.php │ │ │ │ ├── ProcessExportCommandHandler.php │ │ │ │ └── UpdateFileExportChannelCommandHandler.php │ │ │ ├── Persistence │ │ │ │ └── Query │ │ │ │ │ └── DbalExporterFileQuery.php │ │ │ ├── Processor │ │ │ │ ├── AttributeProcessor.php │ │ │ │ ├── CategoryProcessor.php │ │ │ │ ├── MultimediaProcessor.php │ │ │ │ ├── OptionProcessor.php │ │ │ │ ├── ProductProcessor.php │ │ │ │ ├── Step │ │ │ │ │ ├── AttributeExportProcessorStep.php │ │ │ │ │ ├── CategoryExportProcessorStep.php │ │ │ │ │ ├── ExportStepProcessInterface.php │ │ │ │ │ ├── MultimediaExportProcessorStep.php │ │ │ │ │ ├── OptionExportProcessorStep.php │ │ │ │ │ ├── ProductExportProcessStep.php │ │ │ │ │ └── TemplateExportProcessorStep.php │ │ │ │ ├── TemplateElementProcessor.php │ │ │ │ └── TemplateProcessor.php │ │ │ ├── Provider │ │ │ │ ├── WriterProvider.php │ │ │ │ └── WriterTypeProvider.php │ │ │ ├── Strategy │ │ │ │ └── Relationship │ │ │ │ │ ├── LanguageErgonodeChannelRelationshipStrategy.php │ │ │ │ │ └── SegmentChannelRelationshipStrategy.php │ │ │ └── Writer │ │ │ │ ├── CsvWriter.php │ │ │ │ └── WriterInterface.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── messenger.yaml │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── channel.en.yaml │ │ │ └── channel.pl.yaml │ └── tests │ │ ├── Application │ │ ├── Form │ │ │ └── ExportFileChannelFormFactoryTest.php │ │ ├── Model │ │ │ └── ExporterFileConfigurationModelTest.php │ │ └── Validator │ │ │ └── SegmentNotChangedValidatorTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── CreateFileExportChannelCommandTest.php │ │ │ ├── Export │ │ │ │ ├── EndFileExportCommandTest.php │ │ │ │ ├── ProcessAttributeCommandTest.php │ │ │ │ ├── ProcessCategoryCommandTest.php │ │ │ │ ├── ProcessMultimediaCommandTest.php │ │ │ │ ├── ProcessOptionCommandTest.php │ │ │ │ ├── ProcessProductCommandTest.php │ │ │ │ ├── ProcessTemplateCommandTest.php │ │ │ │ └── StartFileExportCommandTest.php │ │ │ └── UpdateFileExportChannelCommandTest.php │ │ └── Entity │ │ │ └── FileExportChannelTest.php │ │ └── Infrastructure │ │ ├── Builder │ │ ├── Command │ │ │ ├── CreateFileExportChannelCommandBuilderTest.php │ │ │ └── UpdateFileExportChannelCommandBuilderTest.php │ │ └── Template │ │ │ ├── ExportAttributeTemplateElementBuilderTest.php │ │ │ └── ExportLabelTemplateElementBuilderTest.php │ │ ├── Dictionary │ │ └── WriterTypeDictionaryTest.php │ │ ├── Handler │ │ ├── CreateFileExportChannelCommandHandlerTest.php │ │ ├── Export │ │ │ └── StartProcessCommandHandlerTest.php │ │ ├── ProcessExportCommandHandlerTest.php │ │ └── UpdateFileExportChannelCommandHandlerTest.php │ │ ├── Processor │ │ ├── AttributeProcessorTest.php │ │ ├── CategoryProcessorTest.php │ │ ├── MultimediaProcessorTest.php │ │ ├── OptionProcessorTest.php │ │ ├── ProductProcessTest.php │ │ ├── TemplateElementProcessorTest.php │ │ └── TemplateProcessorTest.php │ │ └── Provider │ │ ├── WriterProviderTest.php │ │ └── WriterTypeProviderTest.php ├── fixture │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── src │ │ ├── Application │ │ │ ├── Command │ │ │ │ └── ErgonodeFixtureCommand.php │ │ │ └── DependencyInjection │ │ │ │ └── ErgonodeFixtureExtension.php │ │ ├── ErgonodeFixtureBundle.php │ │ ├── Exception │ │ │ └── FixtureException.php │ │ ├── Infrastructure │ │ │ ├── Faker │ │ │ │ ├── AttributeCodeFaker.php │ │ │ │ ├── AttributeDateFormatFaker.php │ │ │ │ ├── AttributeGroupCodeFaker.php │ │ │ │ ├── AttributeGroupIdFaker.php │ │ │ │ ├── AttributeIdFaker.php │ │ │ │ ├── AttributeScopeFaker.php │ │ │ │ ├── AttributeTypeFaker.php │ │ │ │ ├── CategoryCodeFaker.php │ │ │ │ ├── CategoryFaker.php │ │ │ │ ├── CategoryIdFaker.php │ │ │ │ ├── CategoryTreeIdFaker.php │ │ │ │ ├── ColorFaker.php │ │ │ │ ├── CommentIdFaker.php │ │ │ │ ├── ConditionSetIdFaker.php │ │ │ │ ├── CurrencyFaker.php │ │ │ │ ├── FileFaker.php │ │ │ │ ├── LanguageFaker.php │ │ │ │ ├── LanguagePrivilegesFaker.php │ │ │ │ ├── MultimediaIdFaker.php │ │ │ │ ├── OptionKeyFaker.php │ │ │ │ ├── PasswordFaker.php │ │ │ │ ├── PrivilegeFaker.php │ │ │ │ ├── ProductCollectionCodeFaker.php │ │ │ │ ├── ProductCollectionIdFaker.php │ │ │ │ ├── ProductCollectionTypeCodeFaker.php │ │ │ │ ├── ProductCollectionTypeIdFaker.php │ │ │ │ ├── ProductIdFaker.php │ │ │ │ ├── RoleIdFaker.php │ │ │ │ ├── SegmentCodeFaker.php │ │ │ │ ├── SegmentIdFaker.php │ │ │ │ ├── SkuFaker.php │ │ │ │ ├── StatusCodeFaker.php │ │ │ │ ├── StatusIdFaker.php │ │ │ │ ├── StringCollectionValueFaker.php │ │ │ │ ├── StringValueFaker.php │ │ │ │ ├── TemplateCodeFaker.php │ │ │ │ ├── TemplateIdFaker.php │ │ │ │ ├── TranslatableStringFaker.php │ │ │ │ ├── TranslatableStringValueFaker.php │ │ │ │ ├── UnitIdFaker.php │ │ │ │ ├── UserEmailFaker.php │ │ │ │ ├── UserIdFaker.php │ │ │ │ ├── UuidFaker.php │ │ │ │ └── WorkflowIdFaker.php │ │ │ ├── Loader │ │ │ │ └── FixtureLoader.php │ │ │ └── Process │ │ │ │ └── FixtureProcess.php │ │ └── Resources │ │ │ └── config │ │ │ └── services.yml │ └── tests │ │ └── Infrastructure │ │ └── Faker │ │ └── LanguageFakerTest.php ├── grid │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── .gitkeep │ │ └── gridSchema.json │ ├── src │ │ ├── AbstractDbalDataSet.php │ │ ├── Application │ │ │ ├── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ │ └── ColumnRendererCompilerPass.php │ │ │ │ └── ErgonodeGridExtension.php │ │ │ └── Request │ │ │ │ └── ParamConverter │ │ │ │ └── GridConfigurationParamConverter.php │ │ ├── Column │ │ │ ├── AbstractColumn.php │ │ │ ├── BoolColumn.php │ │ │ ├── CheckColumn.php │ │ │ ├── DateColumn.php │ │ │ ├── DateTimeColumn.php │ │ │ ├── Exception │ │ │ │ └── UnsupportedColumnException.php │ │ │ ├── FileColumn.php │ │ │ ├── GalleryColumn.php │ │ │ ├── IdColumn.php │ │ │ ├── ImageColumn.php │ │ │ ├── IntegerColumn.php │ │ │ ├── LabelColumn.php │ │ │ ├── LinkColumn.php │ │ │ ├── MultiSelectColumn.php │ │ │ ├── NumericColumn.php │ │ │ ├── Renderer │ │ │ │ ├── BoolColumnRenderer.php │ │ │ │ ├── CheckColumnRenderer.php │ │ │ │ ├── ColumnRendererInterface.php │ │ │ │ ├── DateColumnRenderer.php │ │ │ │ ├── DateTimeColumnRenderer.php │ │ │ │ ├── FileColumnRenderer.php │ │ │ │ ├── GalleryColumnRenderer.php │ │ │ │ ├── ImageColumnRenderer.php │ │ │ │ ├── IntegerColumnRenderer.php │ │ │ │ ├── LabelColumnRenderer.php │ │ │ │ ├── LinkColumnRenderer.php │ │ │ │ ├── MultiSelectColumnRenderer.php │ │ │ │ ├── NumericColumnRenderer.php │ │ │ │ ├── SelectColumnRenderer.php │ │ │ │ ├── TextColumnRenderer.php │ │ │ │ ├── TextareaColumnRenderer.php │ │ │ │ └── TranslatableColumnRenderer.php │ │ │ ├── SelectColumn.php │ │ │ ├── TextAreaColumn.php │ │ │ ├── TextColumn.php │ │ │ └── TranslatableColumn.php │ │ ├── ColumnInterface.php │ │ ├── DataSetInterface.php │ │ ├── DbalDataSet.php │ │ ├── DbalDataSetQueryInterface.php │ │ ├── ErgonodeGridBundle.php │ │ ├── Factory │ │ │ └── DbalDataSetFactory.php │ │ ├── Filter │ │ │ ├── Builder │ │ │ │ ├── AbstractFilterBuilder.php │ │ │ │ ├── DateFilterBuilder.php │ │ │ │ ├── DateTimeFilterBuilder.php │ │ │ │ ├── FilterBuilderInterface.php │ │ │ │ ├── HasFilterBuilder.php │ │ │ │ ├── InFilterBuilder.php │ │ │ │ ├── LabelFilterBuilder.php │ │ │ │ ├── MultiselectFilterBuilder.php │ │ │ │ ├── NumericFilterBuilder.php │ │ │ │ └── TextFilterBuilder.php │ │ │ ├── DateFilter.php │ │ │ ├── DateTimeFilter.php │ │ │ ├── FilterBuilderProvider.php │ │ │ ├── HasFilter.php │ │ │ ├── InFilter.php │ │ │ ├── LabelFilter.php │ │ │ ├── MultiSelectFilter.php │ │ │ ├── NumericFilter.php │ │ │ ├── Option │ │ │ │ ├── FilterOption.php │ │ │ │ ├── FilterOptionInterface.php │ │ │ │ └── LabelFilterOption.php │ │ │ └── TextFilter.php │ │ ├── FilterGridConfiguration.php │ │ ├── FilterInterface.php │ │ ├── Grid.php │ │ ├── GridBuilderInterface.php │ │ ├── GridConfigurationInterface.php │ │ ├── GridInterface.php │ │ ├── PostGridConfiguration.php │ │ ├── Renderer │ │ │ ├── ColumnRenderer.php │ │ │ ├── FilterRenderer.php │ │ │ ├── GridRenderer.php │ │ │ ├── InfoRender.php │ │ │ ├── RowRenderer.php │ │ │ └── RowRendererInterface.php │ │ ├── Request │ │ │ ├── FilterValue.php │ │ │ ├── FilterValueCollection.php │ │ │ └── RequestColumn.php │ │ ├── RequestGridConfiguration.php │ │ └── Resources │ │ │ └── config │ │ │ └── services.yaml │ └── tests │ │ ├── AbstractGridTestCase.php │ │ ├── Column │ │ ├── BoolColumnTest.php │ │ ├── CheckColumnTest.php │ │ ├── DateColumnTest.php │ │ ├── ImageColumnTest.php │ │ ├── IntegerColumnTest.php │ │ ├── LabelColumnTest.php │ │ ├── MultiSelectColumnTest.php │ │ ├── NumericColumnTest.php │ │ ├── SelectColumnTest.php │ │ ├── TextAreaColumnTest.php │ │ ├── TextColumnTest.php │ │ └── TranslatableColumnTest.php │ │ ├── Filter │ │ ├── FilterBuilderProviderTest.php │ │ ├── InFilterTest.php │ │ ├── MultiSelectFilterTest.php │ │ └── TextFilterTest.php │ │ └── Request │ │ └── FilterCollectionTest.php ├── importer-ergonode-1 │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── ergonode-import-multimedia.feature │ │ ├── ergonode-import.feature │ │ ├── ergonode-multimedia-import.zip │ │ ├── ergonode-test-error.zip │ │ ├── ergonode-test.zip │ │ ├── new-test.jpg │ │ ├── test.jpg │ │ └── test.pdf │ ├── migrations │ │ └── Version20211129110000.php │ ├── src │ │ ├── Application │ │ │ ├── DependencyInjection │ │ │ │ └── ErgonodeImporterErgonode1Extension.php │ │ │ ├── Factory │ │ │ │ └── ImporterErgonodeSourceFormFactory.php │ │ │ ├── Form │ │ │ │ ├── DownloadHeaderType.php │ │ │ │ └── ImporterErgonodeConfigurationForm.php │ │ │ └── Model │ │ │ │ ├── DownloadHeaderModel.php │ │ │ │ └── ImporterErgonodeConfigurationModel.php │ │ ├── Domain │ │ │ ├── Builder │ │ │ │ ├── ErgonodeZipCreateSourceCommandBuilder.php │ │ │ │ └── ErgonodeZipUpdateSourceCommandBuilder.php │ │ │ ├── Command │ │ │ │ ├── CreateErgonodeZipSourceCommand.php │ │ │ │ ├── Import │ │ │ │ │ └── ImportAttributeCommand.php │ │ │ │ └── UpdateErgonodeZipSourceCommand.php │ │ │ └── Entity │ │ │ │ └── ErgonodeZipSource.php │ │ ├── ErgonodeImporterErgonode1Bundle.php │ │ ├── Infrastructure │ │ │ ├── Factory │ │ │ │ ├── Attribute │ │ │ │ │ ├── ImportAttributeCommandFactoryInterface.php │ │ │ │ │ ├── ImportDateAttributeCommandFactory.php │ │ │ │ │ ├── ImportFileAttributeCommandFactory.php │ │ │ │ │ ├── ImportGalleryAttributeCommandFactory.php │ │ │ │ │ ├── ImportImageAttributeCommandFactory.php │ │ │ │ │ ├── ImportMultiSelectAttributeCommandFactory.php │ │ │ │ │ ├── ImportNumericAttributeCommandFactory.php │ │ │ │ │ ├── ImportPriceAttributeCommandFactory.php │ │ │ │ │ ├── ImportProductRelationAttributeCommandFactory.php │ │ │ │ │ ├── ImportSelectAttributeCommandFactory.php │ │ │ │ │ ├── ImportTextImportAttributeCommandFactory.php │ │ │ │ │ ├── ImportTextareaAttributeCommandFactory.php │ │ │ │ │ └── ImportUnitAttributeCommandFactory.php │ │ │ │ └── Product │ │ │ │ │ ├── GroupingProductCommandFactory.php │ │ │ │ │ ├── ProductCommandFactoryInterface.php │ │ │ │ │ ├── SimpleProductCommandFactory.php │ │ │ │ │ └── VariableProductCommandFactory.php │ │ │ ├── Handler │ │ │ │ ├── CreateErgonodeZipSourceCommandHandler.php │ │ │ │ ├── Import │ │ │ │ │ └── DeleteImportCommandHandler.php │ │ │ │ └── UpdateErgonodeZipSourceCommandHandler.php │ │ │ ├── Model │ │ │ │ ├── AbstractModel.php │ │ │ │ ├── AttributeModel.php │ │ │ │ ├── CategoryModel.php │ │ │ │ ├── MultimediaModel.php │ │ │ │ ├── OptionModel.php │ │ │ │ ├── ProductModel.php │ │ │ │ ├── TemplateElementModel.php │ │ │ │ └── TemplateModel.php │ │ │ ├── Processor │ │ │ │ ├── ErgonodeImportProcess.php │ │ │ │ ├── ErgonodeProcessorStepInterface.php │ │ │ │ └── Step │ │ │ │ │ ├── ErgonodeAttributesProcessorStep.php │ │ │ │ │ ├── ErgonodeCategoriesProcessorStep.php │ │ │ │ │ ├── ErgonodeGroupingProductProcessorStep.php │ │ │ │ │ ├── ErgonodeMultimediaProcessorStep.php │ │ │ │ │ ├── ErgonodeOptionsProcessorStep.php │ │ │ │ │ ├── ErgonodeSimpleProductProcessorStep.php │ │ │ │ │ ├── ErgonodeTemplateProcessorStep.php │ │ │ │ │ └── ErgonodeVariableProductProcessorStep.php │ │ │ ├── Reader │ │ │ │ ├── AbstractErgonodeReader.php │ │ │ │ ├── ErgonodeAttributeReader.php │ │ │ │ ├── ErgonodeCategoryReader.php │ │ │ │ ├── ErgonodeMultimediaReader.php │ │ │ │ ├── ErgonodeOptionReader.php │ │ │ │ ├── ErgonodeProductReader.php │ │ │ │ ├── ErgonodeTemplateElementReader.php │ │ │ │ ├── ErgonodeTemplateReader.php │ │ │ │ ├── ErgonodeZipExtractor.php │ │ │ │ └── Exception │ │ │ │ │ ├── ErgonodeZipExtractorException.php │ │ │ │ │ ├── MissingFileHeadersException.php │ │ │ │ │ └── ReaderFileProcessException.php │ │ │ ├── Resolver │ │ │ │ ├── AttributeCommandResolver.php │ │ │ │ └── ProductCommandResolver.php │ │ │ └── Source │ │ │ │ └── ErgonodeImportSourceService.php │ │ └── Resources │ │ │ ├── config │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── source.en.yaml │ │ │ └── source.pl.yaml │ └── tests │ │ └── Domain │ │ ├── Command │ │ ├── CreateErgonodeZipSourceCommandTest.php │ │ └── UpdateErgonodeZipSourceCommandTest.php │ │ └── Entity │ │ └── ErgonodeZipSourceTest.php ├── importer │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── notification.feature │ │ └── source.feature │ ├── migrations │ │ ├── Version20180617083829.php │ │ ├── Version20180618134343.php │ │ ├── Version20201027131500.php │ │ ├── Version20201112102500.php │ │ ├── Version20210105101100.php │ │ ├── Version20210120090000.php │ │ ├── Version20210217083000.php │ │ └── Version20210325094500.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── Import │ │ │ │ │ ├── ImportDeleteAction.php │ │ │ │ │ ├── ImportErrorGridAction.php │ │ │ │ │ ├── ImportGridAction.php │ │ │ │ │ ├── ImportShowAction.php │ │ │ │ │ └── ImportUploadAction.php │ │ │ │ │ ├── Notification │ │ │ │ │ └── ImportNotificationAction.php │ │ │ │ │ └── Source │ │ │ │ │ ├── SourceCreateAction.php │ │ │ │ │ ├── SourceDeleteAction.php │ │ │ │ │ ├── SourceGridAction.php │ │ │ │ │ ├── SourceReadAction.php │ │ │ │ │ ├── SourceTypeConfigurationAction.php │ │ │ │ │ ├── SourceTypeDictionaryAction.php │ │ │ │ │ └── SourceUpdatedAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ │ ├── CreateSourceCommandBuilderCompilerPass.php │ │ │ │ │ ├── ServiceCompilerPass.php │ │ │ │ │ ├── ServiceImportCompilerPass.php │ │ │ │ │ ├── SourceFormFactoryCompilerPass.php │ │ │ │ │ ├── SourceTypeCompilerPass.php │ │ │ │ │ └── UpdateSourceCommandBuilderCompilerPass.php │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeImporterExtension.php │ │ │ ├── Form │ │ │ │ ├── CreateSourceForm.php │ │ │ │ ├── SourceTypeForm.php │ │ │ │ ├── Type │ │ │ │ │ └── ColumnType.php │ │ │ │ └── UploadForm.php │ │ │ ├── Model │ │ │ │ └── Form │ │ │ │ │ ├── ConfigurationModel.php │ │ │ │ │ ├── SourceTypeFormModel.php │ │ │ │ │ ├── Type │ │ │ │ │ ├── ColumnModel.php │ │ │ │ │ └── SourceTypeType.php │ │ │ │ │ └── UploadModel.php │ │ │ ├── Provider │ │ │ │ ├── CreateSourceCommandBuilderInterface.php │ │ │ │ ├── CreateSourceCommandBuilderProvider.php │ │ │ │ ├── SourceFormFactoryInterface.php │ │ │ │ ├── SourceFormFactoryProvider.php │ │ │ │ ├── UpdateSourceCommandBuilderInterface.php │ │ │ │ └── UpdateSourceCommandBuilderProvider.php │ │ │ ├── Request │ │ │ │ └── ParamConverter │ │ │ │ │ ├── ImportParamConverter.php │ │ │ │ │ └── SourceParamConverter.php │ │ │ └── Service │ │ │ │ └── Upload │ │ │ │ ├── UploadService.php │ │ │ │ └── UploadServiceInterface.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── CreateSourceCommandInterface.php │ │ │ │ ├── DeleteSourceCommand.php │ │ │ │ ├── Import │ │ │ │ │ ├── Attribute │ │ │ │ │ │ ├── AbstractImportAttributeCommand.php │ │ │ │ │ │ ├── ImportDateAttributeCommand.php │ │ │ │ │ │ ├── ImportFileAttributeCommand.php │ │ │ │ │ │ ├── ImportGalleryAttributeCommand.php │ │ │ │ │ │ ├── ImportImageAttributeCommand.php │ │ │ │ │ │ ├── ImportMultiSelectAttributeCommand.php │ │ │ │ │ │ ├── ImportNumericAttributeCommand.php │ │ │ │ │ │ ├── ImportPriceAttributeCommand.php │ │ │ │ │ │ ├── ImportProductAttributesValueCommand.php │ │ │ │ │ │ ├── ImportProductRelationAttributeCommand.php │ │ │ │ │ │ ├── ImportSelectAttributeCommand.php │ │ │ │ │ │ ├── ImportTextAttributeCommand.php │ │ │ │ │ │ ├── ImportTextareaAttributeCommand.php │ │ │ │ │ │ └── ImportUnitAttributeCommand.php │ │ │ │ │ ├── DeleteImportCommand.php │ │ │ │ │ ├── EndImportCommand.php │ │ │ │ │ ├── ImportCategoryCommand.php │ │ │ │ │ ├── ImportGroupingProductCommand.php │ │ │ │ │ ├── ImportMultimediaFromWebCommand.php │ │ │ │ │ ├── ImportOptionCommand.php │ │ │ │ │ ├── ImportSimpleProductCommand.php │ │ │ │ │ ├── ImportTemplateCommand.php │ │ │ │ │ ├── ImportVariableProductCommand.php │ │ │ │ │ ├── StartImportCommand.php │ │ │ │ │ ├── StopImportCommand.php │ │ │ │ │ └── UploadFileCommand.php │ │ │ │ ├── ImporterCommandInterface.php │ │ │ │ └── UpdateSourceCommandInterface.php │ │ │ ├── Entity │ │ │ │ ├── Import.php │ │ │ │ └── Source │ │ │ │ │ ├── AbstractSource.php │ │ │ │ │ └── SourceConfigurationInterface.php │ │ │ ├── Factory │ │ │ │ └── MultimediaFileFactory.php │ │ │ ├── Notification │ │ │ │ ├── EndImportNotification.php │ │ │ │ └── StartImportNotification.php │ │ │ ├── Query │ │ │ │ ├── ImportErrorGridQueryInterface.php │ │ │ │ ├── ImportGridQueryInterface.php │ │ │ │ ├── ImportQueryInterface.php │ │ │ │ ├── SourceGridQueryInterface.php │ │ │ │ └── SourceQueryInterface.php │ │ │ ├── Repository │ │ │ │ ├── ImportRepositoryInterface.php │ │ │ │ └── SourceRepositoryInterface.php │ │ │ └── ValueObject │ │ │ │ ├── ImportStatus.php │ │ │ │ └── Progress.php │ │ ├── ErgonodeImporterBundle.php │ │ ├── Infrastructure │ │ │ ├── Action │ │ │ │ ├── AbstractAttributeImportAction.php │ │ │ │ ├── AbstractProductImportAction.php │ │ │ │ ├── CategoryImportAction.php │ │ │ │ ├── DateAttributeImportAction.php │ │ │ │ ├── FileAttributeImportAction.php │ │ │ │ ├── GalleryAttributeImportAction.php │ │ │ │ ├── GroupingProductImportAction.php │ │ │ │ ├── ImageAttributeImportAction.php │ │ │ │ ├── ImportProductAttributesAction.php │ │ │ │ ├── MultiSelectAttributeImportAction.php │ │ │ │ ├── MultimediaFromUrlImportAction.php │ │ │ │ ├── NumericAttributeImportAction.php │ │ │ │ ├── OptionImportAction.php │ │ │ │ ├── PriceAttributeImportAction.php │ │ │ │ ├── Process │ │ │ │ │ ├── Product │ │ │ │ │ │ ├── ImportProductAttributeBuilder.php │ │ │ │ │ │ └── Strategy │ │ │ │ │ │ │ ├── ImportProductAttributeStrategyInterface.php │ │ │ │ │ │ │ ├── ImportProductDateAttributeStrategy.php │ │ │ │ │ │ │ ├── ImportProductFileAttributeStrategy.php │ │ │ │ │ │ │ ├── ImportProductGalleryAttributeStrategy.php │ │ │ │ │ │ │ ├── ImportProductImageAttributeStrategy.php │ │ │ │ │ │ │ ├── ImportProductMultiSelectAttributeStrategy.php │ │ │ │ │ │ │ ├── ImportProductNumericAttributeStrategy.php │ │ │ │ │ │ │ ├── ImportProductPriceAttributeStrategy.php │ │ │ │ │ │ │ ├── ImportProductRelationAttributeStrategy.php │ │ │ │ │ │ │ └── ImportProductSelectAttributeStrategy.php │ │ │ │ │ └── Template │ │ │ │ │ │ ├── Strategy │ │ │ │ │ │ ├── AttributeTemplateElementBuilderStrategy.php │ │ │ │ │ │ └── LabelTemplateElementBuilderStrategy.php │ │ │ │ │ │ ├── TemplateElementBuilderInterface.php │ │ │ │ │ │ └── TemplateElementBuilderProvider.php │ │ │ │ ├── ProductRelationAttributeImportAction.php │ │ │ │ ├── SelectAttributeImportAction.php │ │ │ │ ├── SimpleProductImportAction.php │ │ │ │ ├── TemplateImportAction.php │ │ │ │ ├── TextAttributeImportAction.php │ │ │ │ ├── TextareaAttributeImportAction.php │ │ │ │ ├── UnitAttributeImportAction.php │ │ │ │ └── VariableProductImportAction.php │ │ │ ├── Dictionary │ │ │ │ └── ImportStatusDictionary.php │ │ │ ├── Exception │ │ │ │ ├── ConverterException.php │ │ │ │ ├── ImportBindingAttributeNotFoundException.php │ │ │ │ ├── ImportException.php │ │ │ │ ├── ImportIncorrectBindingAttributeException.php │ │ │ │ ├── ImportMissingOptionException.php │ │ │ │ ├── ImportRelatedProductIncorrectTypeException.php │ │ │ │ ├── ImportRelatedProductNotFoundException.php │ │ │ │ └── MaxImportedRelationsExceededException.php │ │ │ ├── Filter │ │ │ │ ├── AttributeImportFilter.php │ │ │ │ └── AttributeValidationImportFilter.php │ │ │ ├── Grid │ │ │ │ ├── ImportErrorsGridBuilder.php │ │ │ │ ├── ImportGridBuilder.php │ │ │ │ └── SourceGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── Attribute │ │ │ │ │ ├── AbstractImportAttributeCommandHandler.php │ │ │ │ │ ├── ImportDateAttributeCommandHandler.php │ │ │ │ │ ├── ImportFileAttributeCommandHandler.php │ │ │ │ │ ├── ImportGalleryAttributeCommandHandler.php │ │ │ │ │ ├── ImportImageAttributeCommandHandler.php │ │ │ │ │ ├── ImportMultiSelectAttributeCommandHandler.php │ │ │ │ │ ├── ImportNumericAttributeCommandHandler.php │ │ │ │ │ ├── ImportPriceAttributeCommandHandler.php │ │ │ │ │ ├── ImportProductAttributesValueCommandHandler.php │ │ │ │ │ ├── ImportProductRelationAttributeCommandHandler.php │ │ │ │ │ ├── ImportSelectAttributeCommandHandler.php │ │ │ │ │ ├── ImportTextAttributeCommandHandler.php │ │ │ │ │ ├── ImportTextareaAttributeCommandHandler.php │ │ │ │ │ └── ImportUnitAttributeCommandHandler.php │ │ │ │ ├── DeleteSourceCommandHandler.php │ │ │ │ ├── Import │ │ │ │ │ ├── DeleteImportCommandHandler.php │ │ │ │ │ ├── EndImportCommandHandler.php │ │ │ │ │ ├── StartImportCommandHandler.php │ │ │ │ │ ├── StopImportCommandHandler.php │ │ │ │ │ └── UploadFileCommandHandler.php │ │ │ │ ├── ImportCategoryCommandHandler.php │ │ │ │ ├── ImportGroupingProductCommandHandler.php │ │ │ │ ├── ImportOptionCommandHandler.php │ │ │ │ ├── ImportSimpleProductCommandHandler.php │ │ │ │ ├── ImportTemplateCommandHandler.php │ │ │ │ ├── ImportVariableProductCommandHandler.php │ │ │ │ └── Multimedia │ │ │ │ │ └── ImportMultimediaFromUrlCommandHandler.php │ │ │ ├── Persistence │ │ │ │ ├── Query │ │ │ │ │ ├── DbalImportErrorGridQuery.php │ │ │ │ │ ├── DbalImportGridQuery.php │ │ │ │ │ ├── DbalImportQuery.php │ │ │ │ │ ├── DbalSourceGridQuery.php │ │ │ │ │ └── DbalSourceQuery.php │ │ │ │ └── Repository │ │ │ │ │ ├── DbalImportRepository.php │ │ │ │ │ ├── DbalSourceRepository.php │ │ │ │ │ ├── Factory │ │ │ │ │ ├── DbalImportFactory.php │ │ │ │ │ └── DbalSourceFactory.php │ │ │ │ │ └── Mapper │ │ │ │ │ ├── DbalImportMapper.php │ │ │ │ │ └── DbalSourceMapper.php │ │ │ ├── Processor │ │ │ │ └── SourceImportProcessorInterface.php │ │ │ ├── Provider │ │ │ │ ├── ImportProcessorProvider.php │ │ │ │ ├── ImportSourceInterface.php │ │ │ │ ├── SourceServiceProvider.php │ │ │ │ ├── SourceTypeDictionaryProvider.php │ │ │ │ └── SourceTypeProvider.php │ │ │ ├── Resolver │ │ │ │ └── AttributeImportResolver.php │ │ │ ├── Service │ │ │ │ └── ImporterFileRemover.php │ │ │ ├── Strategy │ │ │ │ └── Relationship │ │ │ │ │ ├── ActiveImportRelationshipStrategy.php │ │ │ │ │ └── SourceActiveImportRelationshipStrategy.php │ │ │ └── Validator │ │ │ │ ├── AttributeImportValidator.php │ │ │ │ └── Strategy │ │ │ │ ├── AttributeImportResolverInterface.php │ │ │ │ ├── AttributeImportValidatorInterface.php │ │ │ │ ├── ProductRelationAttributeImportResolver.php │ │ │ │ └── ProductRelationAttributeImportValidator.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── flysystem.yaml │ │ │ ├── messenger.yaml │ │ │ ├── monolog.yaml │ │ │ ├── routes.yml │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── import.en.yaml │ │ │ ├── import.pl.yaml │ │ │ ├── log.en.yaml │ │ │ └── log.pl.yaml │ └── tests │ │ ├── Domain │ │ ├── Command │ │ │ ├── DeleteSourceCommandTest.php │ │ │ └── Import │ │ │ │ ├── DeleteImportCommandTest.php │ │ │ │ ├── ImportCategoryCommandTest.php │ │ │ │ ├── ImportGroupingProductCommandTest.php │ │ │ │ ├── ImportOptionCommandTest.php │ │ │ │ ├── ImportSimpleProductCommandTest.php │ │ │ │ ├── ImportTemplateCommandTest.php │ │ │ │ └── ImportVariableProductCommandTest.php │ │ ├── Entity │ │ │ └── ImportTest.php │ │ └── ValueObject │ │ │ └── ImportStatusTest.php │ │ └── Infrastructure │ │ ├── Action │ │ └── Process │ │ │ └── Product │ │ │ └── Resolver │ │ │ ├── ImportProductDateAttributeStrategyTest.php │ │ │ ├── ImportProductImageAttributeStrategyTest.php │ │ │ ├── ImportProductMultiSelectAttributeStrategyTest.php │ │ │ ├── ImportProductNumericAttributeStrategyTest.php │ │ │ ├── ImportProductPriceAttributeStrategyTest.php │ │ │ └── ImportProductSelectAttributeStrategyTest.php │ │ ├── Exception │ │ └── ImportExceptionTest.php │ │ └── Grid │ │ └── ImportErrorsGridBuilderTest.php ├── mailer │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── src │ │ ├── Application │ │ │ ├── Command │ │ │ │ └── TestMessageCommand.php │ │ │ └── DependencyInjection │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeMailerExtension.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── MailerCommandInterface.php │ │ │ │ └── SendMailCommand.php │ │ │ ├── Mail.php │ │ │ ├── MailInterface.php │ │ │ ├── Recipient.php │ │ │ ├── Sender.php │ │ │ ├── Template.php │ │ │ └── TestMail.php │ │ ├── ErgonodeMailerBundle.php │ │ ├── Infrastructure │ │ │ ├── Handler │ │ │ │ └── SendMailCommandHandler.php │ │ │ └── Sender │ │ │ │ ├── MailerSender.php │ │ │ │ ├── MailerStrategyInterface.php │ │ │ │ └── Strategy │ │ │ │ └── SymfonyMailerStrategy.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── messenger.yaml │ │ │ ├── serialization.yml │ │ │ └── services.yml │ │ │ ├── translations │ │ │ ├── mailer.en.yaml │ │ │ └── mailer.pl.yaml │ │ │ └── views │ │ │ ├── layout │ │ │ └── default.html.twig │ │ │ └── message │ │ │ └── test.html.twig │ └── tests │ │ ├── Domain │ │ ├── MailTest.php │ │ ├── RecipientTest.php │ │ ├── SenderTest.php │ │ └── TemplateTest.php │ │ └── Infrastructure │ │ ├── Handler │ │ └── SendMailCommandHandlerTest.php │ │ └── Sender │ │ ├── MailerSenderTest.php │ │ └── Strategy │ │ └── SymfonyMailerStrategyTest.php ├── migration │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── src │ │ ├── AbstractErgonodeMigration.php │ │ ├── Command │ │ │ ├── GenerateMigrationCommand.php │ │ │ └── MigrateMigrationCommand.php │ │ ├── DependencyInjection │ │ │ └── ErgonodeMigrationExtension.php │ │ ├── ErgonodeMigrationBundle.php │ │ ├── Provider │ │ │ ├── MigrationConfigurationProvider.php │ │ │ ├── MigrationDirectoryProvider.php │ │ │ └── MigrationDirectoryProviderInterface.php │ │ └── Resources │ │ │ ├── config │ │ │ └── services.yml │ │ │ └── migration.tpl │ └── tests │ │ └── .gitignore ├── multimedia │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── multimedia-grid.feature │ │ ├── multimedia-metadata.feature │ │ ├── multimedia-privilege.feature │ │ ├── multimedia-relation.feature │ │ ├── multimedia-test-empty-image.png │ │ ├── multimedia-test-image.abc │ │ ├── multimedia-test-image.png │ │ └── multimedia.feature │ ├── migrations │ │ ├── Version20180807065948.php │ │ ├── Version20210105100500.php │ │ ├── Version20210811100500.php │ │ ├── Version20210927105000.php │ │ └── Version20211103071053.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── Dictionary │ │ │ │ │ └── ImageFormatReadAction.php │ │ │ │ │ └── Multimedia │ │ │ │ │ ├── DeleteMultimediaAction.php │ │ │ │ │ ├── DownloadMultimediaAction.php │ │ │ │ │ ├── DownloadThumbnailMultimediaAction.php │ │ │ │ │ ├── GetMultimediaAction.php │ │ │ │ │ ├── GetMultimediaGridAction.php │ │ │ │ │ ├── GetMultimediaMetadataAction.php │ │ │ │ │ ├── GetMultimediaRelationAction.php │ │ │ │ │ ├── UpdateMultimediaAction.php │ │ │ │ │ └── UploadMultimediaAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ │ ├── MetadataReaderCompilerPass.php │ │ │ │ │ ├── MultimediaRelationCompilerPass.php │ │ │ │ │ ├── MultimediaStorageCompilerPass.php │ │ │ │ │ └── ThumbnailStorageCompilerPass.php │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeMultimediaExtension.php │ │ │ ├── Form │ │ │ │ ├── MultimediaForm.php │ │ │ │ └── MultimediaUploadForm.php │ │ │ ├── Model │ │ │ │ ├── MultimediaModel.php │ │ │ │ └── MultimediaUploadModel.php │ │ │ ├── Service │ │ │ │ ├── DuplicateFilenameSuffixGeneratingService.php │ │ │ │ └── SuffixGeneratingServiceInterface.php │ │ │ └── Validator │ │ │ │ ├── MultimediaExists.php │ │ │ │ ├── MultimediaExistsValidator.php │ │ │ │ ├── MultimediaExtension.php │ │ │ │ ├── MultimediaExtensionValidator.php │ │ │ │ ├── MultimediaFileExists.php │ │ │ │ ├── MultimediaFileExistsValidator.php │ │ │ │ ├── MultimediaName.php │ │ │ │ ├── MultimediaNameExists.php │ │ │ │ ├── MultimediaNameExistsValidator.php │ │ │ │ ├── MultimediaNameValidator.php │ │ │ │ ├── MultimediaType.php │ │ │ │ ├── MultimediaTypeValidator.php │ │ │ │ ├── MultimediaUploadName.php │ │ │ │ └── MultimediaUploadNameValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── AddMultimediaCommand.php │ │ │ │ ├── DeleteMultimediaCommand.php │ │ │ │ ├── MultimediaCommandInterface.php │ │ │ │ └── UpdateMultimediaCommand.php │ │ │ ├── Entity │ │ │ │ ├── AbstractMultimedia.php │ │ │ │ └── Multimedia.php │ │ │ ├── Event │ │ │ │ ├── MultimediaAltChangedEvent.php │ │ │ │ ├── MultimediaCreatedEvent.php │ │ │ │ ├── MultimediaDeletedEvent.php │ │ │ │ └── MultimediaNameChangedEvent.php │ │ │ ├── Query │ │ │ │ ├── MultimediaGridQueryInterface.php │ │ │ │ ├── MultimediaNameQueryInterface.php │ │ │ │ ├── MultimediaQueryInterface.php │ │ │ │ └── MultimediaTypeQueryInterface.php │ │ │ ├── Repository │ │ │ │ └── MultimediaRepositoryInterface.php │ │ │ └── ValueObject │ │ │ │ └── Hash.php │ │ ├── ErgonodeMultimediaBundle.php │ │ ├── Infrastructure │ │ │ ├── Grid │ │ │ │ └── MultimediaGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── AddMultimediaCommandHandler.php │ │ │ │ ├── DeleteMultimediaCommandHandler.php │ │ │ │ ├── Event │ │ │ │ │ └── DeleteThumbnailStorageHandler.php │ │ │ │ └── UpdateMultimediaCommandHandler.php │ │ │ ├── Persistence │ │ │ │ ├── Projector │ │ │ │ │ ├── DbalMultimediaCreatedEventProjector.php │ │ │ │ │ ├── DbalMultimediaDeletedEventProjector.php │ │ │ │ │ └── DbalMultimediaNameChangedEventProjector.php │ │ │ │ ├── Query │ │ │ │ │ ├── DbalMultimediaGridQuery.php │ │ │ │ │ ├── DbalMultimediaNameQuery.php │ │ │ │ │ ├── DbalMultimediaQuery.php │ │ │ │ │ └── DbalMultimediaTypeQuery.php │ │ │ │ └── Repository │ │ │ │ │ └── EventStoreMultimediaRepository.php │ │ │ ├── Provider │ │ │ │ ├── MultimediaExtensionProvider.php │ │ │ │ ├── MultimediaRelationInterface.php │ │ │ │ └── MultimediaRelationProvider.php │ │ │ └── Service │ │ │ │ ├── CRCCalculationService.php │ │ │ │ ├── HashCalculationServiceInterface.php │ │ │ │ ├── Metadata │ │ │ │ ├── MetadataReader.php │ │ │ │ ├── MetadataReaderInterface.php │ │ │ │ ├── MetadataService.php │ │ │ │ └── Reader │ │ │ │ │ ├── DefaultMetadataReader.php │ │ │ │ │ └── XmpMetadataReader.php │ │ │ │ ├── SHACalculationService.php │ │ │ │ └── Thumbnail │ │ │ │ ├── Strategy │ │ │ │ └── DefaultThumbnailGenerationStrategy.php │ │ │ │ ├── ThumbnailGenerationStrategyInterface.php │ │ │ │ ├── ThumbnailGenerationStrategyProvider.php │ │ │ │ └── ThumbnailGenerator.php │ │ └── Resources │ │ │ └── config │ │ │ ├── flysystem.yaml │ │ │ ├── routes.yml │ │ │ └── services.yml │ └── tests │ │ ├── Application │ │ ├── Form │ │ │ └── MultimediaUploadFormTest.php │ │ ├── Service │ │ │ └── DuplicateFilenameSuffixGeneratingServiceTest.php │ │ └── Validator │ │ │ ├── MultimediaExistsValidatorTest.php │ │ │ ├── MultimediaExtensionValidatorTest.php │ │ │ ├── MultimediaNameExistsValidatorTest.php │ │ │ ├── MultimediaTypeValidatorTest.php │ │ │ └── MultimediaUploadNameValidatorTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── AddMultimediaCommandTest.php │ │ │ ├── DeleteMultimediaCommandTest.php │ │ │ └── UpdateMultimediaCommandTest.php │ │ ├── Entity │ │ │ └── AbstractMultimediaTest.php │ │ ├── Event │ │ │ ├── MultimediaAltChangedEventTest.php │ │ │ ├── MultimediaCreatedEventTest.php │ │ │ ├── MultimediaDeletedEventTest.php │ │ │ └── MultimediaNameChangedEventTest.php │ │ └── ValueObject │ │ │ └── HashTest.php │ │ └── Infrastructure │ │ ├── Grid │ │ └── MultimediaGridTest.php │ │ ├── Handler │ │ ├── DeleteMultimediaCommandHandlerTest.php │ │ └── Event │ │ │ └── DeleteThumbnailStorageHandlerTest.php │ │ ├── Provider │ │ ├── MultimediaExtensionProviderTest.php │ │ └── MultimediaRelationProviderTest.php │ │ └── Service │ │ └── Thumbnail │ │ ├── Strategy │ │ └── DefaultThumbnailGenerationStrategyTest.php │ │ └── ThumbnailGenerationStrategyProviderTest.php ├── newrelic │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── src │ │ ├── Application │ │ │ ├── DependencyInjection │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeNewRelicExtension.php │ │ │ ├── EventSubscriber │ │ │ │ ├── ConsoleEventSubscriber.php │ │ │ │ ├── MessengerEventSubscriber.php │ │ │ │ └── RouteEventSubscriber.php │ │ │ └── NewRelic │ │ │ │ ├── NewRelic.php │ │ │ │ └── NewRelicInterface.php │ │ ├── ErgonodeNewRelicBundle.php │ │ └── Resources │ │ │ └── config │ │ │ ├── console.yml │ │ │ ├── messenger.yml │ │ │ └── services.yml │ └── tests │ │ └── Application │ │ └── EventSubscriber │ │ ├── ConsoleEventSubscriberTest.php │ │ ├── MessengerEventSubscriberTest.php │ │ └── RouteEventSubscriberTest.php ├── notification │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ └── notification.feature │ ├── migrations │ │ ├── Version20191112111500.php │ │ └── Version20210304154000.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── NotificationCheckAction.php │ │ │ │ │ ├── NotificationGridReadAction.php │ │ │ │ │ ├── NotificationMarkAllAction.php │ │ │ │ │ └── NotificationMarkUpdateAction.php │ │ │ └── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ └── NotificationStrategyInterfaceCompilerPass.php │ │ │ │ └── ErgonodeNotificationExtension.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── MarkAllNotificationsCommand.php │ │ │ │ ├── MarkNotificationCommand.php │ │ │ │ ├── NotificationCommandInterface.php │ │ │ │ └── SendNotificationCommand.php │ │ │ ├── NotificationInterface.php │ │ │ └── Query │ │ │ │ ├── NotificationGridQueryInterface.php │ │ │ │ └── NotificationQueryInterface.php │ │ ├── ErgonodeNotificationBundle.php │ │ ├── Infrastructure │ │ │ ├── Grid │ │ │ │ └── NotificationGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── MarkAllNotificationsCommandHandler.php │ │ │ │ ├── MarkNotificationCommandHandler.php │ │ │ │ └── SendNotificationCommandHandler.php │ │ │ ├── Persistence │ │ │ │ └── Query │ │ │ │ │ ├── DbalNotificationGridQuery.php │ │ │ │ │ └── DbalNotificationQuery.php │ │ │ └── Sender │ │ │ │ ├── NotificationSender.php │ │ │ │ ├── NotificationStrategyInterface.php │ │ │ │ └── Strategy │ │ │ │ └── DbalSystemNotificationStrategy.php │ │ └── Resources │ │ │ └── config │ │ │ ├── routes.yml │ │ │ └── services.yml │ └── tests │ │ ├── Domain │ │ └── Command │ │ │ ├── MarkAllNotificationsCommandTest.php │ │ │ ├── MarkNotificationCommandTest.php │ │ │ └── SendNotificationCommandTest.php │ │ └── Infrastructure │ │ ├── Grid │ │ └── NotificationGridBuilderTest.php │ │ ├── Handler │ │ ├── MarkAllNotificationsCommandHandlerTest.php │ │ ├── MarkNotificationCommandHandlerTest.php │ │ └── SendNotificationCommandHandlerTest.php │ │ └── Sender │ │ └── NotificationSenderTest.php ├── product-collection │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── collection.json │ │ ├── product-collection-not-authenticated.feature │ │ ├── product-collections-autocomplete.feature │ │ ├── product-collections-from-segments.feature │ │ ├── product-collections-from-skus.feature │ │ ├── product-collections-grid.feature │ │ ├── product-collections-privileges.feature │ │ ├── product-collections-type-autocomplete.feature │ │ ├── product-collections-type.feature │ │ └── product-collections.feature │ ├── migrations │ │ ├── Version20200127083123.php │ │ ├── Version20201125121918.php │ │ └── Version20210105100900.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── Element │ │ │ │ │ ├── AddProductCollectionElementFromSegmentsAction.php │ │ │ │ │ ├── AddProductCollectionElementFromSkusAction.php │ │ │ │ │ ├── ProductCollectionElementChangeAction.php │ │ │ │ │ ├── ProductCollectionElementCreateAction.php │ │ │ │ │ ├── ProductCollectionElementDeleteAction.php │ │ │ │ │ ├── ProductCollectionElementGridReadAction.php │ │ │ │ │ └── ProductCollectionElementReadAction.php │ │ │ │ │ ├── Product │ │ │ │ │ └── ProductProductCollectionGridReadAction.php │ │ │ │ │ ├── ProductCollection │ │ │ │ │ ├── ProductCollectionAutocompleteAction.php │ │ │ │ │ ├── ProductCollectionChangeAction.php │ │ │ │ │ ├── ProductCollectionCreateAction.php │ │ │ │ │ ├── ProductCollectionDeleteAction.php │ │ │ │ │ ├── ProductCollectionGridReadAction.php │ │ │ │ │ └── ProductCollectionReadAction.php │ │ │ │ │ └── ProductCollectionType │ │ │ │ │ ├── ProductCollectionTypeAutocompleteAction.php │ │ │ │ │ ├── ProductCollectionTypeChangeAction.php │ │ │ │ │ ├── ProductCollectionTypeCreateAction.php │ │ │ │ │ ├── ProductCollectionTypeDeleteAction.php │ │ │ │ │ ├── ProductCollectionTypeGridReadAction.php │ │ │ │ │ └── ProductCollectionTypeReadAction.php │ │ │ ├── DependencyInjection │ │ │ │ └── ErgonodeProductCollectionExtension.php │ │ │ ├── Form │ │ │ │ ├── ProductCollectionCreateForm.php │ │ │ │ ├── ProductCollectionElementCreateForm.php │ │ │ │ ├── ProductCollectionElementFromSegmentsForm.php │ │ │ │ ├── ProductCollectionElementFromSkusForm.php │ │ │ │ ├── ProductCollectionElementUpdateForm.php │ │ │ │ ├── ProductCollectionTypeCreateForm.php │ │ │ │ ├── ProductCollectionTypeUpdateForm.php │ │ │ │ └── ProductCollectionUpdateForm.php │ │ │ ├── Model │ │ │ │ ├── ProductCollectionCreateFormModel.php │ │ │ │ ├── ProductCollectionElementCreateFormModel.php │ │ │ │ ├── ProductCollectionElementFromSegmentsFormModel.php │ │ │ │ ├── ProductCollectionElementFromSkusFormModel.php │ │ │ │ ├── ProductCollectionElementUpdateFormModel.php │ │ │ │ ├── ProductCollectionTypeCreateFormModel.php │ │ │ │ ├── ProductCollectionTypeUpdateFormModel.php │ │ │ │ └── ProductCollectionUpdateFormModel.php │ │ │ └── Validator │ │ │ │ ├── ProductCollectionCodeUnique.php │ │ │ │ ├── ProductCollectionCodeUniqueValidator.php │ │ │ │ ├── ProductCollectionTypeCodeUnique.php │ │ │ │ ├── ProductCollectionTypeCodeUniqueValidator.php │ │ │ │ ├── ProductCollectionTypeExists.php │ │ │ │ └── ProductCollectionTypeExistsValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── AddProductCollectionElementCommand.php │ │ │ │ ├── AddProductCollectionElementsCommand.php │ │ │ │ ├── CreateProductCollectionCommand.php │ │ │ │ ├── CreateProductCollectionTypeCommand.php │ │ │ │ ├── DeleteProductCollectionCommand.php │ │ │ │ ├── DeleteProductCollectionElementCommand.php │ │ │ │ ├── DeleteProductCollectionTypeCommand.php │ │ │ │ ├── ProductCollectionCommandInterface.php │ │ │ │ ├── UpdateProductCollectionCommand.php │ │ │ │ ├── UpdateProductCollectionElementCommand.php │ │ │ │ └── UpdateProductCollectionTypeCommand.php │ │ │ ├── Entity │ │ │ │ ├── Attribute │ │ │ │ │ └── ProductCollectionSystemAttribute.php │ │ │ │ ├── ProductCollection.php │ │ │ │ ├── ProductCollectionElement.php │ │ │ │ └── ProductCollectionType.php │ │ │ ├── Event │ │ │ │ ├── ProductCollectionCreatedEvent.php │ │ │ │ ├── ProductCollectionDeletedEvent.php │ │ │ │ ├── ProductCollectionDescriptionChangedEvent.php │ │ │ │ ├── ProductCollectionElementAddedEvent.php │ │ │ │ ├── ProductCollectionElementRemovedEvent.php │ │ │ │ ├── ProductCollectionElementVisibleChangedEvent.php │ │ │ │ ├── ProductCollectionNameChangedEvent.php │ │ │ │ ├── ProductCollectionTypeCreatedEvent.php │ │ │ │ ├── ProductCollectionTypeDeletedEvent.php │ │ │ │ ├── ProductCollectionTypeIdChangedEvent.php │ │ │ │ └── ProductCollectionTypeNameChangedEvent.php │ │ │ ├── Factory │ │ │ │ ├── ProductCollectionFactory.php │ │ │ │ └── ProductCollectionTypeFactory.php │ │ │ ├── Query │ │ │ │ ├── ProductCollectionElementGridQueryInterface.php │ │ │ │ ├── ProductCollectionGridQueryInterface.php │ │ │ │ ├── ProductCollectionQueryInterface.php │ │ │ │ ├── ProductCollectionTypeGridQueryInterface.php │ │ │ │ ├── ProductCollectionTypeQueryInterface.php │ │ │ │ └── ProductProductCollectionGridQueryInterface.php │ │ │ ├── Repository │ │ │ │ ├── ProductCollectionRepositoryInterface.php │ │ │ │ └── ProductCollectionTypeRepositoryInterface.php │ │ │ └── ValueObject │ │ │ │ ├── ProductCollectionCode.php │ │ │ │ └── ProductCollectionTypeCode.php │ │ ├── ErgonodeProductCollectionBundle.php │ │ ├── Infrastructure │ │ │ ├── Grid │ │ │ │ ├── Builder │ │ │ │ │ └── Query │ │ │ │ │ │ └── ProductCollectionSystemAttributeDataSetQueryBuilder.php │ │ │ │ ├── Column │ │ │ │ │ └── Builder │ │ │ │ │ │ └── ProductCollectionSystemAttributeColumnBuilderStrategy.php │ │ │ │ ├── ProductCollectionElementGridBuilder.php │ │ │ │ ├── ProductCollectionGridBuilder.php │ │ │ │ ├── ProductCollectionTypeGridBuilder.php │ │ │ │ └── ProductProductCollectionGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── AddProductCollectionElementCommandHandler.php │ │ │ │ ├── AddProductCollectionElementsCommandHandler.php │ │ │ │ ├── CreateProductCollectionCommandHandler.php │ │ │ │ ├── CreateProductCollectionTypeCommandHandler.php │ │ │ │ ├── DeleteProductCollectionCommandHandler.php │ │ │ │ ├── DeleteProductCollectionElementCommandHandler.php │ │ │ │ ├── DeleteProductCollectionTypeCommandHandler.php │ │ │ │ ├── UpdateProductCollectionCommandHandler.php │ │ │ │ ├── UpdateProductCollectionElementCommandHandler.php │ │ │ │ └── UpdateProductCollectionTypeCommandHandler.php │ │ │ ├── Persistence │ │ │ │ ├── Projector │ │ │ │ │ ├── ProductCollection │ │ │ │ │ │ ├── DbalProductCollectionCreatedEventProjector.php │ │ │ │ │ │ ├── DbalProductCollectionDeletedEventProjector.php │ │ │ │ │ │ ├── DbalProductCollectionDescriptionChangedEventProjector.php │ │ │ │ │ │ ├── DbalProductCollectionNameChangedEventProjector.php │ │ │ │ │ │ └── DbalProductCollectionTypeIdChangedEventProjector.php │ │ │ │ │ ├── ProductCollectionElement │ │ │ │ │ │ ├── DbalProductCollectionElementAddedEventProjector.php │ │ │ │ │ │ ├── DbalProductCollectionElementRemovedEventProjector.php │ │ │ │ │ │ └── DbalProductCollectionElementVisibleChangedEventProjector.php │ │ │ │ │ └── ProductCollectionType │ │ │ │ │ │ ├── DbalProductCollectionTypeCreatedEventProjector.php │ │ │ │ │ │ ├── DbalProductCollectionTypeDeletedEventProjector.php │ │ │ │ │ │ └── DbalProductCollectionTypeNameChangedEventProjector.php │ │ │ │ ├── Query │ │ │ │ │ ├── DbalProductCollectionElementGridQuery.php │ │ │ │ │ ├── DbalProductCollectionGridQuery.php │ │ │ │ │ ├── DbalProductCollectionQuery.php │ │ │ │ │ ├── DbalProductCollectionTypeGridQuery.php │ │ │ │ │ ├── DbalProductCollectionTypeQuery.php │ │ │ │ │ └── DbalProductProductCollectionGridQuery.php │ │ │ │ └── Repository │ │ │ │ │ ├── EventStoreProductCollectionRepository.php │ │ │ │ │ └── EventStoreProductCollectionTypeRepository.php │ │ │ ├── Relationship │ │ │ │ └── ProductProductCollectionRelationshipStrategy.php │ │ │ └── Strategy │ │ │ │ └── Relationship │ │ │ │ └── ProductCollectionProductCollectionTypeRelationshipStrategy.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── nelmio_api_doc.yaml │ │ │ ├── routes.yml │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── grid.en.yaml │ │ │ └── grid.pl.yaml │ └── tests │ │ ├── Application │ │ └── Validator │ │ │ ├── ProductCollectionCodeUniqueValidatorTest.php │ │ │ └── ProductCollectionTypeCodeUniqueValidatorTest.php │ │ └── Domain │ │ ├── Command │ │ ├── AddProductCollectionElementCommandTest.php │ │ ├── AddProductCollectionElementsCommandTest.php │ │ ├── CreateProductCollectionCommandTest.php │ │ ├── CreateProductCollectionTypeCommandTest.php │ │ ├── DeleteProductCollectionCommandTest.php │ │ ├── DeleteProductCollectionElementCommandTest.php │ │ ├── DeleteProductCollectionTypeCommandTest.php │ │ ├── UpdateProductCollectionCommandTest.php │ │ ├── UpdateProductCollectionElementCommandTest.php │ │ └── UpdateProductCollectionTypeCommandTest.php │ │ ├── Entity │ │ ├── Attribute │ │ │ └── ProductCollectionSystemAttributeTest.php │ │ ├── ProductCollectionElementTest.php │ │ ├── ProductCollectionTest.php │ │ └── ProductCollectionTypeTest.php │ │ ├── Event │ │ ├── ProductCollectionCreatedEventTest.php │ │ ├── ProductCollectionDeletedEventTest.php │ │ ├── ProductCollectionElementAddedEventTest.php │ │ ├── ProductCollectionElementRemovedEventTest.php │ │ ├── ProductCollectionElementVisibleChangedEventTest.php │ │ ├── ProductCollectionNameChangedEventTest.php │ │ ├── ProductCollectionTypeCreatedEventTest.php │ │ ├── ProductCollectionTypeDeletedEventTest.php │ │ ├── ProductCollectionTypeIdChangedEventTest.php │ │ └── ProductCollectionTypeNameChangedEventTest.php │ │ └── Factory │ │ ├── ProductCollectionFactoryTest.php │ │ └── ProductCollectionTypeFactoryTest.php ├── product │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── associated-product-available-children-grid.feature │ │ ├── attribute-product-relation.feature │ │ ├── batch-action-count.feature │ │ ├── batch-action-get-templates.feature │ │ ├── grouping-product-batch-action-delete.feature │ │ ├── grouping-product.feature │ │ ├── image │ │ │ └── test.jpg │ │ ├── multimedia.jpg │ │ ├── multimedia.png │ │ ├── product-atribute-relation.feature │ │ ├── product-attribute-update.feature │ │ ├── product-autocomplete.feature │ │ ├── product-batch-action-change-attribute.feature │ │ ├── product-batch-action-delete.feature │ │ ├── product-category.feature │ │ ├── product-dashboard.feature │ │ ├── product-edit.feature │ │ ├── product-global-numeric-attribute-manipulation.feature │ │ ├── product-global-price-attribute-manipulation.feature │ │ ├── product-global-text-attribute-manipulation.feature │ │ ├── product-global-textarea-attribute-manipulation.feature │ │ ├── product-global-unit-attribute-manipulation.feature │ │ ├── product-grid-post.feature │ │ ├── product-grid.feature │ │ ├── product-history.feature │ │ ├── product-local-file-attribute-manipulation.feature │ │ ├── product-local-gallery-attribute-manipulation.feature │ │ ├── product-local-image-attribute-manipulation.feature │ │ ├── product-local-multi-select-attribute-manipulation.feature │ │ ├── product-local-numeric-attribute-manipulation.feature │ │ ├── product-local-price-attribute-manipulation.feature │ │ ├── product-local-product-relation-attribute-manipulation.feature │ │ ├── product-local-select-attribute-manipulation.feature │ │ ├── product-local-text-attribute-manipulation.feature │ │ ├── product-local-textarea-attribute-manipulation.feature │ │ ├── product-local-unit-attribute-manipulation.feature │ │ ├── product-not-authenticated.feature │ │ ├── product-template.feature │ │ ├── product.json │ │ ├── simple-product-batch-action-delete.feature │ │ ├── simple-product-privileges.feature │ │ ├── simple-product.feature │ │ ├── variable-product-add-from-segments.feature │ │ ├── variable-product-add-from-sku.feature │ │ ├── variable-product-batch-action-delete.feature │ │ └── variable-product.feature │ ├── migrations │ │ ├── Version20180619083830.php │ │ ├── Version20201102084000.php │ │ ├── Version20210105100800.php │ │ ├── Version20210303135330.php │ │ ├── Version20210426110000.php │ │ ├── Version20210616120200.php │ │ └── Version20211219110000.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── Attribute │ │ │ │ │ ├── DeleteProductAttributeAction.php │ │ │ │ │ ├── DeleteProductsAttributesAction.php │ │ │ │ │ ├── UpdateProductAttributeAction.php │ │ │ │ │ └── UpdateProductsAttributesAction.php │ │ │ │ │ ├── BatchAction │ │ │ │ │ └── GetTemplatesByBatchAction.php │ │ │ │ │ ├── Bindings │ │ │ │ │ ├── AddProductAttributeBindingsAction.php │ │ │ │ │ ├── GetProductAttributeBindingsAction.php │ │ │ │ │ └── ProductRemoveBindingAction.php │ │ │ │ │ ├── Category │ │ │ │ │ ├── AddProductCategoryAction.php │ │ │ │ │ ├── ProductCategoryGridReadAction.php │ │ │ │ │ └── RemoveProductCategoryAction.php │ │ │ │ │ ├── Dashboard │ │ │ │ │ └── WidgetProductCountAction.php │ │ │ │ │ ├── ProductAutocompleteAction.php │ │ │ │ │ ├── ProductChangeAction.php │ │ │ │ │ ├── ProductCreateAction.php │ │ │ │ │ ├── ProductDeleteAction.php │ │ │ │ │ ├── ProductGridAction.php │ │ │ │ │ ├── ProductGridReadAction.php │ │ │ │ │ ├── ProductHistoryReadAction.php │ │ │ │ │ ├── ProductReadAction.php │ │ │ │ │ ├── ProductReadInheritedValuesByLanguageAction.php │ │ │ │ │ ├── ProductReadTemplateAction.php │ │ │ │ │ ├── ProductTypeDictionaryAction.php │ │ │ │ │ └── Relations │ │ │ │ │ ├── AssociatedProductAvailableChildrenAction.php │ │ │ │ │ ├── ProductAddChildAction.php │ │ │ │ │ ├── ProductAddChildFromSegmentsAction.php │ │ │ │ │ ├── ProductAddChildFromSkusAction.php │ │ │ │ │ ├── ProductChildGridAction.php │ │ │ │ │ └── ProductRemoveChildAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── CompilerPass │ │ │ │ │ ├── AttributeColumnStrategyStrategyCompilerPass.php │ │ │ │ │ ├── AttributeDataSetQueryBuilderCompilerPass.php │ │ │ │ │ ├── ProductCreateCommandFactoryProviderCompilerPass.php │ │ │ │ │ ├── ProductFormCompilerPass.php │ │ │ │ │ ├── ProductTypeCompilerPass.php │ │ │ │ │ └── ProductUpdateCommandFactoryProviderCompilerPass.php │ │ │ │ └── ErgonodeProductExtension.php │ │ │ ├── Event │ │ │ │ ├── ProductCreatedEvent.php │ │ │ │ ├── ProductDeletedEvent.php │ │ │ │ └── ProductUpdatedEvent.php │ │ │ ├── Factory │ │ │ │ └── Command │ │ │ │ │ ├── ChangeProductAttributeCommandFactory.php │ │ │ │ │ └── RemoveProductAttributeCommandFactory.php │ │ │ ├── Form │ │ │ │ ├── Attribute │ │ │ │ │ └── ProductRelationAttributeForm.php │ │ │ │ └── Product │ │ │ │ │ ├── Attribute │ │ │ │ │ ├── Delete │ │ │ │ │ │ ├── DeleteAttributeValueForm.php │ │ │ │ │ │ ├── DeleteProductAttributeCollectionForm.php │ │ │ │ │ │ └── DeleteProductAttributeForm.php │ │ │ │ │ └── Update │ │ │ │ │ │ ├── UpdateAttributeValueForm.php │ │ │ │ │ │ ├── UpdateAttributeValueTranslationForm.php │ │ │ │ │ │ ├── UpdateProductAttributeCollectionForm.php │ │ │ │ │ │ └── UpdateProductAttributeForm.php │ │ │ │ │ ├── BatchAction │ │ │ │ │ ├── BatchActionTemplatesForm.php │ │ │ │ │ ├── Model │ │ │ │ │ │ └── BatchActionTemplateFormModel.php │ │ │ │ │ ├── ProductDeleteBatchActionCreateForm.php │ │ │ │ │ ├── ProductDeleteBatchActionReprocessForm.php │ │ │ │ │ ├── ProductEditBatchActionCreateForm.php │ │ │ │ │ └── ProductEditBatchActionReprocessForm.php │ │ │ │ │ ├── Binding │ │ │ │ │ └── ProductBindForm.php │ │ │ │ │ ├── GroupingProductForm.php │ │ │ │ │ ├── ProductFormInterface.php │ │ │ │ │ ├── ProductTypeForm.php │ │ │ │ │ ├── Relation │ │ │ │ │ ├── ProductChildBySegmentsForm.php │ │ │ │ │ ├── ProductChildBySkusForm.php │ │ │ │ │ └── ProductChildForm.php │ │ │ │ │ ├── SimpleProductForm.php │ │ │ │ │ └── VariableProductForm.php │ │ │ ├── Handler │ │ │ │ ├── AbstractAuditEventHandler.php │ │ │ │ ├── AuditProductCreatedEventHandler.php │ │ │ │ ├── AuditProductDeletedEventHandler.php │ │ │ │ └── AuditProductUpdatedEventHandler.php │ │ │ ├── Model │ │ │ │ └── Product │ │ │ │ │ ├── Attribute │ │ │ │ │ ├── Delete │ │ │ │ │ │ ├── DeleteAttributeValueFormModel.php │ │ │ │ │ │ ├── DeleteProductAttributeCollectionFormModel.php │ │ │ │ │ │ └── DeleteProductAttributeFormModel.php │ │ │ │ │ └── Update │ │ │ │ │ │ ├── UpdateAttributeValueFormModel.php │ │ │ │ │ │ ├── UpdateAttributeValueTranslationFormModel.php │ │ │ │ │ │ ├── UpdateProductAttributeCollectionFormModel.php │ │ │ │ │ │ └── UpdateProductAttributeFormModel.php │ │ │ │ │ ├── Binding │ │ │ │ │ └── ProductBindFormModel.php │ │ │ │ │ ├── GroupingProductFormModel.php │ │ │ │ │ ├── ProductTypeFormModel.php │ │ │ │ │ ├── Relation │ │ │ │ │ ├── ProductChildBySegmentsFormModel.php │ │ │ │ │ ├── ProductChildBySkusFormModel.php │ │ │ │ │ └── ProductChildFormModel.php │ │ │ │ │ ├── SimpleProductFormModel.php │ │ │ │ │ └── VariableProductFormModel.php │ │ │ ├── Provider │ │ │ │ ├── ProductFormProvider.php │ │ │ │ ├── ProductSupportProviderInterface.php │ │ │ │ └── ProductTypeProvider.php │ │ │ └── Validator │ │ │ │ ├── NotTheSameProduct.php │ │ │ │ ├── NotTheSameProductValidator.php │ │ │ │ ├── ProductAttribute.php │ │ │ │ ├── ProductAttributeValidator.php │ │ │ │ ├── ProductChild.php │ │ │ │ ├── ProductChildValidator.php │ │ │ │ ├── ProductExists.php │ │ │ │ ├── ProductExistsValidator.php │ │ │ │ ├── ProductHasChildren.php │ │ │ │ ├── ProductHasChildrenValidator.php │ │ │ │ ├── ProductInvalidChild.php │ │ │ │ ├── ProductInvalidChildValidator.php │ │ │ │ ├── ProductInvalidChildren.php │ │ │ │ ├── ProductInvalidChildrenValidator.php │ │ │ │ ├── ProductType.php │ │ │ │ ├── ProductTypeExists.php │ │ │ │ ├── ProductTypeExistsValidator.php │ │ │ │ ├── ProductTypeValidator.php │ │ │ │ ├── Sku.php │ │ │ │ ├── SkuExists.php │ │ │ │ ├── SkuExistsValidator.php │ │ │ │ ├── SkuUnique.php │ │ │ │ ├── SkuUniqueValidator.php │ │ │ │ └── SkuValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── Attribute │ │ │ │ │ ├── ChangeProductAttributeCommand.php │ │ │ │ │ ├── ChangeProductAttributesCommand.php │ │ │ │ │ ├── Create │ │ │ │ │ │ └── CreateProductRelationAttributeCommand.php │ │ │ │ │ ├── RemoveProductAttributeCommand.php │ │ │ │ │ ├── RemoveProductAttributesCommand.php │ │ │ │ │ └── Update │ │ │ │ │ │ └── UpdateProductRelationAttributeCommand.php │ │ │ │ ├── Bindings │ │ │ │ │ ├── AddProductBindingCommand.php │ │ │ │ │ └── RemoveProductBindingCommand.php │ │ │ │ ├── Category │ │ │ │ │ ├── AddProductCategoryCommand.php │ │ │ │ │ └── RemoveProductCategoryCommand.php │ │ │ │ ├── Create │ │ │ │ │ ├── CreateGroupingProductCommand.php │ │ │ │ │ ├── CreateProductCommandInterface.php │ │ │ │ │ ├── CreateSimpleProductCommand.php │ │ │ │ │ └── CreateVariableProductCommand.php │ │ │ │ ├── DeleteProductCommand.php │ │ │ │ ├── ProductCommandInterface.php │ │ │ │ ├── Relations │ │ │ │ │ ├── AddProductChildCommand.php │ │ │ │ │ ├── AddProductChildrenBySegmentsCommand.php │ │ │ │ │ ├── AddProductChildrenCommand.php │ │ │ │ │ └── RemoveProductChildCommand.php │ │ │ │ ├── Update │ │ │ │ │ ├── UpdateGroupingProductCommand.php │ │ │ │ │ ├── UpdateSimpleProductCommand.php │ │ │ │ │ └── UpdateVariableProductCommand.php │ │ │ │ └── UpdateProductCategoriesCommand.php │ │ │ ├── Entity │ │ │ │ ├── AbstractAssociatedProduct.php │ │ │ │ ├── AbstractProduct.php │ │ │ │ ├── Attribute │ │ │ │ │ ├── CreatedAtSystemAttribute.php │ │ │ │ │ ├── CreatedBySystemAttribute.php │ │ │ │ │ ├── EditedAtSystemAttribute.php │ │ │ │ │ ├── EditedBySystemAttribute.php │ │ │ │ │ ├── ProductRelationAttribute.php │ │ │ │ │ └── ProductTypeSystemAttribute.php │ │ │ │ ├── GroupingProduct.php │ │ │ │ ├── ProductInterface.php │ │ │ │ ├── SimpleProduct.php │ │ │ │ └── VariableProduct.php │ │ │ ├── Event │ │ │ │ ├── Bind │ │ │ │ │ ├── BindAddedToProductEvent.php │ │ │ │ │ └── BindRemovedFromProductEvent.php │ │ │ │ ├── ProductAddedToCategoryEvent.php │ │ │ │ ├── ProductCreatedEvent.php │ │ │ │ ├── ProductDeletedEvent.php │ │ │ │ ├── ProductRemovedFromCategoryEvent.php │ │ │ │ ├── ProductTemplateChangedEvent.php │ │ │ │ ├── ProductValueAddedEvent.php │ │ │ │ ├── ProductValueChangedEvent.php │ │ │ │ ├── ProductValueRemovedEvent.php │ │ │ │ └── Relation │ │ │ │ │ ├── ChildAddedToProductEvent.php │ │ │ │ │ └── ChildRemovedFromProductEvent.php │ │ │ ├── Factory │ │ │ │ ├── ProductFactory.php │ │ │ │ └── ProductFactoryInterface.php │ │ │ ├── Query │ │ │ │ ├── AttributeValueQueryInterface.php │ │ │ │ ├── GetProductQueryInterface.php │ │ │ │ ├── ProductBindingQueryInterface.php │ │ │ │ ├── ProductCategoryGridQueryInterface.php │ │ │ │ ├── ProductChildrenAvailableGridQueryInterface.php │ │ │ │ ├── ProductChildrenGridQueryInterface.php │ │ │ │ ├── ProductChildrenQueryInterface.php │ │ │ │ ├── ProductDashboardQueryInterface.php │ │ │ │ ├── ProductHistoryGridQueryInterface.php │ │ │ │ ├── ProductQueryInterface.php │ │ │ │ ├── ProductRelationAttributeQueryInterface.php │ │ │ │ └── ProductWithVariantsQueryInterface.php │ │ │ ├── Repository │ │ │ │ └── ProductRepositoryInterface.php │ │ │ ├── Updater │ │ │ │ └── ProductAttributeUpdater.php │ │ │ └── ValueObject │ │ │ │ └── Sku.php │ │ ├── ErgonodeProductBundle.php │ │ ├── Infrastructure │ │ │ ├── Calculator │ │ │ │ └── TranslationInheritanceCalculator.php │ │ │ ├── Factory │ │ │ │ ├── Command │ │ │ │ │ ├── Create │ │ │ │ │ │ ├── CreateGroupingProductCommandFactory.php │ │ │ │ │ │ ├── CreateProductRelationAttributeCommandFactory.php │ │ │ │ │ │ ├── CreateSimpleProductCommandFactory.php │ │ │ │ │ │ └── CreateVariableProductCommandFactory.php │ │ │ │ │ ├── CreateProductCommandFactoryInterface.php │ │ │ │ │ ├── Update │ │ │ │ │ │ ├── UpdateGroupingProductCommandFactory.php │ │ │ │ │ │ ├── UpdateProductRelationAttributeCommandFactory.php │ │ │ │ │ │ ├── UpdateSimpleProductCommandFactory.php │ │ │ │ │ │ └── UpdateVariableProductCommandFactory.php │ │ │ │ │ └── UpdateProductCommandFactoryInterface.php │ │ │ │ └── DataSet │ │ │ │ │ ├── DbalProductDataSetFactory.php │ │ │ │ │ └── DbalQueryBuilderProductDataSetFactory.php │ │ │ ├── Filter │ │ │ │ └── BatchAction │ │ │ │ │ ├── ProductBatchActionFilter.php │ │ │ │ │ └── TemplateBatchActionFilter.php │ │ │ ├── Grid │ │ │ │ ├── AssociatedProductAvailableChildrenGridBuilder.php │ │ │ │ ├── Builder │ │ │ │ │ ├── DataSetQueryBuilderProvider.php │ │ │ │ │ └── Query │ │ │ │ │ │ ├── AbstractAttributeDataSetBuilder.php │ │ │ │ │ │ ├── AttributeDataSetQueryBuilderInterface.php │ │ │ │ │ │ ├── CreatedAtSystemAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── CreatedBySystemAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── DateAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── EditedAtSystemAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── EditedBySystemAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── FileAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── GalleryAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── ImageAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── MultiSelectAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── NumericAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── PriceAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── ProductRelationAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── ProductTypeSystemAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── SelectAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── TextAttributeDataSetQueryBuilder.php │ │ │ │ │ │ ├── TextareaAttributeDataSetQueryBuilder.php │ │ │ │ │ │ └── UnitAttributeDataSetQueryBuilder.php │ │ │ │ ├── Column │ │ │ │ │ ├── HistoryColumn.php │ │ │ │ │ ├── ProductRelationColumn.php │ │ │ │ │ ├── Provider │ │ │ │ │ │ ├── AttributeColumnProvider.php │ │ │ │ │ │ └── Strategy │ │ │ │ │ │ │ ├── AttributeColumnStrategyInterface.php │ │ │ │ │ │ │ ├── CreatedAtSystemAttributeColumnBuilderStrategy.php │ │ │ │ │ │ │ ├── DateAttributeColumnStrategy.php │ │ │ │ │ │ │ ├── EditedAtSystemAttributeColumnBuilderStrategy.php │ │ │ │ │ │ │ ├── FileAttributeColumnStrategy.php │ │ │ │ │ │ │ ├── GalleryAttributeColumnStrategy.php │ │ │ │ │ │ │ ├── ImageAttributeColumnStrategy.php │ │ │ │ │ │ │ ├── MultiSelectAttributeColumnStrategy.php │ │ │ │ │ │ │ ├── NumericAttributeColumnStrategy.php │ │ │ │ │ │ │ ├── PriceAttributeColumnStrategy.php │ │ │ │ │ │ │ ├── ProductRelationAttributeColumnStrategy.php │ │ │ │ │ │ │ ├── ProductTypeSystemAttributeColumnStrategy.php │ │ │ │ │ │ │ ├── SelectAttributeColumnStrategy.php │ │ │ │ │ │ │ ├── TextAreaAttributeColumnStrategy.php │ │ │ │ │ │ │ └── UnitAttributeColumnStrategy.php │ │ │ │ │ └── Renderer │ │ │ │ │ │ ├── HistoryColumnRenderer.php │ │ │ │ │ │ └── ProductRelationColumnRenderer.php │ │ │ │ ├── Filter │ │ │ │ │ ├── Builder │ │ │ │ │ │ └── RelationFilterBuilder.php │ │ │ │ │ └── RelationFilter.php │ │ │ │ ├── ProductCategoryGridBuilder.php │ │ │ │ ├── ProductChildrenGridBuilder.php │ │ │ │ ├── ProductGrid.php │ │ │ │ ├── ProductGridBuilder.php │ │ │ │ └── ProductHistoryGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── Association │ │ │ │ │ ├── AddProductChildCommandHandler.php │ │ │ │ │ ├── AddProductChildrenBySegmentsCommandHandler.php │ │ │ │ │ ├── AddProductChildrenCommandHandler.php │ │ │ │ │ └── RemoveProductChildCommandHandler.php │ │ │ │ ├── Attribute │ │ │ │ │ ├── AbstractValueCommandHandler.php │ │ │ │ │ ├── ChangeProductAttributeCommandHandler.php │ │ │ │ │ ├── ChangeProductAttributesCommandHandler.php │ │ │ │ │ ├── Create │ │ │ │ │ │ └── CreateProductRelationAttributeCommandHandler.php │ │ │ │ │ ├── RemoveProductAttributeCommandHandler.php │ │ │ │ │ ├── RemoveProductAttributesCommandHandler.php │ │ │ │ │ └── Update │ │ │ │ │ │ └── UpdateProductRelationAttributeCommandHandler.php │ │ │ │ ├── Binding │ │ │ │ │ ├── AddProductBindingCommandHandler.php │ │ │ │ │ └── RemoveProductBindCommandHandler.php │ │ │ │ ├── Category │ │ │ │ │ ├── AddProductCategoryCommandHandler.php │ │ │ │ │ └── RemoveProductCategoryCommandHandler.php │ │ │ │ ├── Create │ │ │ │ │ ├── CreateGroupingProductCommandHandler.php │ │ │ │ │ ├── CreateSimpleProductCommandHandler.php │ │ │ │ │ └── CreateVariableProductCommandHandler.php │ │ │ │ ├── DeleteProductCommandHandler.php │ │ │ │ ├── Update │ │ │ │ │ ├── UpdateGroupingProductCommandHandler.php │ │ │ │ │ ├── UpdateSimpleProductCommandHandler.php │ │ │ │ │ └── UpdateVariableProductCommandHandler.php │ │ │ │ └── UpdateProductCategoriesCommandHandler.php │ │ │ ├── Mapper │ │ │ │ └── Strategy │ │ │ │ │ └── ProductRelationAttributeMapperStrategy.php │ │ │ ├── Persistence │ │ │ │ ├── BatchAction │ │ │ │ │ └── Count │ │ │ │ │ │ └── Count.php │ │ │ │ ├── DataSet │ │ │ │ │ ├── DbalProductDataSet.php │ │ │ │ │ └── DbalQueryBuilderProductDataSet.php │ │ │ │ ├── Projector │ │ │ │ │ ├── AbstractProductProjector.php │ │ │ │ │ ├── AbstractProductValueProjector.php │ │ │ │ │ ├── Binding │ │ │ │ │ │ ├── DbalBindAddedToProductEventProjector.php │ │ │ │ │ │ └── DbalBindRemovedFromProductEventProjector.php │ │ │ │ │ ├── Child │ │ │ │ │ │ ├── DbalChildAddedToProductEventProjector.php │ │ │ │ │ │ └── DbalChildRemovedFromProductEventProjector.php │ │ │ │ │ ├── DbalProductAddedToCategoryEventProjector.php │ │ │ │ │ ├── DbalProductCreatedEventProjector.php │ │ │ │ │ ├── DbalProductDeletedEventProjector.php │ │ │ │ │ ├── DbalProductRemovedFromCategoryEventProjector.php │ │ │ │ │ ├── DbalProductTemplateChangedEventProjector.php │ │ │ │ │ ├── DbalProductValueAddedEventProjector.php │ │ │ │ │ ├── DbalProductValueChangedEventProjector.php │ │ │ │ │ └── DbalProductValueRemovedEventProjector.php │ │ │ │ ├── Query │ │ │ │ │ ├── DbalAttributeValueQuery.php │ │ │ │ │ ├── DbalProductBindingQuery.php │ │ │ │ │ ├── DbalProductCategoryGridQuery.php │ │ │ │ │ ├── DbalProductChildrenAvailableGridQuery.php │ │ │ │ │ ├── DbalProductChildrenGridQuery.php │ │ │ │ │ ├── DbalProductChildrenQuery.php │ │ │ │ │ ├── DbalProductDashboardQuery.php │ │ │ │ │ ├── DbalProductHistoryGridQuery.php │ │ │ │ │ ├── DbalProductQuery.php │ │ │ │ │ ├── DbalProductRelationAttributeQuery.php │ │ │ │ │ └── GetProductQuery.php │ │ │ │ └── Repository │ │ │ │ │ └── EventStoreProductRepository.php │ │ │ ├── Processor │ │ │ │ └── BatchAction │ │ │ │ │ ├── ProductChangeAttributeBatchActionProcessor.php │ │ │ │ │ └── ProductDeleteBatchActionProcessor.php │ │ │ ├── Provider │ │ │ │ ├── CreateProductCommandFactoryProvider.php │ │ │ │ ├── FilteredQueryBuilder.php │ │ │ │ ├── ProductIdsProvider.php │ │ │ │ ├── ProductStrategyProvider.php │ │ │ │ ├── Strategy │ │ │ │ │ └── ProductRelationAttributeValueConstraintStrategy.php │ │ │ │ └── UpdateProductCommandFactoryProvider.php │ │ │ ├── Relation │ │ │ │ └── ProductMultimediaRelation.php │ │ │ └── Strategy │ │ │ │ ├── GroupingProductFactoryStrategy.php │ │ │ │ ├── ProductAttributeLanguageResolver.php │ │ │ │ ├── ProductFactoryStrategyInterface.php │ │ │ │ ├── Relationship │ │ │ │ ├── ChildrenProductRelationshipStrategy.php │ │ │ │ ├── ProductAttributeRelationshipStrategy.php │ │ │ │ ├── ProductCategoryRelationshipStrategy.php │ │ │ │ ├── ProductMultimediaRelationshipStrategy.php │ │ │ │ ├── ProductOptionRelationshipStrategy.php │ │ │ │ ├── ProductRelationAttributeRelationshipStrategy.php │ │ │ │ └── ProductWithVariantsAttributeRelationshipStrategy.php │ │ │ │ ├── SimpleProductFactoryStrategy.php │ │ │ │ └── VariableProductFactoryStrategy.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── nelmio_api_doc.yaml │ │ │ ├── routes.yml │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── attribute.en.yaml │ │ │ ├── attribute.pl.yaml │ │ │ ├── log.en.yaml │ │ │ ├── log.pl.yaml │ │ │ ├── notification.en.yml │ │ │ ├── notification.pl.yml │ │ │ ├── product.en.yaml │ │ │ └── product.pl.yaml │ └── tests │ │ ├── Application │ │ ├── Form │ │ │ ├── Attribute │ │ │ │ └── ProductRelationAttributeFormTest.php │ │ │ └── Product │ │ │ │ ├── Binding │ │ │ │ └── ProductBindFormTest.php │ │ │ │ ├── GroupingProductFormTest.php │ │ │ │ ├── Relation │ │ │ │ ├── ProductChildBySegmentFormTest.php │ │ │ │ ├── ProductChildBySkusFormTest.php │ │ │ │ └── ProductChildFormTest.php │ │ │ │ ├── SimpleProductFormTest.php │ │ │ │ └── VariableProductFormTest.php │ │ ├── Model │ │ │ └── Product │ │ │ │ └── Relation │ │ │ │ └── ProductChildFormModelTest.php │ │ ├── Provider │ │ │ ├── ProductFormProviderTest.php │ │ │ └── ProductTypeProviderTest.php │ │ └── Validator │ │ │ ├── NotTheSameProductValidatorTest.php │ │ │ ├── ProductChildValidatorTest.php │ │ │ ├── ProductExistsValidatorTest.php │ │ │ ├── ProductHasChildrenValidatorTest.php │ │ │ ├── ProductInvalidChildValidatorTest.php │ │ │ ├── ProductInvalidChildrenValidatorTest.php │ │ │ ├── ProductTypeValidatorTest.php │ │ │ ├── SkuExistsValidatorTest.php │ │ │ ├── SkuUniqueValidatorTest.php │ │ │ └── SkuValidatorTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── Attribute │ │ │ │ ├── ChangeProductAttributeValueCommandTest.php │ │ │ │ └── RemoveProductAttributeValueCommandTest.php │ │ │ ├── Bindings │ │ │ │ ├── AddProductBindingCommandTest.php │ │ │ │ └── RemoveProductBindingCommandTest.php │ │ │ ├── Category │ │ │ │ ├── AddProductCategoryCommandTest.php │ │ │ │ └── RemoveProductCategoryCommandTest.php │ │ │ ├── Create │ │ │ │ ├── CreateGroupingProductCommandTest.php │ │ │ │ ├── CreateSimpleProductCommandTest.php │ │ │ │ └── CreateVariableProductCommandTest.php │ │ │ ├── DeleteProductCommandTest.php │ │ │ ├── Relations │ │ │ │ ├── AddProductChildCommandTest.php │ │ │ │ ├── AddProductChildrenBySegmentsCommandTest.php │ │ │ │ ├── AddProductChildrenCommandTest.php │ │ │ │ └── RemoveProductChildCommandTest.php │ │ │ └── Update │ │ │ │ ├── UpdateGroupingProductCommandTest.php │ │ │ │ ├── UpdateSimpleProductCommandTest.php │ │ │ │ └── UpdateVariableProductCommandTest.php │ │ ├── Entity │ │ │ ├── AbstractAssociatedProductTest.php │ │ │ ├── AbstractProductTest.php │ │ │ ├── Attribute │ │ │ │ ├── CreatedAtSystemAttributeTest.php │ │ │ │ ├── CreatedBySystemAttributeTest.php │ │ │ │ ├── EditedAtSystemAttributeTest.php │ │ │ │ ├── EditedBySystemAttributeTest.php │ │ │ │ └── ProductRelationAttributeTest.php │ │ │ ├── GroupingProductTest.php │ │ │ ├── SimpleProductTest.php │ │ │ └── VariableProductTest.php │ │ ├── Event │ │ │ ├── Bind │ │ │ │ ├── BindAddedToProductEventTest.php │ │ │ │ └── BindRemovedFromProductEventTest.php │ │ │ ├── Child │ │ │ │ ├── ChildAddedToProductEventTest.php │ │ │ │ └── ChildRemovedFromProductEventTest.php │ │ │ ├── ProductAddedToCategoryEventTest.php │ │ │ ├── ProductCreatedEventTest.php │ │ │ ├── ProductDeletedEventTest.php │ │ │ ├── ProductRemovedFromCategoryEventTest.php │ │ │ ├── ProductTemplateChangeEventTest.php │ │ │ ├── ProductValueAddedEventTest.php │ │ │ ├── ProductValueChangedEventTest.php │ │ │ └── ProductValueRemovedEventTest.php │ │ └── ValueObject │ │ │ └── SkuTest.php │ │ └── Infrastructure │ │ ├── Factory │ │ └── Command │ │ │ ├── Create │ │ │ └── CreateProductRelationAttributeCommandFactoryTest.php │ │ │ └── Update │ │ │ └── UpdateProductRelationAttributeCommandFactoryTest.php │ │ ├── Filter │ │ └── BatchAction │ │ │ └── ProductBatchActionFilterTest.php │ │ ├── Grid │ │ ├── Builder │ │ │ ├── DataSetQueryBuilderProviderTest.php │ │ │ └── Query │ │ │ │ ├── DateAttributeDataSetQueryBuilderTest.php │ │ │ │ ├── ImageAttributeDataSetQueryBuilderTest.php │ │ │ │ ├── MultiSelectAttributeDataSetQueryBuilderTest.php │ │ │ │ ├── NumericAttributeDataSetQueryBuilderTest.php │ │ │ │ ├── PriceAttributeDataSetQueryBuilderTest.php │ │ │ │ ├── ProductTypeSystemAttributeDataSetQueryBuilderTest.php │ │ │ │ ├── SelectAttributeDataSetQueryBuilderTest.php │ │ │ │ ├── TextAttributeDataSetQueryBuilderTest.php │ │ │ │ ├── TextareaAttributeDataSetQueryBuilderTest.php │ │ │ │ └── UnitAttributeDataSetQueryBuilderTest.php │ │ ├── Column │ │ │ ├── HistoryColumnTest.php │ │ │ ├── ProductRelationColumnTest.php │ │ │ ├── Provider │ │ │ │ └── Strategy │ │ │ │ │ ├── CreatedAtSystemAttributeColumnBuilderStrategyTest.php │ │ │ │ │ ├── DateAttributeColumnStrategyTest.php │ │ │ │ │ ├── EditedAtSystemAttributeColumnBuilderStrategyTest.php │ │ │ │ │ ├── ImageAttributeColumnStrategyTest.php │ │ │ │ │ ├── NumericAttributeColumnStrategyTest.php │ │ │ │ │ ├── PriceAttributeColumnStrategyTest.php │ │ │ │ │ ├── ProductRelationAttributeColumnStrategyTest.php │ │ │ │ │ ├── TextAreaAttributeColumnStrategyTest.php │ │ │ │ │ └── UnitAttributeColumnStrategyTest.php │ │ │ └── Renderer │ │ │ │ └── ProductRelationColumnRendererTest.php │ │ ├── Filter │ │ │ └── RelationFilterTest.php │ │ ├── HistoryGridTest.php │ │ └── ProductChildrenGridBuilderTest.php │ │ ├── Handler │ │ ├── Attribute │ │ │ ├── Create │ │ │ │ └── CreateProductRelationAttributeCommandHandlerTest.php │ │ │ └── Update │ │ │ │ └── UpdateProductRelationAttributeCommandHandlerTest.php │ │ └── Category │ │ │ ├── AddProductCategoryCommandHandlerTest.php │ │ │ └── RemoveProductCategoryCommandHandlerTest.php │ │ ├── Mapper │ │ └── Strategy │ │ │ └── ProductRelationAttributeMapperStrategyTest.php │ │ └── Strategy │ │ └── ProductAttributeLanguageResolverTest.php ├── reader │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── migrations │ │ ├── Version20180619100000.php │ │ └── Version20210416123000.php │ ├── src │ │ ├── Application │ │ │ └── DependencyInjection │ │ │ │ └── ErgonodeReaderExtension.php │ │ ├── ErgonodeReaderBundle.php │ │ ├── Infrastructure │ │ │ ├── Exception │ │ │ │ └── ReaderException.php │ │ │ ├── Formatter │ │ │ │ ├── EncodingFormatter.php │ │ │ │ └── ReplaceFormatter.php │ │ │ ├── FormatterInterface.php │ │ │ ├── Processor │ │ │ │ └── CsvReaderProcessor.php │ │ │ ├── Provider │ │ │ │ └── ReaderProcessorProvider.php │ │ │ └── ReaderProcessorInterface.php │ │ └── Resources │ │ │ └── config │ │ │ ├── serialization.yaml │ │ │ └── services.yml │ └── tests │ │ ├── Infrastructure │ │ ├── Provider │ │ │ └── ReaderProcessorProviderTest.php │ │ └── Reader │ │ │ └── CsvReaderProcessorTest.php │ │ └── test.csv ├── segment │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ │ ├── segment-autocomplete.feature │ │ ├── segment-delete-condition-set.feature │ │ ├── segment-not-authenticated.feature │ │ ├── segment.feature │ │ └── segment.json │ ├── migrations │ │ ├── Version20190130104000.php │ │ ├── Version20201113124000.php │ │ ├── Version20201125121919.php │ │ ├── Version20210105101000.php │ │ ├── Version20210324103000.php │ │ └── Version20210601102541.php │ ├── src │ │ ├── Application │ │ │ ├── Controller │ │ │ │ └── Api │ │ │ │ │ ├── SegmentAutocompleteAction.php │ │ │ │ │ ├── SegmentChangeAction.php │ │ │ │ │ ├── SegmentCreateAction.php │ │ │ │ │ ├── SegmentDeleteAction.php │ │ │ │ │ ├── SegmentGridReadAction.php │ │ │ │ │ ├── SegmentProductsGridReadAction.php │ │ │ │ │ └── SegmentReadAction.php │ │ │ ├── DependencyInjection │ │ │ │ ├── Configuration.php │ │ │ │ └── ErgonodeSegmentExtension.php │ │ │ ├── Event │ │ │ │ ├── ProductExcludedFromSegmentEvent.php │ │ │ │ ├── ProductIncludedInSegmentEvent.php │ │ │ │ ├── SegmentCreateEvent.php │ │ │ │ ├── SegmentDeletedEvent.php │ │ │ │ └── SegmentUpdatedEvent.php │ │ │ ├── Form │ │ │ │ ├── CreateSegmentForm.php │ │ │ │ ├── Model │ │ │ │ │ ├── CreateSegmentFormModel.php │ │ │ │ │ └── UpdateSegmentFormModel.php │ │ │ │ └── UpdateSegmentForm.php │ │ │ ├── Transport │ │ │ │ ├── SegmentTransport.php │ │ │ │ └── SegmentTransportFactory.php │ │ │ └── Validator │ │ │ │ ├── SegmentCodeUnique.php │ │ │ │ ├── SegmentCodeUniqueValidator.php │ │ │ │ ├── SegmentExists.php │ │ │ │ └── SegmentExistsValidator.php │ │ ├── Domain │ │ │ ├── Command │ │ │ │ ├── CalculateSegmentProductCommand.php │ │ │ │ ├── CreateSegmentCommand.php │ │ │ │ ├── DeleteSegmentCommand.php │ │ │ │ ├── SegmentCommandInterface.php │ │ │ │ └── UpdateSegmentCommand.php │ │ │ ├── Entity │ │ │ │ └── Segment.php │ │ │ ├── Event │ │ │ │ ├── SegmentConditionSetChangedEvent.php │ │ │ │ ├── SegmentCreatedEvent.php │ │ │ │ ├── SegmentDeletedEvent.php │ │ │ │ ├── SegmentDescriptionChangedEvent.php │ │ │ │ └── SegmentNameChangedEvent.php │ │ │ ├── Query │ │ │ │ ├── SegmentGridQueryInterface.php │ │ │ │ ├── SegmentProductsGridQueryInterface.php │ │ │ │ ├── SegmentProductsQueryInterface.php │ │ │ │ └── SegmentQueryInterface.php │ │ │ ├── Repository │ │ │ │ └── SegmentRepositoryInterface.php │ │ │ └── ValueObject │ │ │ │ └── SegmentCode.php │ │ ├── ErgonodeSegmentBundle.php │ │ ├── Infrastructure │ │ │ ├── Exception │ │ │ │ ├── SegmentException.php │ │ │ │ └── SegmentGeneratorProviderException.php │ │ │ ├── Grid │ │ │ │ ├── SegmentGridBuilder.php │ │ │ │ └── SegmentProductsGridBuilder.php │ │ │ ├── Handler │ │ │ │ ├── Command │ │ │ │ │ ├── CalculateSegmentProductCommandHandler.php │ │ │ │ │ ├── CreateSegmentCommandHandler.php │ │ │ │ │ ├── DeleteSegmentCommandHandler.php │ │ │ │ │ └── UpdateSegmentCommandHandler.php │ │ │ │ └── Event │ │ │ │ │ └── Application │ │ │ │ │ ├── ProductCompletenessCalculatedEventHandler.php │ │ │ │ │ ├── ProductCreatedEventHandler.php │ │ │ │ │ ├── ProductDeletedEventHandler.php │ │ │ │ │ └── ProductUpdatedEventHandler.php │ │ │ ├── Persistence │ │ │ │ ├── Projector │ │ │ │ │ ├── AbstractDbalSegmentUpdateEventProjector.php │ │ │ │ │ ├── ConditionSet │ │ │ │ │ │ └── DbalConditionSetConditionsChangedEventProjector.php │ │ │ │ │ └── Segment │ │ │ │ │ │ ├── DbalSegmentConditionSetChangedEventProjector.php │ │ │ │ │ │ ├── DbalSegmentCreatedEventProjector.php │ │ │ │ │ │ ├── DbalSegmentDeletedEventProjector.php │ │ │ │ │ │ ├── DbalSegmentDescriptionChangedEventProjector.php │ │ │ │ │ │ └── DbalSegmentNameChangedEventProjector.php │ │ │ │ ├── Query │ │ │ │ │ ├── DbalSegmentGridQuery.php │ │ │ │ │ ├── DbalSegmentProductsGridQuery.php │ │ │ │ │ ├── DbalSegmentProductsQuery.php │ │ │ │ │ └── DbalSegmentQuery.php │ │ │ │ └── Repository │ │ │ │ │ └── EventStoreSegmentRepository.php │ │ │ ├── Service │ │ │ │ └── SegmentProductService.php │ │ │ └── Strategy │ │ │ │ └── Relationship │ │ │ │ └── ConditionSetSegmentRelationshipStrategy.php │ │ ├── Resources │ │ │ ├── config │ │ │ │ ├── messenger.yaml │ │ │ │ ├── nelmio_api_doc.yaml │ │ │ │ ├── routes.yml │ │ │ │ ├── services.yml │ │ │ │ └── test.yaml │ │ │ └── translations │ │ │ │ ├── grid.en.yaml │ │ │ │ ├── grid.pl.yaml │ │ │ │ ├── log.en.yaml │ │ │ │ ├── log.pl.yaml │ │ │ │ ├── privilege.en.yaml │ │ │ │ ├── privilege.pl.yaml │ │ │ │ ├── segment.en.yaml │ │ │ │ └── segment.pl.yaml │ │ └── Test │ │ │ └── TestSegmentEventHandler.php │ └── tests │ │ ├── Application │ │ └── Validator │ │ │ └── UniqueSegmentCodeValidatorTest.php │ │ ├── Domain │ │ ├── Command │ │ │ ├── CreateSegmentCommandTest.php │ │ │ ├── DeleteSegmentCommandTest.php │ │ │ └── UpdateSegmentCommandTest.php │ │ ├── Entity │ │ │ └── SegmentTest.php │ │ └── Event │ │ │ ├── SegmentConditionSetChangedEventTest.php │ │ │ ├── SegmentCreatedEventTest.php │ │ │ ├── SegmentDeletedEventTest.php │ │ │ ├── SegmentDescriptionChangedEventTest.php │ │ │ └── SegmentNameChangedEventTest.php │ │ └── Infrastructure │ │ ├── Grid │ │ └── SegmentGridTest.php │ │ └── Handler │ │ └── Command │ │ ├── CreateSegmentCommandHandlerTest.php │ │ ├── DeleteSegmentCommandHandlerTest.php │ │ └── UpdateSegmentCommandHandlerTest.php ├── shared-kernel │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── src │ │ ├── Application │ │ │ ├── AbstractModule.php │ │ │ ├── Api │ │ │ │ └── DTOInputInterface.php │ │ │ ├── ApplicationEventInterface.php │ │ │ ├── DependencyInjection │ │ │ │ └── ErgonodeSharedKernelExtension.php │ │ │ ├── Serializer │ │ │ │ ├── Exception │ │ │ │ │ ├── DenoralizationException.php │ │ │ │ │ ├── DeserializationException.php │ │ │ │ │ ├── NormalizationException.php │ │ │ │ │ ├── NormalizerException.php │ │ │ │ │ ├── SerializationException.php │ │ │ │ │ └── SerializerException.php │ │ │ │ ├── NormalizerInterface.php │ │ │ │ └── SerializerInterface.php │ │ │ └── Validator │ │ │ │ ├── SystemCode.php │ │ │ │ └── SystemCodeValidator.php │ │ ├── Domain │ │ │ ├── AbstractCode.php │ │ │ ├── AbstractId.php │ │ │ ├── Aggregate │ │ │ │ ├── AttributeGroupId.php │ │ │ │ ├── AttributeId.php │ │ │ │ ├── CategoryId.php │ │ │ │ ├── CategoryTreeId.php │ │ │ │ ├── ChannelId.php │ │ │ │ ├── CommentId.php │ │ │ │ ├── ConditionSetId.php │ │ │ │ ├── ExportId.php │ │ │ │ ├── ImportErrorId.php │ │ │ │ ├── ImportId.php │ │ │ │ ├── ImportLineId.php │ │ │ │ ├── LanguageId.php │ │ │ │ ├── MultimediaId.php │ │ │ │ ├── ProductCollectionElementId.php │ │ │ │ ├── ProductCollectionId.php │ │ │ │ ├── ProductCollectionTypeId.php │ │ │ │ ├── ProductId.php │ │ │ │ ├── RoleId.php │ │ │ │ ├── SegmentId.php │ │ │ │ ├── SourceId.php │ │ │ │ ├── StatusId.php │ │ │ │ ├── TemplateElementId.php │ │ │ │ ├── TemplateGroupId.php │ │ │ │ ├── TemplateId.php │ │ │ │ ├── TransformerId.php │ │ │ │ ├── TransitionId.php │ │ │ │ ├── UnitId.php │ │ │ │ ├── UserId.php │ │ │ │ └── WorkflowId.php │ │ │ ├── AggregateEventInterface.php │ │ │ ├── AggregateId.php │ │ │ ├── Bus │ │ │ │ ├── ApplicationEventBusInterface.php │ │ │ │ ├── CommandBusInterface.php │ │ │ │ └── DomainEventBusInterface.php │ │ │ ├── Collection │ │ │ │ └── EmailCollection.php │ │ │ ├── DomainCommandInterface.php │ │ │ ├── DomainEventInterface.php │ │ │ ├── Exception │ │ │ │ └── InvalidEmailException.php │ │ │ ├── User │ │ │ │ └── UserInterface.php │ │ │ └── ValueObject │ │ │ │ └── Email.php │ │ ├── ErgonodeSharedKernelBundle.php │ │ └── Resources │ │ │ └── config │ │ │ └── services.yml │ └── tests │ │ ├── Application │ │ └── Validator │ │ │ └── SystemCodeValidatorTest.php │ │ └── Domain │ │ ├── AbstractCodeTest.php │ │ └── ValueObject │ │ └── EmailTest.php ├── value │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── migrations │ │ └── Version20180619083831.php │ ├── src │ │ ├── Application │ │ │ ├── DependencyInjection │ │ │ │ └── ErgonodeValueExtension.php │ │ │ └── Serializer │ │ │ │ └── Normalizer │ │ │ │ └── TranslatableStringNormalizer.php │ │ ├── Domain │ │ │ ├── Event │ │ │ │ ├── ValueAddedEvent.php │ │ │ │ ├── ValueChangedEvent.php │ │ │ │ └── ValueRemovedEvent.php │ │ │ └── ValueObject │ │ │ │ ├── StringCollectionValue.php │ │ │ │ ├── StringValue.php │ │ │ │ ├── TranslatableStringValue.php │ │ │ │ └── ValueInterface.php │ │ ├── ErgonodeValueBundle.php │ │ ├── Infrastructure │ │ │ └── Persistence │ │ │ │ └── Projector │ │ │ │ ├── DbalValueAddedEventProjector.php │ │ │ │ ├── DbalValueChangedEventProjector.php │ │ │ │ └── DbalValueRemovedEventProjector.php │ │ └── Resources │ │ │ ├── config │ │ │ ├── serialization.yaml │ │ │ └── services.yml │ │ │ └── translations │ │ │ ├── log.en.yaml │ │ │ └── log.pl.yaml │ └── tests │ │ ├── .gitignore │ │ └── Domain │ │ ├── Event │ │ ├── ValueAddedEventTest.php │ │ ├── ValueChangedEventTest.php │ │ └── ValueRemovedEventTest.php │ │ └── ValueObject │ │ ├── StringCollectionValueTest.php │ │ ├── StringValueTest.php │ │ └── TranslatableStringValueTest.php └── workflow │ ├── .gitignore │ ├── LICENSE.txt │ ├── README.md │ ├── composer.json │ ├── features │ ├── condition-attribute-exists.feature │ ├── condition-product-completeness.feature │ ├── condition-role-is.feature │ ├── condition-user-is.feature │ ├── condition.feature │ ├── product-status-attribute.feature │ ├── status-not-authenticated.feature │ ├── status-order.feature │ ├── status.feature │ ├── transitions-not-authenticated.feature │ ├── transitions.feature │ ├── workflow-grid.feature │ ├── workflow-not-authenticated.feature │ └── workflow.feature │ ├── migrations │ ├── Version20190818160000.php │ ├── Version20201125114500.php │ ├── Version20201125121920.php │ ├── Version20210105100700.php │ ├── Version20210105120700.php │ ├── Version20210119140233.php │ ├── Version20210518083000.php │ ├── Version20210823112541.php │ ├── Version20211122120000.php │ ├── Version20211214160000.php │ └── Version20211216160000.php │ ├── src │ ├── Application │ │ ├── Controller │ │ │ └── Api │ │ │ │ ├── Condition │ │ │ │ ├── WorkflowConditionConfigurationReadAction.php │ │ │ │ └── WorkflowConditionReadAction.php │ │ │ │ ├── Dashboard │ │ │ │ └── WidgetStatusCountAction.php │ │ │ │ ├── Product │ │ │ │ └── ProductWorkflowAction.php │ │ │ │ ├── Status │ │ │ │ ├── StatusChangeAction.php │ │ │ │ ├── StatusCreateAction.php │ │ │ │ ├── StatusDeleteAction.php │ │ │ │ ├── StatusGridReadAction.php │ │ │ │ ├── StatusOrderAction.php │ │ │ │ └── StatusReadAction.php │ │ │ │ ├── Transition │ │ │ │ ├── TransitionChangeAction.php │ │ │ │ ├── TransitionConditionsChangeAction.php │ │ │ │ ├── TransitionConditionsReadAction.php │ │ │ │ ├── TransitionCreateAction.php │ │ │ │ ├── TransitionDeleteAction.php │ │ │ │ ├── TransitionGridReadAction.php │ │ │ │ └── TransitionReadAction.php │ │ │ │ └── Workflow │ │ │ │ ├── WorkflowChangeAction.php │ │ │ │ ├── WorkflowCreateAction.php │ │ │ │ ├── WorkflowDefaultStatusSetAction.php │ │ │ │ ├── WorkflowDeleteAction.php │ │ │ │ ├── WorkflowReadAction.php │ │ │ │ └── WorkflowTypeDictionaryAction.php │ │ ├── DependencyInjection │ │ │ ├── CompilerPass │ │ │ │ ├── CreateWorkflowCommandFactoryProviderInterfaceCompilerPass.php │ │ │ │ ├── UpdateWorkflowCommandFactoryProviderInterfaceCompilerPass.php │ │ │ │ ├── WorkflowFormCompilerPass.php │ │ │ │ └── WorkflowTypeCompilerPass.php │ │ │ ├── Configuration.php │ │ │ └── ErgonodeWorkflowExtension.php │ │ ├── Form │ │ │ ├── Model │ │ │ │ ├── StatusChangeFormModel.php │ │ │ │ ├── StatusCreateFormModel.php │ │ │ │ ├── StatusOrderSetFormModel.php │ │ │ │ ├── TransitionChangeFormModel.php │ │ │ │ ├── TransitionCreateFormModel.php │ │ │ │ ├── TransitionFormModel.php │ │ │ │ └── Workflow │ │ │ │ │ └── WorkflowFormModel.php │ │ │ ├── StatusChangeForm.php │ │ │ ├── StatusCreateForm.php │ │ │ ├── StatusOrderSetForm.php │ │ │ ├── TransitionChangeForm.php │ │ │ ├── TransitionCreateForm.php │ │ │ ├── TransitionForm.php │ │ │ └── Workflow │ │ │ │ ├── WorkflowForm.php │ │ │ │ └── WorkflowFormInterface.php │ │ ├── Provider │ │ │ ├── WorkflowFormProvider.php │ │ │ └── WorkflowTypeProvider.php │ │ ├── Request │ │ │ └── ParamConverter │ │ │ │ └── AbstractWorkflowParamConverter.php │ │ ├── Transport │ │ │ ├── StatusTransport.php │ │ │ └── StatusTransportFactory.php │ │ └── Validator │ │ │ ├── StatusAvailable.php │ │ │ ├── StatusAvailableValidator.php │ │ │ ├── StatusCodeUnique.php │ │ │ ├── StatusCodeUniqueValidator.php │ │ │ ├── StatusExists.php │ │ │ ├── StatusExistsValidator.php │ │ │ ├── StatusIdsContainAll.php │ │ │ ├── StatusIdsContainAllValidator.php │ │ │ ├── TransitionValid.php │ │ │ ├── TransitionValidValidator.php │ │ │ ├── WorkflowExists.php │ │ │ └── WorkflowExistsValidator.php │ ├── Domain │ │ ├── Calculator │ │ │ └── WorkflowConditionCalculator.php │ │ ├── Command │ │ │ ├── Product │ │ │ │ └── SetProductDefaultWorkflowStatusCommand.php │ │ │ ├── Status │ │ │ │ ├── CreateStatusCommand.php │ │ │ │ ├── DeleteStatusCommand.php │ │ │ │ ├── SetDefaultStatusCommand.php │ │ │ │ ├── SetStatusOrderCommand.php │ │ │ │ └── UpdateStatusCommand.php │ │ │ ├── Workflow │ │ │ │ ├── AddWorkflowTransitionCommand.php │ │ │ │ ├── CreateWorkflowCommand.php │ │ │ │ ├── CreateWorkflowCommandInterface.php │ │ │ │ ├── DeleteWorkflowCommand.php │ │ │ │ ├── DeleteWorkflowTransitionCommand.php │ │ │ │ ├── UpdateWorkflowCommand.php │ │ │ │ ├── UpdateWorkflowCommandInterface.php │ │ │ │ ├── UpdateWorkflowTransitionCommand.php │ │ │ │ └── UpdateWorkflowTransitionConditionsCommand.php │ │ │ └── WorkflowCommandInterface.php │ │ ├── Condition │ │ │ ├── Configuration │ │ │ │ ├── Parameter │ │ │ │ │ ├── MultiSelectWorkflowConditionConfigurationParameter.php │ │ │ │ │ ├── NumericWorkflowConditionConfigurationParameter.php │ │ │ │ │ ├── SelectWorkflowConditionConfigurationParameter.php │ │ │ │ │ └── TextWorkflowConditionConfigurationParameter.php │ │ │ │ ├── WorkflowConditionConfiguration.php │ │ │ │ └── WorkflowConditionConfigurationParameterInterface.php │ │ │ ├── WorkflowConditionCalculatorInterface.php │ │ │ ├── WorkflowConditionConfigurationInterface.php │ │ │ ├── WorkflowConditionInterface.php │ │ │ └── WorkflowConditionValidatorInterface.php │ │ ├── Entity │ │ │ ├── AbstractWorkflow.php │ │ │ ├── Attribute │ │ │ │ └── StatusSystemAttribute.php │ │ │ ├── Status.php │ │ │ ├── Transition.php │ │ │ ├── Workflow.php │ │ │ └── WorkflowInterface.php │ │ ├── Event │ │ │ ├── Status │ │ │ │ ├── StatusColorChangedEvent.php │ │ │ │ ├── StatusCreatedEvent.php │ │ │ │ ├── StatusDeletedEvent.php │ │ │ │ ├── StatusDescriptionChangedEvent.php │ │ │ │ └── StatusNameChangedEvent.php │ │ │ ├── Transition │ │ │ │ ├── TransitionConditionSetChangedEvent.php │ │ │ │ └── TransitionRoleIdsChangedEvent.php │ │ │ └── Workflow │ │ │ │ ├── WorkflowCreatedEvent.php │ │ │ │ ├── WorkflowDefaultStatusSetEvent.php │ │ │ │ ├── WorkflowDeletedEvent.php │ │ │ │ ├── WorkflowStatusAddedEvent.php │ │ │ │ ├── WorkflowStatusRemovedEvent.php │ │ │ │ ├── WorkflowTransitionAddedEvent.php │ │ │ │ ├── WorkflowTransitionConditionsChangedEvent.php │ │ │ │ └── WorkflowTransitionRemovedEvent.php │ │ ├── Factory │ │ │ ├── AddStatusToProductFactoryDecorator.php │ │ │ ├── StatusFactory.php │ │ │ └── WorkflowFactory.php │ │ ├── Notification │ │ │ └── StatusChangedNotification.php │ │ ├── Provider │ │ │ ├── ProductStatusProvider.php │ │ │ ├── WorkflowProvider.php │ │ │ └── WorkflowProviderInterface.php │ │ ├── Query │ │ │ ├── ProductStatusQueryInterface.php │ │ │ ├── ProductWorkflowStatusQueryInterface.php │ │ │ ├── StatusGridQueryInterface.php │ │ │ ├── StatusQueryInterface.php │ │ │ ├── TransitionConditionSetQueryInterface.php │ │ │ ├── TransitionGridQueryInterface.php │ │ │ ├── TransitionQueryInterface.php │ │ │ └── WorkflowQueryInterface.php │ │ ├── Repository │ │ │ ├── StatusRepositoryInterface.php │ │ │ └── WorkflowRepositoryInterface.php │ │ ├── Service │ │ │ └── StatusCalculationService.php │ │ └── ValueObject │ │ │ └── StatusCode.php │ ├── ErgonodeWorkflowBundle.php │ ├── Infrastructure │ │ ├── Condition │ │ │ ├── AttributeExistsWorkflowCondition.php │ │ │ ├── Calculator │ │ │ │ ├── AttributeExistsWorkflowConditionCalculator.php │ │ │ │ ├── ProductCompletenessWorkflowConditionCalculator.php │ │ │ │ ├── RoleIsWorkflowConditionCalculator.php │ │ │ │ └── UserIsWorkflowConditionCalculator.php │ │ │ ├── Configuration │ │ │ │ ├── AttributeExistsWorkflowConditionConfiguration.php │ │ │ │ ├── ProductCompletenessWorkflowConditionConfiguration.php │ │ │ │ ├── RoleIsWorkflowConditionConfiguration.php │ │ │ │ └── UserIsWorkflowConditionConfiguration.php │ │ │ ├── ProductCompletenessWorkflowCondition.php │ │ │ ├── RoleIsWorkflowCondition.php │ │ │ ├── UserIsWorkflowCondition.php │ │ │ └── Validator │ │ │ │ ├── AttributeExistsWorkflowConditionValidator.php │ │ │ │ ├── ProductCompletenessWorkflowConditionValidator.php │ │ │ │ ├── RoleIsWorkflowConditionValidator.php │ │ │ │ └── UserIsWorkflowConditionValidator.php │ │ ├── Exception │ │ │ └── WorkflowConditionCalculatorException.php │ │ ├── Factory │ │ │ └── Command │ │ │ │ ├── Create │ │ │ │ └── CreateWorkflowCommandFactory.php │ │ │ │ ├── CreateWorkflowCommandFactoryInterface.php │ │ │ │ ├── Update │ │ │ │ └── UpdateWorkflowCommandFactory.php │ │ │ │ └── UpdateWorkflowCommandFactoryInterface.php │ │ ├── Grid │ │ │ ├── Builder │ │ │ │ └── Query │ │ │ │ │ └── StatusAttributeDataSetQueryBuilder.php │ │ │ ├── Column │ │ │ │ └── Strategy │ │ │ │ │ └── StatusAttributeColumnStrategy.php │ │ │ ├── Filter │ │ │ │ └── Option │ │ │ │ │ └── StatusOption.php │ │ │ ├── StatusGridBuilder.php │ │ │ └── TransitionGridBuilder.php │ │ ├── Handler │ │ │ ├── Event │ │ │ │ └── ProductValueChangedEventHandler.php │ │ │ ├── Product │ │ │ │ └── SetProductDefaultWorkflowStatusCommandHandler.php │ │ │ ├── Status │ │ │ │ ├── CreateStatusCommandHandler.php │ │ │ │ ├── DeleteStatusCommandHandler.php │ │ │ │ ├── SetStatusOrderCommandHandler.php │ │ │ │ └── UpdateStatusCommandHandler.php │ │ │ └── Workflow │ │ │ │ ├── AddWorkflowTransitionCommandHandler.php │ │ │ │ ├── CreateWorkflowCommandHandler.php │ │ │ │ ├── DeleteWorkflowCommandHandler.php │ │ │ │ ├── DeleteWorkflowTransitionCommandHandler.php │ │ │ │ ├── UpdateWorkflowCommandHandler.php │ │ │ │ ├── UpdateWorkflowTransitionCommandHandler.php │ │ │ │ ├── UpdateWorkflowTransitionConditionsCommandHandler.php │ │ │ │ └── WorkflowDefaultStatusSetCommandHandler.php │ │ ├── Mapper │ │ │ └── Strategy │ │ │ │ └── StatusAttributeMapperStrategy.php │ │ ├── Persistence │ │ │ ├── Projector │ │ │ │ ├── DbalStatusColorChangedEventProjector.php │ │ │ │ ├── DbalStatusCreatedEventProjector.php │ │ │ │ ├── DbalStatusDeletedEventProjector.php │ │ │ │ ├── DbalStatusDescriptionChangedEventProjector.php │ │ │ │ ├── DbalStatusNameChangedEventProjector.php │ │ │ │ ├── Product │ │ │ │ │ ├── DbalProductDeletedEventProjector.php │ │ │ │ │ ├── DbalProductValueAddedEventProjector.php │ │ │ │ │ └── DbalProductValueChangedEventProjector.php │ │ │ │ ├── Transition │ │ │ │ │ ├── TransitionConditionSetChangedEventProjector.php │ │ │ │ │ └── TransitionRolesIdsChangedEventProjector.php │ │ │ │ └── Workflow │ │ │ │ │ ├── DbalWorkflowCreatedEventProjector.php │ │ │ │ │ ├── DbalWorkflowDefaultStatusSetEventProjector.php │ │ │ │ │ ├── DbalWorkflowDeletedEventProjector.php │ │ │ │ │ ├── DbalWorkflowStatusAddedEventProjector.php │ │ │ │ │ ├── DbalWorkflowTransitionAddedEventProjector.php │ │ │ │ │ └── DbalWorkflowTransitionRemovedEventProjector.php │ │ │ ├── Query │ │ │ │ ├── DbalProductStatusQuery.php │ │ │ │ ├── DbalProductWorkflowStatusQuery.php │ │ │ │ ├── DbalStatusGridQuery.php │ │ │ │ ├── DbalStatusQuery.php │ │ │ │ ├── DbalTransitionGridQuery.php │ │ │ │ ├── DbalTransitionQuery.php │ │ │ │ └── DbalWorkflowQuery.php │ │ │ └── Repository │ │ │ │ ├── EventStoreStatusRepository.php │ │ │ │ └── EventStoreWorkflowRepository.php │ │ ├── Provider │ │ │ ├── CreateWorkflowCommandFactoryProvider.php │ │ │ ├── Strategy │ │ │ │ └── StatusAttributeValueConstraintStrategy.php │ │ │ ├── UpdateWorkflowCommandFactoryProvider.php │ │ │ ├── UserIdsProvider.php │ │ │ ├── WorkflowConditionCalculatorProvider.php │ │ │ ├── WorkflowConditionConfigurationProvider.php │ │ │ ├── WorkflowConditionDictionaryProvider.php │ │ │ └── WorkflowConditionValidatorProvider.php │ │ ├── Query │ │ │ └── ProductWorkflowQuery.php │ │ ├── Strategy │ │ │ └── Relationship │ │ │ │ ├── ConditionSetWorkflowTransitionRelationshipStrategy.php │ │ │ │ ├── DefaultStatusRelationshipStrategy.php │ │ │ │ ├── StatusProductRelationshipStrategy.php │ │ │ │ └── StatusWorkflowRelationshipStrategy.php │ │ └── Validator │ │ │ └── WorkflowConditionValidatorBuilder.php │ ├── Resources │ │ ├── config │ │ │ ├── messenger.yaml │ │ │ ├── nelmio_api_doc.yaml │ │ │ ├── routes.yml │ │ │ ├── serialization.yaml │ │ │ ├── services.yml │ │ │ └── test.yaml │ │ └── translations │ │ │ ├── grid.en.yaml │ │ │ ├── grid.pl.yaml │ │ │ ├── log.en.yaml │ │ │ ├── log.pl.yaml │ │ │ ├── workflow.en.yaml │ │ │ └── workflow.pl.yaml │ └── Test │ │ └── TestStatusEventHandler.php │ └── tests │ ├── Application │ ├── Controller │ │ └── Api │ │ │ ├── Condition │ │ │ ├── WorkflowConditionConfigurationReadActionTest.php │ │ │ └── WorkflowConditionReadActionTest.php │ │ │ └── Dashboard │ │ │ └── WidgetStatusCountActionTest.php │ ├── Form │ │ └── Workflow │ │ │ └── WorkflowFormTest.php │ ├── Request │ │ └── ParamConverter │ │ │ └── AbstractWorkflowParamConverterTest.php │ └── Validator │ │ ├── StatusIdsContainAllValidatorTest.php │ │ └── TransitionValidValidatorTest.php │ ├── Domain │ ├── Command │ │ ├── Status │ │ │ ├── CreateStatusCommandTest.php │ │ │ ├── DeleteStatusCommandTest.php │ │ │ ├── SetDefaultStatusCommandTest.php │ │ │ └── UpdateStatusCommandTest.php │ │ └── Workflow │ │ │ ├── AddWorkflowTransitionCommandTest.php │ │ │ ├── CreateWorkflowCommandTest.php │ │ │ ├── DeleteWorkflowCommandTest.php │ │ │ ├── DeleteWorkflowTransitionCommandTest.php │ │ │ ├── UpdateWorkflowCommandTest.php │ │ │ └── UpdateWorkflowTransitionCommandTest.php │ ├── Entity │ │ ├── AbstractWorkflowTest.php │ │ ├── Attribute │ │ │ └── StatusSystemAttributeTest.php │ │ ├── StatusTest.php │ │ ├── TransitionTest.php │ │ └── WorkflowTest.php │ ├── Event │ │ ├── Status │ │ │ ├── StatusColorChangedEventTest.php │ │ │ ├── StatusDeletedEventTest.php │ │ │ ├── StatusDescriptionChangedEventTest.php │ │ │ └── StatusNameChangedEventTest.php │ │ ├── Transition │ │ │ ├── TransitionConditionSetChangedEventTest.php │ │ │ └── TransitionRoleIdsChangedEventTest.php │ │ └── Workflow │ │ │ ├── WorkflowDefaultStatusSetEventTest.php │ │ │ ├── WorkflowDeletedEventTest.php │ │ │ ├── WorkflowStatusAddedEventTest.php │ │ │ ├── WorkflowStatusRemovedEventTest.php │ │ │ ├── WorkflowTransitionAddedEventTest.php │ │ │ ├── WorkflowTransitionConditionsChangedEventTest.php │ │ │ └── WorkflowTransitionRemovedEventTest.php │ ├── Factory │ │ ├── StatusFactoryTest.php │ │ └── WorkflowFactoryTest.php │ ├── Notification │ │ └── StatusChangedNotificationTest.php │ └── Provider │ │ ├── ProductStatusProviderTest.php │ │ └── WorkflowProviderTest.php │ ├── Infrastructure │ ├── Condition │ │ ├── Calculator │ │ │ └── AttributeExistsWorkflowConditionCalculatorTest.php │ │ └── Configuration │ │ │ ├── Parameter │ │ │ ├── MultiSelectWorkflowConditionConfigurationParameterTest.php │ │ │ ├── SelectWorkflowConditionConfigurationParameterTest.php │ │ │ └── TextWorkflowConditionConfigurationParameterTest.php │ │ │ └── WorkflowConditionConfigurationTest.php │ ├── Factory │ │ └── Command │ │ │ ├── Create │ │ │ └── CreateWorkflowCommandFactoryTest.php │ │ │ └── Update │ │ │ └── UpdateWorkflowCommandFactoryTest.php │ ├── Handler │ │ ├── Status │ │ │ ├── CreateStatusCommandHandlerTest.php │ │ │ ├── DeleteStatusCommandHandlerTest.php │ │ │ └── UpdateStatusCommandHandlerTest.php │ │ └── Workflow │ │ │ ├── AddWorkflowTransitionCommandHandlerTest.php │ │ │ ├── CreateWorkflowCommandHandlerTest.php │ │ │ ├── DeleteWorkflowCommandHandlerTest.php │ │ │ ├── DeleteWorkflowTransitionCommandHandlerTest.php │ │ │ ├── UpdateWorkflowCommandHandlerTest.php │ │ │ └── UpdateWorkflowTransitionCommandHandlerTest.php │ ├── Mapper │ │ └── Strategy │ │ │ └── StatusAttributeMapperStrategyTest.php │ └── Provider │ │ └── WorkflowConditionDictionaryProviderTest.php │ └── Persistence │ └── Dbal │ └── Query │ └── DbalStatusQueryTest.php ├── phpcs.xml.dist ├── phpstan.neon.dist ├── phpunit.xml.dist ├── public ├── .htaccess ├── avatar │ └── .gitignore ├── healthcheck.json ├── index.php ├── multimedia │ └── .gitignore └── thumbnail │ └── .gitignore ├── src ├── Kernel.php └── Resources │ ├── fixtures │ ├── develop │ │ ├── attributes.yaml │ │ ├── categories.yaml │ │ ├── channels.yaml │ │ ├── collections.yaml │ │ ├── comment.yaml │ │ ├── conditions.yaml │ │ ├── fixture.yaml │ │ ├── multimedia.yaml │ │ ├── options.yaml │ │ ├── products.yaml │ │ ├── roles.yaml │ │ ├── segments.yaml │ │ ├── templates.yaml │ │ ├── translation.yaml │ │ ├── units.yaml │ │ └── user.yaml │ ├── e2e │ │ ├── attributes.yaml │ │ ├── categories.yaml │ │ ├── collections.yaml │ │ ├── conditions.yaml │ │ ├── fixture.yaml │ │ ├── multimedia.yaml │ │ ├── options.yaml │ │ ├── products.yaml │ │ ├── roles.yaml │ │ ├── segments.yaml │ │ ├── templates.yaml │ │ ├── translation.yaml │ │ ├── units.yaml │ │ ├── user.yaml │ │ └── workflow.yaml │ ├── fixture.yaml │ └── test │ │ ├── attributes.yaml │ │ ├── categories.yaml │ │ ├── collections.yaml │ │ ├── fixture.yaml │ │ ├── multimedia.yaml │ │ ├── products.yaml │ │ ├── roles.yaml │ │ ├── segments.yaml │ │ ├── templates.yaml │ │ ├── units.yaml │ │ ├── user.yaml │ │ └── workflow.yaml │ └── image │ ├── document-1.txt │ ├── product-1.jpg │ ├── product-10.jpg │ ├── product-2.jpg │ ├── product-3.jpg │ ├── product-4.jpg │ ├── product-5.jpg │ ├── product-6.jpg │ ├── product-7.jpg │ ├── product-8.jpg │ └── product-9.jpg ├── symfony.lock ├── templates └── .gitignore ├── tests ├── .gitignore └── bootstrap.php └── translations └── .gitignore /.docheader: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright © Ergonode Sp. z o.o. All rights reserved. 3 | * See LICENSE.txt for license details. 4 | */ 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question 3 | about: You have a question? 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | 12 | 13 | * Community Chat: Links: [discord](https://discord.gg/NntXFa4) 14 | * Twitter: If it's just a quick question you can ping our [Twitter](https://twitter.com/ergonode) 15 | -------------------------------------------------------------------------------- /bin/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | !console 4 | -------------------------------------------------------------------------------- /config/jwt/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /config/packages/dev/nelmio_alice.yaml: -------------------------------------------------------------------------------- 1 | nelmio_alice: 2 | functions_blacklist: 3 | - 'current' 4 | - 'shuffle' 5 | - 'date' 6 | - 'time' 7 | - 'file' 8 | - 'md5' 9 | - 'sha1' 10 | -------------------------------------------------------------------------------- /config/packages/dev/routing.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | router: 3 | strict_requirements: true 4 | -------------------------------------------------------------------------------- /config/packages/dev/web_profiler.yaml: -------------------------------------------------------------------------------- 1 | web_profiler: 2 | toolbar: true 3 | intercept_redirects: false 4 | 5 | framework: 6 | profiler: { only_exceptions: false } 7 | -------------------------------------------------------------------------------- /config/packages/ergonode_account.yaml: -------------------------------------------------------------------------------- 1 | ergonode_account: 2 | hosts: '%env(json:APP_HOSTS)%' 3 | -------------------------------------------------------------------------------- /config/packages/ergonode_core.yaml: -------------------------------------------------------------------------------- 1 | ergonode_core: 2 | use_async_bus: '%env(bool:USE_ASYNC_BUS)%' 3 | -------------------------------------------------------------------------------- /config/packages/ergonode_event_sourcing.yaml: -------------------------------------------------------------------------------- 1 | ergonode_event_sourcing: 2 | snapshot_frequency: 1 3 | aggregate_root_cache: aggregate.cache 4 | -------------------------------------------------------------------------------- /config/packages/framework.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | secret: '%env(APP_SECRET)%' 3 | csrf_protection: false 4 | default_locale: 'en' 5 | translator: 6 | fallback: ['en'] 7 | php_errors: 8 | log: true 9 | serializer: 10 | name_converter: 'serializer.name_converter.camel_case_to_snake_case' 11 | cache: 12 | pools: 13 | aggregate.cache: 14 | adapter: cache.adapter.filesystem 15 | default_lifetime: 7200 -------------------------------------------------------------------------------- /config/packages/gesdinet_jwt_refresh_token.yaml: -------------------------------------------------------------------------------- 1 | gesdinet_jwt_refresh_token: 2 | user_provider: 'security.user.provider.concrete.id_user_provider' 3 | user_identity_field: id 4 | ttl: '%env(int:JWT_REFRESH_TOKEN_TTL)%' 5 | single_use: true 6 | -------------------------------------------------------------------------------- /config/packages/mailer.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | mailer: 3 | dsn: '%env(MAILER_DSN)%' 4 | envelope: 5 | sender: '%env(MAILER_SENDER)%' 6 | 7 | ergonode_mailer: 8 | default: 9 | replyTo: '%env(MAILER_SENDER)%' 10 | from: '%env(MAILER_SENDER)%' -------------------------------------------------------------------------------- /config/packages/monolog.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | Monolog\Processor\ProcessIdProcessor: 3 | autoconfigure: true 4 | -------------------------------------------------------------------------------- /config/packages/routing.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | router: 3 | strict_requirements: ~ 4 | -------------------------------------------------------------------------------- /config/packages/test/ergonode_batch_action.yaml: -------------------------------------------------------------------------------- 1 | ergonode_batch_action: 2 | test: true 3 | -------------------------------------------------------------------------------- /config/packages/test/ergonode_core.yaml: -------------------------------------------------------------------------------- 1 | ergonode_core: 2 | test: true 3 | -------------------------------------------------------------------------------- /config/packages/test/ergonode_event_sourcing.yaml: -------------------------------------------------------------------------------- 1 | ergonode_event_sourcing: 2 | aggregate_root_cache: ~ 3 | -------------------------------------------------------------------------------- /config/packages/test/ergonode_segment.yaml: -------------------------------------------------------------------------------- 1 | ergonode_segment: 2 | test: true 3 | -------------------------------------------------------------------------------- /config/packages/test/ergonode_workflow.yaml: -------------------------------------------------------------------------------- 1 | ergonode_workflow: 2 | test: true 3 | -------------------------------------------------------------------------------- /config/packages/test/framework.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | test: true 3 | -------------------------------------------------------------------------------- /config/packages/test/monolog.yaml: -------------------------------------------------------------------------------- 1 | monolog: 2 | channels: ['import'] 3 | handlers: 4 | main: 5 | type: stream 6 | path: "%kernel.logs_dir%/%kernel.environment%.log" 7 | level: debug 8 | channels: ["!event"] 9 | error: 10 | type: stream 11 | path: "%kernel.logs_dir%/%kernel.environment%-error.log" 12 | level: error 13 | -------------------------------------------------------------------------------- /config/packages/test/nelmio_alice.yaml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: ../dev/nelmio_alice.yaml } 3 | -------------------------------------------------------------------------------- /config/packages/test/web_profiler.yaml: -------------------------------------------------------------------------------- 1 | web_profiler: 2 | toolbar: false 3 | intercept_redirects: false 4 | 5 | framework: 6 | profiler: { collect: false } 7 | -------------------------------------------------------------------------------- /config/packages/translation.yaml: -------------------------------------------------------------------------------- 1 | framework: 2 | default_locale: '%locale%' 3 | translator: 4 | paths: 5 | - '%kernel.project_dir%/translations' 6 | fallbacks: 7 | - '%locale%' 8 | -------------------------------------------------------------------------------- /config/packages/twig.yaml: -------------------------------------------------------------------------------- 1 | twig: 2 | paths: ['%kernel.project_dir%/templates'] 3 | debug: '%kernel.debug%' 4 | strict_variables: '%kernel.debug%' 5 | -------------------------------------------------------------------------------- /config/packages/vich_uploader.yaml: -------------------------------------------------------------------------------- 1 | vich_uploader: 2 | db_driver: orm 3 | 4 | #mappings: 5 | # products: 6 | # uri_prefix: /images/products 7 | # upload_destination: '%kernel.project_dir%/public/images/products' 8 | -------------------------------------------------------------------------------- /config/routes.yaml: -------------------------------------------------------------------------------- 1 | #index: 2 | # path: / 3 | # controller: App\Controller\DefaultController::index 4 | 5 | gesdinet_jwt_refresh_token: 6 | path: /api/v1/token/refresh 7 | controller: gesdinet.jwtrefreshtoken::refresh 8 | -------------------------------------------------------------------------------- /config/routes/dev/twig.yaml: -------------------------------------------------------------------------------- 1 | _errors: 2 | resource: '@FrameworkBundle/Resources/config/routing/errors.xml' 3 | prefix: /_error 4 | -------------------------------------------------------------------------------- /config/routes/dev/web_profiler.yaml: -------------------------------------------------------------------------------- 1 | web_profiler_wdt: 2 | resource: '@WebProfilerBundle/Resources/config/routing/wdt.xml' 3 | prefix: /_wdt 4 | 5 | web_profiler_profiler: 6 | resource: '@WebProfilerBundle/Resources/config/routing/profiler.xml' 7 | prefix: /_profiler 8 | -------------------------------------------------------------------------------- /config/routes/nelmio_api_doc.yaml: -------------------------------------------------------------------------------- 1 | # Expose your documentation as JSON swagger compliant 2 | #app.swagger: 3 | # path: /api/doc.json 4 | # methods: GET 5 | # defaults: { _controller: nelmio_api_doc.controller.swagger } 6 | 7 | ## Requires the Asset component and the Twig bundle 8 | ## $ composer require twig asset 9 | app.swagger_ui: 10 | path: /api/doc 11 | methods: GET 12 | defaults: { _controller: nelmio_api_doc.controller.swagger_ui } 13 | -------------------------------------------------------------------------------- /export/.gitignore: -------------------------------------------------------------------------------- 1 | * -------------------------------------------------------------------------------- /import/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/import/.gitignore -------------------------------------------------------------------------------- /infection.json.dist: -------------------------------------------------------------------------------- 1 | { 2 | "source": { 3 | "directories": [ 4 | "module/*/src", 5 | "src" 6 | ] 7 | }, 8 | "logs": { 9 | "text": "infection.log" 10 | }, 11 | "mutators": { 12 | "@default": true, 13 | "ProtectedVisibility": false 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /module/account/.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | composer.lock 3 | -------------------------------------------------------------------------------- /module/account/features/account-behatch.feature: -------------------------------------------------------------------------------- 1 | Feature: Account module 2 | 3 | Scenario: Get profile 4 | Given I am Authenticated as "test@ergonode.com" 5 | When I send a GET request to "/api/v1/profile" 6 | Then the response status code should be 200 7 | And the JSON nodes should contain: 8 | | first_name | Johnny | 9 | | email | test@ergonode.com | 10 | 11 | 12 | -------------------------------------------------------------------------------- /module/account/features/avatar-test-empty-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/module/account/features/avatar-test-empty-image.png -------------------------------------------------------------------------------- /module/account/features/avatar-test-image.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/module/account/features/avatar-test-image.ico -------------------------------------------------------------------------------- /module/account/features/avatar-test-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/module/account/features/avatar-test-image.jpg -------------------------------------------------------------------------------- /module/account/features/avatar-test-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/module/account/features/avatar-test-image.png -------------------------------------------------------------------------------- /module/account/src/Application/Validator/HostAvailable.php: -------------------------------------------------------------------------------- 1 | 16 | */ 17 | public function getDictionary(): array; 18 | } 19 | -------------------------------------------------------------------------------- /module/attribute/src/Resources/config/serialization.yaml: -------------------------------------------------------------------------------- 1 | Ergonode\Attribute\Domain\ValueObject\OptionInterface: 2 | discriminator_map: 3 | type_property: 'type' 4 | mapping: 5 | string: Ergonode\Attribute\Domain\ValueObject\OptionValue\StringOption 6 | translation: Ergonode\Attribute\Domain\ValueObject\OptionValue\MultilingualOption 7 | -------------------------------------------------------------------------------- /module/attribute/src/Resources/translations/attribute.en.yaml: -------------------------------------------------------------------------------- 1 | TEXT: Text 2 | NUMERIC: Numeric 3 | TEXT_AREA: Textarea 4 | DATE: Date 5 | SELECT: Select 6 | MULTI_SELECT: Multi select 7 | IMAGE: Image 8 | GALLERY: Gallery 9 | COMPLEX: Complex 10 | PRICE: Price 11 | UNIT: Unit 12 | FILE: File 13 | Basic: Basic data 14 | Data: Attribute data 15 | History: History 16 | Multilingual: Multilingual 17 | Attributes: Attributes 18 | -------------------------------------------------------------------------------- /module/attribute/src/Resources/translations/attribute.pl.yaml: -------------------------------------------------------------------------------- 1 | TEXT: Pole tekstowe 2 | NUMERIC: Numeryczny 3 | TEXT_AREA: Obszar tekstowy 4 | DATE: Data 5 | SELECT: Pole wyboru 6 | MULTI_SELECT: Lista Wyboru 7 | IMAGE: Zdjęcie 8 | GALLERY: Galeria 9 | COMPLEX: Złożony 10 | PRICE: Cena 11 | UNIT: Jednostka 12 | FILE: Plik 13 | Basic: Dane podstawowe 14 | Data: Dane produktu 15 | History: Historia 16 | Multilingual: Wielojęzyczny 17 | Attributes: Attrybuty 18 | -------------------------------------------------------------------------------- /module/attribute/src/Resources/translations/grid.en.yaml: -------------------------------------------------------------------------------- 1 | Index: Index 2 | Code: Code 3 | Name (): Name () 4 | Type: Type 5 | Edit: Edit 6 | Delete: Delete 7 | System name: System name 8 | Name: Name 9 | Scope: Scope 10 | Groups: Groups 11 | Number of attributes: Number of attributes 12 | -------------------------------------------------------------------------------- /module/attribute/src/Resources/translations/grid.pl.yaml: -------------------------------------------------------------------------------- 1 | Index: Lp 2 | Code: Kod 3 | Name (): Nazwa () 4 | Type: Typ 5 | Edit: Edytuj 6 | Delete: Usuń 7 | System name: Nazwa systemowa 8 | Name: Nazwa 9 | Scope: Zakres 10 | Groups: Grupy 11 | Number of attributes: Liczba atrybutów 12 | -------------------------------------------------------------------------------- /module/attribute/src/Resources/translations/privilege.en.yaml: -------------------------------------------------------------------------------- 1 | Attributes: Attributes 2 | -------------------------------------------------------------------------------- /module/attribute/src/Resources/translations/privilege.pl.yaml: -------------------------------------------------------------------------------- 1 | Attributes: Atrybuty 2 | -------------------------------------------------------------------------------- /module/authentication/.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | composer.lock 3 | -------------------------------------------------------------------------------- /module/authentication/src/Resources/config/gesdinet_jwt_refresh_token.yaml: -------------------------------------------------------------------------------- 1 | gesdinet_jwt_refresh_token: 2 | object_manager: Ergonode\Authentication\Application\RefreshToken\Doctrine\RefreshTokenManager 3 | doctrine_mappings: false 4 | -------------------------------------------------------------------------------- /module/authentication/src/Resources/config/routes.yml: -------------------------------------------------------------------------------- 1 | ergonode_authentication_api: 2 | resource: '../../Application/Controller/Api/*' 3 | type: 'annotation' 4 | prefix: '/' 5 | -------------------------------------------------------------------------------- /module/authentication/src/Resources/config/services.yml: -------------------------------------------------------------------------------- 1 | services: 2 | _defaults: 3 | autowire: true 4 | autoconfigure: true 5 | public: false 6 | 7 | Ergonode\Authentication\Application\Security\: 8 | resource: '../../Application/Security/*' 9 | -------------------------------------------------------------------------------- /module/authentication/tests/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/module/authentication/tests/.gitignore -------------------------------------------------------------------------------- /module/batch-action/.gitignore: -------------------------------------------------------------------------------- 1 | vendor/ 2 | composer.lock 3 | -------------------------------------------------------------------------------- /module/batch-action/features/batch-action-grid.feature: -------------------------------------------------------------------------------- 1 | Feature: Batch action manipulation 2 | 3 | Background: 4 | Given I am Authenticated as "test@ergonode.com" 5 | And I add "Content-Type" header equal to "application/json" 6 | And I add "Accept" header equal to "application/json" 7 | 8 | Scenario: Get not exists batch action grid 9 | And I send a "GET" request to "/api/v1/en_GB/batch-action/@@random_uuid@@/entries" 10 | Then the response status code should be 404 11 | -------------------------------------------------------------------------------- /module/batch-action/features/batch-action-notification.feature: -------------------------------------------------------------------------------- 1 | Feature: batch action module profile notification 2 | 3 | Background: 4 | Given I am Authenticated as "test@ergonode.com" 5 | And I add "Content-Type" header equal to "application/json" 6 | And I add "Accept" header equal to "application/json" 7 | 8 | Scenario: Get batch action info 9 | When I send a GET request to "/api/v1/en_GB/profile/batch-action" 10 | Then the response status code should be 200 11 | -------------------------------------------------------------------------------- /module/batch-action/src/Application/Form/BatchActionFormInterface.php: -------------------------------------------------------------------------------- 1 | )>)>'] } 4 | 5 | Ergonode\Comment\Domain\Entity\Comment: 6 | note_{1..1000}: 7 | __construct: 8 | - '' 9 | - '@object_id_*' 10 | - '' 11 | - 'Note content' 12 | -------------------------------------------------------------------------------- /src/Resources/fixtures/develop/conditions.yaml: -------------------------------------------------------------------------------- 1 | Ergonode\Condition\Domain\Condition\AttributeExistsCondition: 2 | condition_attribute_exists: 3 | __construct: 4 | - '' 5 | 6 | Ergonode\Condition\Domain\Command\CreateConditionSetCommand: 7 | test_condition: 8 | __construct: 9 | - '' 10 | - ['@condition_attribute_exists'] 11 | -------------------------------------------------------------------------------- /src/Resources/fixtures/develop/fixture.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - 'multimedia.yaml' 3 | - 'roles.yaml' 4 | - 'user.yaml' 5 | - 'translation.yaml' 6 | - 'options.yaml' 7 | - 'attributes.yaml' 8 | - 'templates.yaml' 9 | - 'categories.yaml' 10 | - 'products.yaml' 11 | - 'conditions.yaml' 12 | - 'segments.yaml' 13 | - 'comment.yaml' 14 | - 'collections.yaml' 15 | - 'units.yaml' 16 | -------------------------------------------------------------------------------- /src/Resources/fixtures/develop/multimedia.yaml: -------------------------------------------------------------------------------- 1 | Ergonode\Multimedia\Domain\Command\AddMultimediaCommand: 2 | product_image_{1..10}: 3 | __construct: 4 | - '' 5 | - '.jpg)>' 6 | 7 | -------------------------------------------------------------------------------- /src/Resources/fixtures/develop/options.yaml: -------------------------------------------------------------------------------- 1 | Ergonode\Core\Domain\ValueObject\TranslatableString: 2 | option_value_1_{1..50}: 3 | __construct: 4 | - 5 | 'pl_PL': 'Option_PL_1_' 6 | 'en_GB': 'Option_EN_1_' 7 | option_value_2_{1..50}: 8 | __construct: 9 | - 10 | 'pl_PL': 'Option_PL_2_' 11 | 'en_GB': 'Option_EN_2_' 12 | -------------------------------------------------------------------------------- /src/Resources/fixtures/e2e/conditions.yaml: -------------------------------------------------------------------------------- 1 | Ergonode\Condition\Domain\Condition\AttributeExistsCondition: 2 | condition_attribute_exists: 3 | __construct: 4 | - '' 5 | 6 | Ergonode\Condition\Domain\Command\CreateConditionSetCommand: 7 | test_condition: 8 | __construct: 9 | - '' 10 | - ['@condition_attribute_exists'] 11 | -------------------------------------------------------------------------------- /src/Resources/fixtures/e2e/fixture.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - 'multimedia.yaml' 3 | - 'workflow.yaml' 4 | - 'roles.yaml' 5 | - 'user.yaml' 6 | - 'translation.yaml' 7 | - 'options.yaml' 8 | - 'attributes.yaml' 9 | - 'templates.yaml' 10 | - 'categories.yaml' 11 | - 'products.yaml' 12 | - 'conditions.yaml' 13 | - 'segments.yaml' 14 | - 'collections.yaml' 15 | - 'units.yaml' 16 | -------------------------------------------------------------------------------- /src/Resources/fixtures/e2e/multimedia.yaml: -------------------------------------------------------------------------------- 1 | Ergonode\Multimedia\Domain\Command\AddMultimediaCommand: 2 | product_image_{1..6}: 3 | __construct: 4 | - '' 5 | - '.jpg)>' 6 | -------------------------------------------------------------------------------- /src/Resources/fixtures/e2e/options.yaml: -------------------------------------------------------------------------------- 1 | Ergonode\Core\Domain\ValueObject\TranslatableString: 2 | option_value_1_{1..50}: 3 | __construct: 4 | - 5 | 'pl_PL': 'Option_PL_1_' 6 | 'en_GB': 'Option_EN_1_' 7 | option_value_2_{1..50}: 8 | __construct: 9 | - 10 | 'pl_PL': 'Option_PL_2_' 11 | 'en_GB': 'Option_EN_2_' 12 | -------------------------------------------------------------------------------- /src/Resources/fixtures/e2e/workflow.yaml: -------------------------------------------------------------------------------- 1 | Ergonode\Workflow\Domain\Command\Workflow\AddWorkflowTransitionCommand: 2 | add_status_new: 3 | __construct: 4 | - '' 5 | - '' 6 | - '' 7 | -------------------------------------------------------------------------------- /src/Resources/fixtures/test/fixture.yaml: -------------------------------------------------------------------------------- 1 | include: 2 | - 'multimedia.yaml' 3 | - 'workflow.yaml' 4 | - 'roles.yaml' 5 | - 'user.yaml' 6 | - 'attributes.yaml' 7 | - 'templates.yaml' 8 | - 'categories.yaml' 9 | - 'products.yaml' 10 | - 'segments.yaml' 11 | - 'collections.yaml' 12 | - 'units.yaml' 13 | -------------------------------------------------------------------------------- /src/Resources/fixtures/test/multimedia.yaml: -------------------------------------------------------------------------------- 1 | Ergonode\Multimedia\Domain\Command\AddMultimediaCommand: 2 | product_image: 3 | __construct: 4 | - '' 5 | - '' 6 | document_image: 7 | __construct: 8 | - '' 9 | - '' 10 | -------------------------------------------------------------------------------- /src/Resources/fixtures/test/user.yaml: -------------------------------------------------------------------------------- 1 | Ergonode\Account\Domain\Entity\User: 2 | superadmin: 3 | __construct: 4 | - '' 5 | - 'Johnny' 6 | - 'Bravo' 7 | - '' 8 | - '' 9 | - '' # abcd1234 10 | - '@superadmin_role->id' 11 | - '' -------------------------------------------------------------------------------- /src/Resources/fixtures/test/workflow.yaml: -------------------------------------------------------------------------------- 1 | Ergonode\Workflow\Domain\Command\Workflow\AddWorkflowTransitionCommand: 2 | add_status_new: 3 | __construct: 4 | - '' 5 | - '' 6 | - '' 7 | -------------------------------------------------------------------------------- /src/Resources/image/document-1.txt: -------------------------------------------------------------------------------- 1 | ergonode -------------------------------------------------------------------------------- /src/Resources/image/product-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/src/Resources/image/product-1.jpg -------------------------------------------------------------------------------- /src/Resources/image/product-10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/src/Resources/image/product-10.jpg -------------------------------------------------------------------------------- /src/Resources/image/product-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/src/Resources/image/product-2.jpg -------------------------------------------------------------------------------- /src/Resources/image/product-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/src/Resources/image/product-3.jpg -------------------------------------------------------------------------------- /src/Resources/image/product-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/src/Resources/image/product-4.jpg -------------------------------------------------------------------------------- /src/Resources/image/product-5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/src/Resources/image/product-5.jpg -------------------------------------------------------------------------------- /src/Resources/image/product-6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/src/Resources/image/product-6.jpg -------------------------------------------------------------------------------- /src/Resources/image/product-7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/src/Resources/image/product-7.jpg -------------------------------------------------------------------------------- /src/Resources/image/product-8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/src/Resources/image/product-8.jpg -------------------------------------------------------------------------------- /src/Resources/image/product-9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/src/Resources/image/product-9.jpg -------------------------------------------------------------------------------- /templates/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/templates/.gitignore -------------------------------------------------------------------------------- /tests/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/tests/.gitignore -------------------------------------------------------------------------------- /translations/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ergonode/backend/893d1cd7757c979b480f81902759c5228787576b/translations/.gitignore --------------------------------------------------------------------------------