Chamilo is a learning management system focused on ease of use and accessibility
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
chamilo-lms/main/inc/lib/formvalidator/Element/SelectAjax.php

106 lines
3.8 KiB

<?php
/* For licensing terms, see /license.txt */
/**
* A drop down list with all languages to use with QuickForm
*/
class SelectAjax extends HTML_QuickForm_select
{
/**
* Class constructor
*/
function SelectAjax($elementName = null, $elementLabel = null, $options = null, $attributes = null)
{
11 years ago
parent::__construct($elementName, $elementLabel, $options, $attributes);
}
/**
* The ajax call must contain an array of id and text
* @return string
*/
function toHtml()
{
$html = api_get_js('select2/select2.js');
$iso = api_get_language_isocode(api_get_interface_language());
$localeFile = 'select2_locale_'.$iso.'.js';
if (file_exists(api_get_path(LIBRARY_PATH).'javascript/select2/'.$localeFile)) {
$html .= api_get_js('select2/'.$localeFile);
}
$html .= api_get_css(api_get_path(WEB_LIBRARY_PATH).'javascript/select2/select2.css');
$formatResult = $this->getAttribute('formatResult');
$formatCondition = null;
if (!empty($formatResult)) {
$formatCondition = ',
formatResult : '.$formatResult.',
formatSelection : '.$formatResult.',';
}
$defaultValues = $this->getAttribute('defaults');
$dataCondition = null;
$tags = null;
if (!empty($defaultValues)) {
$result = json_encode($defaultValues);
$result = str_replace('"id"', 'id', $result);
$result = str_replace('"text"', 'text', $result);
$dataCondition = '$("#'.$this->getAttribute('name').'").select2("data", '.$result.')';
$tags = ', tags : function() { return '.$result.'} ';
}
$width = 'element';
$givenWidth = $this->getAttribute('width');
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('SelectAnOption');
}
$html .= '<script>
$(function() {
$("#'.$this->getAttribute('name').'").select2({
placeholder: "' . $plHolder . '",
allowClear: true,
width: "'.$width.'",
minimumInputLength: ' . $minimumInputLength . ',
// instead of writing the function to execute the request we use Select2s convenient helper
ajax: {
url: "'.$this->getAttribute('url').'",
dataType: "json",
data: function (term, page) {
return {
q: term, // search term
page_limit: 10,
};
},
results: function (data, page) { // parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to alter remote JSON data
return {
results: data
};
}
}
'.$tags.'
'.$formatCondition.'
});
'.$dataCondition.'
});
</script>';
$html .= '<input id="'.$this->getAttribute('name').'" name="'.$this->getAttribute('name').'" />';
return $html;
}
}