function lang_dropdown_form in Language Switcher Dropdown 7
Same name and namespace in other branches
- 6 lang_dropdown.module \lang_dropdown_form()
- 7.2 lang_dropdown.module \lang_dropdown_form()
Function to build the select widget form.
1 string reference to 'lang_dropdown_form'
- lang_dropdown_block_view in ./
lang_dropdown.module - Implements hook_block_view().
File
- ./
lang_dropdown.module, line 312
Code
function lang_dropdown_form($form, &$form_state, $languages, $type) {
global $language_url;
$settings = _lang_dropdown_get_settings($type);
if ($settings['js_widget'] == 2 && !_get_chosen_path()) {
return array();
}
$module_path = drupal_get_path('module', 'lang_dropdown');
$options = $js_settings = $hidden_elements = array();
$selected_option_language_icon = '';
$hidden_elements['lang_dropdown_type'] = array(
'#type' => 'hidden',
'#default_value' => check_plain($type),
);
$language_names = locale_language_list('native');
// Support Domain access
if ($domain_locale_exists = module_exists('domain_locale')) {
global $_domain;
$domain_languages = domain_locale_lookup($_domain['domain_id']);
}
// Now we iterate on $languages to build the needed options for the select element.
foreach ($languages->links as $lang_code => $lang_options) {
// language icons module add language when negotiation is session so be careful
// we need to get rid of that language icons bug by checking for native property
$language_object = isset($lang_options['language']) && isset($lang_options['language']->native) ? $lang_options['language'] : NULL;
// The language is not enabled on this domain
if ($domain_locale_exists && !array_key_exists($lang_code, $domain_languages)) {
continue;
}
// There is no translation for this language and not all languages are shown
if (!isset($lang_options['href']) && !$settings['showall']) {
continue;
}
// Build the options in an assosiative array, so it will be ready for #options in select form element.
$options += array(
$lang_code => $language_names[$lang_code],
);
// Set the selected option to be ready for #default_value in select form element.
if (isset($lang_options['href']) && ($lang_options['href'] == $_GET['q'] || $lang_options['href'] == '<front>' && drupal_is_front_page()) && (empty($lang_options['language']) || $lang_options['language']->language == $language_url->language)) {
$selected_option = $lang_code;
// Icon for the selected language
if (module_exists('languageicons') && !$settings['js_widget']) {
$selected_option_language_icon = theme('languageicons_icon', array(
'language' => (object) array(
'language' => $lang_code,
),
'title' => $language_names[$lang_code],
));
}
}
// Now we build our hidden form inputs to handle the redirections.
$href = isset($lang_options['href']) && $settings['tohome'] == 0 ? $lang_options['href'] : '<front>';
$hidden_elements[$lang_code] = array(
'#type' => 'hidden',
'#default_value' => check_plain(url($href, array(
'language' => $language_object,
'query' => isset($lang_options['query']) ? $lang_options['query'] : '',
))),
);
// Handle flags with Language icons module using JS widget.
if (module_exists('languageicons') && $settings['js_widget']) {
$languageicons_path = variable_get('languageicons_path', drupal_get_path('module', 'languageicons') . '/flags/*.png');
$js_settings['languageicons'][$lang_code] = file_create_url(str_replace('*', $lang_code, $languageicons_path));
}
}
// Add required files and settings for JS widget.
if ($settings['js_widget'] == 1) {
drupal_add_js($module_path . '/msdropdown/js/msdropdown/jquery.dd.min.js');
$js_settings += array(
'widget' => 'msdropdown',
'visibleRows' => $settings['js_widget_settings']['visible_rows'],
'roundedCorner' => $settings['js_widget_settings']['rounded'],
'animStyle' => $settings['js_widget_settings']['animation'],
'event' => $settings['js_widget_settings']['event'],
);
drupal_add_css($module_path . '/msdropdown/css/msdropdown/dd.css');
$selected_skin = $settings['js_widget_settings']['skin'];
if ($selected_skin == 'custom') {
$custom_skin = check_plain($settings['js_widget_settings']['custom_skin']);
drupal_add_css($module_path . '/msdropdown/css/msdropdown/' . $custom_skin . '.css');
$js_settings += array(
'mainCSS' => $custom_skin,
);
}
else {
$skins = _lang_dropdown_get_skins();
$skin_data = $skins[$selected_skin];
drupal_add_css($skin_data['file']);
$js_settings += array(
'mainCSS' => $skin_data['mainCSS'],
);
}
drupal_add_js(array(
'lang_dropdown' => array(
$type => array(
'jsWidget' => $js_settings,
),
),
), 'setting');
}
else {
if ($settings['js_widget'] == 2) {
drupal_add_library('lang_dropdown', 'chosen');
$js_settings += array(
'widget' => 'chosen',
'disable_search' => $settings['chosen']['disable_search'],
'no_results_text' => $settings['chosen']['no_results_text'],
);
drupal_add_js(array(
'lang_dropdown' => array(
$type => array(
'jsWidget' => $js_settings,
),
),
), 'setting');
}
}
$settings['languageicons']['flag_position'] ? $flag_position = '#suffix' : ($flag_position = '#prefix');
// Now we build the $form array.
$form['lang_dropdown_select'] = array(
'#type' => 'select',
'#default_value' => isset($selected_option) ? $selected_option : key($options),
'#options' => $options,
'#attributes' => array(
'style' => 'width:' . $settings['js_widget_settings']['width'] . 'px',
'class' => array(
'lang-dropdown-select-element',
),
'id' => 'lang-dropdown-select-' . $type,
),
'#attached' => array(
'js' => array(
$module_path . '/lang_dropdown.js',
),
'css' => $settings['js_widget'] ? array() : array(
$module_path . '/lang_dropdown.css',
),
),
);
if (empty($hidden_elements)) {
return array();
}
$form += $hidden_elements;
if (module_exists('languageicons')) {
$form['lang_dropdown_select'][$flag_position] = $selected_option_language_icon;
}
$form['#attributes']['class'] = array(
'lang_dropdown_form',
$type,
);
$form['#attributes']['id'] = 'lang_dropdown_form_' . $type;
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Go'),
// The below prefix & suffix for gracefull fallback if JavaScript was disabled
'#prefix' => "<noscript><div>\n",
'#suffix' => "\n</div></noscript>",
);
return $form;
}