'
', 'post' => '', 'show_count' => 'true', 'show_current' => 'true', 'show_unreadable' => 'true', 'snippet' => '', 'content_type' => 'post');
parse_str($arguments, $args);
$args = array_merge($default_args, $args);
if (!$gengo->languages) {
echo $args['pre'] . __('No Languages Defined', GENGO_DOMAIN) . $args['post'];
} else {
$titles = ($args['snippet']) ? $gengo->get_synblocks($args['snippet']) : array();
$home = trailingslashit($gengo->site_home);
if ($wp_rewrite->using_index_permalinks()) $home .= $wp_rewrite->index;
$totals = $gengo->get_totals($args['content_type']);
asort($gengo->languages);
foreach ($gengo->languages as $language_id => $entry) {
if ($post_count = $totals[$language_id]) {
if ('false' != $args['show_count']) $count_string = " ($post_count)";
$gengo->forced_append = true;
if (('false' != $args['show_unreadable']) || (false !== strpos($gengo->viewable_code_string, $entry->code))) {
$title = $titles[$language_id] ? $titles[$language_id] : $entry->language;
if (false === $gengo->is_set_language($language_id)) {
echo "$args[pre]code\" href=\"" . $gengo->append_link_language($home, $entry->code) . "\" hreflang=\"" . $entry->code . "\">$title$count_string$args[post]";
} else {
if ('false' != $args['show_current']) {
echo "$args[pre]code\">$title$count_string$args[post]";
}
}
}
}
}
}
}
/**
* Modified version of WordPress' own link_pages.
* DEPRECATED
*
* @param string $before
* @param string $after
* @param string $next_or_number
* @param string $nextpagelink
* @param string $previouspagelink
* @param string $pagelink
* @param string $more_file
*/
function gengo_link_pages($before = '
', $after = '
', $next_or_number = 'number', $nextpagelink = 'next page', $previouspagelink = 'previous page', $pagelink = '%', $more_file = '') {
_deprecated_function(__FUNCTION__, '0.0', 'gengo_wp_link_pages()');
$args = compact('before', 'after', 'next_or_number', 'nextpagelink', 'previouspagelink', 'pagelink', 'more_file');
return gengo_wp_link_pages($args);
}
/**
* Modified version of WordPress' own wp_link_pages.
*
* @param string|array $args Optional. Overwrite the defaults.
* @return string Formatted output in HTML.
*/
function gengo_wp_link_pages($args = '') {
$defaults = array(
'before' => '' . __('Pages:'), 'after' => '
',
'link_before' => '', 'link_after' => '',
'next_or_number' => 'number', 'nextpagelink' => __('Next page'),
'previouspagelink' => __('Previous page'), 'pagelink' => '%',
'more_file' => '', 'echo' => 1
);
$r = wp_parse_args( $args, $defaults );
extract( $r, EXTR_SKIP );
global $gengo,$post, $page, $numpages, $multipage, $more, $pagenow;
if ( $more_file != '' )
$file = $more_file;
else
$file = $pagenow;
$output = '';
if ( $multipage ) {
$permalinks = get_option('permalink_structure');
if ( '' == $permalinks || in_array($post->post_status, array('draft', 'pending')) )
$link_base = get_permalink();
else
$link_base = ($gengo->language_supplied) ? substr(trailingslashit(get_permalink()), 0, -3) : get_permalink();
if ( 'number' == $next_or_number ) {
$output .= $before;
for ( $i = 1; $i < ($numpages+1); $i = $i + 1 ) {
$j = str_replace('%',"$i",$pagelink);
$output .= ' ';
if ( ($i != $page) || ((!$more) && ($page==1)) ) {
if ( 1 == $i ) {
$output .= '';
} else {
if ( '' == $permalinks || in_array($post->post_status, array('draft', 'pending')) )
$link = $link_base . '&page=' . $i;
else
$link = trailingslashit($link_base) . user_trailingslashit($i, 'single_paged');
if ( $gengo->language_preference && ('' != $permalinks) )
$link = $gengo->append_link_language($link, $gengo->language_preference[0]->code);
$output .= '';
}
}
$output .= $link_before;
$output .= $j;
$output .= $link_after;
if ( ($i != $page) || ((!$more) && ($page==1)) )
$output .= '';
}
$output .= $after;
} else {
if ( $more ) {
$output .= $before;
$i = $page - 1;
if ( $i && $more ) {
if ( 1 == $i ) {
$output .= '' . $link_before. $previouspagelink . $link_after . '';
} else {
if ( '' == $permalinks || in_array($post->post_status, array('draft', 'pending')) )
$link = $link_base . '&page=' . $i;
else
$link = trailingslashit($link_base) . user_trailingslashit($i, 'single_paged');
if ( $gengo->language_preference && ('' != $permalinks) )
$link = $gengo->append_link_language($link, $gengo->language_preference[0]->code);
$output .= '' . $link_before. $previouspagelink . $link_after . '';
}
}
$i = $page + 1;
if ( $i <= $numpages && $more ) {
if ( 1 == $i ) {
$output .= '' . $link_before. $nextpagelink . $link_after . '';
} else {
if ( '' == $permalinks || in_array($post->post_status, array('draft', 'pending')) )
$link = $link_base . '&page=' . $i;
else
$link = trailingslashit($link_base) . user_trailingslashit($i, 'single_paged');
if ( $gengo->language_preference && ('' != $permalinks) )
$link = $gengo->append_link_language($link, $gengo->language_preference[0]->code);
$output .= '' . $link_before. $nextpagelink . $link_after . '';
}
}
$output .= $after;
}
}
}
if ( $echo )
echo $output;
return $output;
}
/**
* Modified version of WordPress' own previous_posts_link.
*
* @param string $label
*/
function gengo_previous_posts_link($label = 'Newer Entries »') {
global $gengo, $paged;
if (!is_single() && ($paged > 1)) {
$nextpage = intval($paged) - 1;
if ($nextpage < 1) $nextpage = 1;
$link = get_pagenum_link($nextpage);
if ($gengo->language_preference) $link = str_replace("/{$gengo->viewable_code_string}/page/$nextpage/", "/page/$nextpage/{$gengo->viewable_code_string}/", $link);
echo '' . preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) . '';
}
}
/**
* Modified version of WordPress' own next_posts_link.
*
* @param string $label
* @param int $max_page
*/
function gengo_next_posts_link($label = '« Older Entries', $max_page = 0) {
global $gengo, $paged, $max_num_pages, $result, $request, $posts_per_page, $wpdb, $wp_query;
if ( !$max_page ) {
$max_page = $wp_query->max_num_pages;
}
if (!$paged) $paged = 1;
(int) $nextpage = intval($paged) + 1;
# echo $max_page;#."/".$paged;
if (!is_single() && ($nextpage <= $max_page)) {
$link = get_pagenum_link($nextpage);
foreach ($gengo->language_preference_id as $id) $string .= ($string) ? GENGO_LANGUAGE_DIVIDER . $gengo->languages[$id]->code : $gengo->languages[$id]->code;
if ($gengo->language_preference) $link = str_replace("/$string/page/$nextpage/", "/page/$nextpage/$string/", $link);
echo '' . preg_replace('/&([^#])(?![a-z]{1,8};)/', '&$1', $label) . '';
}
}
/**
* Returns a text snippet
*
* @param string $block_name
* @param bool $return
* @return string
*/
function gengo_synblock($block_name, $return = false) {
return gengo_snippet($block_name, $return);
}
/**
* Prints or returns a text snippet
*
* @param string $block_name
* @param bool $return
*/
function gengo_snippet($block_name, $return = false) {
global $gengo;
if ($code = $gengo->language_preference[0]->code) {
if ($return) return $gengo->get_synblock($block_name, $gengo->language_preference_id[0]);
else echo $gengo->get_synblock($block_name, $gengo->language_preference_id[0]);
}
}
/**
* Prints or returns the trackback url
*
* @param bool $display
*/
function gengo_trackback_url($display = true) {
global $gengo, $id, $post;
$url = get_settings('permalink_structure') ? substr(trailingslashit(get_permalink()), 0, -3) . 'trackback/' : get_settings('siteurl') . '/wp-trackback.php?p=' . $id;
$url = $gengo->append_link_language($url, $post->code);
if ($display) echo $url;
else return $url;
}
/**
* Prints an unordered list of viewing languages, with JS controls
*
* @param string $title
*/
function gengo_viewing_languages($title = 'GENGO_DEFAULT') {
global $gengo;
if ('GENGO_DEFAULT' == $title) $title = '' . __('Current Languages', GENGO_DOMAIN) . '
';
echo $title;
?>
viewable_code_string);
foreach ($viewing_languages as $code) {
$id = $gengo->codes2ids[$code];
?>
-
languages[$id]->language ?>
' . __('Available Languages', GENGO_DOMAIN) . '';
echo $title;
?>
viewable_code_string);
foreach ($gengo->languages as $language_id => $entry) {
if (!in_array($entry->code, $viewing_languages)) {
?>
-
language ?>
' . __('Language Control', GENGO_DOMAIN) . '';
echo $title;
?>
using_index_permalinks()) $index = $wp_rewrite->index;
$url = $gengo->append_link_language(trailingslashit(get_settings('home')) . $index, $gengo->viewable_code_string);
if ("index.php" == substr($url, -9)) $url = substr($url, 0, -9);
if ($return) return $url;
else echo $url;
}
// Checks whether we are on a language page.
function is_language($specific = '') {
global $gengo;
if (!$code = $gengo->language_preference[0]->code) return false;
if ($specific) {
if (false !== $gengo->is_set_language($gengo->codes2ids[$specific])) return true;
return false;
}
return true;
}
function the_template_language($return = false) {
global $gengo;
if ($return) return $gengo->language_preference[0]->language;
else echo $gengo->language_preference[0]->language;
}
function the_template_code($return = false) {
global $gengo;
if ($return) return $gengo->language_preference[0]->code;
else echo $gengo->language_preference[0]->code;
}
function the_template_locale($return = false) {
global $gengo;
if ($return) return $gengo->language_preference[0]->locale;
else echo $gengo->language_preference[0]->locale;
}
function the_template_direction($return = false) {
global $gengo;
if ($return) return $gengo->language_preference[0]->rtl ? 'rtl' : 'ltr';
else echo $gengo->language_preference[0]->rtl ? 'rtl' : 'ltr';
}
// Echoes the language of the current post.
function the_language($return = false) {
global $post;
if ($return) return $post->language;
else echo $post->language;
}
// Echoes or returns the language code of the current post. Thanks to Martin Gottstein for the idea.
function the_language_code($return = false) {
global $post;
if ($return) return $post->code;
else echo $post->code;
}
// Echoes or returns the language locale of the current post.
function the_language_locale($return = false) {
global $post;
if ($return) return $post->locale;
else echo $post->locale;
}
// Echoes or returns the language text direction of the current post.
function the_language_direction($return = false) {
global $post;
if ($return) return $post->rtl ? 'rtl' : 'ltr';
else echo $post->rtl ? 'rtl' : 'ltr';
}
// Outputs a string of all the languages a reader can read.
function the_viewable_languages($aspect, $glue = ', ', $return = false) {
global $gengo;
$viewable_count = count($gengo->language_preference_id);
if (1 == $viewable_count) $string = $gengo->languages[$gengo->language_preference_id[0]]->language;
else {
$i = 0;
foreach ($gengo->language_preference_id as $id) {
if ($i++) $string .= ($i == $viewable_count) ? " $aspect " : $glue;
$string .= $gengo->languages[$id]->language;
}
}
if ($return) return $string;
else echo $string;
}
// Outputs a string of language codes in use on this page.
function the_viewable_codes($return = false) {
global $gengo;
if ($return) return $gengo->viewable_code_string;
else echo $gengo->viewable_code_string;
}
// Outputs a div containing all the summaries for this article. Use in The Loop.
function the_summaries($lang = 'xml:lang,lang', $title = 'GENGO_DEFAULT') {
global $gengo, $post;
if (!$summaries = $gengo->post_language_cache[$post->ID]->summaries) return;
$lowest = 10000;
$default_id = 0;
$viewable_summaries = array();
foreach ($summaries as $summary_id => $summary) {
if (false !== ($order = $gengo->is_viewable_language($summary['summary_language']))) {
$viewable_summaries[$summary_id] = $summary;
if ($order < $lowest) {
$default_id = $summary_id;
$lowest = $order;
}
}
}
if (!$viewable_summaries) return;
if (!$default_id) $default_id = $summaries[0]['summary_id'];
if (($sum_count = count($viewable_summaries)) > 1) {
?>
$summary) {
if ($lang) {
$attributes = explode(',', $lang);
$lang_atts = '';
foreach($attributes as $attribute) {
$lang_atts .= ' ' . $attribute . '="' . $gengo->languages[$summary['summary_language']]->code . '"';
}
}
?>
>
' . $gengo->languages[$summary['summary_language']]->language . ' ';
}
if ($sum_count > 1) echo $link_list;
?>
false, 'pre' => '', 'inner' => '', 'title_none' => 'GENGO_DEFAULT', 'title_exists' => 'GENGO_DEFAULT', 'show_authors' => false, 'show_dates' => '', 'show_current' => false, 'snippet' => '', 'show_translation_title' => false);
parse_str($arguments, $args);
$args = array_merge($default_args, $args);
$titles = ($args['snippet']) ? $gengo->get_synblocks($args['snippet']) : array();
// TODO: Change to use the cache.
if (!$translations = $gengo->get_the_translations()) {
if ($args['return']) return array();
if ('GENGO_DEFAULT' == $args['title_none']) $args['title_none'] = '' . __('No Translations', GENGO_DOMAIN) . '
';
echo $args['title_none'];
return;
}
if ($args['return']) return $translations;
if ('GENGO_DEFAULT' == $args['title_exists']) $args['title_exists'] = '' . __('Other Languages:', GENGO_DOMAIN) . '
';
echo $args['title_exists'] . $args['pre'];
foreach ($translations as $translation) {
if ($i++) echo $args['inner'];
$title = $titles[$translation['translation_language']] ? $titles[$translation['translation_language']] : '';
if ($args['show_translation_title']) {
echo $title;
$title = $translation['translation_title'];
}
echo $gengo->translation_link($translation, 'a', $title);
if ($args['show_author']) echo ' (' . $translation['translation_author'] . ')';
if ($args['show_date']) echo ' ' . mysql2date($args['show_date'], $translation['translation_date']);
}
if ($args['show_current']) {
$title = $args['snippet'] ? $titles[$gengo->codes2ids[the_language_code(true)]] : the_language(true);
echo $args['inner'] . $title;
}
echo $args['post'];
}
function the_translations_comments($show_count = true) {
global $gengo, $wpdb, $post;
if (!$translations = $this->post_language_cache[$post->ID]->translations) return;
foreach ($translations as $translation) {
if (!$translation['translation_comments']) continue;
$comments_string .= $gengo->translation_link($translation, 'comments');
if ($show_count) $comments_string .= " ($translation[translation_comments]) ";
}
if ($comments_string) printf(__('View Comments in: %s', GENGO_DOMAIN), $comments_string);
}
include_once(GENGO_PATH . '/gengo_extra_functions.php');
?>