'DB Prefix', 'tab2' => 'DB Backup', ); var $menu_tabs_handler = array( 'tab1' => 'render_tab1', 'tab2' => 'render_tab2', ); function __construct() { $this->render_menu_page(); } function get_current_tab() { $tab_keys = array_keys($this->menu_tabs); $tab = isset( $_GET['tab'] ) ? $_GET['tab'] : $tab_keys[0]; return $tab; } /* * Renders our tabs of this menu as nav items */ function render_menu_tabs() { $current_tab = $this->get_current_tab(); echo '
'.sprintf( __('It is recommended that you perform a %s before using this feature', 'aiowpsecurity'), $backup_tab_link).'
'; echo $info_msg; ?>'; _e('DB Backup was successfully completed! Right click on the following file name and save the backup to your computer.','aiowpsecurity'); echo '
'; _e('Your DB Backup File: '); echo ''.$backup_file_name.''; echo '
'; echo ''.sprintf( __('Your WordPress system has a total of %s tables and your new DB prefix will be: %s', 'aiowpsecurity'), ''.$num_rows.'', ''.$table_new_prefix.'').'
'; echo ($info_msg_string); //Config file path $config_file = ABSPATH.'wp-config.php'; //Do a back of the config file if(!AIOWPSecurity_Utility_File::backup_a_file($config_file)) { echo ''.__('Failed to make a backup of the wp-config.php file. This operation will not go ahead.', 'aiowpsecurity').'
'.__('A backup copy of your wp-config.php file was created successfully!', 'aiowpsecurity').'
'; } //Rename all the tables name for ($i = 0; $i < $num_rows; $i++) { //Get table name with old prefix $table_old_name = mysql_tablename($result, $i); if ( strpos( $table_old_name, $table_old_prefix ) === 0 ) { //Get table name with new prefix $table_new_name = $table_new_prefix . substr( $table_old_name, $old_prefix_length ); //Write query to rename tables name $sql = "RENAME TABLE `".$table_old_name."` TO `".$table_new_name."`"; //$sql = "RENAME TABLE %s TO %s"; //Execute the query //if ( false === $wpdb->query($wpdb->prepare($sql, $table_old_name, $table_new_name)) ) //$wpdb->prepare is adding single quotes instead of backticks and hence causing the query to fail if ( false === $wpdb->query($sql) ) { $error = 1; echo ''.sprintf( __('%s table name update failed', 'aiowpsecurity'), ''.$table_old_name.'').'
'; $aio_wp_security->debug_logger->log_debug("DB Security Feature - Unable to change prefix of table ".$table_old_name,4); } else { $table_count++; } } else { continue; } } if ( @$error == 1 ) { echo ''.sprintf( __('Please change the prefix manually for the above tables to: %s', 'aiowpsecurity'), ''.$table_new_prefix.'').'
'; } else { echo ''.sprintf( __('%s tables had their prefix updated successfully!', 'aiowpsecurity'), ''.$table_count.'').'
'; } //Get wp-config.php file contents and modify it with new info $config_contents = file($config_file); foreach ($config_contents as $line_num => $line) { switch (substr($line,0,16)) { case '$table_prefix =': $config_contents[$line_num] = str_replace($table_old_prefix, $table_new_prefix, $line); break; } } //Now let's modify the wp-config.php file if (AIOWPSecurity_Utility_File::write_content_to_file($config_file, $config_contents)) { echo ''. __('wp-config.php file was updated successfully!', 'aiowpsecurity').'
'; }else { echo ''.sprintf( __('The "wp-config.php" file was not able to be modified. Please modify this file manually using your favourite editor and search for variable "$table_prefix" and assign the following value to that variable: %s', 'aiowpsecurity'), ''.$table_new_prefix.'').'
'; $aio_wp_security->debug_logger->log_debug("DB Security Feature - Unable to modify wp-config.php",4); } //Now let's update the options table $update_option_table_query = "UPDATE " . $table_new_prefix . "options SET option_name = '".$table_new_prefix ."user_roles' WHERE option_name = '".$table_old_prefix."user_roles' LIMIT 1"; if ( false === $wpdb->query($update_option_table_query) ) { echo "Changing value: ", $table_old_prefix, "user_roles in table ", $table_new_prefix, "options to ", $table_new_prefix, "user_roles
"; echo ''.sprintf( __('There was an error when updating the options table.', 'aiowpsecurity')).'
'; $aio_wp_security->debug_logger->log_debug("DB Security Feature - Error when updating the options table",4);//Log the highly unlikely event of DB error } else { echo ''.sprintf( __('The options table records which had references to the old DB prefix were updated successfully!', 'aiowpsecurity')).'
'; } //Now let's update the user meta table $custom_sql = "SELECT user_id, meta_key FROM " . $table_new_prefix . "usermeta WHERE meta_key LIKE '" . $table_old_prefix . "%'"; $meta_keys = $wpdb->get_results( $custom_sql ); $error_update_usermeta = ''; //Update all meta_key field values which have the old table prefix in user_meta table foreach ($meta_keys as $meta_key ) { //Create new meta key $new_meta_key = $table_new_prefix . substr( $meta_key->meta_key, $old_prefix_length ); $update_user_meta_sql = "UPDATE " . $table_new_prefix . "usermeta SET meta_key='" . $new_meta_key . "' WHERE meta_key='" . $meta_key->meta_key . "' AND user_id='" . $meta_key->user_id."'"; if (false === $wpdb->query($update_user_meta_sql)) { $error_update_usermeta .= ''.sprintf( __('Error updating user_meta table where new meta_key = %s, old meta_key = %s and user_id = %s.', 'aiowpsecurity'),$new_meta_key,$meta_key->meta_key,$meta_key->user_id).'
'; echo $error_update_usermeta; $aio_wp_security->debug_logger->log_debug("DB Security Feature - Error updating user_meta table where new meta_key = ".$new_meta_key." old meta_key = ".$meta_key->meta_key." and user_id = ".$meta_key->user_id,4);//Log the highly unlikely event of DB error } } echo ''.__('The usermeta table records which had references to the old DB prefix were updated successfully!', 'aiowpsecurity').'
'; //Display tasks finished message $tasks_finished_msg_string = ''. __('DB prefix change tasks have been completed.', 'aiowpsecurity').'
'; echo ($tasks_finished_msg_string); } } //end class