Fields.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace ModulesGarden\Servers\ZimbraEmail\Core\UI\Traits;
  3. use ModulesGarden\Servers\ZimbraEmail\Core\UI\Widget\Forms\Fields\BaseField;
  4. use ModulesGarden\Servers\ZimbraEmail\Core\UI\Helpers\ContainerElementsConstants;
  5. /**
  6. * Fields Elements related functions
  7. *
  8. * @author Sławomir Miśkowicz <slawomir@modulesgarden.com>
  9. */
  10. trait Fields
  11. {
  12. /**
  13. * Fields List
  14. * @var Array
  15. */
  16. protected $fields = [];
  17. /**
  18. * List of validation errors
  19. * @var Array
  20. */
  21. protected $validationErrors = [];
  22. /**
  23. * Adds field object to field list
  24. * @return $this
  25. */
  26. public function addField(BaseField $field)
  27. {
  28. $this->initFieldsContainer();
  29. $this->addElement($field, ContainerElementsConstants::FIELDS);
  30. return $this;
  31. }
  32. protected function initFieldsContainer()
  33. {
  34. if(!$this->elementContainerExists(ContainerElementsConstants::FIELDS))
  35. {
  36. $this->addNewElementsContainer(ContainerElementsConstants::FIELDS);
  37. }
  38. }
  39. /**
  40. * Returns Field object by field id
  41. * @return Field object
  42. */
  43. public function getField($fieldId)
  44. {
  45. return $this->fields[$fieldId];
  46. }
  47. /**
  48. * Returns Field objects array
  49. * @return array
  50. */
  51. public function getFields()
  52. {
  53. return $this->fields;
  54. }
  55. /**
  56. * Validates data provided to form by valiators in each field
  57. * @return array
  58. */
  59. public function validateFields($request)
  60. {
  61. foreach ($this->fields as $field)
  62. {
  63. $formData = $request->get('formData', []);
  64. $value = $this->convertStringToValue($field->getName(), $formData);
  65. if ($field->isValueValid($value, $request))
  66. {
  67. continue;
  68. }
  69. $this->validationErrors[$field->getName()] = $field->getValidationErrors();
  70. }
  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 getValidationErrors()
  79. {
  80. return $this->validationErrors;
  81. }
  82. /**
  83. * Removes field object from the fields list
  84. * @return $this
  85. */
  86. public function removeField($fieldId = null)
  87. {
  88. if ($fieldId && $this->fields[$fieldId])
  89. {
  90. unset($this->fields[$fieldId]);
  91. }
  92. return $this;
  93. }
  94. }