ID );
// Display original text
if ( ! empty( $meta['wplng_translation_original'][0] )
&& is_string( $meta['wplng_translation_original'][0] )
&& ! empty( $meta['wplng_translation_original_language_id'][0] )
&& wplng_is_valid_language_id( $meta['wplng_translation_original_language_id'][0] )
) {
$language_id = $meta['wplng_translation_original_language_id'][0];
$language = wplng_get_language_by_id( $language_id );
$alt = __( 'Flag for language: ', 'wplingua' ) . $language['name'];
$html = '
';
$html .= '
'; // End .wplng-translation-footer
$html .= ''; // End .wplng-edit-language
}
}
echo $html;
}
/**
* Save meta box data of wpLingua translations
*
* @param int $post_id
* @return void
*/
function wplng_translation_save_meta_boxes_data( $post_id ) {
// Check if nonce is set
if ( ! isset( $_POST['wplng_translation_meta_box_nonce'] ) ) {
return;
}
// Sanitize the nonce
$nonce = $_POST['wplng_translation_meta_box_nonce'];
$nonce = sanitize_text_field( wp_unslash( $nonce ) );
// Check for nonce to top xss
if ( ! wp_verify_nonce( $nonce, basename( __FILE__ ) ) ) {
return;
}
// check for correct user capabilities - stop internal xss from customers
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
wplng_clear_translations_cache();
$meta = get_post_meta( $post_id );
if ( empty( $meta['wplng_translation_translations'][0] ) ) {
return;
}
$languages_target = wplng_get_languages_target_ids();
$translations = json_decode(
$meta['wplng_translation_translations'][0],
true
);
if ( empty( $translations ) ) {
$translations = array();
}
foreach ( $languages_target as $language_target ) {
$is_in = false;
foreach ( $translations as $translation ) {
if ( empty( $translation['language_id'] )
|| ! wplng_is_valid_language_id( $translation['language_id'] )
|| ! isset( $translation['translation'] )
|| ! is_string( $translation['translation'] )
|| ( $translation['language_id'] !== $language_target )
) {
continue;
}
$is_in = true;
break;
}
if ( ! $is_in ) {
$translations[] = array(
'language_id' => $language_target,
'translation' => '[WPLNG_EMPTY]',
'status' => 'ungenerated',
);
}
}
foreach ( $translations as $key => $translation ) {
if ( empty( $translation['language_id'] )
|| ! wplng_is_valid_language_id( $translation['language_id'] )
) {
continue;
}
$name = 'wplng_translation_' . $translation['language_id'];
if ( ! isset( $_REQUEST[ $name ] ) ) {
continue;
}
$temp = stripslashes( sanitize_textarea_field( $_REQUEST[ $name ] ) );
if ( empty( $temp ) ) {
$temp = '[WPLNG_EMPTY]';
} elseif ( $temp !== $translation['translation'] ) {
$temp = str_replace( '\\', '', $temp );
$translations[ $key ]['status'] = time();
}
$translations[ $key ]['translation'] = esc_html( $temp );
}
update_post_meta(
$post_id,
'wplng_translation_translations',
wp_json_encode(
$translations,
JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
)
);
}
/**
* wpLingua AJAX function to get translations on CPT edit page
*
* @return void
*/
function wplng_ajax_generate_translation() {
/**
* Check and sanitize data
*/
// Check data
if ( empty( $_POST['language_source'] )
|| ! is_string( $_POST['language_source'] )
|| empty( $_POST['language_target'] )
|| ! is_string( $_POST['language_target'] )
|| ! isset( $_POST['text'] )
|| ! is_string( $_POST['text'] )
) {
wp_send_json_error( __( 'Invalid parameters', 'wplingua' ) );
return;
}
// Check and sanitize sources and target languages
$language_source = sanitize_key( $_POST['language_source'] );
$language_target = sanitize_key( $_POST['language_target'] );
if ( ! wplng_is_valid_language_id( $language_source )
|| ! wplng_is_valid_language_id( $language_target )
|| $language_source === $language_target
) {
wp_send_json_error( __( 'Invalid languages parameters', 'wplingua' ) );
return;
}
// Check and sanitize text to translate
$text = sanitize_text_field( $_POST['text'] );
$text = esc_attr( $text );
if ( ! wplng_text_is_translatable( $text ) ) {
wp_send_json_success( $text );
return;
}
/**
* Call API and get translation
*/
$response = wplng_api_call_translate(
array( $text ),
$language_source,
$language_target
);
if ( ! isset( $response[0] ) ) {
wp_send_json_error( __( 'Invalid API response', 'wplingua' ) );
return;
}
wp_send_json_success( $response[0] );
}