Calling all Drupal developers!
Help us get this on the first page of Digg. DIGG NOW!
Help us get this on the first page of Digg. DIGG NOW!
<?php
// $Id: languageicons.module,v 1.3.2.2 2008/04/16 12:30:32 jareyero Exp $
/**
* @file
* Language icons
*
* Internationalization (i18n) package
*
* @author Jose A. Reyero, 2007
*
*/
/**
* Implementation of hook_theme()
*/
function languageicons_theme() {
return array(
'languageicons_icon' => array(
'arguments' => array('language' => NULL, 'title' => NULL),
),
'languageicons_place' => array(
'arguments' => array('text' => NULL, 'icon' => NULL, 'separator' => ' '),
),
);
}
/**
* Implementation of hook_help().
*/
function languageicons_help($section = 'admin/help#languageicons' ) {
switch ($section) {
case 'admin/help#languageicons' :
$output = '<p>'.t('This module manages language icons for multilingual sites:').'</p>';
$output .= '<ul>';
$output .= '<li>'.t('Automatically adds icons to language links').'</li>';
$output .= '<li>'.t('Provides related theme functions').'</li>';
$output .= '</ul>';
$output .= '<p>'. t('For more information please read the <a href="@i18n">on-line help pages</a>.', array('@i18n' =>'http://drupal.org/node/31631')) .'</p>';
return $output;
case 'admin/settings/languageicons':
$output .= '<p>'.t('To enable multilingual support for specific content types go to !configure_content_types.', array('!configure_content_types' => l(t('configure content types'), 'admin/content/types'), )).'</p>';
return $output;
}
}
/**
* Implementation of hook_menu().
*/
function languageicons_menu() {
$items['admin/settings/language/configure/options'] = array(
'title' => 'Configure',
'weight' => 10,
'type' => MENU_DEFAULT_LOCAL_TASK,
'access arguments' => array('administer languages'),
);
$items['admin/settings/language/configure/icons'] = array(
'title' => 'Icons',
'page callback' => 'drupal_get_form',
'page arguments' => array('languageicons_admin_settings'),
'weight' => 10,
'type' => MENU_LOCAL_TASK,
'access arguments' => array('administer languages'),
);
return $items;
}
/**
* Implementation of hook_alter_translation_link().
*
* Adds language icons to normal translation links.
*/
function languageicons_translation_link_alter(&$links, $path) {
if (variable_get('languageicons_show_block', 1)) {
foreach (array_keys($links) as $langcode) {
languageicons_link_add($links[$langcode]);
}
}
}
/**
* Implementation of hook_link_alter().
*
* Adds language icons to node links.
*/
function languageicons_link_alter(&$links, $node) {
if (variable_get('languageicons_show_node', 1) && $node->tnid && $translations = module_invoke('translation', 'node_get_translations', $node->tnid)) {
$languages = language_list();
foreach ($translations as $langcode => $translation) {
$index = 'node_translation_'.$langcode;
if (!empty($links[$index])) {
languageicons_link_add($links[$index]);
}
}
}
}
/**
* Add language icon to link
*
* The language icon may be a different language as the destination page, can be passed in 'language_icon'
*/
function languageicons_link_add(&$link, $title = NULL) {
$language = isset($link['language_icon']) ? $link['language_icon'] : $link['language'];
$title = $title ? $title : $link['title'];
if ($icon = theme('languageicons_icon', $language, $title)) {
$link['title'] = theme('languageicons_place', $link['title'], $icon);
$link['html'] = TRUE;
}
}
/**
* Form builder function.
*
*/
function languageicons_admin_settings() {
$form['show'] = array(
'#type' => 'fieldset',
'#title' => t('Add language icons'),
'#description' => t('Link types to add language icons.'),
);
$form['show']['languageicons_show_node'] = array(
'#type' => 'checkbox',
'#title' => t('Node links'),
'#default_value' => variable_get('languageicons_show_node', 1),
);
$form['show']['languageicons_show_block'] = array(
'#type' => 'checkbox',
'#title' => t('Language switcher block'),
'#default_value' => variable_get('languageicons_show_block', 1),
);
$form['languageicons_placement'] = array(
'#type' => 'radios',
'#title' => t('Icon placement'),
'#options' => array('before' => t('Before'), 'after' => t('After'), 'replace' => t('Replace')),
'#default_value' => variable_get('languageicons_placement', 'before'),
'#description' => t('Where to display the icon, relative to the link title.'),
);
$form['i18n_icon_path'] = array(
'#type' => 'textfield',
'#title' => t('Icons file path'),
'#default_value' => variable_get('i18n_icon_path', drupal_get_path('module', 'i18n').'/flags/*.png'),
'#size' => 70,
'#maxlength' => 180,
'#description' => t('Path for language icons, relative to Drupal installation. \'*\' is a placeholder for language code.'),
);
$form['i18n_icon_size'] = array(
'#type' => 'textfield',
'#title' => t('Image size'),
'#default_value' => variable_get('i18n_icon_size', '16x12'),
'#size' => 10,
'#maxlength' => 10,
'#description' => t('Image size for language icons, in the form "width x height".'),
);
return system_settings_form($form);
}
/**
* Theme language icon
*
* This function can be overridden for no language icons
*/
function theme_languageicons_icon($language, $title = NULL){
if ($path = variable_get('i18n_icon_path', drupal_get_path('module', 'i18n').'/flags/*.png')) {
$src = base_path().str_replace('*', $language->language, $path);
$title = $title ? $title : $language->native;
$attribs = array('class' => 'language-icon', 'alt' => $title);
if ($size = variable_get('i18n_icon_size', '16x12')) {
list($width, $height) = explode('x', $size);
$attribs += array('width' => $width, 'height' => $height);
}
return "<img src=\"$src\" ".drupal_attributes($attribs)." />";
}
}
/**
* Theme language icon and text
*/
function theme_languageicons_place($text, $icon, $separator = ' ') {
switch(variable_get('languageicons_placement', 'before')) {
case 'after':
return $text . $separator . $icon;
case 'replace':
return $icon;
case 'before':
default:
return $icon . $separator . $text;
}
}