Files
doitinpoland.com/wp-content/plugins/wpml-string-translation/classes/string-translation-ui/class-wpml-change-string-domain-language-dialog.php
2023-09-12 21:41:04 +02:00

128 lines
5.0 KiB
PHP

<?php
class WPML_Change_String_Domain_Language_Dialog extends WPML_WPDB_And_SP_User {
/** @var WPML_Language_Of_Domain $language_of_domain */
private $language_of_domain;
/** @var WPML_ST_String_Factory $string_factory */
private $string_factory;
public function __construct( &$wpdb, &$sitepress, &$string_factory ) {
parent::__construct( $wpdb, $sitepress );
$this->string_factory = &$string_factory;
$this->language_of_domain = new WPML_Language_Of_Domain( $sitepress );
}
public function render( $domains ) {
$all_languages = $this->sitepress->get_languages( $this->sitepress->get_admin_language() );
?>
<div id="wpml-change-domain-language-dialog"
class="wpml-change-language-dialog"
title="<?php _e( 'Language of domains', 'wpml-string-translation' ); ?>"
style="display:none"
data-button-text="<?php _e( 'Apply', 'wpml-string-translation' ); ?>"
data-cancel-text="<?php _e( 'Cancel', 'wpml-string-translation' ); ?>" >
<label for="wpml-domain-select">
<?php _e( 'Select for which domain to set the language: ', 'wpml-string-translation' ); ?>
</label>
<select id="wpml-domain-select">
<option value="" selected="selected"><?php _e( '-- Please select --', 'wpml-string-translation' ); ?></option>
<?php
foreach ( $domains as $domain ) {
$results = $this->wpdb->get_results(
$this->wpdb->prepare(
"
SELECT language, COUNT(language) AS count
FROM {$this->wpdb->prefix}icl_strings s
WHERE context = %s
AND language IN (" . wpml_prepare_in( array_keys( $all_languages ) ) . ')
GROUP BY language
',
$domain->context
),
ARRAY_A
);
foreach ( $results as &$result ) {
$result['display_name'] = $all_languages[ $result['language'] ]['display_name'];
}
$domain_lang = $this->language_of_domain->get_language( $domain->context );
if ( $domain_lang ) {
$domain_data = 'data-domain_lang="' . $domain_lang . '" ';
} else {
$domain_data = 'data-domain_lang="" ';
}
echo '<option value="' . $domain->context .
'" data-langs="' . esc_attr( wp_json_encode( $results ) ) .
'"' . $domain_data . '>' . $domain->context . '</option>';
}
?>
</select>
<div class="js-summary wpml-cdl-summary" style="display:none" >
<p class="wpml-cdl-info">
<?php _e( 'This domain currently has the following strings:', 'wpml-string-translation' ); ?>
</p>
<table class="widefat striped wpml-cdl-table">
<thead>
<tr>
<td class="manage-column column-cb check-column"><input class="js-all-check" type="checkbox" value="all" /></td>
<th><?php _e( 'Current source language', 'wpml-string-translation' ); ?></th>
<th class="num"><?php _e( 'Number of strings', 'wpml-string-translation' ); ?></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<div class="js-lang-select-area wpml-cdl-info">
<label for="wpml-source-domain-language-change"><?php _e( 'Set the source language of these strings to:', 'wpml-string-translation' ); ?></label>
<?php
$lang_selector = new WPML_Simple_Language_Selector( $this->sitepress );
echo $lang_selector->render( array( 'id' => 'wpml-source-domain-language-change' ) );
?>
<label for="wpml-cdl-set-default">
<input id="wpml-cdl-set-default" type="checkbox" class="js-default" value="use-as-default" checked="checked" />
<?php _e( 'Use this language as the default language for new strings in this domain', 'wpml-string-translation' ); ?>
</label>
</div>
</div>
<span class="spinner"></span>
<?php wp_nonce_field( 'wpml_change_string_domain_language_nonce', 'wpml_change_string_domain_language_nonce' ); ?>
</div>
<?php
}
public function change_language_of_strings( $domain, $langs, $to_lang, $set_as_default ) {
$package_translation = new WPML_Package_Helper();
$package_translation->change_language_of_strings_in_domain( $domain, $langs, $to_lang );
if ( ! empty( $langs ) ) {
foreach ( $langs as &$lang ) {
$lang = "'" . $lang . "'";
}
$langs = implode( ',', $langs );
$string_ids = $this->wpdb->get_col( $this->wpdb->prepare( "SELECT id FROM {$this->wpdb->prefix}icl_strings WHERE context=%s AND language IN ($langs)", $domain ) );
foreach ( $string_ids as $str_id ) {
$this->string_factory->find_by_id( $str_id )->set_language( $to_lang );
}
}
if ( $set_as_default ) {
$lang_of_domain = new WPML_Language_Of_Domain( $this->sitepress );
$lang_of_domain->set_language( $domain, $to_lang );
}
$string_ids = $this->wpdb->get_col(
$this->wpdb->prepare( "SELECT id FROM {$this->wpdb->prefix}icl_strings WHERE context = %s", $domain )
);
foreach ( $string_ids as $strid ) {
$this->string_factory->find_by_id( $strid )->update_status();
}
do_action( 'wpml_st_language_of_strings_changed', $string_ids );
return array( 'success' => true );
}
}