CatalogEavValidationRules.php 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Catalog\Ui\DataProvider;
  7. use Magento\Catalog\Api\Data\ProductAttributeInterface;
  8. /**
  9. * Class build validation rules for catalog EAV attributes
  10. *
  11. * @api
  12. * @since 101.0.0
  13. */
  14. class CatalogEavValidationRules
  15. {
  16. /**
  17. * Build validation rules
  18. *
  19. * @param ProductAttributeInterface $attribute
  20. * @param array $data
  21. * @return array
  22. * @since 101.0.0
  23. */
  24. public function build(ProductAttributeInterface $attribute, array $data)
  25. {
  26. $rules = [];
  27. if (!empty($data['required'])) {
  28. $rules['required-entry'] = true;
  29. }
  30. if ($attribute->getFrontendInput() === 'price') {
  31. $rules['validate-zero-or-greater'] = true;
  32. }
  33. $validationClasses = explode(' ', $attribute->getFrontendClass());
  34. foreach ($validationClasses as $class) {
  35. if (preg_match('/^maximum-length-(\d+)$/', $class, $matches)) {
  36. $rules = array_merge($rules, ['max_text_length' => $matches[1]]);
  37. continue;
  38. }
  39. if (preg_match('/^minimum-length-(\d+)$/', $class, $matches)) {
  40. $rules = array_merge($rules, ['min_text_length' => $matches[1]]);
  41. continue;
  42. }
  43. $rules = $this->mapRules($class, $rules);
  44. }
  45. return $rules;
  46. }
  47. /**
  48. * Map classes w. rules
  49. *
  50. * @param string $class
  51. * @param array $rules
  52. * @return array
  53. * @since 101.0.0
  54. */
  55. protected function mapRules($class, array $rules)
  56. {
  57. switch ($class) {
  58. case 'validate-number':
  59. case 'validate-digits':
  60. case 'validate-email':
  61. case 'validate-url':
  62. case 'validate-alpha':
  63. case 'validate-alphanum':
  64. $rules = array_merge($rules, [$class => true]);
  65. break;
  66. }
  67. return $rules;
  68. }
  69. }