You are here

class Fraction in Fraction 2.x

Same name in this branch
  1. 2.x src/Fraction.php \Drupal\fraction\Fraction
  2. 2.x src/Element/Fraction.php \Drupal\fraction\Element\Fraction
  3. 2.x src/Plugin/views/filter/Fraction.php \Drupal\fraction\Plugin\views\filter\Fraction
  4. 2.x src/Plugin/views/sort/Fraction.php \Drupal\fraction\Plugin\views\sort\Fraction
  5. 2.x src/Plugin/views/field/Fraction.php \Drupal\fraction\Plugin\views\field\Fraction
Same name and namespace in other branches
  1. 8 src/Element/Fraction.php \Drupal\fraction\Element\Fraction

Provides a fraction form element.

Usage example:

$form['fraction'] = [
  '#type' => 'fraction',
  '#title' => $this
    ->t('Fraction'),
  '#default_value' => [
    'numerator' => 10,
    'denominator' => 100,
  ],
  '#size' => 60,
  '#required' => TRUE,
];

Plugin annotation

@FormElement("fraction");

Hierarchy

Expanded class hierarchy of Fraction

4 string references to 'Fraction'
fraction.info.yml in ./fraction.info.yml
fraction.info.yml
fraction.schema.yml in config/schema/fraction.schema.yml
config/schema/fraction.schema.yml
FractionTarget::importTypes in src/Feeds/Target/FractionTarget.php
Helper function to define the ways to import the fraction data.
FractionWidget::formElement in src/Plugin/Field/FieldWidget/FractionWidget.php
Returns the form for a single field widget.
1 #type use of Fraction
FractionWidget::formElement in src/Plugin/Field/FieldWidget/FractionWidget.php
Returns the form for a single field widget.

File

src/Element/Fraction.php, line 24

Namespace

Drupal\fraction\Element
View source
class Fraction extends FormElement {

  /**
   * {@inheritdoc}
   */
  public function getInfo() {
    $class = get_class($this);
    return [
      '#input' => TRUE,
      '#size' => 10,
      '#element_validate' => [
        [
          $class,
          'validateFraction',
        ],
      ],
      '#process' => [
        [
          $class,
          'processElement',
        ],
        [
          $class,
          'processAjaxForm',
        ],
        [
          $class,
          'processGroup',
        ],
      ],
      '#pre_render' => [
        [
          $class,
          'preRenderGroup',
        ],
      ],
      '#theme_wrappers' => [
        'container',
      ],
    ];
  }

  /**
   * Builds the fraction form element.
   *
   * @param array $element
   *   The initial fraction form element.
   * @param \Drupal\Core\Form\FormStateInterface $form_state
   *   The current state of the form.
   * @param array $complete_form
   *   The complete form structure.
   *
   * @return array
   *   The built fraction form element.
   */
  public static function processElement(array $element, FormStateInterface $form_state, array &$complete_form) {
    $default_value = $element['#default_value'];
    if (isset($default_value) && !self::validateDefaultValue($default_value)) {
      throw new \InvalidArgumentException('The #default_value for a fraction element must be an array with "numerator" and "denominator" keys.');
    }
    $element['#tree'] = TRUE;
    $element['#attributes']['class'][] = 'form-type-fraction';
    $element['numerator'] = [
      '#type' => 'number',
      '#title' => t('Numerator'),
      '#title_display' => $element['#title_display'],
      '#default_value' => $default_value ? $default_value['numerator'] : NULL,
      '#required' => $element['#required'],
      '#size' => $element['#size'],
      '#error_no_message' => TRUE,
    ];
    $element['denominator'] = [
      '#type' => 'number',
      '#title' => t('Denominator'),
      '#title_display' => $element['#title_display'],
      '#default_value' => $default_value ? $default_value['denominator'] : NULL,
      '#description' => !empty($element['#description']) ?? '',
      '#required' => $element['#required'],
      '#size' => $element['#size'],
      '#error_no_message' => TRUE,
    ];

    // Remove the keys that were transferred to child elements.
    unset($element['#size']);
    unset($element['#description']);
    return $element;
  }

  /**
   * Form element validation handler for #type 'fraction'.
   *
   * Note that #required is validated by _form_validate() already.
   */
  public static function validateFraction(&$element, FormStateInterface $form_state, &$complete_form) {
    $numerator = $element['numerator']['#value'];
    $denominator = $element['denominator']['#value'];

    // If the denominator is empty, but the numerator isn't, print an error.
    if (empty($denominator) && !empty($numerator)) {
      $form_state
        ->setError($element, t('The denominator of a fraction cannot be zero or empty (if a numerator is provided).'));
    }

    // Numerators must be between -9223372036854775808 and 9223372036854775807.
    // Explicitly perform a string comparison to ensure precision.
    if (!empty($numerator) && ((string) $numerator < '-9223372036854775808' || (string) $numerator > '9223372036854775807')) {
      $form_state
        ->setError($element, t('The numerator of a fraction must be between -9223372036854775808 and 9223372036854775807.'));
    }

    // Denominators must be between 1 and 2147483647.
    // Explicitly perform a string comparison to ensure precision.
    if (!empty($denominator) && ((string) $denominator <= '0' || (string) $denominator > '2147483647')) {
      $form_state
        ->setError($element, t('The denominator of a fraction must be greater than 0 and less than 2147483647.'));
    }
  }

  /**
   * Validates the default value.
   *
   * @param mixed $default_value
   *   The default value.
   *
   * @return bool
   *   TRUE if the default value is valid, FALSE otherwise.
   */
  public static function validateDefaultValue($default_value) {
    if (!is_array($default_value)) {
      return FALSE;
    }
    if (!array_key_exists('numerator', $default_value) || !array_key_exists('denominator', $default_value)) {
      return FALSE;
    }
    return TRUE;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property
DependencySerializationTrait::$_serviceIds protected property
DependencySerializationTrait::__sleep public function 2
DependencySerializationTrait::__wakeup public function 2
FormElement::processAutocomplete public static function Adds autocomplete functionality to elements.
FormElement::processPattern public static function #process callback for #pattern form element property.
FormElement::validatePattern public static function #element_validate callback for #pattern form element property.
FormElement::valueCallback public static function Determines how user input is mapped to an element's #value property. Overrides FormElementInterface::valueCallback 15
Fraction::getInfo public function Returns the element properties for this element. Overrides ElementInterface::getInfo
Fraction::processElement public static function Builds the fraction form element.
Fraction::validateDefaultValue public static function Validates the default value.
Fraction::validateFraction public static function Form element validation handler for #type 'fraction'.
MessengerTrait::$messenger protected property The messenger. 27
MessengerTrait::messenger public function Gets the messenger. 27
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 2
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
PluginBase::__construct public function Constructs a \Drupal\Component\Plugin\PluginBase object. 98
RenderElement::preRenderAjaxForm public static function Adds Ajax information about an element to communicate with JavaScript.
RenderElement::preRenderGroup public static function Adds members of this group as actual elements for rendering.
RenderElement::processAjaxForm public static function Form element processing handler for the #ajax form property. 1
RenderElement::processGroup public static function Arranges elements into groups.
RenderElement::setAttributes public static function Sets a form element's class attribute. Overrides ElementInterface::setAttributes
StringTranslationTrait::$stringTranslation protected property The string translation service. 4
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.