Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/sitepres.../classes/utilitie...
File: class-wpml-locale.php
<?php
[0] Fix | Delete
[1] Fix | Delete
use WPML\Collect\Support\Collection;
[2] Fix | Delete
[3] Fix | Delete
class WPML_Locale {
[4] Fix | Delete
/**
[5] Fix | Delete
* @var wpdb
[6] Fix | Delete
*/
[7] Fix | Delete
private $wpdb;
[8] Fix | Delete
/**
[9] Fix | Delete
* @var SitePress
[10] Fix | Delete
*/
[11] Fix | Delete
private $sitepress;
[12] Fix | Delete
/**
[13] Fix | Delete
* @var string $locale
[14] Fix | Delete
*/
[15] Fix | Delete
private $locale;
[16] Fix | Delete
private $locale_cache;
[17] Fix | Delete
[18] Fix | Delete
/** @var Collection $all_locales */
[19] Fix | Delete
private $all_locales;
[20] Fix | Delete
[21] Fix | Delete
/**
[22] Fix | Delete
* WPML_Locale constructor.
[23] Fix | Delete
*
[24] Fix | Delete
* @param wpdb $wpdb
[25] Fix | Delete
* @param SitePress $sitepress
[26] Fix | Delete
* @param string $locale
[27] Fix | Delete
*/
[28] Fix | Delete
public function __construct( wpdb &$wpdb, SitePress &$sitepress, &$locale ) {
[29] Fix | Delete
$this->wpdb =& $wpdb;
[30] Fix | Delete
$this->sitepress =& $sitepress;
[31] Fix | Delete
$this->locale =& $locale;
[32] Fix | Delete
$this->locale_cache = null;
[33] Fix | Delete
}
[34] Fix | Delete
[35] Fix | Delete
public function init() {
[36] Fix | Delete
if ( $this->language_needs_title_sanitization() ) {
[37] Fix | Delete
add_filter( 'sanitize_title', array( $this, 'filter_sanitize_title' ), 10, 2 );
[38] Fix | Delete
}
[39] Fix | Delete
}
[40] Fix | Delete
[41] Fix | Delete
/**
[42] Fix | Delete
* @see \Test_Admin_Settings::test_locale
[43] Fix | Delete
* @fixme
[44] Fix | Delete
* Due to the way these tests work (global state issues) I had to create this method
[45] Fix | Delete
* to ensure we have full coverage of the code.
[46] Fix | Delete
* This method shouldn't be used anywhere else and should be removed once tests are migrated
[47] Fix | Delete
* to the new tests framework.
[48] Fix | Delete
*/
[49] Fix | Delete
public function reset_cached_data() {
[50] Fix | Delete
$this->locale_cache = null;
[51] Fix | Delete
$this->all_locales = null;
[52] Fix | Delete
}
[53] Fix | Delete
[54] Fix | Delete
/**
[55] Fix | Delete
* Hooked to 'sanitize_title' in case the user is using a language that has either German or Danish locale, to
[56] Fix | Delete
* ensure that WP Core sanitization functions handle special chars accordingly.
[57] Fix | Delete
*
[58] Fix | Delete
* @param string $title
[59] Fix | Delete
* @param string $raw_title
[60] Fix | Delete
*
[61] Fix | Delete
* @return string
[62] Fix | Delete
*/
[63] Fix | Delete
public function filter_sanitize_title( $title, $raw_title ) {
[64] Fix | Delete
if ( $title !== $raw_title ) {
[65] Fix | Delete
remove_filter( 'sanitize_title', array( $this, 'filter_sanitize_title' ), 10 );
[66] Fix | Delete
$chars = array();
[67] Fix | Delete
$chars[ chr( 195 ) . chr( 132 ) ] = 'Ae';
[68] Fix | Delete
$chars[ chr( 195 ) . chr( 133 ) ] = 'Aa';
[69] Fix | Delete
$chars[ chr( 195 ) . chr( 134 ) ] = 'Ae';
[70] Fix | Delete
$chars[ chr( 195 ) . chr( 150 ) ] = 'Oe';
[71] Fix | Delete
$chars[ chr( 195 ) . chr( 152 ) ] = 'Oe';
[72] Fix | Delete
$chars[ chr( 195 ) . chr( 156 ) ] = 'Ue';
[73] Fix | Delete
$chars[ chr( 195 ) . chr( 159 ) ] = 'ss';
[74] Fix | Delete
$chars[ chr( 195 ) . chr( 164 ) ] = 'ae';
[75] Fix | Delete
$chars[ chr( 195 ) . chr( 165 ) ] = 'aa';
[76] Fix | Delete
$chars[ chr( 195 ) . chr( 166 ) ] = 'ae';
[77] Fix | Delete
$chars[ chr( 195 ) . chr( 182 ) ] = 'oe';
[78] Fix | Delete
$chars[ chr( 195 ) . chr( 184 ) ] = 'oe';
[79] Fix | Delete
$chars[ chr( 195 ) . chr( 188 ) ] = 'ue';
[80] Fix | Delete
$title = sanitize_title( strtr( $raw_title, $chars ) );
[81] Fix | Delete
add_filter( 'sanitize_title', array( $this, 'filter_sanitize_title' ), 10, 2 );
[82] Fix | Delete
}
[83] Fix | Delete
[84] Fix | Delete
return $title;
[85] Fix | Delete
}
[86] Fix | Delete
[87] Fix | Delete
/**
[88] Fix | Delete
* @return bool|mixed
[89] Fix | Delete
*/
[90] Fix | Delete
public function locale() {
[91] Fix | Delete
if ( ! $this->locale_cache ) {
[92] Fix | Delete
add_filter( 'language_attributes', array( $this, '_language_attributes' ) );
[93] Fix | Delete
[94] Fix | Delete
$wp_api = $this->sitepress->get_wp_api();
[95] Fix | Delete
$is_ajax = $wp_api->is_ajax();
[96] Fix | Delete
if ( $is_ajax && isset( $_REQUEST['action'], $_REQUEST['lang'] ) ) {
[97] Fix | Delete
$locale_lang_code = $_REQUEST['lang'];
[98] Fix | Delete
} elseif ( $wp_api->is_admin()
[99] Fix | Delete
&& ( ! $is_ajax
[100] Fix | Delete
|| $this->sitepress->check_if_admin_action_from_referer() )
[101] Fix | Delete
) {
[102] Fix | Delete
$locale_lang_code = $this->sitepress->user_lang_by_authcookie();
[103] Fix | Delete
} else {
[104] Fix | Delete
$locale_lang_code = $this->sitepress->get_current_language();
[105] Fix | Delete
}
[106] Fix | Delete
$locale = $this->get_locale( $locale_lang_code );
[107] Fix | Delete
[108] Fix | Delete
if ( did_action( 'plugins_loaded' ) ) {
[109] Fix | Delete
$this->locale_cache = $locale;
[110] Fix | Delete
}
[111] Fix | Delete
[112] Fix | Delete
return $locale;
[113] Fix | Delete
}
[114] Fix | Delete
[115] Fix | Delete
return $this->locale_cache;
[116] Fix | Delete
}
[117] Fix | Delete
[118] Fix | Delete
/**
[119] Fix | Delete
* @param string $code
[120] Fix | Delete
*
[121] Fix | Delete
* @return false|string
[122] Fix | Delete
*/
[123] Fix | Delete
public function get_locale( $code ) {
[124] Fix | Delete
if ( ! $code ) {
[125] Fix | Delete
return false;
[126] Fix | Delete
}
[127] Fix | Delete
[128] Fix | Delete
return $this->get_all_locales()->get( $code, $code );
[129] Fix | Delete
}
[130] Fix | Delete
[131] Fix | Delete
/**
[132] Fix | Delete
* @return Collection
[133] Fix | Delete
*/
[134] Fix | Delete
public function get_all_locales() {
[135] Fix | Delete
if ( ! $this->all_locales ) {
[136] Fix | Delete
$sql = "
[137] Fix | Delete
SELECT
[138] Fix | Delete
l.code,
[139] Fix | Delete
m.locale,
[140] Fix | Delete
l.default_locale
[141] Fix | Delete
FROM {$this->wpdb->prefix}icl_languages AS l
[142] Fix | Delete
LEFT JOIN {$this->wpdb->prefix}icl_locale_map AS m ON m.code = l.code
[143] Fix | Delete
";
[144] Fix | Delete
[145] Fix | Delete
$this->all_locales = wpml_collect( $this->wpdb->get_results( $sql ) )
[146] Fix | Delete
->mapWithKeys(
[147] Fix | Delete
function( $row ) {
[148] Fix | Delete
if ( $row->locale ) {
[149] Fix | Delete
$locale = $row->locale;
[150] Fix | Delete
} elseif ( $row->default_locale ) {
[151] Fix | Delete
$locale = $row->default_locale;
[152] Fix | Delete
} else {
[153] Fix | Delete
$locale = $row->code;
[154] Fix | Delete
}
[155] Fix | Delete
[156] Fix | Delete
return [ $row->code => $locale ];
[157] Fix | Delete
}
[158] Fix | Delete
);
[159] Fix | Delete
}
[160] Fix | Delete
[161] Fix | Delete
return $this->all_locales;
[162] Fix | Delete
}
[163] Fix | Delete
[164] Fix | Delete
public function switch_locale( $lang_code = false ) {
[165] Fix | Delete
global $l10n;
[166] Fix | Delete
static $original_l10n;
[167] Fix | Delete
if ( ! empty( $lang_code ) ) {
[168] Fix | Delete
$original_l10n = isset( $l10n['sitepress'] ) ? $l10n['sitepress'] : null;
[169] Fix | Delete
if ( $original_l10n !== null ) {
[170] Fix | Delete
unset( $l10n['sitepress'] );
[171] Fix | Delete
}
[172] Fix | Delete
load_textdomain( 'sitepress',
[173] Fix | Delete
WPML_PLUGIN_PATH . '/locale/sitepress-' . $this->get_locale( $lang_code ) . '.mo' );
[174] Fix | Delete
} else { // switch back
[175] Fix | Delete
$l10n['sitepress'] = $original_l10n;
[176] Fix | Delete
}
[177] Fix | Delete
}
[178] Fix | Delete
[179] Fix | Delete
public function get_locale_file_names() {
[180] Fix | Delete
$locales = array();
[181] Fix | Delete
$res = $this->wpdb->get_results( "
[182] Fix | Delete
SELECT lm.code, locale
[183] Fix | Delete
FROM {$this->wpdb->prefix}icl_locale_map lm JOIN {$this->wpdb->prefix}icl_languages l ON lm.code = l.code AND l.active=1" );
[184] Fix | Delete
foreach ( $res as $row ) {
[185] Fix | Delete
$locales[ $row->code ] = $row->locale;
[186] Fix | Delete
}
[187] Fix | Delete
[188] Fix | Delete
return $locales;
[189] Fix | Delete
}
[190] Fix | Delete
[191] Fix | Delete
private function language_needs_title_sanitization() {
[192] Fix | Delete
$lang_needs_filter = array( 'de_DE', 'da_DK' );
[193] Fix | Delete
$current_lang = $this->sitepress->get_language_details( $this->sitepress->get_current_language() );
[194] Fix | Delete
$needs_filter = false;
[195] Fix | Delete
[196] Fix | Delete
if ( ! isset( $current_lang['default_locale'] ) ) {
[197] Fix | Delete
return $needs_filter;
[198] Fix | Delete
}
[199] Fix | Delete
[200] Fix | Delete
if ( in_array( $current_lang['default_locale'], $lang_needs_filter, true ) ) {
[201] Fix | Delete
$needs_filter = true;
[202] Fix | Delete
}
[203] Fix | Delete
[204] Fix | Delete
return $needs_filter;
[205] Fix | Delete
}
[206] Fix | Delete
[207] Fix | Delete
function _language_attributes( $latr ) {
[208] Fix | Delete
[209] Fix | Delete
return preg_replace(
[210] Fix | Delete
'#lang="([a-z]+)"#i',
[211] Fix | Delete
'lang="' . str_replace( '_', '-', $this->locale ) . '"',
[212] Fix | Delete
$latr );
[213] Fix | Delete
}
[214] Fix | Delete
[215] Fix | Delete
/**
[216] Fix | Delete
* @return WPML_Locale
[217] Fix | Delete
*/
[218] Fix | Delete
public static function get_instance_from_sitepress() {
[219] Fix | Delete
/** SitePress $sitepress */
[220] Fix | Delete
global $sitepress;
[221] Fix | Delete
[222] Fix | Delete
return $sitepress->get_wpml_locale();
[223] Fix | Delete
}
[224] Fix | Delete
}
[225] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function