';
}
/**
* Saves the strings translations in DB
* Optionaly clean the DB
*
* @since 1.9
*/
public function save_translations() {
check_admin_referer( 'string-translation', '_wpnonce_string-translation' );
if ( ! empty( $_POST['submit'] ) ) {
foreach ( $this->languages as $language ) {
if ( empty( $_POST['translation'][ $language->slug ] ) ) { // In case the language filter is active ( thanks to John P. Bloch )
continue;
}
$mo = new PLL_MO();
$mo->import_from_db( $language );
$translations = array_map( 'trim', wp_unslash( $_POST['translation'][ $language->slug ] ) ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
foreach ( $translations as $key => $translation ) {
/**
* Filter the string translation before it is saved in DB
* Allows to sanitize strings registered with pll_register_string
*
* @since 1.6
* @since 2.7 The translation passed to the filter is unslashed.
*
* @param string $translation The string translation.
* @param string $name The name as defined in pll_register_string.
* @param string $context The context as defined in pll_register_string.
*/
$translation = apply_filters( 'pll_sanitize_string_translation', $translation, $this->strings[ $key ]['name'], $this->strings[ $key ]['context'] );
$mo->add_entry( $mo->make_entry( $this->strings[ $key ]['string'], $translation ) );
}
// Clean database ( removes all strings which were registered some day but are no more )
if ( ! empty( $_POST['clean'] ) ) {
$new_mo = new PLL_MO();
foreach ( $this->strings as $string ) {
$new_mo->add_entry( $mo->make_entry( $string['string'], $mo->translate( $string['string'] ) ) );
}
}
isset( $new_mo ) ? $new_mo->export_to_db( $language ) : $mo->export_to_db( $language );
}
add_settings_error( 'general', 'pll_strings_translations_updated', __( 'Translations updated.', 'polylang' ), 'updated' );
/**
* Fires after the strings translations are saved in DB
*
* @since 1.2
*/
do_action( 'pll_save_strings_translations' );
}
// Unregisters strings registered through WPML API
if ( $this->current_action() === 'delete' && ! empty( $_POST['strings'] ) && function_exists( 'icl_unregister_string' ) ) {
foreach ( array_map( 'sanitize_key', $_POST['strings'] ) as $key ) {
icl_unregister_string( $this->strings[ $key ]['context'], $this->strings[ $key ]['name'] );
}
}
// To refresh the page ( possible thanks to the $_GET['noheader']=true )
$args = array_intersect_key( $_REQUEST, array_flip( array( 's', 'paged', 'group' ) ) );
if ( ! empty( $_GET['paged'] ) && ! empty( $_POST['submit'] ) ) {
$args['paged'] = (int) $_GET['paged']; // Don't rely on $_REQUEST['paged'] or $_POST['paged']. See #14
}
if ( ! empty( $args['s'] ) ) {
$args['s'] = urlencode( $args['s'] ); // Searched string needs to be encoded as it comes from $_POST
}
PLL_Settings::redirect( $args );
}
}