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] ); }