Fields.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. namespace ModulesGarden\ProxmoxAddon\Core\UI\Traits;
  3. use \ModulesGarden\ProxmoxAddon\Core\UI\Widget\Forms\Fields\BaseField;
  4. /**
  5. * Fields Elements related functions
  6. *
  7. * @author Sławomir Miśkowicz <slawomir@modulesgarden.com>
  8. */
  9. trait Fields
  10. {
  11. /**
  12. * Fields List
  13. * @var Array
  14. */
  15. protected $fields = [];
  16. /**
  17. * List of validation errors
  18. * @var Array
  19. */
  20. protected $validationErrors = [];
  21. /**
  22. * Adds field object to field list
  23. * @return $this
  24. */
  25. public function addField(BaseField $field)
  26. {
  27. $this->fields[$field->getId()] = $field;
  28. if ($field->isAjaxComponent())
  29. {
  30. $this->mainContainer->addAjaxElement($field);
  31. }
  32. if ($field->isVueComponent())
  33. {
  34. $this->mainContainer->addVueComponent($field);
  35. }
  36. return $this;
  37. }
  38. /**
  39. * Returns Field object by field id
  40. * @return Field object
  41. */
  42. public function getField($fieldId)
  43. {
  44. return $this->fields[$fieldId];
  45. }
  46. /**
  47. * Returns Field objects array
  48. * @return array
  49. */
  50. public function getFields()
  51. {
  52. return $this->fields;
  53. }
  54. /**
  55. * Validates data provided to form by valiators in each field
  56. * @return array
  57. */
  58. public function validateFields($request)
  59. {
  60. foreach ($this->fields as $field)
  61. {
  62. $formData = $request->get('formData', []);
  63. $value = $this->convertStringToValue($field->getName(), $formData);
  64. if ($field->isValueValid($value, $request))
  65. {
  66. continue;
  67. }
  68. $this->validationErrors[$field->getName()] = $field->getValidationErrors();
  69. }
  70. $this->validateSections($request);
  71. return $this;
  72. }
  73. protected function convertStringToValue($name, $formData)
  74. {
  75. $nameArray = explode('[', str_replace(']', '', $name));
  76. return dot($formData)->get(implode('.', $nameArray), null);
  77. }
  78. public function validateSections($request)
  79. {
  80. foreach ($this->sections as $section)
  81. {
  82. $section->validateFields($request);
  83. if ($section->getValidationErrors())
  84. {
  85. $this->validationErrors = array_merge($this->validationErrors, $section->getValidationErrors());
  86. }
  87. }
  88. return $this;
  89. }
  90. public function getValidationErrors()
  91. {
  92. return $this->validationErrors;
  93. }
  94. /**
  95. * Removes field object from the fields list
  96. * @return $this
  97. */
  98. public function removeField($fieldId = null)
  99. {
  100. if ($fieldId && $this->fields[$fieldId])
  101. {
  102. unset($this->fields[$fieldId]);
  103. }
  104. return $this;
  105. }
  106. }