Migration, Backup, Staging – WPvivid - Version 0.9.71

Version Description

  • Fixed the warning: Undefined array key "page" when editing pages in some cases.
  • Fixed: Creating a fresh install failed when Elementor plugin is enabled.
  • Fixed some vulnerabilitiesin the plugin code.
  • Fixed some UI bugs.
  • Fixed some bugs in the plugin code.
Download this release

Release Info

Developer wpvivid
Plugin Icon 128x128 Migration, Backup, Staging – WPvivid
Version 0.9.71
Comparing to
See all releases

Code changes from version 0.9.70 to 0.9.71

admin/css/wpvivid-admin.css CHANGED
@@ -263,4 +263,8 @@
263
  float:left;
264
  width:100%;
265
  background-color:#f1f1f1;
 
 
 
 
266
  }
263
  float:left;
264
  width:100%;
265
  background-color:#f1f1f1;
266
+ }
267
+
268
+ .wpvivid-custom-table-manager.nav-tab-wrapper :nth-child(n+3):nth-child(-n+11) {
269
+ display:block;
270
  }
admin/partials/wpvivid-admin-display.php CHANGED
@@ -69,7 +69,7 @@ foreach ($page_array as $page_name){
69
  <?php do_action('wpvivid_add_schedule_notice'); ?>
70
  <div id="wpvivid_remote_notice"></div>
71
  </div>
72
- <h2 class="nav-tab-wrapper">
73
  <?php
74
  do_action('wpvivid_backuprestore_add_tab');
75
  ?>
69
  <?php do_action('wpvivid_add_schedule_notice'); ?>
70
  <div id="wpvivid_remote_notice"></div>
71
  </div>
72
+ <h2 class="nav-tab-wrapper wpvivid-custom-table-manager">
73
  <?php
74
  do_action('wpvivid_backuprestore_add_tab');
75
  ?>
admin/partials/wpvivid-backup-restore-page-display.php CHANGED
@@ -708,14 +708,13 @@ function wpvivid_backuppage_add_page_backup(){
708
  }
709
  }
710
 
