/**
  * Set different mandatory attributes for checkboxes and radiobuttons
  *
  * @param array &$additionalAttributes
  * @param Field $field
  * @param mixed $iteration
  * @return void
  */
 protected function addMandatoryAttributesForMultipleFields(&$additionalAttributes, $field, $iteration)
 {
     if ($iteration['index'] === 0) {
         if ($field->isMandatory()) {
             if ($this->isNativeValidationEnabled()) {
                 $additionalAttributes['required'] = 'required';
                 // remove required attribute if more checkboxes than 1
                 if ($field->getType() === 'check' && $iteration['total'] > 1) {
                     unset($additionalAttributes['required']);
                 }
             } else {
                 if ($this->isClientValidationEnabled()) {
                     $additionalAttributes['data-parsley-required'] = 'true';
                 }
             }
             if ($this->isClientValidationEnabled()) {
                 $additionalAttributes['data-parsley-required-message'] = LocalizationUtility::translate('validationerror_mandatory_multi');
                 if ($field->getType() === 'check' && $iteration['total'] > 1) {
                     $additionalAttributes['data-parsley-required'] = 'true';
                 }
             }
         }
         if ($this->isClientValidationEnabled()) {
             // define where to show errors
             $additionalAttributes['data-parsley-errors-container'] = '.powermail_field_error_container_' . $field->getMarker();
             // define where to set the error class
             $additionalAttributes['data-parsley-class-handler'] = '.powermail_fieldwrap_' . $field->getUid() . ' div:first';
         }
     }
     // add multiple attribute to bundle checkboxes for parsley
     if ($field->isMandatory() && $this->isClientValidationEnabled() && $field->getType() === 'check' && $iteration['total'] > 1) {
         $additionalAttributes['data-parsley-multiple'] = $field->getMarker();
     }
 }
 /**
  * Set mandatory attributes
  *
  * @param array &$additionalAttributes
  * @param Field $field
  * @return void
  */
 protected function addMandatoryAttributes(&$additionalAttributes, Field $field = null)
 {
     if ($field !== null && $field->isMandatory()) {
         if ($this->isNativeValidationEnabled()) {
             $additionalAttributes['required'] = 'required';
         } else {
             if ($this->isClientValidationEnabled()) {
                 $additionalAttributes['data-parsley-required'] = 'true';
             }
         }
         if ($this->isClientValidationEnabled()) {
             $additionalAttributes['data-parsley-required-message'] = LocalizationUtility::translate('validationerror_mandatory');
             $additionalAttributes['data-parsley-trigger'] = 'change';
         }
     }
 }
 /**
  * Validate a single field
  *
  * @param Field $field
  * @param mixed $value
  * @return void
  */
 protected function isValidField(Field $field, $value)
 {
     // Mandatory Check
     if ($field->isMandatory()) {
         if (!$this->validateMandatory($value)) {
             $this->setErrorAndMessage($field, 'mandatory');
         }
     }
     // String Checks
     if (!empty($value) && in_array($field->getType(), $this->validationFieldTypes)) {
         switch ($field->getValidation()) {
             // email
             case 1:
                 if (!$this->validateEmail($value)) {
                     $this->setErrorAndMessage($field, 'validation.' . $field->getValidation());
                 }
                 break;
                 // URL
             // URL
             case 2:
                 if (!$this->validateUrl($value)) {
                     $this->setErrorAndMessage($field, 'validation.' . $field->getValidation());
                 }
                 break;
                 // phone
             // phone
             case 3:
                 if (!$this->validatePhone($value)) {
                     $this->setErrorAndMessage($field, 'validation.' . $field->getValidation());
                 }
                 break;
                 // numbers only
             // numbers only
             case 4:
                 if (!$this->validateNumbersOnly($value)) {
                     $this->setErrorAndMessage($field, 'validation.' . $field->getValidation());
                 }
                 break;
                 // letters only
             // letters only
             case 5:
                 if (!$this->validateLettersOnly($value)) {
                     $this->setErrorAndMessage($field, 'validation.' . $field->getValidation());
                 }
                 break;
                 // min number
             // min number
             case 6:
                 if (!$this->validateMinNumber($value, $field->getValidationConfiguration())) {
                     $this->setErrorAndMessage($field, 'validation.' . $field->getValidation());
                 }
                 break;
                 // max number
             // max number
             case 7:
                 if (!$this->validateMaxNumber($value, $field->getValidationConfiguration())) {
                     $this->setErrorAndMessage($field, 'validation.' . $field->getValidation());
                 }
                 break;
                 // range
             // range
             case 8:
                 if (!$this->validateRange($value, $field->getValidationConfiguration())) {
                     $this->setErrorAndMessage($field, 'validation.' . $field->getValidation());
                 }
                 break;
                 // length
             // length
             case 9:
                 if (!$this->validateLength($value, $field->getValidationConfiguration())) {
                     $this->setErrorAndMessage($field, 'validation.' . $field->getValidation());
                 }
                 break;
                 // pattern
             // pattern
             case 10:
                 if (!$this->validatePattern($value, $field->getValidationConfiguration())) {
                     $this->setErrorAndMessage($field, 'validation.' . $field->getValidation());
                 }
                 break;
                 /**
                  * E.g. Validation was extended with Page TSconfig
                  *        tx_powermail.flexForm.validation.addFieldOptions.100 = New Validation
                  *
                  * Register your Class and Method with TypoScript Setup
                  *        plugin.tx_powermail.settings.setup.validation.customValidation.100 =
                  *            In2code\Powermailextended\Domain\Validator\ZipValidator
                  *
                  * Add method to your class
                  *        validate100($value, $validationConfiguration)
                  *
                  * Define your Errormessage with TypoScript Setup
                  *        plugin.tx_powermail._LOCAL_LANG.default.validationerror_validation.100 =
                  *            Error happens!
                  */
             /**
              * E.g. Validation was extended with Page TSconfig
              *        tx_powermail.flexForm.validation.addFieldOptions.100 = New Validation
              *
              * Register your Class and Method with TypoScript Setup
              *        plugin.tx_powermail.settings.setup.validation.customValidation.100 =
              *            In2code\Powermailextended\Domain\Validator\ZipValidator
              *
              * Add method to your class
              *        validate100($value, $validationConfiguration)
              *
              * Define your Errormessage with TypoScript Setup
              *        plugin.tx_powermail._LOCAL_LANG.default.validationerror_validation.100 =
              *            Error happens!
              */
             default:
                 if ($field->getValidation()) {
                     $validation = $field->getValidation();
                     if (!empty($this->settings['validation.']['customValidation.'][$validation])) {
                         $extendedValidator = $this->objectManager->get($this->settings['validation.']['customValidation.'][$validation]);
                         if (method_exists($extendedValidator, 'validate' . ucfirst($validation))) {
                             if (!$extendedValidator->{'validate' . ucfirst($validation)}($value, $field->getValidationConfiguration())) {
                                 $this->setErrorAndMessage($field, 'validation.' . $validation);
                             }
                         }
                     }
                 }
         }
     }
 }