ASong2U_Web/wp-content/plugins/buddypress-multilingual/frontend.php

315 lines
8.4 KiB
PHP

<?php
/*
* Frontend functions
*/
/**
* Test function.
*
* @param <type> $a
*/
function bpml_test($a = '') {
echo '<pre>'; print_r($a); echo '</pre>';
}
/**
* Before BP header hook.
*
* Activate site_url() filter.
*/
function bpml_bp_before_header_hook() {
add_filter('site_url', 'bpml_site_url_filter', 0);
}
/**
* After BP footer hook.
*
* Remove site_url() filter.
*/
function bpml_bp_after_footer_hook() {
remove_filter('site_url', 'bpml_site_url_filter', 0);
}
/**
* Filters site_url() calls.
*
* @global $sitepress
* @param <type> $url
* @return <type>
*/
function bpml_site_url_filter($url, $path = '') {
global $sitepress;
return rtrim($sitepress->convert_url($url), '/');
}
/**
* Removes site_url() filter when redirecting to random blog.
*/
function bpml_blogs_redirect_to_random_blog() {
global $bp;
if ($bp->current_component == $bp->blogs->slug && isset($_GET['random-blog'])) {
remove_filter('site_url', 'bpml_site_url_filter', 0);
}
}
/**
* Filters BuddyPress root domain.
*
* @global $sitepress $sitepress
* @param <type> $url
* @return <type>
*/
function bpml_bp_core_get_root_domain_filter($url) {
global $sitepress;
return rtrim($sitepress->convert_url($url), '/');
}
/**
* Filters admin URL (removes language).
*
* @global $sitepress $sitepress
* @param <type> $url
* @param <type> $path
* @param <type> $blog_id
* @return <type>
*/
function bpml_admin_url_filter($url, $path, $blog_id) {
$url = str_replace('/' . ICL_LANGUAGE_CODE . '/wp-admin', '/wp-admin/', $url);
return $url;
}
/**
* Translates all links in given string.
*
* @global <type> $bpml_filter_hrefs_lang
* @param <type> $string
* @param <type> $lang
* @param <type> $limit
* @return <type>
*/
function bpml_filter_hrefs($string = '', $lang = '', $limit = -1,
$position = NULL) {
global $bpml_filter_hrefs_lang, $bpml_filter_hrefs_count;
$bpml_filter_hrefs_count = 0;
$bpml_filter_hrefs_lang = $lang;
if (!is_null($position)) {
global $bpml_filter_hrefs_position;
$bpml_filter_hrefs_position = $position;
}
$return = preg_replace_callback('/href=["\'](.+?)["\']/', 'bpml_filter_href_matches', $string, $limit);
$bpml_filter_hrefs_count = 0;
return $return;
}
/**
* Translates all links in given string from to.
*
* @global <type> $bpml_filter_hrefs_lang
* @param <type> $string
* @param <type> $lang
* @param <type> $limit
* @return <type>
*/
function bpml_filter_hrefs_from_to($string = '', $lang_from = '', $lang_to = '',
$limit = -1, $position = NULL) {
global $bpml_filter_hrefs_lang, $bpml_filter_hrefs_lang_to, $bpml_filter_hrefs_count;
$bpml_filter_hrefs_count = 0;
$bpml_filter_hrefs_lang = $lang_from;
$bpml_filter_hrefs_lang_to = $lang_to;
if (!is_null($position)) {
global $bpml_filter_hrefs_position;
$bpml_filter_hrefs_position = $position;
}
$return = preg_replace_callback('/href=["\'](.+?)["\']/', 'bpml_filter_href_matches', $string, $limit);
$bpml_filter_hrefs_count = 0;
return $return;
}
/**
* Translates links in matches provided from bpml_filter_hrefs().
*
* @global $sitepress $sitepress
* @global $bpml_filter_hrefs_lang
* @param <type> $match
* @return <type>
*/
function bpml_filter_href_matches($match = array()) {
global $sitepress, $bpml_filter_hrefs_lang, $bpml_filter_hrefs_lang_to, $bpml_filter_hrefs_position, $bpml_filter_hrefs_count;
if (!empty($bpml_filter_hrefs_position)) {
if ($bpml_filter_hrefs_count != $bpml_filter_hrefs_position) {
$bpml_filter_hrefs_count += 1;
return $match[0];
}
}
if (!empty($bpml_filter_hrefs_lang_to)) {
$lang_to = ($bpml_filter_hrefs_lang_to == $sitepress->get_default_language()) ? '' : $bpml_filter_hrefs_lang_to . '/';
$converted = preg_replace('/\/' . $bpml_filter_hrefs_lang . '\//', '/' . $lang_to, $match[1], 1);
} else if ($sitepress->get_current_language() != $sitepress->get_default_language()) {
if ($bpml_filter_hrefs_lang !== $sitepress->get_default_language()) {
$converted = preg_replace('/\/' . $bpml_filter_hrefs_lang . '\//', '/' . $sitepress->get_current_language() . '/', $match[1], 1);
} else {
$converted = $sitepress->convert_url($match[1]);
}
// Check doubled
$converted = preg_replace('/\/' . $sitepress->get_current_language() . '\/' . $sitepress->get_current_language() . '\//', '/' . $sitepress->get_current_language() . '/', $converted, 1);
} else {
$replace = !empty($bpml_filter_hrefs_lang) ? '/\/' . $bpml_filter_hrefs_lang . '\//' : '/\//';
$converted = preg_replace($replace, '/', $match[1], 1);
}
return str_replace($match[1], $converted, $match[0]);
}
/**
* Filters bp_uri.
*
* This URI is important for BuddyPress.
* By that it determines some components and actions.
* We remove language component so BP can determine things right.
*
* @param <type> $url
* @return <type>
*/
function bpml_bp_uri_filter($url) {
global $sitepress;
$default_language = $sitepress->get_default_language();
if ($default_language == ICL_LANGUAGE_CODE) {
return $url;
}
return preg_replace('/\/' . ICL_LANGUAGE_CODE . '\//', '/', $url, 1);
echo $default_language;
}
/**
* Filters WPML languages switcher.
*
* This filtering is performed on BP pages
* where WPML actually don't detect any post/page.
*
* @global <type> $sitepress
* @global <type> $bp
* @global <type> $bp_unfiltered_uri
* @global <type> $post
* @return <type>
*/
function bpml_icl_ls_languages_filter($langs) {
global $sitepress, $bp, $bp_unfiltered_uri, $post;
$default_language = $sitepress->get_default_language();
foreach($bp->active_components as $key => $value){
$components[] = $key;
}
if(!isset($bp_unfiltered_uri[0])){
$bp_unfiltered_uri[0] = '';
}
// Unset the languages for missing translations
if(!in_array($bp_unfiltered_uri[0], $components)) {
foreach ($langs as $key => $lang) {
$url = ($default_language !== $key) ? $url = get_option('home') . "/$key/" : $url = get_option('home') . "/";
if($url == $langs[$key]['url']){
if(!is_home() && !is_front_page($post->ID)){
unset($langs[$key]);
}
}
}
return $langs;
}
// Recreates language selector - the all components should have all languages
if(version_compare(BP_VERSION, '1.2.9') >= 0){
$langs = $sitepress->get_active_languages();
$url = '';
foreach($bp_unfiltered_uri as $key => $path){
$url .= '/' . $path;
}
$homepage = get_option('home');
$urlToFlags = ICL_PLUGIN_URL . '/res/flags/';
foreach ($langs as $key => $lang) {
$langs[$key]['country_flag_url'] = $urlToFlags . "$key.png";
$langs[$key]['language_code'] = $key;
$langs[$key]['translated_name'] = $lang['english_name'];
if($default_language == $key){
$langs[$key]['url'] = $homepage . $url;
} else {
$langs[$key]['url'] = $homepage . '/' . $lang['code'] . $url;
}
}
} else {
if (!in_array($bp_unfiltered_uri[0], $bp->root_components)) {
return $langs;
}
foreach ($langs as $key => $lang) {
$langs[$key]['url'] = $sitepress->convert_url(get_option('home')
. '/' . implode('/', $bp_unfiltered_uri), $lang['language_code']);
}
}
return $langs;
}
/**
* Stores/returns debug messages.
*
* @staticvar array $messages
* @param <type> $message
* @param <type> $class
* @return array
*/
function bpml_debug($message, $class = 'bpml-debug-updated') {
if (!current_user_can('administrator') || !defined('BPML_DEBUG') || !BPML_DEBUG) {
return '';
}
static $messages = array();
if ($message == 'get') {
return $messages;
}
$messages[] = array('message' => $message, 'class' => 'updated bpml-debug ' . $class);
}
/**
* Header hook.
*/
function bpml_wp_head_hook() {
}
/**
* Renders debug info.
*
* @global $bp
* @return <type>
*/
function bpml_wp_footer() {
if (!current_user_can('administrator') || !defined('BPML_DEBUG') || !BPML_DEBUG) {
return '';
}
echo '<div id="bpml-debug"><h2>BPML Debug</h2>';
$messages = bpml_debug('get');
foreach ($messages as $message) {
echo bpml_message($message['message'], $message['class']);
}
global $bp, $bpml;
var_dump($bpml);
echo '<pre>';
echo '
BPML Settings
';
var_dump($bpml);
echo '
BuddyPress ';
print_r($bp);
echo '</pre></div>';
}