/** * {@inheritdoc} */ public function validateForm($form_id, &$form, FormStateInterface &$form_state) { // If this form is flagged to always validate, ensure that previous runs of // validation are ignored. if ($form_state->isValidationEnforced()) { $form_state->setValidationComplete(FALSE); } // If this form has completed validation, do not validate again. if ($form_state->isValidationComplete()) { return; } // If the session token was set by self::prepareForm(), ensure that it // matches the current user's session. if (isset($form['#token'])) { if (!$this->csrfToken->validate($form_state->getValue('form_token'), $form['#token'])) { $url = $this->requestStack->getCurrentRequest()->getRequestUri(); // Setting this error will cause the form to fail validation. $form_state->setErrorByName('form_token', $this->t('The form has become outdated. Copy any unsaved work in the form below and then <a href="@link">reload this page</a>.', array('@link' => $url))); // Stop here and don't run any further validation handlers, because they // could invoke non-safe operations which opens the door for CSRF // vulnerabilities. $this->finalizeValidation($form, $form_state, $form_id); return; } } // Recursively validate each form element. $this->doValidateForm($form, $form_state, $form_id); $this->finalizeValidation($form, $form_state, $form_id); $this->handleErrorsWithLimitedValidation($form, $form_state, $form_id); }
/** * {@inheritdoc} */ public function isValidationComplete() { return $this->mainFormState->isValidationComplete(); }
/** * {@inheritdoc} */ public function validateForm($form_id, &$form, FormStateInterface &$form_state) { // If this form is flagged to always validate, ensure that previous runs of // validation are ignored. if ($form_state->isValidationEnforced()) { $form_state->setValidationComplete(FALSE); } // If this form has completed validation, do not validate again. if ($form_state->isValidationComplete()) { return; } // If the session token was set by self::prepareForm(), ensure that it // matches the current user's session. This is duplicate to code in // FormBuilder::doBuildForm() but left to protect any custom form handling // code. if (isset($form['#token'])) { if (!$this->csrfToken->validate($form_state->getValue('form_token'), $form['#token']) || $form_state->hasInvalidToken()) { $this->setInvalidTokenError($form_state); // Stop here and don't run any further validation handlers, because they // could invoke non-safe operations which opens the door for CSRF // vulnerabilities. $this->finalizeValidation($form, $form_state, $form_id); return; } } // Recursively validate each form element. $this->doValidateForm($form, $form_state, $form_id); $this->finalizeValidation($form, $form_state, $form_id); $this->handleErrorsWithLimitedValidation($form, $form_state, $form_id); }
/** * {@inheritdoc} */ public function massageFormValues(array $values, array $form, FormStateInterface $form_state) { // Don't do entity saving when we have validation erors. if (count($form_state->getErrors()) || !$form_state->isValidationComplete()) { return $values; } $field_name = $this->fieldDefinition->getName(); $widget_state = static::getWidgetState($form['#parents'], $field_name, $form_state); $element = NestedArray::getValue($form_state->getCompleteForm(), $widget_state['array_parents']); foreach ($values as $delta => &$item) { if (isset($widget_state['paragraphs'][$item['_original_delta']]['entity']) && $widget_state['paragraphs'][$item['_original_delta']]['mode'] != 'remove') { $paragraphs_entity = $widget_state['paragraphs'][$item['_original_delta']]['entity']; /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $display */ $display = $widget_state['paragraphs'][$item['_original_delta']]['display']; $display->extractFormValues($paragraphs_entity, $element[$item['_original_delta']]['subform'], $form_state); $display->validateFormValues($paragraphs_entity, $element[$item['_original_delta']]['subform'], $form_state); $paragraphs_entity->setNewRevision(TRUE); $paragraphs_entity->save(); $item['target_id'] = $paragraphs_entity->id(); $item['target_revision_id'] = $paragraphs_entity->getRevisionId(); } elseif ($widget_state['paragraphs'][$item['_original_delta']]['mode'] == 'remove' || $widget_state['paragraphs'][$item['_original_delta']]['mode'] == 'removed') { $item['target_id'] = NULL; $item['target_revision_id'] = NULL; } } return $values; }
/** * {@inheritdoc} */ public function massageFormValues(array $values, array $form, FormStateInterface $form_state) { // Don't do entity saving when we have validation erors. if (count($form_state->getErrors()) || !$form_state->isValidationComplete()) { return parent::massageFormValues($values, $form, $form_state); } foreach ($values as $value) { if (isset($value['fids'][0]) && isset($value['cropinfo']) && $value['cropinfo']['changed']) { $fid = $value['fids'][0]; $new_crop_info = array('fid' => $fid, 'x' => $value['cropinfo']['x'], 'y' => $value['cropinfo']['y'], 'width' => $value['cropinfo']['width'], 'height' => $value['cropinfo']['height']); imagefield_crop_update_file_info($new_crop_info); $source = File::load($fid); if ($source) { image_path_flush($source->getFileUri()); } } } return parent::massageFormValues($values, $form, $form_state); }
/** * {@inheritdoc} */ public function isValidationComplete() { return $this->decoratedFormState->isValidationComplete(); }
/** * @covers ::isValidationComplete * * @dataProvider providerSingleBooleanArgument * * @param bool $complete */ public function testIsValidationComplete($complete) { $this->decoratedFormState->isValidationComplete()->willReturn($complete)->shouldBeCalled(); $this->assertSame($complete, $this->formStateDecoratorBase->isValidationComplete()); }