InfiniteWP Client - Version 1.9.8

Version Description

  • Mar 18th 2022 =
  • Feature: Added customer role to the Manage user addon if Woocommerce plugin is activated on the WordPress site.
  • Fix: iThemes 404 logs removed from client reports as the iThemes plugin do not detect 404 errors.
  • Fix: Error in query (1064): Syntax error near offset ) values issue fixed it happen some random server.
  • Fix: Backing up a WordPress site with wp_ prefix includes other site database tables in the single and multicall method backups.
  • Fix: mu-plugin version not shown on the plugin page.
  • Fix: Unable to read InfiniteWP must use plugin
Download this release

Release Info

Developer infinitewp
Plugin Icon 128x128 InfiniteWP Client
Version 1.9.8
Comparing to
See all releases

Code changes from version 1.9.6 to 1.9.8

addons/itheme_security/class-iwp-client-ithemes-security-class.php CHANGED
@@ -22,7 +22,6 @@ final class IWP_MMB_IThemes_Security extends IWP_MMB_Core {
22
  $from = date('Y-m-d h:i:s', $from);
23
  $to = date('Y-m-d H:i:s', $to);
24
  $return['itheme_file_change'] = self::getFileChangeHistory($from, $to);
25
- $return['itheme_four_oh_four'] = self::getFourOhFourHistory($from, $to);
26
  $return['itheme_brute_force'] = self::getBruteForceHistory($from, $to);
27
  return $return;
28
  }
@@ -85,14 +84,6 @@ final class IWP_MMB_IThemes_Security extends IWP_MMB_Core {
85
  return sizeof($logs);
86
  }
87
 
88
- /**
89
- * @return json
90
- */
91
- private static function getFourOhFourHistory($from = null, $to = null) {
92
- $logs = self::get_logs('four_oh_four', array(), null, null, null, null, $from, $to);
93
- return sizeof($logs);
94
- }
95
-
96
  /**
97
  * @return json
98
  */
22
  $from = date('Y-m-d h:i:s', $from);
23
  $to = date('Y-m-d H:i:s', $to);
24
  $return['itheme_file_change'] = self::getFileChangeHistory($from, $to);
 
25
  $return['itheme_brute_force'] = self::getBruteForceHistory($from, $to);
26
  return $return;
27
  }
84
  return sizeof($logs);
85
  }
86
 
 
 
 
 
 
 
 
 
87
  /**
88
  * @return json
89
  */
addons/manage_users/user.class.php CHANGED
@@ -38,6 +38,10 @@ class IWP_MMB_User extends IWP_MMB_Core
38
  $userlevels[] = 0;
39
  $level_strings[] = $user_role;
40
  break;
 
 
 
 
41
  case 'contributor' :
42
  $userlevels[] = 1;
43
  $level_strings[] = $user_role;
@@ -118,6 +122,11 @@ class IWP_MMB_User extends IWP_MMB_Core
118
  if (email_exists($args['user_email']))
119
  return array('error' => 'Email already exists', 'error_code' => 'email_already_exists');
120
 
 
 
 
 
 
121
  if(!function_exists('wp_insert_user'))
122
  include_once (ABSPATH . 'wp-admin/includes/user.php');
123
 
