InfiniteWP Client - Version 1.6.3.2

Version Description

  • Jan 4th 2017 =
  • Improvement: JSON communication between Admin Panel and Client plugin has been implemented.
  • Improvement: If the PHP version of WordPress site is less than 5.4.0 then the single call backups will fail with "Fatal error: Cannot use string offset as an array in /home/asogerb6/public_html/wp-content/plugins/iwp-client/backup.class.singlecall.php on line 340".
  • Improvement: Debug files DE_clMemoryPeak.php, DE_clMemoryUsage.php and DE_clTimeTaken.php have been removed.
  • Improvement: Security patches have been applied for sites backed up to Amazon S3 storage.
  • Fix: Backups having size greater than 2GB could not be uploaded to Google Drive in certain scenarios throwing a bad request error.
  • Fix: "Failed to zip files. pclZip error (-4): File '/wp-content/plugins/wordfence/tmp/configCache.php' does not exist" has been fixed.
  • Fix: Pluggable.php shouldn't be included before loading all plugins.
  • Fix: MySQL error wouldn't show accurately during failed table creation.
  • Fix: If the default auto_increment_increment value is set to 2 in the user's server the backup will fail for all sites on that server.
  • Fix: If the value for integer field is EMPTY then instead of considering default value as NULL, the plugin creates a duplicate entry during cloning.
Download this release

Release Info

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

Code changes from version 1.6.1.1 to 1.6.3.2

