bynder-4.0.0-beta1/modules/bynder_select2/src/Element/BynderSelect2SimpleElement.php
modules/bynder_select2/src/Element/BynderSelect2SimpleElement.php
<?php
namespace Drupal\bynder_select2\Element;
use Drupal\Component\Utility\Html;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element\Select;
/**
* Provides a simple bynder_select2 form element.
*
* @FormElement("bynder_select2_simple_element")
*/
class BynderSelect2SimpleElement extends Select {
/**
* {@inheritdoc}
*/
public function getInfo() {
$info = parent::getInfo();
$class = get_class($this);
$info['#process'] = [
[$class, 'processBynderSelect2'],
];
return $info;
}
/**
* Processes a bynder_select2 form element.
*/
public static function processBynderSelect2(&$element, FormStateInterface $form_state, &$complete_form) {
$element = parent::processSelect($element, $form_state, $complete_form);
$class = 'bynder-select2-' . hash('md5', Html::getUniqueId('bynder-select2-simple-element'));
$base_url = \Drupal::request()->getSchemeAndHttpHost();
$element['#attributes']['class'][] = $class;
$select2_settings = [
'selector' => '.' . $class,
'placeholder_text' => $element['#placeholder_text'],
'multiple' => $element['#multiple'],
'base_url' => $base_url
];
if(isset($element['#loadRemoteData'])) {
$select2_settings['loadRemoteData'] = ['url' => $base_url . $element['#loadRemoteData']];
}
$element['#attached']['drupalSettings']['bynder_select2'][$class] = $select2_settings;
$element['#attached']['library'] = ['bynder_select2/bynder_select2.widget'];
return $element;
}
}