123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <?php
- /* For licensing terms, see /license.txt */
- /**
- * A drop down list with all languages to use with QuickForm.
- */
- class SelectAjax extends HTML_QuickForm_select
- {
- /**
- * {@inheritdoc}
- */
- public function __construct($elementName, $elementLabel = '', $options = null, $attributes = null)
- {
- parent::__construct($elementName, $elementLabel, $options, $attributes);
- }
- /**
- * The ajax call must contain an array of id and text.
- *
- * @return string
- */
- public function toHtml()
- {
- $iso = api_get_language_isocode();
- $formatResult = $this->getAttribute('formatResult');
- $formatCondition = '';
- if (!empty($formatResult)) {
- $formatCondition = ',
- templateResult : '.$formatResult.',
- templateSelection : '.$formatResult;
- }
- $width = 'element';
- $givenWidth = '100%';
- if (!empty($givenWidth)) {
- $width = $givenWidth;
- }
- //Get the minimumInputLength for select2
- $minimumInputLength = $this->getAttribute('minimumInputLength') > 3 ?
- $this->getAttribute('minimumInputLength') : 3
- ;
- $plHolder = $this->getAttribute('placeholder');
- if (empty($plHolder)) {
- $plHolder = get_lang('Please select an option');
- }
- $id = $this->getAttribute('id');
- if (empty($id)) {
- $id = $this->getAttribute('name');
- $this->setAttribute('id', $id);
- }
- // URL must return ajax json_encode arrady [items => [['id'=>1, 'text'='content']]
- $url = $this->getAttribute('url');
- if (!$url) {
- $url = $this->getAttribute('url_function');
- } else {
- $url = "'$url'";
- }
- $tagsAttr = $this->getAttribute('tags');
- $multipleAttr = $this->getAttribute('multiple');
- $tags = !empty($tagsAttr) ? (bool) $tagsAttr : false;
- $tags = $tags ? 'true' : 'false';
- $multiple = !empty($multipleAttr) ? (bool) $multipleAttr : false;
- $multiple = $multiple ? 'true' : 'false';
- $max = $this->getAttribute('maximumSelectionLength');
- $max = !empty($max) ? "maximumSelectionLength: $max, " : '';
- $html = <<<JS
- <script>
- $(function(){
- $('#{$this->getAttribute('id')}').select2({
- language: '$iso',
- placeholder: '$plHolder',
- allowClear: true,
- width: '$width',
- minimumInputLength: '$minimumInputLength',
- tags: $tags,
- ajax: {
- url: $url,
- dataType: 'json',
- data: function(params) {
- return {
- q: params.term, // search term
- page_limit: 10,
- };
- },
- processResults: function (data, page) {
- // Parse the results into the format expected by Select2
- if (data.items) {
- return {
- results: data.items
- };
- }
- return {
- results: ''
- };
- }
- $formatCondition
- }
- });
- });
- </script>
- JS;
- $this->removeAttribute('formatResult');
- $this->removeAttribute('minimumInputLength');
- $this->removeAttribute('maximumSelectionLength');
- $this->removeAttribute('tags');
- $this->removeAttribute('placeholder');
- $this->removeAttribute('class');
- $this->removeAttribute('url');
- $this->removeAttribute('url_function');
- $this->setAttribute('style', 'width: 100%;');
- return parent::toHtml().$html;
- }
- /**
- * We check the options and return only the values that _could_ have been
- * selected. We also return a scalar value if select is not "multiple".
- */
- public function exportValue(&$submitValues, $assoc = false)
- {
- $value = $this->_findValue($submitValues);
- if (!$value) {
- $value = '';
- }
- return $this->_prepareValue($value, $assoc);
- }
- }
|