Files
doitinpoland.com/wp-content/plugins/sitepress-multilingual-cms/classes/languages/class-wpml-language-records.php
2023-09-12 21:41:04 +02:00

74 lines
1.5 KiB
PHP

<?php
class WPML_Language_Records {
private $wpdb;
private $languages;
/** @var null|array $locale_lang_map */
private $locale_lang_map;
public function __construct( wpdb $wpdb ) {
$this->wpdb = $wpdb;
}
public function is_valid( $code ) {
if ( ! $this->languages ) {
$this->load();
}
return in_array( $code, $this->languages );
}
private function load() {
$this->languages = $this->wpdb->get_col( "SELECT code FROM {$this->get_table()}" );
}
/**
* @param string $lang_code
*
* @return string|null
*/
public function get_locale( $lang_code ) {
$this->init_locale_lang_map();
$locale = array_search( $lang_code, $this->locale_lang_map, true );
return $locale ? $locale : null;
}
/**
* @param string $locale
*
* @return string|null
*/
public function get_language_code( $locale ) {
$this->init_locale_lang_map();
return isset( $this->locale_lang_map[ $locale ] ) ? $this->locale_lang_map[ $locale ] : null;
}
private function init_locale_lang_map() {
if ( null === $this->locale_lang_map ) {
$this->locale_lang_map = array();
$sql = "SELECT default_locale, code FROM {$this->get_table()}";
$rowset = $this->wpdb->get_results( $sql );
foreach ( $rowset as $row ) {
$this->locale_lang_map[ $row->default_locale ?: $row->code ] = $row->code;
}
}
}
/**
* @return array
*/
public function get_locale_lang_map() {
$this->init_locale_lang_map();
return $this->locale_lang_map;
}
private function get_table() {
return $this->wpdb->prefix . 'icl_languages';
}
}