You are here

function lang_dropdown_form in Language Switcher Dropdown 6

Same name and namespace in other branches
  1. 7.2 lang_dropdown.module \lang_dropdown_form()
  2. 7 lang_dropdown.module \lang_dropdown_form()

Builds the select widget form

1 string reference to 'lang_dropdown_form'
lang_dropdown_block in ./lang_dropdown.module
Implements hook_block().

File

./lang_dropdown.module, line 65

Code

function lang_dropdown_form() {
  global $language;
  if (module_exists('languageicons')) {
    variable_set('languageicons_show_block', 0);
  }
  $module_path = drupal_get_path('module', 'lang_dropdown');
  $path = drupal_is_front_page() ? '<front>' : $_GET['q'];
  $settings = _lang_dropdown_get_settings();
  $languages = language_list('enabled');
  $options = $select_options = $js_settings = array();
  $selected_option_language_icon = '';
  foreach ($languages[1] as $lang_item) {
    $options[$lang_item->language] = array(
      'href' => $path,
      'title' => $lang_item->native,
      'language' => $lang_item,
    );
  }

  // All languages
  $all_languages = $options;

  // Only languages for which there is a translation
  drupal_alter('translation_link', $options, $path);

  // If show all languages is configured we have
  // to take into account languages with no translation
  // linking them to homepage <front>
  if ($settings['showall'] && count($all_languages) != count($options)) {
    foreach ($all_languages as $key => $value) {
      if (!array_key_exists($key, $options)) {
        $all_languages[$key]['href'] = '<front>';
      }
      else {
        $all_languages[$key] = $options[$key];
      }
    }
    $options = $all_languages;
  }
  drupal_add_js($module_path . '/lang_dropdown.js');
  drupal_add_css($module_path . '/lang_dropdown.css');
  foreach ($options as $lang_option) {
    $path = check_url(url($lang_option['href'], array(
      'language' => $lang_option['language'],
      'query' => drupal_query_string_encode($_GET, array(
        'q',
      )),
    )));
    $select_options += array(
      $path => $lang_option['language']->native,
    );

    // Set the selected option
    if ($language->language == $lang_option['language']->language) {
      $selected_option = $path;
      if (module_exists('languageicons')) {
        $selected_option_language_icon = theme('languageicons_icon', $lang_option['language']);
      }
    }

    // Handle flags with Language icons module using JS widget
    if (module_exists('languageicons') && $settings['js_widget']) {
      $selected_option_language_icon = '';
      $icons_path = variable_get('languageicons_path', drupal_get_path('module', 'languageicons') . '/flags/*.png');
      $js_settings['languageicons'][$path] = base_path() . str_replace('*', $lang_option['language']->language, $icons_path);
    }
  }

  // Add required files and settings for JS widget
  if ($settings['js_widget']) {
    drupal_add_js($module_path . '/msdropdown/jquery.dd.js');
    $js_settings += array(
      'visibleRows' => $settings['js_widget_settings']['visible_rows'],
      'rowHeight' => $settings['js_widget_settings']['row_height'],
      'animStyle' => $settings['js_widget_settings']['animation'],
    );
    if ($settings['languageicons']['flag_position']) {
      drupal_add_css($module_path . '/msdropdown/dd_after.css');
      $js_settings += array(
        'mainCSS' => 'dd_after',
      );
    }
    else {
      drupal_add_css($module_path . '/msdropdown/dd.css');
      $js_settings += array(
        'mainCSS' => 'dd',
      );
    }
    drupal_add_js(array(
      'langDropdown' => array(
        'jsWidget' => $js_settings,
      ),
    ), 'setting');
  }
  $settings['languageicons']['flag_position'] ? $flag_position = '#suffix' : ($flag_position = '#prefix');
  $form['lang_dropdown_select'] = array(
    '#type' => 'select',
    '#default_value' => isset($selected_option) ? $selected_option : key($select_options),
    '#options' => $select_options,
    '#attributes' => array(
      'style' => 'width:' . $settings['js_widget_settings']['width'] . 'px',
    ),
  );
  if (module_exists('languageicons') && !$settings['js_widget']) {
    $form['lang_dropdown_select'][$flag_position] = $selected_option_language_icon;
  }
  $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;
}