Files
doitinpoland.com/wp-content/plugins/wpml-string-translation/classes/translations-file-scan/charset-validation/wpml-st-translations-file-scan-db-charset-validation.php
2023-09-12 21:41:04 +02:00

52 lines
1.3 KiB
PHP

<?php
class WPML_ST_Translations_File_Scan_Db_Charset_Validation implements WPML_ST_Translations_File_Scan_Charset_Validation {
/** @var wpdb */
private $wpdb;
/** @var WPML_ST_Translations_File_Scan_Db_Table_List */
private $table_list;
/**
* @param wpdb $wpdb
* @param WPML_ST_Translations_File_Scan_Db_Table_List $table_list
*/
public function __construct( wpdb $wpdb, WPML_ST_Translations_File_Scan_Db_Table_List $table_list ) {
$this->wpdb = $wpdb;
$this->table_list = $table_list;
}
/**
* @return bool
*/
public function is_valid() {
if ( ! $this->wpdb->has_cap( 'utf8mb4' ) ) {
return false;
}
$chunks = array();
foreach ( $this->table_list->get_tables() as $table ) {
$chunks[] = $this->get_unique_collation_list_from_table( $table );
}
$collations = call_user_func_array( 'array_merge', $chunks );
$collations = array_unique( $collations );
return count( $collations ) < 2;
}
/**
* @param string $table
*
* @return array
*/
private function get_unique_collation_list_from_table( $table ) {
$columns = $this->wpdb->get_results( "SHOW FULL COLUMNS FROM `{$table}` WHERE Collation LIKE 'utf8mb4%'" );
return array_unique( wp_list_pluck( $columns, 'Collation' ) );
}
}