@@ -156,49 +165,55 @@ class IWP_MMB_User extends IWP_MMB_Core
156
  if($user_obj != false){
157
  switch($user_edit_action){
158
  case 'change-password':
159
- if($new_password){
160
- $user_data = array();
161
- $userdata['user_pass'] = $new_password;
162
- $userdata['ID'] = $user_obj->ID;
163
- $result = wp_update_user($userdata);
164
- } else {
165
- $result = array('error' => 'No password provided.', 'error_code' => 'no_password_provided');
166
- }
167
- break;
168
  case 'change-role':
169
- if($new_role){
170
- if($user != $username){
171
- if(!$this->last_admin($user_obj)){
172
- $user_data = array();
173
- $userdata['ID'] = $user_obj->ID;
174
- $userdata['role'] = strtolower($new_role);
175
- $result = wp_update_user($userdata);
176
- } else {
177
- $result = array('error' => 'Cannot change role to the only one left admin user.', 'error_code' => 'cannot_change_role_to_the_only_one_left_admin_user');
178
- }
179
- } else {
180
- $result = array('error' => 'Cannot change role to user assigned for InfiniteWP.', 'error_code' => 'cannot_change_role_to_user_assigned_to_InfiniteWP');
181
- }
182
- } else {
 
 
 
 
 
 
183
  $result = array('error' => 'No role provided.', 'error_code' => 'no_role_provided');
184
  }
185
- break;
186
  case 'delete-user':
187
  if($user != $username){
188
- if(!$this->last_admin($user_obj)){
189
- if($reassign_user){
190
- $to_user = $this->iwp_mmb_get_user_info( $reassign_user );
191
- if($to_user != false){
192
- $result = wp_delete_user($user_obj->ID, $to_user->ID);
193
- } else {
194
- $result = array('error' => 'User not deleted. User to reassign posts doesn\'t exist.', 'error_code' => 'user_not_deleted_user_to_reassign_posts_doesnt_exist');
195
- }
196
- } else {
197
- $result = wp_delete_user($user_obj->ID);
198
- }
199
- } else {
200
- $result = array('error' => 'Cannot delete the only one left admin user.', 'error_code' => 'cannot_delete_the_only_one_left_admin_user');
201
- }
202
  } else {
203
  $result = array('error' => 'Cannot delete user assigned for InfiniteWP.', 'error_code' => 'cannot_delete_user_assigned_for_InfiniteWP');
204
  }
@@ -243,6 +258,15 @@ class IWP_MMB_User extends IWP_MMB_Core
243
  }
244
  return false;
245
  }
 
 
 
 
 
 
 
 
 
246
 
247
  }
248
  ?>
38
  $userlevels[] = 0;
39
  $level_strings[] = $user_role;
40
  break;
41
+ case 'customer' :
42
+ $userlevels[] = 0;
43
+ $level_strings[] = $user_role;
44
+ break;
45
  case 'contributor' :
46
  $userlevels[] = 1;
47
  $level_strings[] = $user_role;
122
  if (email_exists($args['user_email']))
123
  return array('error' => 'Email already exists', 'error_code' => 'email_already_exists');
124
 
125
+ if(!empty($args['role']) && $args['role'] =='customer'){
126
+ if(!$this->woocommerceCompatibility()){
127
+ return array('error' => 'Could not create customer role woocommerce plugin not available', 'error_code' => 'woocommerce_plugin_not_active_state');
128
+ }
129
+ }
130
  if(!function_exists('wp_insert_user'))
131
  include_once (ABSPATH . 'wp-admin/includes/user.php');
132
 
