public function Telephone::prepare in Webform 8.5
Same name and namespace in other branches
- 6.x src/Plugin/WebformElement/Telephone.php \Drupal\webform\Plugin\WebformElement\Telephone::prepare()
Prepare an element to be rendered within a webform.
Parameters
array $element: An element.
\Drupal\webform\WebformSubmissionInterface $webform_submission: A webform submission. Webform submission is optional since it is not used by composite sub elements.
Overrides TextBase::prepare
See also
\Drupal\webform\Element\WebformCompositeBase::processWebformComposite
File
- src/
Plugin/ WebformElement/ Telephone.php, line 58
Class
- Telephone
- Provides a 'tel' element.
Namespace
Drupal\webform\Plugin\WebformElementCode
public function prepare(array &$element, WebformSubmissionInterface $webform_submission = NULL) {
parent::prepare($element, $webform_submission);
// Add international library and classes.
if (!empty($element['#international']) && $this->librariesManager
->isIncluded('jquery.intl-tel-input')) {
$element['#attached']['library'][] = 'webform/webform.element.telephone';
$element['#attributes']['class'][] = 'js-webform-telephone-international';
$element['#attributes']['class'][] = 'webform-webform-telephone-international';
if (!empty($element['#international_initial_country'])) {
$element['#attributes']['data-webform-telephone-international-initial-country'] = $element['#international_initial_country'];
}
if (!empty($element['#international_preferred_countries'])) {
$element['#attributes']['data-webform-telephone-international-preferred-countries'] = Json::encode($element['#international_preferred_countries']);
}
// The utilsScript is fetched when the page has finished loading to
// prevent blocking.
// @see https://github.com/jackocnr/intl-tel-input
$utils_script = '/libraries/jquery.intl-tel-input/build/js/utils.js';
// Load utils.js from CDN defined in webform.libraries.yml.
if (!file_exists(DRUPAL_ROOT . $utils_script)) {
/** @var \Drupal\Core\Asset\LibraryDiscoveryInterface $library_discovery */
$library_discovery = \Drupal::service('library.discovery');
$intl_tel_input_library = $library_discovery
->getLibraryByName('webform', 'libraries.jquery.intl-tel-input');
$cdn = reset($intl_tel_input_library['cdn']);
$utils_script = $cdn . 'build/js/utils.js';
}
else {
$utils_script = base_path() . 'libraries/jquery.intl-tel-input/build/js/utils.js';
}
$element['#attached']['drupalSettings']['webform']['intlTelInput']['utilsScript'] = $utils_script;
}
// Add support for telephone_validation.module.
if (\Drupal::moduleHandler()
->moduleExists('telephone_validation')) {
$format = $this
->getElementProperty($element, 'telephone_validation_format');
$format = $format !== '' ? (int) $format : '';
if ($format === \libphonenumber\PhoneNumberFormat::NATIONAL) {
$country = (array) $this
->getElementProperty($element, 'telephone_validation_country');
}
else {
$country = $this
->getElementProperty($element, 'telephone_validation_countries');
}
if ($format !== '') {
$element['#element_validate'][] = [
'Drupal\\telephone_validation\\Render\\Element\\TelephoneValidation',
'validateTel',
];
$element['#element_validate_settings'] = [
'format' => $format,
'country' => $country,
];
}
}
}