BulkSourceAssignValidatorChain.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\InventoryCatalogApi\Model;
  8. use Magento\Framework\Exception\LocalizedException;
  9. use Magento\Framework\Validation\ValidationResult;
  10. use Magento\Framework\Validation\ValidationResultFactory;
  11. /**
  12. * Chain of validators. Extension point for new validators via di configuration
  13. *
  14. * @api
  15. */
  16. class BulkSourceAssignValidatorChain implements BulkSourceAssignValidatorInterface
  17. {
  18. /**
  19. * @var ValidationResultFactory
  20. */
  21. private $validationResultFactory;
  22. /**
  23. * @var BulkSourceAssignValidatorInterface[]
  24. */
  25. private $validators;
  26. /**
  27. * @param ValidationResultFactory $validationResultFactory
  28. * @param BulkSourceAssignValidatorInterface[] $validators
  29. * @throws LocalizedException
  30. * @SuppressWarnings(PHPMD.LongVariable)
  31. */
  32. public function __construct(
  33. ValidationResultFactory $validationResultFactory,
  34. array $validators = []
  35. ) {
  36. $this->validationResultFactory = $validationResultFactory;
  37. foreach ($validators as $validator) {
  38. if (!$validator instanceof BulkSourceAssignValidatorInterface) {
  39. throw new LocalizedException(
  40. __('Source Validator must implement AssignValidatorInterface.')
  41. );
  42. }
  43. }
  44. $this->validators = $validators;
  45. }
  46. /**
  47. * @inheritdoc
  48. */
  49. public function validate(array $skus, array $sourceCodes): ValidationResult
  50. {
  51. $errors = [];
  52. foreach ($this->validators as $validator) {
  53. $validationResult = $validator->validate($skus, $sourceCodes);
  54. if (!$validationResult->isValid()) {
  55. $errors = array_merge($errors, $validationResult->getErrors());
  56. }
  57. }
  58. return $this->validationResultFactory->create(['errors' => $errors]);
  59. }
  60. }