165
  if($user_obj != false){
166
  switch($user_edit_action){
167
  case 'change-password':
168
+ if($new_password){
169
+ $user_data = array();
170
+ $userdata['user_pass'] = $new_password;
171
+ $userdata['ID'] = $user_obj->ID;
172
+ $result = wp_update_user($userdata);
173
+ } else {
174
+ $result = array('error' => 'No password provided.', 'error_code' => 'no_password_provided');
175
+ }
176
+ break;
177
  case 'change-role':
178
+ if($new_role){
179
+ if($user != $username){
180
+ if(!$this->last_admin($user_obj)){
181
+ if($new_role =='customer'){
182
+ if(!$this->woocommerceCompatibility()){
183
+ $result = array('error' => 'Could not change customer role woocommerce plugin not available', 'error_code' => 'woocommerce_plugin_not_active_state');
184
+ break;
185
+ }
186
+ }
187
+ $user_data = array();
188
+ $userdata['ID'] = $user_obj->ID;
189
+ $userdata['role'] = strtolower($new_role);
190
+ $result = wp_update_user($userdata);
191
+ } else {
192
+ $result = array('error' => 'Cannot change role to the only one left admin user.', 'error_code' => 'cannot_change_role_to_the_only_one_left_admin_user');
193
+ }
194
+ } else {
195
+ $result = array('error' => 'Cannot change role to user assigned for InfiniteWP.', 'error_code' => 'cannot_change_role_to_user_assigned_to_InfiniteWP');
196
+ }
197
+ } else {
198
  $result = array('error' => 'No role provided.', 'error_code' => 'no_role_provided');
199
  }
200
+ break;
201
  case 'delete-user':
202
  if($user != $username){
203
+ if(!$this->last_admin($user_obj)){
204
+ if($reassign_user){
205
+ $to_user = $this->iwp_mmb_get_user_info( $reassign_user );
206
+ if($to_user != false){
207
+ $result = wp_delete_user($user_obj->ID, $to_user->ID);
208
+ } else {
209
+ $result = array('error' => 'User not deleted. User to reassign posts doesn\'t exist.', 'error_code' => 'user_not_deleted_user_to_reassign_posts_doesnt_exist');
210
+ }
211
+ } else {
212
+ $result = wp_delete_user($user_obj->ID);
213
+ }
214
+ } else {
215
+ $result = array('error' => 'Cannot delete the only one left admin user.', 'error_code' => 'cannot_delete_the_only_one_left_admin_user');
216
+ }
217
  } else {
218
  $result = array('error' => 'Cannot delete user assigned for InfiniteWP.', 'error_code' => 'cannot_delete_user_assigned_for_InfiniteWP');
219
  }
258
  }
259
  return false;
260
  }
261
+ function woocommerceCompatibility(){
262
+ if(!function_exists('is_plugin_active')){
263
+ include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
264
+ }
265
+ if (is_plugin_active('woocommerce/woocommerce.php')) {
266
+ return true;
267
+ }
268
+ return false;
269
+ }
270
 
271
  }
272
  ?>
backup.class.multicall.php CHANGED
@@ -443,9 +443,10 @@ class IWP_MMB_Backup_Multicall extends IWP_MMB_Core
443
  //$command = $brace . $paths['mysqldump'] . $brace . ' --force --host="' . DB_HOST . '" --user="' . DB_USER . '" --password="' . DB_PASSWORD . '" --add-drop-table --skip-lock-tables "' . DB_NAME . '" > ' . $brace . $file . $brace;
