wpdb = $wpdb; } public function run_migration() { if ( $this->revert_should_run() ) { $this->revert_options_page_handling(); } } /** * Function moves ACF Option Pages' values translations from icl tables back to wp_options (where ACF stored this * before ACFML 1.2) */ private function revert_options_page_handling() { $original_strings = $this->get_all_original_strings(); if ( $original_strings ) { foreach ( $original_strings as $original_string ) { if ( $this->is_original_string_in_options_table( $original_string ) ) { $string_translations = $this->get_original_string_translations( $original_string ); if ( $string_translations ) { foreach ( $string_translations as $string_translation ) { $this->move_translation( $string_translation, $original_string ); } } } $this->all_string_translations_moved( $original_string ); } } else { // no more strings in icl_strings so migration is done or user actually didn't translate any string update_option( 'acfml_options_page_revert_done', true ); } } private function revert_should_run() { return false == get_option( 'acfml_options_page_revert_done' ); } private function get_all_original_strings() { $original_strings_query = "SELECT id, name, value FROM {$this->wpdb->prefix}icl_strings WHERE context = %s"; $original_strings_query = $this->wpdb->prepare( $original_strings_query, self::CONTEXT ); $original_strings = $this->wpdb->get_results( $original_strings_query ); return $original_strings; } private function is_original_string_in_options_table( $original_string ) { $original_wp_option_name = self::OPTION_PREFIX . "_" . $original_string->name; $original_wp_option_value = get_option( $original_wp_option_name ); return $original_string->value === $original_wp_option_value; } private function get_original_string_translations( $original_string ) { $string_translations_query = "SELECT id, value, status, language FROM {$this->wpdb->prefix}icl_string_translations WHERE string_id = %d"; $string_translations_query = $this->wpdb->prepare( $string_translations_query, $original_string->id ); $string_translations = $this->wpdb->get_results( $string_translations_query ); return $string_translations; } private function move_translation( $string_translation, $original_string ) { // from icl_string_translations to wp_options if ( $string_translation->status == ICL_TM_COMPLETE ) { $translated_wp_options_name = self::OPTION_PREFIX . "_" . $string_translation->language . "_" . $original_string->name; update_option( $translated_wp_options_name, $string_translation->value ); // string translation have to be deleted as well $this->wpdb->delete( $this->wpdb->prefix . 'icl_string_translations', array( 'id' => $string_translation->id ), array( '%d' ) ); } } private function all_string_translations_moved( $original_string ) { // each string have to be deleted from icl_strings $this->wpdb->delete( $this->wpdb->prefix . 'icl_strings', array( 'id' => $original_string->id ), array( '%d' ) ); } }