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.
		
		
		
		
		
			
		
			
				
					
					
						
							105 lines
						
					
					
						
							3.8 KiB
						
					
					
				
			
		
		
	
	
							105 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)
 | 
						|
    {
 | 
						|
        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;
 | 
						|
    }
 | 
						|
}
 | 
						|
 |