444
  if(empty($responseParams['full_table'])){
445
  // Avoid getting exclude_table on mysqlDump retry call
446
- $command0 = $wpdb->get_col('SHOW TABLES LIKE "'.$wpdb->base_prefix.'%"');
447
- $full_table = array();
448
- $structure_only_table = array();
 
449
  if (!empty($exclude_tables)) {
450
  foreach ($command0 as $tk => $table) {
451
  foreach ($exclude_tables as $ke => $exclude_table) {
@@ -1001,7 +1002,7 @@ class IWP_MMB_Backup_Multicall extends IWP_MMB_Core
1001
  file_put_contents($file, '');//safe to reset any old data
1002
  } */
1003
  //$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
1004
- $this_prefix = $wpdb->base_prefix;
1005
  $tables = $wpdb->get_results('SHOW TABLES LIKE "'.$this_prefix.'%"', ARRAY_N);
1006
 
1007
  $max_row_limit = 100;
443
  //$command = $brace . $paths['mysqldump'] . $brace . ' --force --host="' . DB_HOST . '" --user="' . DB_USER . '" --password="' . DB_PASSWORD . '" --add-drop-table --skip-lock-tables "' . DB_NAME . '" > ' . $brace . $file . $brace;
444
  if(empty($responseParams['full_table'])){
445
  // Avoid getting exclude_table on mysqlDump retry call
446
+ $this_prefix = $wpdb->esc_like($wpdb->base_prefix);
447
+ $command0 = $wpdb->get_col('SHOW TABLES LIKE "'.$this_prefix.'%"');
448
+ $full_table = array();
449
+ $structure_only_table = array();
450
  if (!empty($exclude_tables)) {
451
  foreach ($command0 as $tk => $table) {
452
  foreach ($exclude_tables as $ke => $exclude_table) {
1002
  file_put_contents($file, '');//safe to reset any old data
1003
  } */
1004
  //$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
1005
+ $this_prefix = $wpdb->esc_like($wpdb->base_prefix);
1006
  $tables = $wpdb->get_results('SHOW TABLES LIKE "'.$this_prefix.'%"', ARRAY_N);
1007
 
1008
  $max_row_limit = 100;
backup.class.singlecall.php CHANGED
@@ -1121,7 +1121,8 @@ function delete_task_now($task_name){
1121
  $brace = (substr(PHP_OS, 0, 3) == 'WIN') ? '"' : '';
1122
  $exclude_tables = $this->tasks['args']['exclude_tables'];
1123
  //$command = $brace . $paths['mysqldump'] . $brace . ' --force --host="' . DB_HOST . '" --user="' . DB_USER . '" --password="' . DB_PASSWORD . '" --add-drop-table --skip-lock-tables "' . DB_NAME . '" > ' . $brace . $file . $brace;
1124
- $command0 = $wpdb->get_col('SHOW TABLES LIKE "'.$wpdb->base_prefix.'%"');
 
1125
  $full_table = array();
1126
  $structure_only_table = array();
1127
  if (!empty($exclude_tables)) {
@@ -1196,7 +1197,8 @@ function delete_task_now($task_name){
1196
  $fp = fopen( $file, 'w' );
1197
  $_count = 0;
1198
  $insert_sql = '';
1199
- $result = $wpdb->get_results( 'SHOW TABLES LIKE "'.$wpdb->base_prefix.'%"');
 
1200
  if(!$result)
1201
  {
1202
  return array(
@@ -1285,7 +1287,8 @@ function delete_task_now($task_name){
1285
  iwp_mmb_print_flush('DB DUMP PHP Fail-safe: Start');
1286
  file_put_contents($file, '');//safe to reset any old data
1287
  //$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
1288
- $tables = $wpdb->get_results('SHOW TABLES LIKE "'.$wpdb->base_prefix.'%"', ARRAY_N);
 
1289
  foreach ($tables as $table) {
1290
 
1291
  //drop existing table
1121
  $brace = (substr(PHP_OS, 0, 3) == 'WIN') ? '"' : '';
1122
  $exclude_tables = $this->tasks['args']['exclude_tables'];
1123
  //$command = $brace . $paths['mysqldump'] . $brace . ' --force --host="' . DB_HOST . '" --user="' . DB_USER . '" --password="' . DB_PASSWORD . '" --add-drop-table --skip-lock-tables "' . DB_NAME . '" > ' . $brace . $file . $brace;
1124
+ $this_prefix = $wpdb->esc_like($wpdb->base_prefix);
1125
+ $command0 = $wpdb->get_col('SHOW TABLES LIKE "'.$this_prefix.'%"');
1126
  $full_table = array();
1127
  $structure_only_table = array();
1128
  if (!empty($exclude_tables)) {
1197
  $fp = fopen( $file, 'w' );
1198
  $_count = 0;
1199
  $insert_sql = '';
1200
+ $this_prefix = $wpdb->esc_like($wpdb->base_prefix);
1201
+ $result = $wpdb->get_results( 'SHOW TABLES LIKE "'.$this_prefix.'%"');
1202
  if(!$result)
1203
  {
1204
  return array(
1287
  iwp_mmb_print_flush('DB DUMP PHP Fail-safe: Start');
1288
  file_put_contents($file, '');//safe to reset any old data
1289
  //$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
1290
+ $this_prefix = $wpdb->esc_like($wpdb->base_prefix);
1291
+ $tables = $wpdb->get_results('SHOW TABLES LIKE "'.$this_prefix.'%"', ARRAY_N);
1292
  foreach ($tables as $table) {
1293
 
1294
  //drop existing table
core.class.php CHANGED
@@ -793,7 +793,7 @@ Plugin Name: InfiniteWP - Client Loader
793
  Plugin URI: https://infinitewp.com/
794
  Description: This plugin will be created automatically when you activate your InfiniteWP Client plugin to improve the performance. And it will be deleted when you deactivate the client plugin.
795
  Author: Revmakx
796
- Version: 1.0.0
797
  Author URI: https://infinitewp.com/
798
  */
799
 
@@ -844,7 +844,7 @@ EOF;
844
  $error = error_get_last();
845
  throw new Exception(sprintf('Unable to write loader: %s', $error['message']));
846
  }
847
- update_option('iwp_mu_plugin_version','1.0.0');
848
  }
849
 
850
  function error_notices()
793
  Plugin URI: https://infinitewp.com/
794
  Description: This plugin will be created automatically when you activate your InfiniteWP Client plugin to improve the performance. And it will be deleted when you deactivate the client plugin.
795
  Author: Revmakx
796
+ Version: 1.0.1
797
  Author URI: https://infinitewp.com/
798
  */
799
 
844
  $error = error_get_last();
845
  throw new Exception(sprintf('Unable to write loader: %s', $error['message']));
846
  }
847
+ update_option('iwp_mu_plugin_version','1.0.1');
848
  }
849
 
850
  function error_notices()
init.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: InfiniteWP - Client
4
  Plugin URI: http://infinitewp.com/
5
  Description: This is the client plugin of InfiniteWP that communicates with the InfiniteWP Admin panel.
6
  Author: Revmakx
7
- Version: 1.9.6
8
  Author URI: http://www.revmakx.com
9
  Network: true
10
  */
@@ -29,7 +29,7 @@ if(basename($_SERVER['SCRIPT_FILENAME']) == "init.php"):
29
  exit;
30
  endif;
31
  if(!defined('IWP_MMB_CLIENT_VERSION'))
32
- define('IWP_MMB_CLIENT_VERSION', '1.9.6');
33
 
34
 
35
 
@@ -1216,17 +1216,19 @@ if( !function_exists ( 'iwp_mmb_add_user' )) {
1216
  if(!empty($params['additional_params'])){
1217
  $return['action_response'] = $iwp_mmb_core->user_instance->add_user($params['action_params']);
1218
  $return['additional_response'] = $iwp_mmb_core->user_instance->get_users($params['additional_params']);
 
 
 
 
 
1219
  }else{
1220
  $return = $iwp_mmb_core->user_instance->add_user($params);
 
 
 
 
 
1221
  }
1222
-
1223
- if (is_array($return) && array_key_exists('error', $return)){
1224
- iwp_mmb_response($return, false);
1225
- }
1226
- else {
1227
- iwp_mmb_response($return, true);
1228
- }
1229
-
1230
  }
1231
  }
1232
 
@@ -3289,12 +3291,17 @@ function iwp_mu_plugin_loader(){
3289
  $loaderName = 'mu-iwp-client.php';
3290
  $mustUsePluginDir = rtrim(WPMU_PLUGIN_DIR, '/');
3291
  $loaderPath = $mustUsePluginDir.'/'.$loaderName;
3292
-
 
 
 
 
 
3293
  if (file_exists($loaderPath)) {
3294
- $iwp_mu_plugin_version = get_option('iwp_mu_plugin_version');
3295
- if(empty($iwp_mu_plugin_version)){
3296
- $iwp_mu_plugin_version = '1.0.0';
3297
- $data = build_mu_plugin_version($loaderPath,$iwp_mu_plugin_version);
3298
  if(!$data){
3299
  iwp_mmb_response(array('error' => 'Unable to read InfiniteWP must use plugin', 'error_code' => 'iwp_mu_plugin_read_failed'), false);
3300
  return;
@@ -3312,11 +3319,25 @@ function iwp_mu_plugin_loader(){
3312
  }
3313
  }
3314
 
3315
- function build_mu_plugin_version($loaderPath,$iwp_mu_plugin_version){
3316
  $res = false;
3317
  $loaderWritten = @file_get_contents($loaderPath);
3318
  if($loaderWritten){
3319
- $res = preg_replace('/Author: Revmakx/', "Author: Revmakx ".PHP_EOL."Version :".$iwp_mu_plugin_version." ", $loaderWritten);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3320
  }
3321
  return $res;
3322
  }
4
  Plugin URI: http://infinitewp.com/
5
  Description: This is the client plugin of InfiniteWP that communicates with the InfiniteWP Admin panel.
6
  Author: Revmakx
7
+ Version: 1.9.8
8
  Author URI: http://www.revmakx.com
9
  Network: true
10
  */
29
  exit;
30
  endif;
31
  if(!defined('IWP_MMB_CLIENT_VERSION'))
32
+ define('IWP_MMB_CLIENT_VERSION', '1.9.8');
33
 
34
 
35
 
1216
  if(!empty($params['additional_params'])){
1217
  $return['action_response'] = $iwp_mmb_core->user_instance->add_user($params['action_params']);
1218
  $return['additional_response'] = $iwp_mmb_core->user_instance->get_users($params['additional_params']);
1219
+ if(isset($return['action_response']['error'])){
1220
+ iwp_mmb_response($return['action_response'], false);
1221
+ } else {
1222
+ iwp_mmb_response($return, true);
1223
+ }
1224
  }else{
1225
  $return = $iwp_mmb_core->user_instance->add_user($params);
1226
+ if (is_array($return) && array_key_exists('error', $return)){
1227
+ iwp_mmb_response($return, false);
1228
+ }else {
1229
+ iwp_mmb_response($return, true);
1230
+ }
1231
  }
 
 
 
 
 
 
 
 
1232
  }
1233
  }
1234
 
3291
  $loaderName = 'mu-iwp-client.php';
3292
  $mustUsePluginDir = rtrim(WPMU_PLUGIN_DIR, '/');
3293
  $loaderPath = $mustUsePluginDir.'/'.$loaderName;
3294
+ if(is_multisite()){
3295
+ $blog_id = get_current_blog_id();
3296
+ if($blog_id !='1'){ // $blog_id = 1 network parent id
3297
+ return ;
3298
+ }
3299
+ }
3300
  if (file_exists($loaderPath)) {
3301
+ $iwp_mu_plugin_db_version = get_option('iwp_mu_plugin_version');
3302
+ $iwp_new_mu_plugin_version = '1.0.1';
3303
+ if(empty($iwp_mu_plugin_db_version) || version_compare($iwp_mu_plugin_db_version, $iwp_new_mu_plugin_version,'<')){
3304
+ $data = build_mu_plugin_version($loaderPath,$iwp_new_mu_plugin_version,$iwp_mu_plugin_db_version);
3305
  if(!$data){
3306
  iwp_mmb_response(array('error' => 'Unable to read InfiniteWP must use plugin', 'error_code' => 'iwp_mu_plugin_read_failed'), false);
3307
  return;
3319
  }
3320
  }
3321
 
3322
+ function build_mu_plugin_version($loaderPath,$iwp_new_mu_plugin_version,$iwp_mu_plugin_db_version){
3323
  $res = false;
3324
  $loaderWritten = @file_get_contents($loaderPath);
3325
  if($loaderWritten){
3326
+ if (strpos($loaderWritten, 'Version') === false) {
3327
+ $res = preg_replace('/Author: Revmakx/', "Author: Revmakx ".PHP_EOL."Version:" .$iwp_new_mu_plugin_version." ", $loaderWritten);
3328
+ }elseif(!empty($iwp_mu_plugin_db_version) && version_compare($iwp_mu_plugin_db_version, '1.0.0','==')){
3329
+ if (strpos($loaderWritten, 'Version :1.0.0') !== false) { //
3330
+ $res = str_replace('Version :1.0.0', 'Version:'.' '.$iwp_new_mu_plugin_version, $loaderWritten);
3331
+ }elseif(strpos($loaderWritten, 'Version: 1.0.0') !== false){
3332
+ $res = str_replace('Version: 1.0.0', 'Version:'.' '.$iwp_new_mu_plugin_version, $loaderWritten);
3333
+ }else{
3334
+ return ;
3335
+ }
3336
+ }else{
3337
+ // May be customer manually uploaded the file.
3338
+ update_option('iwp_mu_plugin_version',$iwp_new_mu_plugin_version);
3339
+ return ;
3340
+ }
3341
  }
3342
  return $res;
3343
  }
iwp-file-iterator.php CHANGED
@@ -270,7 +270,7 @@ function save_deep_dir_list($deep_dirs){
270
  function insert_into_iterator_process($qry){
271
  global $wpdb;
272
 
273
- $sql = "insert into ".$wpdb->base_prefix."iwp_processed_iterator ( name, offset ) values $qry";
274
  $response = $wpdb->get_results($sql);
275
  }
276
 
@@ -380,7 +380,7 @@ function iwp_iterate_file($live_file, $update_status = false){
380
 
381
  function get_unfnished_folder() {
382
  global $wpdb;
383
- $sql = "SELECT * FROM ".$wpdb->base_prefix."iwp_processed_iterator WHERE offset != -1 LIMIT 1";
384
  $response = $wpdb->get_results($sql, ARRAY_A);
385
  // IWP_log($response, '--------$response--------');
386
 
270
  function insert_into_iterator_process($qry){
271
  global $wpdb;
272
 
273
+ $sql = "insert into ".$wpdb->base_prefix."iwp_processed_iterator (`name`,`offset`) values $qry";
274
  $response = $wpdb->get_results($sql);
275
  }
276
 
380
 
381
  function get_unfnished_folder() {
382
  global $wpdb;
383
+ $sql = "SELECT * FROM ".$wpdb->base_prefix."iwp_processed_iterator WHERE `offset` != -1 LIMIT 1";
384
  $response = $wpdb->get_results($sql, ARRAY_A);
385
  // IWP_log($response, '--------$response--------');
386
 
readme.txt CHANGED
@@ -2,7 +2,7 @@
2
  Contributors: infinitewp, amritanandh, rajkuppus
3
  Tags: admin, administration, amazon, api, authentication, automatic, dashboard, dropbox, events, integration, manage, multisite, multiple, notification, performance, s3, security, seo, stats, tracking, infinitewp, updates, backup, restore, iwp, infinite
4
  Requires at least: 3.1
5
- Tested up to: 5.9
6
  Stable tag: trunk
7
 
8
  Install this plugin on unlimited sites and manage them all from a central dashboard.
@@ -48,6 +48,14 @@ Credits: [Vladimir Prelovac](http://prelovac.com/vladimir) for his worker plugin
48
 
49
  == Changelog ==
50
 
 
 
 
 
 
 
 
 
51
  = 1.9.6 - Feb 14th 2022 =
52
  * Feature: Added support for Litespeed Cache.
53
  * Improvement: Ensure phpseclib Crypt_Blowfish is loaded over PEAR’s version.
2
  Contributors: infinitewp, amritanandh, rajkuppus
3
  Tags: admin, administration, amazon, api, authentication, automatic, dashboard, dropbox, events, integration, manage, multisite, multiple, notification, performance, s3, security, seo, stats, tracking, infinitewp, updates, backup, restore, iwp, infinite
4
  Requires at least: 3.1
5
+ Tested up to: 5.9.3
6
  Stable tag: trunk
7
 
8
  Install this plugin on unlimited sites and manage them all from a central dashboard.
48
 
49
  == Changelog ==
50
 
51
+ = 1.9.8 - Mar 18th 2022 =
52
+ * Feature: Added customer role to the Manage user addon if Woocommerce plugin is activated on the WordPress site.
53
+ * Fix: iThemes 404 logs removed from client reports as the iThemes plugin do not detect 404 errors.
54
+ * Fix: Error in query (1064): Syntax error near offset ) values issue fixed it happen some random server.
55
+ * Fix: Backing up a WordPress site with wp_ prefix includes other site database tables in the single and multicall method backups.
56
+ * Fix: mu-plugin version not shown on the plugin page.
57
+ * Fix: Unable to read InfiniteWP must use plugin
58
+
59
  = 1.9.6 - Feb 14th 2022 =
60
  * Feature: Added support for Litespeed Cache.
61
  * Improvement: Ensure phpseclib Crypt_Blowfish is loaded over PEAR’s version.