711
- function wpvivid_read_log(action, param, log_type, log_result){
712
  var tab_id = '';
713
  var content_id = '';
714
  var ajax_data = '';
715
  var show_page = '';
716
  if(typeof param === 'undefined') param = '';
717
  if(typeof log_type === 'undefined') log_type = '';
718
- if(typeof log_result === 'undefined') log_result = '';
719
  switch(action){
720
  case 'wpvivid_view_backup_task_log':
721
  ajax_data = {
@@ -747,9 +746,8 @@ function wpvivid_backuppage_add_page_backup(){
747
  case 'wpvivid_view_log':
748
  var ajax_data={
749
  'action':action,
750
- 'path':param,
751
- 'log_type':log_type,
752
- 'log_result':log_result
753
  };
754
  tab_id = 'wpvivid_tab_read_log';
755
  content_id = 'wpvivid_read_log_content';
708
  }
709
  }
710
 
711
+ function wpvivid_read_log(action, param, log_type){
712
  var tab_id = '';
713
  var content_id = '';
714
  var ajax_data = '';
715
  var show_page = '';
716
  if(typeof param === 'undefined') param = '';
717
  if(typeof log_type === 'undefined') log_type = '';
 
718
  switch(action){
719
  case 'wpvivid_view_backup_task_log':
720
  ajax_data = {
746
  case 'wpvivid_view_log':
747
  var ajax_data={
748
  'action':action,
749
+ 'id':param,
750
+ 'log_type':log_type
 
751
  };
752
  tab_id = 'wpvivid_tab_read_log';
753
  content_id = 'wpvivid_read_log_content';
includes/class-wpvivid.php CHANGED
@@ -5415,7 +5415,7 @@ class WPvivid {
5415
  <td>'.__($value['des'], 'wpvivid-backuprestore').'</td>
5416
  <td>'.__($value['file_name'], 'wpvivid-backuprestore').'</td>
5417
  <td>
5418
- <a onclick="wpvivid_read_log(\''.'wpvivid_view_log'.'\', \''.$value['file_name'].'\', \''.'backup'.'\', \''.$value['result'].'\')" style="cursor:pointer;">
5419
  <img src="'.esc_url(WPVIVID_PLUGIN_URL.$pic_log).'" style="vertical-align:middle;">Log
5420
  </a>
5421
  </td>
@@ -5491,6 +5491,13 @@ class WPvivid {
5491
  if ($handle)
5492
  {
5493
  $log_file['file_name']=basename($file);
 
 
 
 
 
 
 
5494
  $log_file['path']=$file;
5495
  $log_file['des']='';
5496
  $log_file['time']='';
@@ -5556,8 +5563,11 @@ class WPvivid {
5556
  {
5557
  $this->ajax_check_security();
5558
  try {
5559
- if (isset($_POST['path']) && !empty($_POST['path']) && is_string($_POST['path'])) {
5560
- $file_name = sanitize_text_field($_POST['path']);
 
 
 
5561
  if(isset($_POST['log_type']))
5562
  {
5563
  $log_type = sanitize_text_field($_POST['log_type']);
@@ -5566,36 +5576,28 @@ class WPvivid {
5566
  {
5567
  $log_type = 'backup';
5568
  }
5569
-
5570
- if(isset($_POST['log_result']))
5571
- {
5572
- $log_result = sanitize_text_field($_POST['log_result']);
5573
- }
5574
- else
5575
- {
5576
- $log_result = 'success';
5577
- }
5578
-
5579
  if($log_type === 'backup')
5580
  {
5581
- $general_setting=WPvivid_Setting::get_setting(true, "");
5582
- $log_dir = WP_CONTENT_DIR.DIRECTORY_SEPARATOR.$general_setting['options']['wpvivid_local_setting']['path'].DIRECTORY_SEPARATOR.'wpvivid_log'.DIRECTORY_SEPARATOR;
5583
  }
5584
  else
5585
  {
5586
- $log_dir = WP_CONTENT_DIR.DIRECTORY_SEPARATOR.'wpvivid_staging'.DIRECTORY_SEPARATOR;
 
5587
  }
5588
 
5589
- if($log_result === 'success')
5590
- {
5591
- $res_dir = '';
5592
- }
5593
- else
5594
  {
5595
- $res_dir = 'error'.DIRECTORY_SEPARATOR;
 
 
 
 
 
 
 
5596
  }
5597
 
5598
- $path = $log_dir.$res_dir.$file_name;
5599
  if (!file_exists($path)) {
5600
  $json['result'] = 'failed';
5601
  $json['error'] = __('The log not found.', 'wpvivid-backuprestore');
5415
  <td>'.__($value['des'], 'wpvivid-backuprestore').'</td>
5416
  <td>'.__($value['file_name'], 'wpvivid-backuprestore').'</td>
5417
  <td>
5418
+ <a onclick="wpvivid_read_log(\''.'wpvivid_view_log'.'\', \''.$value['id'].'\', \''.'backup'.'\')" style="cursor:pointer;">
5419
  <img src="'.esc_url(WPVIVID_PLUGIN_URL.$pic_log).'" style="vertical-align:middle;">Log
5420
  </a>
5421
  </td>
5491
  if ($handle)
5492
  {
5493
  $log_file['file_name']=basename($file);
5494
+ $log_file['id']='';
5495
+ if(preg_match('/wpvivid-(.*?)_/', basename($file), $matches))
5496
+ {
5497
+ $id= $matches[0];
5498
+ $id=substr($id,0,strlen($id)-1);
5499
+ $log_file['id']=$id;
5500
+ }
5501
  $log_file['path']=$file;
5502
  $log_file['des']='';
5503
  $log_file['time']='';
5563
  {
5564
  $this->ajax_check_security();
5565
  try {
5566
+ if (isset($_POST['id']) && !empty($_POST['id']) && is_string($_POST['id'])) {
5567
+ $id = sanitize_text_field($_POST['id']);
5568
+
5569
+ $path = '';
5570
+
5571
  if(isset($_POST['log_type']))
5572
  {
5573
  $log_type = sanitize_text_field($_POST['log_type']);
5576
  {
5577
  $log_type = 'backup';
5578
  }
 
 
 
 
 
 
 
 
 
 
5579
  if($log_type === 'backup')
5580
  {
5581
+ $loglist=$this->get_log_list_ex();
 
5582
  }
5583
  else
5584
  {
5585
+ $log_page=new WPvivid_Staging_Log_Page_Free();
5586
+ $loglist=$log_page->get_log_list('staging');
5587
  }
5588
 
5589
+ if(!empty($loglist['log_list']['file']))
 
 
 
 
5590
  {
5591
+ foreach ($loglist['log_list']['file'] as $value)
5592
+ {
5593
+ if($value['id'] === $id)
5594
+ {
5595
+ $path = str_replace('\\', '/', $value['path']);
5596
+ break;
5597
+ }
5598
+ }
5599
  }
5600
 
 
5601
  if (!file_exists($path)) {
5602
  $json['result'] = 'failed';
5603
  $json['error'] = __('The log not found.', 'wpvivid-backuprestore');
includes/customclass/class-wpvivid-ftpclass.php CHANGED
@@ -445,7 +445,7 @@ class WPvivid_FTPClass extends WPvivid_Remote{
445
  $temp_path = trailingslashit(WP_CONTENT_DIR).WPvivid_Setting::get_backupdir().DIRECTORY_SEPARATOR.$temp_file;
446
  file_put_contents($temp_path,print_r($temp_file,true));
447
  if(! ftp_put($conn,trailingslashit($path).$temp_file,$temp_path,FTP_BINARY)){
448
- return array('result'=>WPVIVID_FAILED,'error'=>'No privilege to create files in this remote storage directory.');
449
  }
450
  @unlink($temp_path);
451
  @ftp_delete($conn,trailingslashit($path).$temp_file);
445
  $temp_path = trailingslashit(WP_CONTENT_DIR).WPvivid_Setting::get_backupdir().DIRECTORY_SEPARATOR.$temp_file;
446
  file_put_contents($temp_path,print_r($temp_file,true));
447
  if(! ftp_put($conn,trailingslashit($path).$temp_file,$temp_path,FTP_BINARY)){
448
+ return array('result'=>WPVIVID_FAILED,'error'=>'Failed to add FTP storage. It can be because the FTP folder permissions are insufficient, or calling PHP ftp_put function of your web server failed. Please make sure the folder has write permission and the ftp_put function works properly.');
449
  }
450
  @unlink($temp_path);
451
  @ftp_delete($conn,trailingslashit($path).$temp_file);
includes/customclass/class-wpvivid-google-drive.php CHANGED
@@ -74,7 +74,7 @@ class Wpvivid_Google_drive extends WPvivid_Remote
74
 
75
  public function handle_auth_actions()
76
  {
77
- if(isset($_GET['action']))
78
  {
79
  if($_GET['page'] === 'WPvivid')
80
  {
74
 
75
  public function handle_auth_actions()
76
  {
77
+ if(isset($_GET['action']) && isset($_GET['page']))
78
  {
79
  if($_GET['page'] === 'WPvivid')
80
  {
includes/staging/class-wpvivid-fresh-install-create-ui-display.php CHANGED
@@ -102,7 +102,7 @@ class WPvivid_Fresh_Install_Create_UI_Display_Free
102
  $plugin_info[$slug] = $this->get_theme_plugin_info($path . DIRECTORY_SEPARATOR . $slug);
103
  $plugin_info[$slug]['Name'] = $plugin['Name'];
104
  $plugin_info[$slug]['slug'] = $slug;
105
- if($slug=='wpvivid-staging')
106
  {
107
  $plugin_info[$slug]['active'] = 1;
108
  $plugin_info[$slug]['disable'] = 1;
@@ -183,6 +183,17 @@ class WPvivid_Fresh_Install_Create_UI_Display_Free
183
  return $size;
184
  }
185
 
 
 
 
 
 
 
 
 
 
 
 
186
  public function output_create_wp_page()
187
  {
188
  $options=get_option('wpvivid_staging_options',array());
@@ -197,7 +208,7 @@ class WPvivid_Fresh_Install_Create_UI_Display_Free
197
 
198
  update_option('wpvivid_current_running_staging_task','');
199
  update_option('wpvivid_staging_task_cancel', false);
200
- $home_url = home_url();
201
  $admin_url = admin_url();
202
  $admin_name = basename($admin_url);
203
  $admin_name = trim($admin_name, '/');
102
  $plugin_info[$slug] = $this->get_theme_plugin_info($path . DIRECTORY_SEPARATOR . $slug);
103
  $plugin_info[$slug]['Name'] = $plugin['Name'];
104
  $plugin_info[$slug]['slug'] = $slug;
105
+ if($slug=='wpvivid-backuprestore')
106
  {
107
  $plugin_info[$slug]['active'] = 1;
108
  $plugin_info[$slug]['disable'] = 1;
183
  return $size;
184
  }
185
 
186
+ public function get_database_home_url()
187
+ {
188
+ $home_url = home_url();
189
+ global $wpdb;
190
+ $home_url_sql = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->options WHERE option_name = %s", 'home' ) );
191
+ foreach ( $home_url_sql as $home ){
192
+ $home_url = $home->option_value;
193
+ }
194
+ return untrailingslashit($home_url);
195
+ }
196
+
197
  public function output_create_wp_page()
198
  {
199
  $options=get_option('wpvivid_staging_options',array());
208
 
209
  update_option('wpvivid_current_running_staging_task','');
210
  update_option('wpvivid_staging_task_cancel', false);
211
+ $home_url = $this->get_database_home_url();
212
  $admin_url = admin_url();
213
  $admin_name = basename($admin_url);
214
  $admin_name = trim($admin_name, '/');
includes/staging/class-wpvivid-staging-copy-db-ex.php CHANGED
@@ -402,8 +402,8 @@ class WPvivid_Staging_Copy_DB
402
  $current = get_option('active_plugins',array());
403
  }
404
 
405
- if(!in_array('wpvivid-staging/wpvivid-staging.php',$current))
406
- $current[] = 'wpvivid-staging/wpvivid-staging.php';
407
  sort( $current );
408
  $value=serialize($current);
409
  $update_query = $db->prepare("UPDATE {$prefix}options SET option_value=%s WHERE option_name='active_plugins'" , $value);
402
  $current = get_option('active_plugins',array());
403
  }
404
 
405
+ if(!in_array('wpvivid-backuprestore/wpvivid-backuprestore.php',$current))
406
+ $current[] = 'wpvivid-backuprestore/wpvivid-backuprestore.php.php';
407
  sort( $current );
408
  $value=serialize($current);
409
  $update_query = $db->prepare("UPDATE {$prefix}options SET option_value=%s WHERE option_name='active_plugins'" , $value);
includes/staging/class-wpvivid-staging-create-new-wp.php CHANGED
@@ -64,6 +64,13 @@ class WPvivid_Staging_Install_Wordpress_Free
64
  $wpdb=$this->get_db_instance(true);
65
 
66
  $wpdb->set_prefix($prefix);
 
 
 
 
 
 
 
67
  $result = @wp_install($title, $username, $email, 0, '', md5(rand()));
68
  $wpvivid_plugin->staging->log->WriteLog(json_encode($result), 'notice');
69
  $user_id = $result['user_id'];
@@ -139,7 +146,7 @@ class WPvivid_Staging_Install_Wordpress_Free
139
  }
140
 
141
  $current = array();
142
- $current[] = 'wpvivid-staging/wpvivid-staging.php';
143
  sort( $current );
144
  $value=serialize($current);
145
  $update_query = $wpdb->prepare("UPDATE {$prefix}options SET option_value=%s WHERE option_name='active_plugins'" , $value);
64
  $wpdb=$this->get_db_instance(true);
65
 
66
  $wpdb->set_prefix($prefix);
67
+
68
+ $hook_name = 'update_option_blogname';
69
+ if(has_action($hook_name))
70
+ {
71
+ remove_all_actions($hook_name);
72
+ }
73
+
74
  $result = @wp_install($title, $username, $email, 0, '', md5(rand()));
75
  $wpvivid_plugin->staging->log->WriteLog(json_encode($result), 'notice');
76
  $user_id = $result['user_id'];
146
  }
147
 
148
  $current = array();
149
+ $current[] = 'wpvivid-backuprestore/wpvivid-backuprestore.php';
150
  sort( $current );
151
  $value=serialize($current);
152
  $update_query = $wpdb->prepare("UPDATE {$prefix}options SET option_value=%s WHERE option_name='active_plugins'" , $value);
includes/staging/class-wpvivid-staging-log-page.php CHANGED
@@ -486,7 +486,7 @@ class WPvivid_Staging_Log_Page_Free
486
  <td>'.__($value['des'], 'wpvivid-backuprestore').'</td>
487
  <td>'.__($value['file_name'], 'wpvivid-backuprestore').'</td>
488
  <td>
489
- <a onclick="wpvivid_read_log(\''.'wpvivid_view_log'.'\', \''.$value['file_name'].'\', \''.'staging'.'\', \''.$value['result'].'\')" style="cursor:pointer;">
490
  <img src="'.esc_url(WPVIVID_PLUGIN_URL.$pic_log).'" style="vertical-align:middle;">Log
491
  </a>
492
  </td>
@@ -638,6 +638,13 @@ class WPvivid_Staging_Log_Page_Free
638
  {
639
  $log_file=array();
640
  $log_file['file_name']=basename($file);
 
 
 
 
 
 
 
641
  $log_file['path']=$file;
642
  $log_file['des']='';
643
  $log_file['time']='';
@@ -718,6 +725,13 @@ class WPvivid_Staging_Log_Page_Free
718
  {
719
  $log_file=array();
720
  $log_file['file_name']=basename($file);
 
 
 
 
 
 
 
721
  $log_file['path']=$file;
722
  $log_file['des']='';
723
  $log_file['time']='';
486
  <td>'.__($value['des'], 'wpvivid-backuprestore').'</td>
487
  <td>'.__($value['file_name'], 'wpvivid-backuprestore').'</td>
488
  <td>
489
+ <a onclick="wpvivid_read_log(\''.'wpvivid_view_log'.'\', \''.$value['id'].'\', \''.'staging'.'\')" style="cursor:pointer;">
490
  <img src="'.esc_url(WPVIVID_PLUGIN_URL.$pic_log).'" style="vertical-align:middle;">Log
491
  </a>
492
  </td>
638
  {
639
  $log_file=array();
640
  $log_file['file_name']=basename($file);
641
+ $log_file['id']='';
642
+ if(preg_match('/wpvivid-(.*?)_/', basename($file), $matches))
643
+ {
644
+ $id= $matches[0];
645
+ $id=substr($id,0,strlen($id)-1);
646
+ $log_file['id']=$id;
647
+ }
648
  $log_file['path']=$file;
649
  $log_file['des']='';
650
  $log_file['time']='';
725
  {
726
  $log_file=array();
727
  $log_file['file_name']=basename($file);
728
+ $log_file['id']='';
729
+ if(preg_match('/wpvivid-(.*?)_/', basename($file), $matches))
730
+ {
731
+ $id= $matches[0];
732
+ $id=substr($id,0,strlen($id)-1);
733
+ $log_file['id']=$id;
734
+ }
735
  $log_file['path']=$file;
736
  $log_file['des']='';
737
  $log_file['time']='';
includes/staging/class-wpvivid-staging-ui-display.php CHANGED
@@ -1238,6 +1238,8 @@ class WPvivid_Staging_UI_Display_Free
1238
  {
1239
  $site_url = site_url();
1240
  $home_url = home_url();
 
 
1241
  $db_site_url = '';
1242
  $db_home_url = '';
1243
  global $wpdb;
1238
  {
1239
  $site_url = site_url();
1240
  $home_url = home_url();
1241
+ $site_url = untrailingslashit($site_url);
1242
+ $home_url = untrailingslashit($home_url);
1243
  $db_site_url = '';
1244
  $db_home_url = '';
1245
  global $wpdb;
includes/upload-cleaner/class-wpvivid-uploads-cleaner.php CHANGED
@@ -1057,6 +1057,32 @@ class WPvivid_Uploads_Cleaner
1057
  return implode(DIRECTORY_SEPARATOR,$values);
1058
  }
1059
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1060
  public function display()
1061
  {
1062
  $upload_dir=wp_upload_dir();
@@ -1078,6 +1104,9 @@ class WPvivid_Uploads_Cleaner
1078
  echo __('WPvivid Image Cleaner', 'wpvivid');
1079
  ?>
1080
  </h1>
 
 
 
1081
  <?php
1082
 
1083
  if(!class_exists('WPvivid_Tab_Page_Container'))
1057
  return implode(DIRECTORY_SEPARATOR,$values);
1058
  }
1059
 
1060
+ public function wpvivid_check_jet_engine()
1061
+ {
1062
+ if (!function_exists('get_plugins'))
1063
+ {
1064
+ require_once ABSPATH . 'wp-admin/includes/plugin.php';
1065
+ }
1066
+
1067
+ $active_plugins = get_option('active_plugins');
1068
+ $plugins=get_plugins();
1069
+ $jet_engine_slug='jet-engine/jet-engine.php';
1070
+
1071
+ if(!empty($plugins))
1072
+ {
1073
+ if(isset($plugins[$jet_engine_slug]))
1074
+ {
1075
+ if(in_array($jet_engine_slug, $active_plugins))
1076
+ {
1077
+ _e('<div class="notice notice-warning inline" style="margin: 10px 0 0 0;"><p><strong>Warning:</strong> We detected that you use Jet Engine plugin on this site,
1078
+ it may have compatibility issues with our plugin, which can result in an inaccuracy of the scan result,
1079
+ so we recommend not using this feature yet.
1080
+ </p></div>');
1081
+ }
1082
+ }
1083
+ }
1084
+ }
1085
+
1086
  public function display()
1087
  {
1088
  $upload_dir=wp_upload_dir();
1104
  echo __('WPvivid Image Cleaner', 'wpvivid');
1105
  ?>
1106
  </h1>
1107
+
1108
+ <?php $this->wpvivid_check_jet_engine(); ?>
1109
+
1110
  <?php
1111
 
1112
  if(!class_exists('WPvivid_Tab_Page_Container'))
readme.txt CHANGED
@@ -4,11 +4,11 @@ Tags: move, clone, migrate, staging, backup, restore, auto backup, cloud backup
4
  Requires at least: 4.5
5
  Tested up to: 5.9.2
6
  Requires PHP: 5.3
7
- Stable tag: 0.9.70
8
  License: GPLv3 or later
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.en.html
10
 
11
- Migrate, staging, back up WP.
12
 
13
  == Description ==
14
  WPvivid Backup Plugin offers backup, migration, and staging as basic features, and is integrating more and more elegant features, such as unused images cleaner etc.
@@ -182,16 +182,26 @@ Yes, we do. Here are the guides for [migrating your site to a new host](https://
182
  Feel free to let us know how we can help using the [support forum](https://wordpress.org/support/plugin/wpvivid-backuprestore) for WPvivid Backup Plugin on WordPress.org or our [contact form](https://wpvivid.com/contact-us). You can also reach us with a direct message on [Twitter](https://twitter.com/WPvividcom).
183
 
184
  == Languages and Translators ==
185
- Thank you for translating WPvivid Backup Plugin to your languages!
186
 
187
  * [Andrew Galas](https://profiles.wordpress.org/andrewgalas) (Polish)
188
  * [Shohei OKADA](https://ja.gravatar.com/silversword0630) (Japanese)
189
  * [Francesco Tosi](https://profiles.wordpress.org/seventhose/) (Italian)
190
  * [Valentin Lyong](https://profiles.wordpress.org/icedge/) (Bulgarian)
191
  * [Daniel Wilczkowiak](https://profiles.wordpress.org/virtual03/) (German)
192
- * [Nima](https://profiles.wordpress.org/nima78600/) (Persian)
193
-
 
 
 
 
194
  == Changelog ==
 
 
 
 
 
 
195
  = 0.9.70 =
196
  - Fixed: There was no notification after restoration in some environments.
197
  - Fixed some vulnerabilities in the plugin code.
4
  Requires at least: 4.5
5
  Tested up to: 5.9.2
6
  Requires PHP: 5.3
7
+ Stable tag: 0.9.71
8
  License: GPLv3 or later
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.en.html
10
 
11
+ Migrate, staging, backup WP.
12
 
13
  == Description ==
14
  WPvivid Backup Plugin offers backup, migration, and staging as basic features, and is integrating more and more elegant features, such as unused images cleaner etc.
182
  Feel free to let us know how we can help using the [support forum](https://wordpress.org/support/plugin/wpvivid-backuprestore) for WPvivid Backup Plugin on WordPress.org or our [contact form](https://wpvivid.com/contact-us). You can also reach us with a direct message on [Twitter](https://twitter.com/WPvividcom).
183
 
184
  == Languages and Translators ==
185
+ Thank you so much for translating WPvivid Backup Plugin to your languages!
186
 
187
  * [Andrew Galas](https://profiles.wordpress.org/andrewgalas) (Polish)
188
  * [Shohei OKADA](https://ja.gravatar.com/silversword0630) (Japanese)
189
  * [Francesco Tosi](https://profiles.wordpress.org/seventhose/) (Italian)
190
  * [Valentin Lyong](https://profiles.wordpress.org/icedge/) (Bulgarian)
191
  * [Daniel Wilczkowiak](https://profiles.wordpress.org/virtual03/) (German)
192
+ * [Nima Nimaee](https://profiles.wordpress.org/nima78600/) (Persian)
193
+ * [Alex](https://profiles.wordpress.org/alexser/) (Russian)
194
+ * [Robi Erwin Setiawan](https://www.linkedin.com/in/robi-erwin-setiawan/) (Indonesian)
195
+ * [Lois](https://profiles.wordpress.org/naoko01/) (Hungarian)
196
+ * [Khoi](https://profiles.wordpress.org/khoipro/) (Vietnamese)
197
+ * [Jairo Ochoa](https://profiles.wordpress.org/jairoochoa/) and [Carlos Macías](https://profiles.wordpress.org/cmacias/) (Galician)
198
  == Changelog ==
199
+ = 0.9.71 =
200
+ - Fixed the warning: Undefined array key "page" when editing pages in some cases.
201
+ - Fixed: Creating a fresh install failed when Elementor plugin is enabled.
202
+ - Fixed some vulnerabilities in the plugin code.
203
+ - Fixed some UI bugs.
204
+ - Fixed some bugs in the plugin code.
205
  = 0.9.70 =
206
  - Fixed: There was no notification after restoration in some environments.
207
  - Fixed some vulnerabilities in the plugin code.
wpvivid-backuprestore.php CHANGED
@@ -7,7 +7,7 @@
7
  * @wordpress-plugin
8
  * Plugin Name: WPvivid Backup Plugin
9
  * Description: Clone or copy WP sites then move or migrate them to new host (new domain), schedule backups, transfer backups to leading remote storage. All in one.
10
- * Version: 0.9.70
11
  * Author: WPvivid Team
12
  * Author URI: https://wpvivid.com
13
  * License: GPL-3.0+
@@ -21,7 +21,7 @@ if ( ! defined( 'WPINC' ) ) {
21
  die;
22
  }
23
 
24
- define( 'WPVIVID_PLUGIN_VERSION', '0.9.70' );
25
  //
26
  define('WPVIVID_RESTORE_INIT','init');
27
  define('WPVIVID_RESTORE_READY','ready');
7
  * @wordpress-plugin
8
  * Plugin Name: WPvivid Backup Plugin
9
  * Description: Clone or copy WP sites then move or migrate them to new host (new domain), schedule backups, transfer backups to leading remote storage. All in one.
10
+ * Version: 0.9.71
11
  * Author: WPvivid Team
12
  * Author URI: https://wpvivid.com
13
  * License: GPL-3.0+
21
  die;
22
  }
23
 
24
+ define( 'WPVIVID_PLUGIN_VERSION', '0.9.71' );
25
  //
26
  define('WPVIVID_RESTORE_INIT','init');
27
  define('WPVIVID_RESTORE_READY','ready');