activities_log.class.php CHANGED
@@ -143,6 +143,7 @@ class IWP_MMB_Activities_log {
143
break;
144
case 'now':
145
case 'schedule':
146
switch($iwp_type) {
147
case 'backup':
148
case 'scheduleBackup':
143
break;
144
case 'now':
145
case 'schedule':
146
+ case 'multiCallNow':
147
switch($iwp_type) {
148
case 'backup':
149
case 'scheduleBackup':
addons/file_editor/file_editor.class.php CHANGED
@@ -196,6 +196,7 @@ function iwp_mmb_direct_to_any_copy($source, $destination, $overwrite = false, $
196
'error' => 'Gzip library functions are not available.', 'error_code' => 'gzip_library_functions_are_not_available'
197
);
198
}else{
199
$fileContent = gzinflate($fileContent);
200
}
201
196
'error' => 'Gzip library functions are not available.', 'error_code' => 'gzip_library_functions_are_not_available'
197
);
198
}else{
199
+ $fileContent = base64_decode($fileContent);
200
$fileContent = gzinflate($fileContent);
201
}
202
backup.class.multicall.php CHANGED
@@ -85,7 +85,7 @@ class IWP_MMB_Backup_Multicall extends IWP_MMB_Core
85
var $backup_url;
86
var $backup_settings_vals = array();
87
var $iwpScriptStartTime;
88
-
89
function __construct()
90
{
91
@@ -741,7 +741,8 @@ class IWP_MMB_Backup_Multicall extends IWP_MMB_Core
741
{
742
$count = 1;
743
}
744
-
745
for($i = 0; $i < $count; $i++){
746
if($done_count > 0)
747
{
@@ -757,7 +758,7 @@ class IWP_MMB_Backup_Multicall extends IWP_MMB_Core
757
$qry = "SELECT * FROM $table[0] LIMIT $low_limit, 100";
758
$rows = $wpdb->get_results($qry, ARRAY_A);
759
760
-
761
if (is_array($rows)) {
762
foreach ($rows as $row) {
763
manual_debug('', 'eachRow', 1000);
@@ -781,10 +782,38 @@ class IWP_MMB_Backup_Multicall extends IWP_MMB_Core
781
$total_time_part = $finish_part - $this->iwpScriptStartTime;
782
783
//$dump_data .= $count_field;
784
-
785
$value = addslashes($value);
786
$value = preg_replace("/\n/Ui", "\\n", $value);
787
$num_values == $j ? $dump_data .= "'" . $value . "'" : $dump_data .= "'" . $value . "', ";
788
789
$j++;
790
unset($value);
@@ -1098,7 +1127,6 @@ class IWP_MMB_Backup_Multicall extends IWP_MMB_Core
1098
return $result;
1099
}
1100
1101
-
1102
function backupFilesZIP($historyID)
1103
{
1104
$this -> hisID = $historyID;
@@ -5137,7 +5165,7 @@ function ftp_backup($historyID,$args = '')
5137
$requestParams = $this -> getRequiredData($historyID,"requestParams");
5138
$upload_loop_break_time = $requestParams['account_info']['upload_loop_break_time']; //darkcode changed
5139
$upload_file_block_size = $requestParams['account_info']['upload_file_block_size'];
5140
- $upload_file_block_size = 1 *1024 *1024;
5141
$del_host_file = $requestParams['args']['del_host_file'];
5142
$iwp_folder_id = '';
5143
$sub_folder_id = '';
@@ -5983,6 +6011,10 @@ function ftp_backup($historyID,$args = '')
5983
5984
if( !function_exists('initialize_manual_debug') ){
5985
function initialize_manual_debug($conditions = ''){
5986
global $debug_count, $every_count;
5987
$debug_count = 0;
5988
$every_count = 0;
@@ -6058,7 +6090,7 @@ function ftp_backup($historyID,$args = '')
6058
6059
if( !function_exists('refresh_iwp_files_db') ){
6060
function refresh_iwp_files_db($this_file_id = 0, $field = 'thisFileDetails' ){
6061
- global $wpdb;
6062
$this_table_name = $wpdb->base_prefix . 'iwp_file_list'; //in case, if we are changing table name.
6063
$result = true;
6064
@@ -6067,15 +6099,15 @@ function ftp_backup($historyID,$args = '')
6067
//write in db and refresh for_every_count, all_files_detail;
6068
if($wpdb->get_var("SHOW TABLES LIKE '$this_table_name'") == $this_table_name) {
6069
$result = $wpdb->query('TRUNCATE TABLE ' . $this_table_name );
6070
- $error_msg = 'Unable to empty File list table : ' . $wpdb->last_error ;
6071
if(version_compare($IWP_FILE_LIST_TABLE_VERSION, '1.1') == -1){
6072
$result = iwp_create_file_list_table();
6073
- $error_msg = 'Unable to update File list table : ' . $wpdb->last_error ;
6074
}
6075
}
6076
else{
6077
$result = iwp_create_file_list_table();
6078
- $error_msg = 'Unable to create File list table : ' . $wpdb->last_error ;
6079
}
6080
6081
if($result === false){
@@ -6087,7 +6119,7 @@ function ftp_backup($historyID,$args = '')
6087
6088
if(!function_exists('iwp_create_file_list_table')){
6089
function iwp_create_file_list_table(){
6090
- global $wpdb;
6091
if(method_exists($wpdb, 'get_charset_collate')){
6092
$charset_collate = $wpdb->get_charset_collate();
6093
}
@@ -6118,7 +6150,9 @@ function ftp_backup($historyID,$args = '')
6118
";
6119
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
6120
dbDelta($sql);
6121
-
6122
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name){
6123
$table_created = true;
6124
update_option( "iwp_file_list_table_version", '1.1');
@@ -6221,6 +6255,7 @@ function ftp_backup($historyID,$args = '')
6221
if($action == 'insert'){
6222
$is_already = $wpdb->get_row("SELECT * FROM " . $wpdb->base_prefix. $this_table_name . " WHERE thisFileName = '". $v['stored_filename'].$v['splitFilename']."' AND thisFileNameHash = '".md5($v['stored_filename'].$v['splitFilename'])."'" );
6223
if(empty($is_already)){
6224
$result = $wpdb->insert($wpdb->base_prefix . $this_table_name, array('thisFileDetails' => serialize($v), 'thisFileCount' => $k, 'thisFileName' => $v['stored_filename'].$v['splitFilename'],'thisFileNameHash'=>md5($v['stored_filename'].$v['splitFilename'])), array( '%s', '%d', '%s', '%s' ));
6225
}
6226
}
@@ -6314,7 +6349,7 @@ function ftp_backup($historyID,$args = '')
6314
6315
if(!function_exists('alter_iwp_filelisttable_1_1')){
6316
function alter_iwp_filelisttable_1_1(){
6317
- global $wpdb;
6318
if(method_exists($wpdb, 'get_charset_collate')){
6319
$charset_collate = $wpdb->get_charset_collate();
6320
}
@@ -6344,6 +6379,7 @@ function ftp_backup($historyID,$args = '')
6344
foreach($sql as $v){
6345
if(!$wpdb->query($v)){
6346
$failed_alter = true;
6347
}
6348
}
6349
if(!$failed_alter){
@@ -6354,7 +6390,17 @@ function ftp_backup($historyID,$args = '')
6354
}
6355
}
6356
}
6357
-
6358
/*if( function_exists('add_filter') ){
6359
add_filter( 'iwp_website_add', 'IWP_MMB_Backup::readd_tasks' );
6360
}*/
85
var $backup_url;
86
var $backup_settings_vals = array();
87
var $iwpScriptStartTime;
88
+
89
function __construct()
90
{
91
741
{
742
$count = 1;
743
}
744
+ $table_description = $wpdb->get_results("DESCRIBE $table[0]", ARRAY_A);
745
+ $table_description = iwp_modify_table_description($table_description);
746
for($i = 0; $i < $count; $i++){
747
if($done_count > 0)
748
{
758
$qry = "SELECT * FROM $table[0] LIMIT $low_limit, 100";
759
$rows = $wpdb->get_results($qry, ARRAY_A);
760
761
+ $number_data_types = 'tinyint, smallint, mediumint, bigint, int, decimal, numeric, real, float, double';
762
if (is_array($rows)) {
763
foreach ($rows as $row) {
764
manual_debug('', 'eachRow', 1000);
782
$total_time_part = $finish_part - $this->iwpScriptStartTime;
783
784
//$dump_data .= $count_field;
785
+ /****************New method starts here********************/
786
+ // if (empty($value) && $value != 0 || $value == '') {
787
+ // $default_value = isset($table_description[$key]['Default']) ? $table_description[$key]['Default']: NULL;
788
+ // if (@strstr(strtolower($number_data_types), substr($table_description[$key]['Type'], 0, strpos($table_description[$key]['Type'], '('))) !== false && ($default_value === NULL && $default_value != '') ) {
789
+ // if ($default_value === NULL) {
790
+ // $num_values == $j ? $dump_data .= "NULL " : $dump_data .= "NULL, ";
791
+ // } else {
792
+ // $num_values == $j ? $dump_data .= "'$default_value'" : $dump_data .= "'$default_value', ";
793
+ // }
794
+ // } else if($default_value === NULL){
795
+ // $num_values == $j ? $dump_data .= "NULL " : $dump_data .= "NULL, ";
796
+ // } else {
797
+ // $num_values == $j ? $dump_data .= "$default_value" : $dump_data .= "$default_value,";
798
+ // }
799
+ // } else if (@strstr(strtolower($number_data_types), substr($table_description[$key]['Type'], 0, strpos($table_description[$key]['Type'], '('))) !== false) {
800
+ // $num_values == $j ? $dump_data .= "'$value'" : $dump_data .= "'$value',";
801
+ // } else {
802
+ // $value = addslashes($value);
803
+ // $value = str_replace("\n", "\\n", $value);
804
+ // $value = str_replace("\r", "\\r", $value);
805
+ // $num_values == $j ? $dump_data .= "'" . $value . "'" : $dump_data .= "'" . $value . "', ";
806
+ // }
807
+ //$num_values = $dump_data;
808
+ /*********New Method ends Here******************/
809
+
810
+ /**********Old Method start here ************/
811
$value = addslashes($value);
812
$value = preg_replace("/\n/Ui", "\\n", $value);
813
+ $value = str_replace("\n", "\\n", $value);
814
+ $value = str_replace("\r", "\\r", $value);
815
$num_values == $j ? $dump_data .= "'" . $value . "'" : $dump_data .= "'" . $value . "', ";
816
+ /*************** Old Method ends here ********/
817
818
$j++;
819
unset($value);
1127
return $result;
1128
}
1129
1130
function backupFilesZIP($historyID)
1131
{
1132
$this -> hisID = $historyID;
5165
$requestParams = $this -> getRequiredData($historyID,"requestParams");
5166
$upload_loop_break_time = $requestParams['account_info']['upload_loop_break_time']; //darkcode changed
5167
$upload_file_block_size = $requestParams['account_info']['upload_file_block_size'];
5168
+ $upload_file_block_size = 5 *1024 *1024;
5169
$del_host_file = $requestParams['args']['del_host_file'];
5170
$iwp_folder_id = '';
5171
$sub_folder_id = '';
6011
6012
if( !function_exists('initialize_manual_debug') ){
6013
function initialize_manual_debug($conditions = ''){
6014
+ if(file_exists(WP_CONTENT_DIR . '/DE_clMemoryPeak.php')){ @unlink(WP_CONTENT_DIR . '/DE_clMemoryPeak.php');}
6015
+ if(file_exists(WP_CONTENT_DIR . '/DE_clMemoryUsage.php')){ @unlink(WP_CONTENT_DIR . '/DE_clMemoryUsage.php');}
6016
+ if(file_exists(WP_CONTENT_DIR . '/DE_clTimeTaken.php')){ @unlink(WP_CONTENT_DIR . '/DE_clTimeTaken.php');}
6017
+ return true;
6018
global $debug_count, $every_count;
6019
$debug_count = 0;
6020
$every_count = 0;
6090
6091
if( !function_exists('refresh_iwp_files_db') ){
6092
function refresh_iwp_files_db($this_file_id = 0, $field = 'thisFileDetails' ){
6093
+ global $wpdb, $iwp_db_upgrade_error;
6094
$this_table_name = $wpdb->base_prefix . 'iwp_file_list'; //in case, if we are changing table name.
6095
$result = true;
6096
6099
//write in db and refresh for_every_count, all_files_detail;
6100
if($wpdb->get_var("SHOW TABLES LIKE '$this_table_name'") == $this_table_name) {
6101
$result = $wpdb->query('TRUNCATE TABLE ' . $this_table_name );
6102
+ $error_msg = 'Unable to empty File list table : <span style="font-weight:700;">' . $wpdb->last_error.'</span>' ;
6103
if(version_compare($IWP_FILE_LIST_TABLE_VERSION, '1.1') == -1){
6104
$result = iwp_create_file_list_table();
6105
+ $error_msg = 'Unable to update File list table : <span style="font-weight:700;">' . $iwp_db_upgrade_error.'</span>' ;
6106
}
6107
}
6108
else{
6109
$result = iwp_create_file_list_table();
6110
+ $error_msg = 'Unable to create File list table : <span style="font-weight:700;">'.$iwp_db_upgrade_error.'</span>';
6111
}
6112
6113
if($result === false){
6119
6120
if(!function_exists('iwp_create_file_list_table')){
6121
function iwp_create_file_list_table(){
6122
+ global $wpdb, $iwp_db_upgrade_error;
6123
if(method_exists($wpdb, 'get_charset_collate')){
6124
$charset_collate = $wpdb->get_charset_collate();
6125
}
6150
";
6151
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
6152
dbDelta($sql);
6153
+ if($wpdb->last_error !== '') {
6154
+ $iwp_db_upgrade_error = $wpdb->last_error;
6155
+ }
6156
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name){
6157
$table_created = true;
6158
update_option( "iwp_file_list_table_version", '1.1');
6255
if($action == 'insert'){
6256
$is_already = $wpdb->get_row("SELECT * FROM " . $wpdb->base_prefix. $this_table_name . " WHERE thisFileName = '". $v['stored_filename'].$v['splitFilename']."' AND thisFileNameHash = '".md5($v['stored_filename'].$v['splitFilename'])."'" );
6257
if(empty($is_already)){
6258
+ $wpdb->query("SET @@auto_increment_increment=1");
6259
$result = $wpdb->insert($wpdb->base_prefix . $this_table_name, array('thisFileDetails' => serialize($v), 'thisFileCount' => $k, 'thisFileName' => $v['stored_filename'].$v['splitFilename'],'thisFileNameHash'=>md5($v['stored_filename'].$v['splitFilename'])), array( '%s', '%d', '%s', '%s' ));
6260
}
6261
}
6349
6350
if(!function_exists('alter_iwp_filelisttable_1_1')){
6351
function alter_iwp_filelisttable_1_1(){
6352
+ global $wpdb, $iwp_db_upgrade_error;
6353
if(method_exists($wpdb, 'get_charset_collate')){
6354
$charset_collate = $wpdb->get_charset_collate();
6355
}
6379
foreach($sql as $v){
6380
if(!$wpdb->query($v)){
6381
$failed_alter = true;
6382
+ $iwp_db_upgrade_error = $wpdb->last_error;
6383
}
6384
}
6385
if(!$failed_alter){
6390
}
6391
}
6392
}
6393
+ if (!function_exists('iwp_modify_table_description')) {
6394
+
6395
+ function iwp_modify_table_description($table_data){
6396
+ $temp_table = array();
6397
+ foreach ($table_data as $key => $value) {
6398
+ $temp = $table_data[$key];
6399
+ $temp_table[$value['Field']] = $table_data[$key];
6400
+ }
6401
+ return $temp_table;
6402
+ }
6403
+ }
6404
/*if( function_exists('add_filter') ){
6405
add_filter( 'iwp_website_add', 'IWP_MMB_Backup::readd_tasks' );
6406
}*/
backup.class.singlecall.php CHANGED
@@ -2056,6 +2056,7 @@ function ftp_backup($args)
2056
CFCredentials::set(array('development' => array('key' => trim($as3_access_key), 'secret' => trim(str_replace(' ', '+', $as3_secure_key)), 'default_cache_config' => '', 'certificate_authority' => true, 'use_ssl'=>false, 'ssl_verification'=>false), '@default' => 'development'));
2057
$s3 = new AmazonS3();
2058
$response = $s3->create_object($as3_bucket, $as3_file, array('fileUpload' => $backup_file));
2059
$upload = $response->isOk();
2060
if($upload) {
2061
return true;
2056
CFCredentials::set(array('development' => array('key' => trim($as3_access_key), 'secret' => trim(str_replace(' ', '+', $as3_secure_key)), 'default_cache_config' => '', 'certificate_authority' => true, 'use_ssl'=>false, 'ssl_verification'=>false), '@default' => 'development'));
2057
$s3 = new AmazonS3();
2058
$response = $s3->create_object($as3_bucket, $as3_file, array('fileUpload' => $backup_file));
2059
+ $s3->set_object_acl($as3_bucket, $as3_file, AmazonS3::ACL_PRIVATE);
2060
$upload = $response->isOk();
2061
if($upload) {
2062
return true;
helper.class.php CHANGED
@@ -427,7 +427,7 @@ class IWP_MMB_Helper
427
if( !function_exists('username_exists') )
428
include_once(ABSPATH . WPINC . '/registration.php');
429
430
- include_once(ABSPATH . 'wp-includes/pluggable.php');
431
432
if (username_exists($username) == null) {
433
return false;
427
if( !function_exists('username_exists') )
428
include_once(ABSPATH . WPINC . '/registration.php');
429
430
+ //include_once(ABSPATH . 'wp-includes/pluggable.php');
431
432
if (username_exists($username) == null) {
433
return false;
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.6.1.1
8
Author URI: http://www.revmakx.com
9
*/
10
/************************************************************
@@ -28,7 +28,7 @@ if(basename($_SERVER['SCRIPT_FILENAME']) == "init.php"):
28
exit;
29
endif;
30
if(!defined('IWP_MMB_CLIENT_VERSION'))
31
- define('IWP_MMB_CLIENT_VERSION', '1.6.1.1');
32
33
34
@@ -104,26 +104,49 @@ if( !function_exists ('iwp_mmb_parse_request')) {
104
ob_start();
105
106
global $current_user, $iwp_mmb_core, $new_actions, $wp_db_version, $wpmu_version, $_wp_using_ext_object_cache;
107
- $data = trim(base64_decode($HTTP_RAW_POST_DATA_LOCAL));
108
- if ($data){
109
- @preg_match_all('/(^|;|{|})O:+?[0-9]+:(?!"stdClass")/', $data, $objectCheck);
110
- if(empty($objectCheck[0])){
111
- //$num = @extract(unserialize($data));
112
- $unserialized_data = @unserialize($data);
113
- if(isset($unserialized_data['params'])){
114
- $unserialized_data['params'] = iwp_mmb_filter_params($unserialized_data['params']);
115
- }
116
-
117
- $iwp_action = $unserialized_data['iwp_action'];
118
- $params = $unserialized_data['params'];
119
- $id = $unserialized_data['id'];
120
- $signature = $unserialized_data['signature'];
121
- if(isset($unserialized_data['is_save_activity_log'])) {
122
- $is_save_activity_log = $unserialized_data['is_save_activity_log'];
123
}
124
- $GLOBALS['activities_log_datetime'] = $unserialized_data['activities_log_datetime'];
125
}
126
}
127
128
if (isset($iwp_action)) {
129
@@ -195,9 +218,13 @@ if( !function_exists ('iwp_mmb_parse_request')) {
195
}
196
197
if(isset($params['secure'])){
198
-
199
if($decrypted = $iwp_mmb_core->_secure_data($params['secure'])){
200
- $decrypted = maybe_unserialize($decrypted);
201
if(is_array($decrypted)){
202
203
foreach($decrypted as $key => $val){
@@ -246,7 +273,7 @@ if( !function_exists('iwp_mmb_convert_wperror_obj_to_arr')){
246
return $obj;
247
}
248
if($state == 'initial' ){
249
- if(is_wp_error($obj['error'])){
250
$errMsgTemp = $result['error']['errors'];
251
$errCodesTemp = $result['error']['error_codes'];
252
if(!empty($result['error']['error_data']) ){
@@ -272,7 +299,7 @@ if( !function_exists('iwp_mmb_convert_wperror_obj_to_arr')){
272
/* Main response function */
273
if( !function_exists ( 'iwp_mmb_response' )) {
274
275
- function iwp_mmb_response($response = false, $success = true)
276
{
277
$return = array();
278
@@ -294,8 +321,14 @@ if( !function_exists ( 'iwp_mmb_response' )) {
294
header('HTTP/1.0 200 OK');
295
header('Content-Type: text/plain');
296
}
297
- $GLOBALS['IWP_RESPONSE_SENT'] = true;
298
- exit("<IWPHEADER>" . base64_encode(serialize($return))."<ENDIWPHEADER>");
299
}
300
}
301
@@ -2138,4 +2171,374 @@ if(!function_exists('iwp_mmb_get_site_option')) {
2138
if ( !get_option('iwp_client_public_key') && function_exists('add_action')){
2139
add_action('admin_enqueue_scripts', 'iwp_mmb_add_zero_clipboard_scripts');
2140
}
2141
?>
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.6.3.2
8
Author URI: http://www.revmakx.com
9
*/
10
/************************************************************
28
exit;
29
endif;
30
if(!defined('IWP_MMB_CLIENT_VERSION'))
31
+ define('IWP_MMB_CLIENT_VERSION', '1.6.3.2');
32
33
34
104
ob_start();
105
106
global $current_user, $iwp_mmb_core, $new_actions, $wp_db_version, $wpmu_version, $_wp_using_ext_object_cache;
107
+ if (strrpos($HTTP_RAW_POST_DATA_LOCAL, '_IWP_JSON_PREFIX_') !== false) {
108
+ $request_data_array = explode('_IWP_JSON_PREFIX_', $HTTP_RAW_POST_DATA_LOCAL);
109
+ $request_raw_data = $request_data_array[1];
110
+ $data = trim(base64_decode($request_raw_data));
111
+ $request_data = NULL;
112
+ $GLOBALS['IWP_JSON_COMMUNICATION'] = 1;
113
+ } else{
114
+ $request_raw_data = $HTTP_RAW_POST_DATA_LOCAL;
115
+ $data = trim(base64_decode($request_raw_data));
116
+ if (is_serialized($data)) {
117
+ if ((strpos($data, 'get_stats') || strpos($data, 'add_site') || strpos($data, 'remove_site')) && (strpos($data,'2.10.1') || strpos($data,'2.10.0') || strpos($data,'2.10.0.1'))) {
118
+ $request_data = iwp_mmb_safe_unserialize($data);
119
+ }else{
120
+ iwp_mmb_response(array('error' => 'Please update your IWP Admin Panel to version 2.10.1', 'error_code' => 'update_panel'), false, true);
121
}
122
+ }else{
123
+ return false;
124
}
125
}
126
+ if ($data){
127
+
128
+ //$num = @extract(unserialize($data));
129
+ if (!isset($request_data) && $request_data['iwp_action'] != 'add_site' && $request_data['iwp_action'] != 'get_stats' && $request_data['iwp_action'] != 'remove_site') {
130
+ $request_data = json_decode($data, true);
131
+ }
132
+
133
+ if(isset($request_data['params'])){
134
+ $request_data['params'] = iwp_mmb_filter_params($request_data['params']);
135
+ }
136
+ if (isset($GLOBALS['IWP_JSON_COMMUNICATION']) && $GLOBALS['IWP_JSON_COMMUNICATION']) {
137
+ $signature = base64_decode($request_data['signature']);
138
+ }else{
139
+ $signature = $request_data['signature'];
140
+ }
141
+
142
+ $iwp_action = $request_data['iwp_action'];
143
+ $params = $request_data['params'];
144
+ $id = $request_data['id'];
145
+ if(isset($request_data['is_save_activity_log'])) {
146
+ $is_save_activity_log = $request_data['is_save_activity_log'];
147
+ }
148
+ $GLOBALS['activities_log_datetime'] = $request_data['activities_log_datetime'];
149
+ }
150
151
if (isset($iwp_action)) {
152
218
}
219
220
if(isset($params['secure'])){
221
+ if (isset($GLOBALS['IWP_JSON_COMMUNICATION']) && $GLOBALS['IWP_JSON_COMMUNICATION']) {
222
+ $params['secure'] = iwp_mmb_safe_unserialize(base64_decode($params['secure']));
223
+ }
224
if($decrypted = $iwp_mmb_core->_secure_data($params['secure'])){
225
+ if (is_serialized($decrypted)) {
226
+ $decrypted = iwp_mmb_safe_unserialize($decrypted);
227
+ }
228
if(is_array($decrypted)){
229
230
foreach($decrypted as $key => $val){
273
return $obj;
274
}
275
if($state == 'initial' ){
276
+ if(isset($obj['error']) && is_wp_error($obj['error'])){
277
$errMsgTemp = $result['error']['errors'];
278
$errCodesTemp = $result['error']['error_codes'];
279
if(!empty($result['error']['error_data']) ){
299
/* Main response function */
300
if( !function_exists ( 'iwp_mmb_response' )) {
301
302
+ function iwp_mmb_response($response = false, $success = true, $send_serialize_response=false)
303
{
304
$return = array();
305
321
header('HTTP/1.0 200 OK');
322
header('Content-Type: text/plain');
323
}
324
+ if (!$send_serialize_response) {
325
+ $GLOBALS['IWP_RESPONSE_SENT'] = true;
326
+ $response_data = '_IWP_JSON_PREFIX_'.base64_encode(iwp_mmb_json_encode($return));
327
+ }else{
328
+ $GLOBALS['IWP_RESPONSE_SENT'] = true;
329
+ $response_data = base64_encode(serialize($return));
330
+ }
331
+ exit("<IWPHEADER>" .$response_data."<ENDIWPHEADER>");
332
}
333
}
334
2171
if ( !get_option('iwp_client_public_key') && function_exists('add_action')){
2172
add_action('admin_enqueue_scripts', 'iwp_mmb_add_zero_clipboard_scripts');
2173
}
2174
+
2175
+ if (!function_exists('iwp_mmb_json_encode')) {
2176
+ function iwp_mmb_json_encode($data, $options = 0, $depth = 512){
2177
+ if ( version_compare( PHP_VERSION, '5.5', '>=' ) ) {
2178
+ $args = array( $data, $options, $depth );
2179
+ } elseif ( version_compare( PHP_VERSION, '5.3', '>=' ) ) {
2180
+ $args = array( $data, $options );
2181
+ } else {
2182
+ $args = array( $data );
2183
+ }
2184
+ $json = @call_user_func_array( 'json_encode', $args );
2185
+
2186
+ if ( false !== $json && ( version_compare( PHP_VERSION, '5.5', '>=' ) || false === strpos( $json, 'null' ) ) ) {
2187
+ return $json;
2188
+ }
2189
+
2190
+ $args[0] = iwp_mmb_json_compatible_check( $data, $depth );
2191
+ return @call_user_func_array( 'json_encode', $args );
2192
+ }
2193
+ }
2194
+
2195
+ if (!function_exists('json_encode'))
2196
+ {
2197
+ function json_encode($a=false)
2198
+ {
2199
+ if (is_null($a)) return 'null';
2200
+ if ($a === false) return 'false';
2201
+ if ($a === true) return 'true';
2202
+ if (is_scalar($a))
2203
+ {
2204
+ if (is_float($a))
2205
+ {
2206
+ // Always use "." for floats.
2207
+ return floatval(str_replace(",", ".", strval($a)));
2208
+ }
2209
+
2210
+ if (is_string($a))
2211
+ {
2212
+ static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
2213
+ return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
2214
+ }
2215
+ else
2216
+ return $a;
2217
+ }
2218
+ $isList = true;
2219
+ for ($i = 0, reset($a); $i < count($a); $i++, next($a))
2220
+ {
2221
+ if (key($a) !== $i)
2222
+ {
2223
+ $isList = false;
2224
+ break;
2225
+ }
2226
+ }
2227
+ $result = array();
2228
+ if ($isList)
2229
+ {
2230
+ foreach ($a as $v) $result[] = iwp_mmb_json_encode($v);
2231
+ return '[' . join(',', $result) . ']';
2232
+ }
2233
+ else
2234
+ {
2235
+ foreach ($a as $k => $v) $result[] = iwp_mmb_json_encode($k).':'.iwp_mmb_json_encode($v);
2236
+ return '{' . join(',', $result) . '}';
2237
+ }
2238
+ }
2239
+ }
2240
+ if (!function_exists('iwp_mmb_json_compatible_check')) {
2241
+ function iwp_mmb_json_compatible_check( $data, $depth ) {
2242
+ if ( $depth < 0 ) {
2243
+ return false;
2244
+ }
2245
+
2246
+ if ( is_array( $data ) ) {
2247
+ $output = array();
2248
+ foreach ( $data as $key => $value ) {
2249
+ if ( is_string( $key ) ) {
2250
+ $id = iwp_mmb_json_convert_string( $key );
2251
+ } else {
2252
+ $id = $key;
2253
+ }
2254
+ if ( is_array( $value ) || is_object( $value ) ) {
2255
+ $output[ $id ] = iwp_mmb_json_compatible_check( $value, $depth - 1 );
2256
+ } elseif ( is_string( $value ) ) {
2257
+ $output[ $id ] = iwp_mmb_json_convert_string( $value );
2258
+ } else {
2259
+ $output[ $id ] = $value;
2260
+ }
2261
+ }
2262
+ } elseif ( is_object( $data ) ) {
2263
+ $output = new stdClass;
2264
+ foreach ( $data as $key => $value ) {
2265
+ if ( is_string( $key ) ) {
2266
+ $id = iwp_mmb_json_convert_string( $key );
2267
+ } else {
2268
+ $id = $key;
2269
+ }
2270
+
2271
+ if ( is_array( $value ) || is_object( $value ) ) {
2272
+ $output->$id = iwp_mmb_json_compatible_check( $value, $depth - 1 );
2273
+ } elseif ( is_string( $value ) ) {
2274
+ $output->$id = iwp_mmb_json_convert_string( $value );
2275
+ } else {
2276
+ $output->$id = $value;
2277
+ }
2278
+ }
2279
+ } elseif ( is_string( $data ) ) {
2280
+ return iwp_mmb_json_convert_string( $data );
2281
+ } else {
2282
+ return $data;
2283
+ }
2284
+
2285
+ return $output;
2286
+ }
2287
+ }
2288
+ if (!function_exists('iwp_mmb_json_convert_string')) {
2289
+ function iwp_mmb_json_convert_string( $string ) {
2290
+ if ( function_exists( 'mb_convert_encoding' ) ) {
2291
+ $encoding = mb_detect_encoding( $string, mb_detect_order(), true );
2292
+ if ( $encoding ) {
2293
+ return mb_convert_encoding( $string, 'UTF-8', $encoding );
2294
+ } else {
2295
+ return mb_convert_encoding( $string, 'UTF-8', 'UTF-8' );
2296
+ }
2297
+ } else {
2298
+ return check_invalid_UTF8( $string, $true);
2299
+ }
2300
+ }
2301
+ }
2302
+
2303
+ if ( !function_exists('mb_detect_encoding') ) {
2304
+ function mb_detect_encoding ($string, $enc=null, $ret=null) {
2305
+
2306
+ static $enclist = array(
2307
+ 'UTF-8',
2308
+ // 'ASCII',
2309
+ // 'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5',
2310
+ // 'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-10',
2311
+ // 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16',
2312
+ // 'Windows-1251', 'Windows-1252', 'Windows-1254',
2313
+ );
2314
+
2315
+ $result = false;
2316
+
2317
+ foreach ($enclist as $item) {
2318
+ $sample = $string;
2319
+ if(function_exists('iconv'))
2320
+ $sample = iconv($item, $item, $string);
2321
+ if (md5($sample) == md5($string)) {
2322
+ if ($ret === NULL) { $result = $item; } else { $result = true; }
2323
+ break;
2324
+ }
2325
+ }
2326
+
2327
+ return $result;
2328
+ }
2329
+ }
2330
+
2331
+ if (!function_exists('check_invalid_UTF8')) {
2332
+ function check_invalid_UTF8( $string, $strip = false ) {
2333
+ $string = (string) $string;
2334
+
2335
+ if ( 0 === strlen( $string ) ) {
2336
+ return '';
2337
+ }
2338
+
2339
+ // Check for support for utf8 in the installed PCRE library once and store the result in a static
2340
+ static $utf8_pcre = null;
2341
+ if ( ! isset( $utf8_pcre ) ) {
2342
+ $utf8_pcre = @preg_match( '/^./u', 'a' );
2343
+ }
2344
+ // We can't demand utf8 in the PCRE installation, so just return the string in those cases
2345
+ if ( !$utf8_pcre ) {
2346
+ return $string;
2347
+ }
2348
+
2349
+ // preg_match fails when it encounters invalid UTF8 in $string
2350
+ if ( 1 === @preg_match( '/^./us', $string ) ) {
2351
+ return $string;
2352
+ }
2353
+
2354
+ // Attempt to strip the bad chars if requested (not recommended)
2355
+ if ( $strip && function_exists( 'iconv' ) ) {
2356
+ return iconv( 'utf-8', 'utf-8', $string );
2357
+ }
2358
+
2359
+ return '';
2360
+ }
2361
+ }
2362
+
2363
+ define('MAX_SERIALIZED_INPUT_LENGTH', 8192);
2364
+ define('MAX_SERIALIZED_ARRAY_LENGTH', 512);
2365
+ define('MAX_SERIALIZED_ARRAY_DEPTH', 20);
2366
+ function _iwp_mmb_safe_unserialize($str)
2367
+ {
2368
+ if(strlen($str) > MAX_SERIALIZED_INPUT_LENGTH)
2369
+ {
2370
+ // input exceeds MAX_SERIALIZED_INPUT_LENGTH
2371
+ return false;
2372
+ }
2373
+ if(empty($str) || !is_string($str))
2374
+ {
2375
+ return false;
2376
+ }
2377
+ $stack = array();
2378
+ $expected = array();
2379
+ /*
2380
+ * states:
2381
+ * 0 - initial state, expecting a single value or array
2382
+ * 1 - terminal state
2383
+ * 2 - in array, expecting end of array or a key
2384
+ * 3 - in array, expecting value or another array
2385
+ */
2386
+ $state = 0;
2387
+ while($state != 1)
2388
+ {
2389
+ $type = isset($str[0]) ? $str[0] : '';
2390
+ if($type == '}')
2391
+ {
2392
+ $str = substr($str, 1);
2393
+ }
2394
+ else if($type == 'N' && $str[1] == ';')
2395
+ {
2396
+ $value = null;
2397
+ $str = substr($str, 2);
2398
+ }
2399
+ else if($type == 'b' && preg_match('/^b:([01]);/', $str, $matches))
2400
+ {
2401
+ $value = $matches[1] == '1' ? true : false;
2402
+ $str = substr($str, 4);
2403
+ }
2404
+ else if($type == 'i' && preg_match('/^i:(-?[0-9]+);(.*)/s', $str, $matches))
2405
+ {
2406
+ $value = (int)$matches[1];
2407
+ $str = $matches[2];
2408
+ }
2409
+ else if($type == 'd' && preg_match('/^d:(-?[0-9]+\.?[0-9]*(E[+-][0-9]+)?);(.*)/s', $str, $matches))
2410
+ {
2411
+ $value = (float)$matches[1];
2412
+ $str = $matches[3];
2413
+ }
2414
+ else if($type == 's' && preg_match('/^s:([0-9]+):"(.*)/s', $str, $matches) && substr($matches[2], (int)$matches[1], 2) == '";')
2415
+ {
2416
+ $value = substr($matches[2], 0, (int)$matches[1]);
2417
+ $str = substr($matches[2], (int)$matches[1] + 2);
2418
+ }
2419
+ else if($type == 'a' && preg_match('/^a:([0-9]+):{(.*)/s', $str, $matches) && $matches[1] < MAX_SERIALIZED_ARRAY_LENGTH)
2420
+ {
2421
+ $expectedLength = (int)$matches[1];
2422
+ $str = $matches[2];
2423
+ }
2424
+ else
2425
+ {
2426
+ // object or unknown/malformed type
2427
+ return false;
2428
+ }
2429
+ switch($state)
2430
+ {
2431
+ case 3: // in array, expecting value or another array
2432
+ if($type == 'a')
2433
+ {
2434
+ if(count($stack) >= MAX_SERIALIZED_ARRAY_DEPTH)
2435
+ {
2436
+ // array nesting exceeds MAX_SERIALIZED_ARRAY_DEPTH
2437
+ return false;
2438
+ }
2439
+ $stack[] = &$list;
2440
+ $list[$key] = array();
2441
+ $list = &$list[$key];
2442
+ $expected[] = $expectedLength;
2443
+ $state = 2;
2444
+ break;
2445
+ }
2446
+ if($type != '}')
2447
+ {
2448
+ $list[$key] = $value;
2449
+ $state = 2;
2450
+ break;
2451
+ }
2452
+ // missing array value
2453
+ return false;
2454
+ case 2: // in array, expecting end of array or a key
2455
+ if($type == '}')
2456
+ {
2457
+ if(count($list) < end($expected))
2458
+ {
2459
+ // array size less than expected
2460
+ return false;
2461
+ }
2462
+ unset($list);
2463
+ $list = &$stack[count($stack)-1];
2464
+ array_pop($stack);
2465
+ // go to terminal state if we're at the end of the root array
2466
+ array_pop($expected);
2467
+ if(count($expected) == 0) {
2468
+ $state = 1;
2469
+ }
2470
+ break;
2471
+ }
2472
+ if($type == 'i' || $type == 's')
2473
+ {
2474
+ if(count($list) >= MAX_SERIALIZED_ARRAY_LENGTH)
2475
+ {
2476
+ // array size exceeds MAX_SERIALIZED_ARRAY_LENGTH
2477
+ return false;
2478
+ }
2479
+ if(count($list) >= end($expected))
2480
+ {
2481
+ // array size exceeds expected length
2482
+ return false;
2483
+ }
2484
+ $key = $value;
2485
+ $state = 3;
2486
+ break;
2487
+ }
2488
+ // illegal array index type
2489
+ return false;
2490
+ case 0: // expecting array or value
2491
+ if($type == 'a')
2492
+ {
2493
+ if(count($stack) >= MAX_SERIALIZED_ARRAY_DEPTH)
2494
+ {
2495
+ // array nesting exceeds MAX_SERIALIZED_ARRAY_DEPTH
2496
+ return false;
2497
+ }
2498
+ $data = array();
2499
+ $list = &$data;
2500
+ $expected[] = $expectedLength;
2501
+ $state = 2;
2502
+ break;
2503
+ }
2504
+ if($type != '}')
2505
+ {
2506
+ $data = $value;
2507
+ $state = 1;
2508
+ break;
2509
+ }
2510
+ // not in array
2511
+ return false;
2512
+ }
2513
+ }
2514
+ if(!empty($str))
2515
+ {
2516
+ // trailing data in input
2517
+ return false;
2518
+ }
2519
+ return $data;
2520
+ }
2521
+ /**
2522
+ * Wrapper for _safe_unserialize() that handles exceptions and multibyte encoding issue
2523
+ *
2524
+ * @param string $str
2525
+ * @return mixed
2526
+ */
2527
+ function iwp_mmb_safe_unserialize( $str )
2528
+ {
2529
+ // ensure we use the byte count for strings even when strlen() is overloaded by mb_strlen()
2530
+ if (function_exists('mb_internal_encoding') &&
2531
+ (((int) ini_get('mbstring.func_overload')) & 2))
2532
+ {
2533
+ $mbIntEnc = mb_internal_encoding();
2534
+ mb_internal_encoding('ASCII');
2535
+ }
2536
+ $out = _iwp_mmb_safe_unserialize($str);
2537
+ if (isset($mbIntEnc))
2538
+ {
2539
+ mb_internal_encoding($mbIntEnc);
2540
+ }
2541
+ return $out;
2542
+ }
2543
+
2544
?>
installer.class.php CHANGED
@@ -202,12 +202,14 @@ class IWP_MMB_Installer extends IWP_MMB_Core
202
if (!empty($upgrade_plugins)) {
203
$plugin_files = $plugin_details = $premium_plugin_details = array();
204
foreach ($upgrade_plugins as $plugin) {
205
- if (isset($plugin->file)) {
206
$plugin_details[] = $plugin;
207
- $plugin_files[$plugin->file] = $plugin->old_version;
208
} else {
209
$premium_plugin_details[] = $plugin;
210
- $premium_upgrades[md5($plugin->name)] = $plugin;
211
}
212
}
213
if (!empty($plugin_files)) {
@@ -290,6 +292,7 @@ class IWP_MMB_Installer extends IWP_MMB_Core
290
{
291
global $iwp_activities_log_post_type, $iwp_mmb_activities_log;
292
ob_start();
293
294
if (!function_exists('wp_version_check') || !function_exists('get_core_checksums'))
295
include_once(ABSPATH . '/wp-admin/includes/update.php');
202
if (!empty($upgrade_plugins)) {
203
$plugin_files = $plugin_details = $premium_plugin_details = array();
204
foreach ($upgrade_plugins as $plugin) {
205
+ $file_path = $plugin['file'];
206
+ $plugin_name = $plugin['name'];
207
+ if (isset($file_path)) {
208
$plugin_details[] = $plugin;
209
+ $plugin_files[$file_path] = $plugin->old_version;
210
} else {
211
$premium_plugin_details[] = $plugin;
212
+ $premium_upgrades[md5($plugin_name)] = $plugin;
213
}
214
}
215
if (!empty($plugin_files)) {
292
{
293
global $iwp_activities_log_post_type, $iwp_mmb_activities_log;
294
ob_start();
295
+ $current = (object)$current;
296
297
if (!function_exists('wp_version_check') || !function_exists('get_core_checksums'))
298
include_once(ABSPATH . '/wp-admin/includes/update.php');
lib/amazon/s3IWPBackup.php CHANGED
@@ -154,7 +154,7 @@ class IWP_MMB_S3_MULTICALL extends IWP_MMB_Backup_Multicall
154
'Bucket' => $as3_bucket,
155
'SourceFile' => $backup_file,
156
'Key' => $as3_file,
157
- 'ACL' => 'public-read'
158
));
159
$current_file_num += 1;
160
$resArray = array (
@@ -207,7 +207,7 @@ class IWP_MMB_S3_MULTICALL extends IWP_MMB_Backup_Multicall
207
$result = $s3->createMultipartUpload(array(
208
'Bucket' => $as3_bucket,
209
'Key' => $as3_file,
210
- 'ACL' => 'public-read',
211
212
));
213
@@ -619,7 +619,7 @@ class IWP_MMB_S3_SINGLECALL extends IWP_MMB_Backup_Multicall
619
'Bucket' => $as3_bucket,
620
'SourceFile' => $backup_file,
621
'Key' => $as3_file,
622
- 'ACL' => 'public-read'
623
));
624
return true;
625
}catch (Exception $e){
@@ -642,7 +642,7 @@ class IWP_MMB_S3_SINGLECALL extends IWP_MMB_Backup_Multicall
642
$result = $s3->createMultipartUpload(array(
643
'Bucket' => $as3_bucket,
644
'Key' => $as3_file,
645
- 'ACL' => 'public-read',
646
647
));
648
154
'Bucket' => $as3_bucket,
155
'SourceFile' => $backup_file,
156
'Key' => $as3_file,
157
+ 'ACL' => 'authenticated-read'
158
));
159
$current_file_num += 1;
160
$resArray = array (
207
$result = $s3->createMultipartUpload(array(
208
'Bucket' => $as3_bucket,
209
'Key' => $as3_file,
210
+ 'ACL' => 'authenticated-read',
211
212
));
213
619
'Bucket' => $as3_bucket,
620
'SourceFile' => $backup_file,
621
'Key' => $as3_file,
622
+ 'ACL' => 'authenticated-read'
623
));
624
return true;
625
}catch (Exception $e){
642
$result = $s3->createMultipartUpload(array(
643
'Bucket' => $as3_bucket,
644
'Key' => $as3_file,
645
+ 'ACL' => 'authenticated-read',
646
647
));
648
pclzip.class.php CHANGED
@@ -3580,7 +3580,12 @@ endif;
3580
//$timeTak = microtime(true) - $tempLoopStart;
3581
3582
// ----- Check the minimum file size
3583
- if (iwp_mmb_get_file_size($v_gzip_temp_name) < 18) {
3584
echo "Check the minimum file size error";
3585
IWPPclZip::privErrorLog(IWP_PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes');
3586
//return array( 'error' => 'Zip-error: Error compressing the file "'.$p_filedescr['filename'].'".Try excluding this file and try again.');
3580
//$timeTak = microtime(true) - $tempLoopStart;
3581
3582
// ----- Check the minimum file size
3583
+ if (version_compare(phpversion(), '7','<')) {
3584
+ $version_bytes = 18;
3585
+ }else{
3586
+ $version_bytes = 0;
3587
+ }
3588
+ if (iwp_mmb_get_file_size($v_gzip_temp_name) < $version_bytes) {
3589
echo "Check the minimum file size error";
3590
IWPPclZip::privErrorLog(IWP_PCLZIP_ERR_BAD_FORMAT, 'gzip temporary file \''.$v_gzip_temp_name.'\' has invalid filesize - should be minimum 18 bytes');
3591
//return array( 'error' => 'Zip-error: Error compressing the file "'.$p_filedescr['filename'].'".Try excluding this file and try again.');
readme.txt CHANGED
@@ -2,7 +2,7 @@
2
Contributors: infinitewp
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: 4.5.3
6
Stable tag: trunk
7
8
Install this plugin on unlimited sites and manage them all from a central dashboard.
@@ -47,6 +47,17 @@ Credits: [Vladimir Prelovac](http://prelovac.com/vladimir) for his worker plugin
47
5. One-click updates
48
49
== Changelog ==
50
51
= 1.6.1.1 - August 12th 2016 =
52
* Fix: Bug Fix.
2
Contributors: infinitewp
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: 4.7
6
Stable tag: trunk
7
8
Install this plugin on unlimited sites and manage them all from a central dashboard.
47
5. One-click updates
48
49
== Changelog ==
50
+ = 1.6.3.2 - Jan 4th 2017 =
51
+ * Improvement: JSON communication between Admin Panel and Client plugin has been implemented.
52
+ * Improvement: If the PHP version of WordPress site is less than 5.4.0 then the single call backups will fail with "Fatal error: Cannot use string offset as an array in /home/asogerb6/public_html/wp-content/plugins/iwp-client/backup.class.singlecall.php on line 340".
53
+ * Improvement: Debug files DE_clMemoryPeak.php, DE_clMemoryUsage.php and DE_clTimeTaken.php have been removed.
54
+ * Improvement: Security patches have been applied for sites backed up to Amazon S3 storage.
55
+ * Fix: Backups having size greater than 2GB could not be uploaded to Google Drive in certain scenarios throwing a bad request error.
56
+ * Fix: "Failed to zip files. pclZip error (-4): File '/wp-content/plugins/wordfence/tmp/configCache.php' does not exist" has been fixed.
57
+ * Fix: Pluggable.php shouldn't be included before loading all plugins.
58
+ * Fix: MySQL error wouldn't show accurately during failed table creation.
59
+ * Fix: If the default auto_increment_increment value is set to 2 in the user's server the backup will fail for all sites on that server.
60
+ * Fix: If the value for integer field is EMPTY then instead of considering default value as NULL, the plugin creates a duplicate entry during cloning.
61
62
= 1.6.1.1 - August 12th 2016 =
63
* Fix: Bug Fix.