73 lines
1.7 KiB
PHP
73 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace WPML\ST\MO\Generate;
|
|
|
|
use wpdb;
|
|
use WPML\Collect\Support\Collection;
|
|
use function WPML\Container\make;
|
|
use WPML\ST\TranslationFile\Domains;
|
|
use function wpml_collect;
|
|
use WPML_Locale;
|
|
|
|
class DomainsAndLanguagesRepository {
|
|
/** @var wpdb */
|
|
private $wpdb;
|
|
|
|
/** @var Domains */
|
|
private $domains;
|
|
|
|
/** @var WPML_Locale */
|
|
private $locale;
|
|
|
|
/**
|
|
* @param wpdb $wpdb
|
|
* @param Domains $domains
|
|
* @param WPML_Locale $wp_locale
|
|
*/
|
|
public function __construct( wpdb $wpdb, Domains $domains, WPML_Locale $wp_locale ) {
|
|
$this->wpdb = $wpdb;
|
|
$this->domains = $domains;
|
|
$this->locale = $wp_locale;
|
|
}
|
|
|
|
|
|
/**
|
|
* @return Collection
|
|
*/
|
|
public function get() {
|
|
return $this->getAllDomains()->map( function ( $row ) {
|
|
return (object) [
|
|
'domain' => $row->domain,
|
|
'locale' => $this->locale->get_locale( $row->languageCode )
|
|
];
|
|
} )->values();
|
|
}
|
|
|
|
/**
|
|
* @return Collection
|
|
*/
|
|
private function getAllDomains() {
|
|
$moDomains = $this->domains->getMODomains()->toArray();
|
|
if ( ! $moDomains ) {
|
|
return wpml_collect( [] );
|
|
}
|
|
|
|
$sql = "
|
|
SELECT DISTINCT (BINARY s.context) as `domain`, st.language as `languageCode`
|
|
FROM {$this->wpdb->prefix}icl_string_translations st
|
|
INNER JOIN {$this->wpdb->prefix}icl_strings s ON s.id = st.string_id
|
|
WHERE st.`status` = 10 AND ( st.`value` != st.mo_string OR st.mo_string IS NULL)
|
|
AND s.context IN(" . wpml_prepare_in( $moDomains ) . ")
|
|
";
|
|
$result = $this->wpdb->get_results( $sql );
|
|
|
|
return wpml_collect( $result );
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public static function hasTranslationFilesTable() {
|
|
return make( \WPML_Upgrade_Schema::class )->does_table_exist( 'icl_mo_files_domains' );
|
|
}
|
|
} |