Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 48 |
Radios | |
0.00% |
0 / 1 |
|
0.00% |
0 / 3 |
156 | |
0.00% |
0 / 48 |
getInfo | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 12 |
|||
processRadios | |
0.00% |
0 / 1 |
30 | |
0.00% |
0 / 22 |
|||
valueCallback | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 14 |
<?php | |
/** | |
* @file | |
* Contains \Drupal\Core\Render\Element\Radios. | |
*/ | |
namespace Drupal\Core\Render\Element; | |
use Drupal\Core\Form\FormStateInterface; | |
use Drupal\Component\Utility\Html as HtmlUtility; | |
/** | |
* Provides a form element for a set of radio buttons. | |
* | |
* Properties: | |
* - #options: An associative array, where the keys are the returned values for | |
* each radio button, and the values are the labels next to each radio button. | |
* | |
* Usage example: | |
* @code | |
* $form['settings']['active'] = array( | |
* '#type' => 'radios', | |
* '#title' => t('Poll status'), | |
* '#default_value' => 1, | |
* '#options' => array(0 => t('Closed'), 1 => t('Active')), | |
* ); | |
* @endcode | |
* | |
* @see \Drupal\Core\Render\Element\Checkboxes | |
* @see \Drupal\Core\Render\Element\Radio | |
* @see \Drupal\Core\Render\Element\Select | |
* | |
* @FormElement("radios") | |
*/ | |
class Radios extends FormElement { | |
use CompositeFormElementTrait; | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getInfo() { | |
$class = get_class($this); | |
return array( | |
'#input' => TRUE, | |
'#process' => array( | |
array($class, 'processRadios'), | |
), | |
'#theme_wrappers' => array('radios'), | |
'#pre_render' => array( | |
array($class, 'preRenderCompositeFormElement'), | |
), | |
); | |
} | |
/** | |
* Expands a radios element into individual radio elements. | |
*/ | |
public static function processRadios(&$element, FormStateInterface $form_state, &$complete_form) { | |
if (count($element['#options']) > 0) { | |
$weight = 0; | |
foreach ($element['#options'] as $key => $choice) { | |
// Maintain order of options as defined in #options, in case the element | |
// defines custom option sub-elements, but does not define all option | |
// sub-elements. | |
$weight += 0.001; | |
$element += array($key => array()); | |
// Generate the parents as the autogenerator does, so we will have a | |
// unique id for each radio button. | |
$parents_for_id = array_merge($element['#parents'], array($key)); | |
$element[$key] += array( | |
'#type' => 'radio', | |
'#title' => $choice, | |
// The key is sanitized in Drupal\Core\Template\Attribute during output | |
// from the theme function. | |
'#return_value' => $key, | |
// Use default or FALSE. A value of FALSE means that the radio button is | |
// not 'checked'. | |
'#default_value' => isset($element['#default_value']) ? $element['#default_value'] : FALSE, | |
'#attributes' => $element['#attributes'], | |
'#parents' => $element['#parents'], | |
'#id' => HtmlUtility::getUniqueId('edit-' . implode('-', $parents_for_id)), | |
'#ajax' => isset($element['#ajax']) ? $element['#ajax'] : NULL, | |
// Errors should only be shown on the parent radios element. | |
'#error_no_message' => TRUE, | |
'#weight' => $weight, | |
); | |
} | |
} | |
return $element; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public static function valueCallback(&$element, $input, FormStateInterface $form_state) { | |
if ($input !== FALSE) { | |
// When there's user input (including NULL), return it as the value. | |
// However, if NULL is submitted, FormBuilder::handleInputElement() will | |
// apply the default value, and we want that validated against #options | |
// unless it's empty. (An empty #default_value, such as NULL or FALSE, can | |
// be used to indicate that no radio button is selected by default.) | |
if (!isset($input) && !empty($element['#default_value'])) { | |
$element['#needs_validation'] = TRUE; | |
} | |
return $input; | |
} | |
else { | |
// For default value handling, simply return #default_value. Additionally, | |
// for a NULL default value, set #has_garbage_value to prevent | |
// FormBuilder::handleInputElement() converting the NULL to an empty | |
// string, so that code can distinguish between nothing selected and the | |
// selection of a radio button whose value is an empty string. | |
$value = isset($element['#default_value']) ? $element['#default_value'] : NULL; | |
if (!isset($value)) { | |
$element['#has_garbage_value'] = TRUE; | |
} | |
return $value; | |
} | |
} | |
} |