Backup and Restore WordPress – WPBackItUp Backup Plugin - Version 1.5.0

Version Description

Changed DB Export and import method to work on all hosting.

Download this release

Release Info

Developer jcpeden
Plugin Icon 128x128 Backup and Restore WordPress – WPBackItUp Backup Plugin
Version 1.5.0
Comparing to
See all releases

Code changes from version 1.4.2 to 1.5.0

Files changed (6) hide show
  1. index.php +2 -2
  2. lib/constants.php +2 -2
  3. lib/functions.php +394 -385
  4. lib/includes/recurse_zip.php +1 -1
  5. logs/status.log +1 -1
  6. readme.txt +209 -203
index.php CHANGED
@@ -7,13 +7,13 @@
7
  * @global object $wpdb
8
  *
9
  * @author jcpeden
10
- * @version 1.4.2
11
  */
12
  /*
13
  Plugin Name: WP Backitup
14
  Plugin URI: http://www.wpbackitup.com
15
  Description: Backup your content, settings, themes, plugins and media in just a few simple clicks.
16
- Version: 1.4.2
17
  Author: John Peden
18
  Author URI: http://www.johncpeden.com
19
  License: GPL3
7
  * @global object $wpdb
8
  *
9
  * @author jcpeden
10
+ * @version 1.5.0
11
  */
12
  /*
13
  Plugin Name: WP Backitup
14
  Plugin URI: http://www.wpbackitup.com
15
  Description: Backup your content, settings, themes, plugins and media in just a few simple clicks.
16
+ Version: 1.5.0
17
  Author: John Peden
18
  Author URI: http://www.johncpeden.com
19
  License: GPL3
lib/constants.php CHANGED
@@ -5,11 +5,11 @@
5
  * @package WP Backitup
6
  *
7
  * @author jcpeden
8
- * @version 1.4.2
9
  * @since 1.0.1
10
  */
11
 
12
- if( !defined( 'WPBACKITUP_VERSION' ) ) define( 'WPBACKITUP_VERSION', '1.4.2' );
13
 
14
  if( !defined( 'WPBACKITUP_DIRNAME' ) ) define( 'WPBACKITUP_DIRNAME', dirname( dirname( __FILE__ ) ) );
15
 
5
  * @package WP Backitup
6
  *
7
  * @author jcpeden
8
+ * @version 1.5.0
9
  * @since 1.0.1
10
  */
11
 
12
+ if( !defined( 'WPBACKITUP_VERSION' ) ) define( 'WPBACKITUP_VERSION', '1.5.0' );
13
 
14
  if( !defined( 'WPBACKITUP_DIRNAME' ) ) define( 'WPBACKITUP_DIRNAME', dirname( dirname( __FILE__ ) ) );
15
 
lib/functions.php CHANGED
@@ -1,385 +1,394 @@
1
- <?php
2
- /**
3
- * WP Backitup Functions
4
- *
5
- * @package WP Backitup
6
- *
7
- * @author jcpeden
8
- * @version 1.4.2
9
- * @since 1.0.2
10
- */
11
-
12
- // localize the plugin
13
- function lang_setup() {
14
- global $WPBackitup;
15
- load_plugin_textdomain($WPBackitup->namespace, false, dirname(plugin_basename(__FILE__)) . '/lang/');
16
- }
17
- add_action('after_setup_theme', 'lang_setup');
18
-
19
- // include recurseZip class
20
- if( !class_exists( 'recurseZip' ) ) {
21
- include_once 'includes/recurse_zip.php';
22
- }
23
-
24
- // retrieve our license key from the DB
25
- $license_key = trim( $this->get_option( 'license_key' ) );
26
-
27
- //define dbSize function
28
- function dbSize($dbname) {
29
- mysqli_select_db($dbname);
30
- $result = mysqli_query("SHOW TABLE STATUS");
31
- $dbsize = 0;
32
- while($row = mysqli_fetch_array($result)) {
33
- $dbsize += $row["Data_length"] + $row["Index_length"];
34
- }
35
- return $dbsize;
36
- }
37
-
38
- //define formatFileSize function
39
- function formatFileSize($bytes)
40
- {
41
- if ($bytes >= 1073741824)
42
- {
43
- $bytes = number_format($bytes / 1073741824, 2) . ' GB';
44
- }
45
- elseif ($bytes >= 1048576)
46
- {
47
- $bytes = number_format($bytes / 1048576, 2) . ' MB';
48
- }
49
- elseif ($bytes >= 1024)
50
- {
51
- $bytes = number_format($bytes / 1024, 2) . ' KB';
52
- }
53
- elseif ($bytes > 1)
54
- {
55
- $bytes = $bytes . ' bytes';
56
- }
57
- elseif ($bytes == 1)
58
- {
59
- $bytes = $bytes . ' byte';
60
- }
61
- else
62
- {
63
- $bytes = '0 bytes';
64
- }
65
-
66
- return $bytes;
67
- }
68
-
69
- //define dirSize function
70
- function dirSize($directory) {
71
- $size = 0;
72
- foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file){
73
- $size+=$file->getSize();
74
- }
75
- return $size;
76
- }
77
-
78
- //load backup function
79
- function backup() {
80
- include_once 'includes/backup.php';
81
- }
82
- add_action('wp_ajax_backup', 'backup');
83
-
84
- //load restore_path function
85
- function restore_path() {
86
- include_once 'includes/restore_from_path.php';
87
- }
88
- add_action('wp_ajax_restore_path', 'restore_path');
89
-
90
- //load download function
91
- function download() {
92
- if(glob(WPBACKITUP_DIRNAME . "/backups/*.zip")) {
93
- foreach (glob(WPBACKITUP_DIRNAME . "/backups/*.zip") as $file) {
94
- $filename = basename($file);
95
- echo 'Download most recent export file: <a href="' .WPBACKITUP_URLPATH. '/backups/' .$filename .'">' .$filename .'</a>';
96
- }
97
- } else {
98
- echo 'No export file available for download. Please create one.';
99
- }
100
- die();
101
- }
102
- add_action('wp_ajax_download', 'download');
103
-
104
- //load logreader function
105
- function logreader() {
106
- $log = WPBACKITUP_DIRNAME .'/logs/status.log';
107
- if(file_exists($log) ) {
108
- readfile($log);
109
- }
110
- die();
111
- }
112
- add_action('wp_ajax_logreader', 'logreader');
113
-
114
- //define create_dir function
115
- if(!function_exists('create_dir')) {
116
- function create_dir($dir) {
117
- if( !is_dir($dir) ) {
118
- @mkdir($dir, 0755);
119
- }
120
- return true;
121
- }
122
- }
123
-
124
- //Define recusive_copy function
125
- if(!function_exists('recursive_copy')) {
126
- function recursive_copy($dir, $target_path, $ignore = array( 'cgi-bin','..','._' ) ) {
127
- if( is_dir($dir) ) { //If the directory exists
128
- if ($dh = opendir($dir) ) {
129
- while(($file = readdir($dh)) !== false) { //While there are files in the directory
130
- if ( !in_array($file, $ignore) && substr($file, 0, 1) != '.') { //Check the file is not in the ignore array
131
- if (!is_dir( $dir.$file ) ) {
132
- //Copy files to destination directory
133
- $fsrc = fopen($dir .$file,'r');
134
- $fdest = fopen($target_path .$file,'w+');
135
- $len = stream_copy_to_stream($fsrc,$fdest);
136
- fclose($fsrc);
137
- fclose($fdest);
138
- } else { //If $file is a directory
139
- $destdir = $target_path .$file; //Modify the destination dir
140
- if(!is_dir($destdir)) { //Create the destdir if it doesn't exist
141
- @mkdir($destdir, 0755);
142
- }
143
- recursive_copy($dir .$file .'/', $target_path .$file .'/', $ignore);
144
- }
145
- }
146
- }
147
- closedir($dh);
148
- }
149
- }
150
- return true;
151
- }
152
- }
153
-
154
- //Define DB backup function
155
- if(!function_exists('db_backup')) {
156
- function db_backup($user, $pass, $host, $db_name, $path) {
157
-
158
- //set fileName
159
- $fileName = 'db-backup.sql' ;
160
-
161
- // Check if directory is already created and has the proper permissions
162
- if (!file_exists($path)) {
163
- if(!mkdir($path , 0755) ){
164
- return false;
165
- }
166
- }
167
-
168
- if (!is_writable($path)) {
169
- if (!chmod($path , 0755) ) {
170
- return false;
171
- }
172
- }
173
-
174
- $mysqli = new mysqli($host , $user , $pass , $db_name) ;
175
- if (mysqli_connect_errno()) {
176
- return false;
177
- }
178
-
179
- // Introduction information
180
- $return = '';
181
- $return .= "--\n";
182
- $return .= "-- WP Backitup Database Backup \n";
183
- $return .= "--\n";
184
- $return .= '-- Created: ' . date("Y/m/d") . ' on ' . date("h:i") . "\n\n\n";
185
- $return = "--\n";
186
- $return .= "-- Database : " . $db_name . "\n";
187
- $return .= "--\n";
188
- $return .= "-- --------------------------------------------------\n";
189
- $return .= "-- ---------------------------------------------------\n";
190
- $return .= 'SET AUTOCOMMIT = 0 ;' ."\n" ;
191
- $return .= 'SET FOREIGN_KEY_CHECKS=0 ;' ."\n" ;
192
- $tables = array() ;
193
-
194
- // Exploring what tables this database has
195
- $result = $mysqli->query('SHOW TABLES' ) ;
196
-
197
- // Cycle through "$result" and put content into an array
198
- while ($row = $result->fetch_row()) {
199
- $tables[] = $row[0] ;
200
- }
201
-
202
- // Cycle through each table
203
- foreach($tables as $table) {
204
- // Get content of each table
205
- $result = $mysqli->query('SELECT * FROM '. $table) ;
206
-
207
- // Get number of fields (columns) of each table
208
- $num_fields = $mysqli->field_count ;
209
-
210
- // Add table information
211
- $return .= "--\n" ;
212
- $return .= '-- Tabel structure for table `' . $table . '`' . "\n" ;
213
- $return .= "--\n" ;
214
- $return.= 'DROP TABLE IF EXISTS `'.$table.'`;' . "\n" ;
215
-
216
- // Get the table-shema
217
- $shema = $mysqli->query('SHOW CREATE TABLE '.$table) ;
218
-
219
- // Extract table shema
220
- $tableshema = $shema->fetch_row() ;
221
-
222
- // Append table-shema into code
223
- $return.= $tableshema[1].";" . "\n\n" ;
224
-
225
- // Cycle through each table-row
226
- while($rowdata = $result->fetch_row()) {
227
-
228
- // Prepare code that will insert data into table
229
- $return .= 'INSERT INTO `'.$table .'` VALUES ( ' ;
230
-
231
- // Extract data of each row
232
- for($i=0; $i<$num_fields; $i++) {
233
- $return .= '"'.$rowdata[$i] . "\"," ;
234
- }
235
-
236
- // Let's remove the last comma
237
- $return = substr("$return", 0, -1) ;
238
- $return .= ");" ."\n" ;
239
-
240
- }
241
- $return .= "\n\n" ;
242
- }
243
-
244
- // Close the connection
245
- $mysqli->close() ;
246
- $return .= 'SET FOREIGN_KEY_CHECKS = 1 ; ' . "\n" ;
247
- $return .= 'COMMIT ; ' . "\n" ;
248
- $return .= 'SET AUTOCOMMIT = 1 ; ' . "\n" ;
249
-
250
- //save file
251
- $handle = fopen($path . $fileName,'w+');
252
- fwrite($handle,$return);
253
- fclose($handle);
254
- return true;
255
- }
256
- }
257
-
258
- //Define the create_siteinfo function
259
- if(!function_exists('create_siteinfo')) {
260
- function create_siteinfo($path, $table_prefix) {
261
- $siteinfo = $path ."backupsiteinfo.txt";
262
- $handle = fopen($siteinfo, 'w+');
263
- $entry = site_url( '/' ) ."\n$table_prefix";
264
- fwrite($handle, $entry);
265
- fclose($handle);
266
- return true;
267
- }
268
- }
269
-
270
- //Define recursive_delete function
271
- if(!function_exists('recursive_delete')){
272
- function recursive_delete($dir, $ignore = array('cgi-bin','.','..','._') ){
273
- if( is_dir($dir) ){
274
- if($dh = opendir($dir)) {
275
- while( ($file = readdir($dh)) !== false ) {
276
- if (!in_array($file, $ignore) && substr($file, 0, 1) != '.') { //Check the file is not in the ignore array
277
- if(!is_dir($dir .'/'. $file)) {
278
- unlink($dir .'/'. $file);
279
- } else {
280
- recursive_delete($dir.'/'. $file, $ignore);
281
- }
282
- }
283
- }
284
- }
285
- @rmdir($dir);
286
- closedir($dh);
287
- }
288
- return true;
289
- }
290
- }
291
-
292
- //Define zip function
293
- function zip($source, $destination, $ignore) {
294
- if (is_string($source)) $source_arr = array($source); // convert it to array
295
- if (!extension_loaded('zip')) {
296
- return false;
297
- }
298
- $zip = new ZipArchive();
299
- if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
300
- return false;
301
- }
302
- foreach ($source_arr as $source) {
303
- if (!file_exists($source)) continue;
304
- $source = str_replace('\\', '/', realpath($source));
305
- if (is_dir($source) === true) {
306
- $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
307
- foreach ($files as $file) {
308
- if (!preg_match($ignore, $file)) {
309
- $file = str_replace('\\', '/', realpath($file));
310
- if (is_dir($file) === true) {
311
- $zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
312
- } else if (is_file($file) === true) {
313
- $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
314
- }
315
- }
316
- }
317
- } else if (is_file($source) === true) {
318
- $zip->addFromString(basename($source), file_get_contents($source));
319
- }
320
- }
321
- return $zip->close();
322
- }
323
-
324
- //load presstrends
325
- function load_presstrends() {
326
- global $WPBackitup;
327
- if($WPBackitup->get_option( 'presstrends' ) == 'enabled') {
328
- // PressTrends Account API Key
329
- $api_key = 'rwiyhqfp7eioeh62h6t3ulvcghn2q8cr7j5x';
330
- $auth = 'lpa0nvlhyzbyikkwizk4navhtoaqujrbw';
331
-
332
- // Start of Metrics
333
- global $wpdb;
334
- $data = get_transient( 'presstrends_cache_data' );
335
- if ( !$data || $data == '' ) {
336
- $api_base = 'http://api.presstrends.io/index.php/api/pluginsites/update/auth/';
337
- $url = $api_base . $auth . '/api/' . $api_key . '/';
338
-
339
- $count_posts = wp_count_posts();
340
- $count_pages = wp_count_posts( 'page' );
341
- $comments_count = wp_count_comments();
342
-
343
- // wp_get_theme was introduced in 3.4, for compatibility with older versions, let's do a workaround for now.
344
- if ( function_exists( 'wp_get_theme' ) ) {
345
- $theme_data = wp_get_theme();
346
- $theme_name = urlencode( $theme_data->Name );
347
- } else {
348
- $theme_data = get_theme_data( get_stylesheet_directory() . '/style.css' );
349
- $theme_name = $theme_data['Name'];
350
- }
351
-
352
- $plugin_name = '&';
353
- foreach ( get_plugins() as $plugin_info ) {
354
- $plugin_name .= $plugin_info['Name'] . '&';
355
- }
356
- // CHANGE __FILE__ PATH IF LOCATED OUTSIDE MAIN PLUGIN FILE
357
- $plugin_data = get_plugin_data( __FILE__ );
358
- $posts_with_comments = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type='post' AND comment_count > 0" );
359
- $data = array(
360
- 'url' => stripslashes( str_replace( array( 'http://', '/', ':' ), '', site_url() ) ),
361
- 'posts' => $count_posts->publish,
362
- 'pages' => $count_pages->publish,
363
- 'comments' => $comments_count->total_comments,
364
- 'approved' => $comments_count->approved,
365
- 'spam' => $comments_count->spam,
366
- 'pingbacks' => $wpdb->get_var( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_type = 'pingback'" ),
367
- 'post_conversion' => ( $count_posts->publish > 0 && $posts_with_comments > 0 ) ? number_format( ( $posts_with_comments / $count_posts->publish ) * 100, 0, '.', '' ) : 0,
368
- 'theme_version' => $plugin_data['Version'],
369
- 'theme_name' => $theme_name,
370
- 'site_name' => str_replace( ' ', '', get_bloginfo( 'name' ) ),
371
- 'plugins' => count( get_option( 'active_plugins' ) ),
372
- 'plugin' => urlencode( $plugin_name ),
373
- 'wpversion' => get_bloginfo( 'version' ),
374
- );
375
-
376
- foreach ( $data as $k => $v ) {
377
- $url .= $k . '/' . $v . '/';
378
- }
379
- wp_remote_get( $url );
380
- set_transient( 'presstrends_cache_data', $data, 60 * 60 * 24 );
381
- }
382
- }
383
- }
384
- // PressTrends WordPress Action
385
- add_action('admin_init', 'load_presstrends');
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * WP Backitup Functions
4
+ *
5
+ * @package WP Backitup
6
+ *
7
+ * @author jcpeden
8
+ * @version 1.4.2
9
+ * @since 1.0.2
10
+ */
11
+
12
+ // localize the plugin
13
+ function lang_setup() {
14
+ global $WPBackitup;
15
+ load_plugin_textdomain($WPBackitup->namespace, false, dirname(plugin_basename(__FILE__)) . '/lang/');
16
+ }
17
+ add_action('after_setup_theme', 'lang_setup');
18
+
19
+ // include recurseZip class
20
+ if( !class_exists( 'recurseZip' ) ) {
21
+ include_once 'includes/recurse_zip.php';
22
+ }
23
+
24
+ // retrieve our license key from the DB
25
+ $license_key = trim( $this->get_option( 'license_key' ) );
26
+
27
+ //define dbSize function
28
+ function dbSize($dbname) {
29
+ mysqli_select_db($dbname);
30
+ $result = mysqli_query("SHOW TABLE STATUS");
31
+ $dbsize = 0;
32
+ while($row = mysqli_fetch_array($result)) {
33
+ $dbsize += $row["Data_length"] + $row["Index_length"];
34
+ }
35
+ return $dbsize;
36
+ }
37
+
38
+ //define formatFileSize function
39
+ function formatFileSize($bytes)
40
+ {
41
+ if ($bytes >= 1073741824)
42
+ {
43
+ $bytes = number_format($bytes / 1073741824, 2) . ' GB';
44
+ }
45
+ elseif ($bytes >= 1048576)
46
+ {
47
+ $bytes = number_format($bytes / 1048576, 2) . ' MB';
48
+ }
49
+ elseif ($bytes >= 1024)
50
+ {
51
+ $bytes = number_format($bytes / 1024, 2) . ' KB';
52
+ }
53
+ elseif ($bytes > 1)
54
+ {
55
+ $bytes = $bytes . ' bytes';
56
+ }
57
+ elseif ($bytes == 1)
58
+ {
59
+ $bytes = $bytes . ' byte';
60
+ }
61
+ else
62
+ {
63
+ $bytes = '0 bytes';
64
+ }
65
+
66
+ return $bytes;
67
+ }
68
+
69
+ //define dirSize function
70
+ function dirSize($directory) {
71
+ $size = 0;
72
+ foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file){
73
+ $size+=$file->getSize();
74
+ }
75
+ return $size;
76
+ }
77
+
78
+ //load backup function
79
+ function backup() {
80
+ include_once 'includes/backup.php';
81
+ }
82
+ add_action('wp_ajax_backup', 'backup');
83
+
84
+ //load restore_path function
85
+ function restore_path() {
86
+ include_once 'includes/restore_from_path.php';
87
+ }
88
+ add_action('wp_ajax_restore_path', 'restore_path');
89
+
90
+ //load download function
91
+ function download() {
92
+ if(glob(WPBACKITUP_DIRNAME . "/backups/*.zip")) {
93
+ foreach (glob(WPBACKITUP_DIRNAME . "/backups/*.zip") as $file) {
94
+ $filename = basename($file);
95
+ echo 'Download most recent export file: <a href="' .WPBACKITUP_URLPATH. '/backups/' .$filename .'">' .$filename .'</a>';
96
+ }
97
+ } else {
98
+ echo 'No export file available for download. Please create one.';
99
+ }
100
+ die();
101
+ }
102
+ add_action('wp_ajax_download', 'download');
103
+
104
+ //load logreader function
105
+ function logreader() {
106
+ $log = WPBACKITUP_DIRNAME .'/logs/status.log';
107
+ if(file_exists($log) ) {
108
+ readfile($log);
109
+ }
110
+ die();
111
+ }
112
+ add_action('wp_ajax_logreader', 'logreader');
113
+
114
+ //define create_dir function
115
+ if(!function_exists('create_dir')) {
116
+ function create_dir($dir) {
117
+ if( !is_dir($dir) ) {
118
+ @mkdir($dir, 0755);
119
+ }
120
+ return true;
121
+ }
122
+ }
123
+
124
+ //Define recusive_copy function
125
+ if(!function_exists('recursive_copy')) {
126
+ function recursive_copy($dir, $target_path, $ignore = array( 'cgi-bin','..','._' ) ) {
127
+ if( is_dir($dir) ) { //If the directory exists
128
+ if ($dh = opendir($dir) ) {
129
+ while(($file = readdir($dh)) !== false) { //While there are files in the directory
130
+ if ( !in_array($file, $ignore) && substr($file, 0, 1) != '.') { //Check the file is not in the ignore array
131
+ if (!is_dir( $dir.$file ) ) {
132
+ //Copy files to destination directory
133
+ $fsrc = fopen($dir .$file,'r');
134
+ $fdest = fopen($target_path .$file,'w+');
135
+ $len = stream_copy_to_stream($fsrc,$fdest);
136
+ fclose($fsrc);
137
+ fclose($fdest);
138
+ } else { //If $file is a directory
139
+ $destdir = $target_path .$file; //Modify the destination dir
140
+ if(!is_dir($destdir)) { //Create the destdir if it doesn't exist
141
+ @mkdir($destdir, 0755);
142
+ }
143
+ recursive_copy($dir .$file .'/', $target_path .$file .'/', $ignore);
144
+ }
145
+ }
146
+ }
147
+ closedir($dh);
148
+ }
149
+ }
150
+ return true;
151
+ }
152
+ }
153
+
154
+ //Define DB backup function
155
+ if(!function_exists('db_backup')) {
156
+ function db_backup($user, $pass, $host, $db_name, $path) {
157
+
158
+ //set fileName
159
+ $fileName = 'db-backup.sql' ;
160
+
161
+ // Check if directory is already created and has the proper permissions
162
+ if (!file_exists($path)) {
163
+ if(!mkdir($path , 0755) ){
164
+ return false;
165
+ }
166
+ }
167
+
168
+ if (!is_writable($path)) {
169
+ if (!chmod($path , 0755) ) {
170
+ return false;
171
+ }
172
+ }
173
+
174
+ $mysqli = new mysqli($host , $user , $pass , $db_name) ;
175
+ if (mysqli_connect_errno()) {
176
+ return false;
177
+ }
178
+
179
+ // Introduction information
180
+ $return = '';
181
+ $return .= "--\n";
182
+ $return .= "-- WP Backitup Database Backup \n";
183
+ $return .= "--\n";
184
+ $return .= '-- Created: ' . date("Y/m/d") . ' on ' . date("h:i") . "\n\n\n";
185
+ $return = "--\n";
186
+ $return .= "-- Database : " . $db_name . "\n";
187
+ $return .= "--\n";
188
+ $return .= "-- --------------------------------------------------\n";
189
+ $return .= "-- ---------------------------------------------------\n";
190
+ $return .= 'SET AUTOCOMMIT = 0 ;' ."\n" ;
191
+ $return .= 'SET FOREIGN_KEY_CHECKS=0 ;' ."\n" ;
192
+ $tables = array() ;
193
+
194
+ // Exploring what tables this database has
195
+ $result = $mysqli->query('SHOW TABLES' ) ;
196
+
197
+ // Cycle through "$result" and put content into an array
198
+ while ($row = $result->fetch_row()) {
199
+ $tables[] = $row[0] ;
200
+ }
201
+
202
+ // Cycle through each table
203
+ foreach($tables as $table) {
204
+ // Get content of each table
205
+ $result = $mysqli->query('SELECT * FROM '. $table) ;
206
+
207
+ // Get number of fields (columns) of each table
208
+ $num_fields = $mysqli->field_count ;
209
+
210
+ // Add table information
211
+ $return .= "--\n" ;
212
+ $return .= '-- Tabel structure for table `' . $table . '`' . "\n" ;
213
+ $return .= "--\n" ;
214
+ $return.= 'DROP TABLE IF EXISTS `'.$table.'`;' . "\n" ;
215
+
216
+ // Get the table-shema
217
+ $shema = $mysqli->query('SHOW CREATE TABLE '.$table) ;
218
+
219
+ // Extract table shema
220
+ $tableshema = $shema->fetch_row() ;
221
+
222
+ // Append table-shema into code
223
+ $return.= $tableshema[1].";" . "\n\n" ;
224
+
225
+ // Cycle through each table-row
226
+ while($rowdata = $result->fetch_row()) {
227
+
228
+ // Prepare code that will insert data into table
229
+ /* $return .= 'INSERT INTO `'.$table .'` VALUES ( ' ;
230
+ // Extract data of each row
231
+ for($i=0; $i<$num_fields; $i++) {
232
+ $return .= '"'.$rowdata[$i] . "\"," ;
233
+ }
234
+ // Let's remove the last comma
235
+ $return = substr("$return", 0, -1) ;
236
+ $return .= ");" ."\n" ;*/
237
+ $return.= 'INSERT INTO '.$table.' VALUES(';
238
+ for($j=0; $j<$num_fields; $j++){
239
+ $rowdata[$j] = addslashes($rowdata[$j]);
240
+ $rowdata[$j] = ereg_replace("\n","\\n",$rowdata[$j]);
241
+ if (isset($rowdata[$j])) {
242
+ $return.= '"'.$rowdata[$j].'"' ;
243
+ } else {
244
+ $return.= '""';
245
+ }
246
+ if ($j<($num_fields-1)) { $return.= ','; }
247
+ }
248
+ $return.= ");\n";
249
+ }
250
+ $return .= "\n\n" ;
251
+ }
252
+
253
+ // Close the connection
254
+ $mysqli->close() ;
255
+ $return .= 'SET FOREIGN_KEY_CHECKS = 1 ; ' . "\n" ;
256
+ $return .= 'COMMIT ; ' . "\n" ;
257
+ $return .= 'SET AUTOCOMMIT = 1 ; ' . "\n" ;
258
+
259
+ //save file
260
+ $handle = fopen($path . $fileName,'w+');
261
+ fwrite($handle,$return);
262
+ fclose($handle);
263
+ return true;
264
+ }
265
+ }
266
+
267
+ //Define the create_siteinfo function
268
+ if(!function_exists('create_siteinfo')) {
269
+ function create_siteinfo($path, $table_prefix) {
270
+ $siteinfo = $path ."backupsiteinfo.txt";
271
+ $handle = fopen($siteinfo, 'w+');
272
+ $entry = site_url( '/' ) ."\n$table_prefix";
273
+ fwrite($handle, $entry);
274
+ fclose($handle);
275
+ return true;
276
+ }
277
+ }
278
+
279
+ //Define recursive_delete function
280
+ if(!function_exists('recursive_delete')){
281
+ function recursive_delete($dir, $ignore = array('cgi-bin','.','..','._') ){
282
+ if( is_dir($dir) ){
283
+ if($dh = opendir($dir)) {
284
+ while( ($file = readdir($dh)) !== false ) {
285
+ if (!in_array($file, $ignore) && substr($file, 0, 1) != '.') { //Check the file is not in the ignore array
286
+ if(!is_dir($dir .'/'. $file)) {
287
+ unlink($dir .'/'. $file);
288
+ } else {
289
+ recursive_delete($dir.'/'. $file, $ignore);
290
+ }
291
+ }
292
+ }
293
+ }
294
+ @rmdir($dir);
295
+ closedir($dh);
296
+ }
297
+ return true;
298
+ }
299
+ }
300
+
301
+ //Define zip function
302
+ function zip($source, $destination, $ignore) {
303
+ if (is_string($source)) $source_arr = array($source); // convert it to array
304
+ if (!extension_loaded('zip')) {
305
+ return false;
306
+ }
307
+ $zip = new ZipArchive();
308
+ if (!$zip->open($destination, ZIPARCHIVE::CREATE)) {
309
+ return false;
310
+ }
311
+ foreach ($source_arr as $source) {
312
+ if (!file_exists($source)) continue;
313
+ $source = str_replace('\\', '/', realpath($source));
314
+ if (is_dir($source) === true) {
315
+ $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($source), RecursiveIteratorIterator::SELF_FIRST);
316
+ foreach ($files as $file) {
317
+ if (!preg_match($ignore, $file)) {
318
+ $file = str_replace('\\', '/', realpath($file));
319
+ if (is_dir($file) === true) {
320
+ $zip->addEmptyDir(str_replace($source . '/', '', $file . '/'));
321
+ } else if (is_file($file) === true) {
322
+ $zip->addFromString(str_replace($source . '/', '', $file), file_get_contents($file));
323
+ }
324
+ }
325
+ }
326
+ } else if (is_file($source) === true) {
327
+ $zip->addFromString(basename($source), file_get_contents($source));
328
+ }
329
+ }
330
+ return $zip->close();
331
+ }
332
+
333
+ //load presstrends
334
+ function load_presstrends() {
335
+ global $WPBackitup;
336
+ if($WPBackitup->get_option( 'presstrends' ) == 'enabled') {
337
+ // PressTrends Account API Key
338
+ $api_key = 'rwiyhqfp7eioeh62h6t3ulvcghn2q8cr7j5x';
339
+ $auth = 'lpa0nvlhyzbyikkwizk4navhtoaqujrbw';
340
+
341
+ // Start of Metrics
342
+ global $wpdb;
343
+ $data = get_transient( 'presstrends_cache_data' );
344
+ if ( !$data || $data == '' ) {
345
+ $api_base = 'http://api.presstrends.io/index.php/api/pluginsites/update/auth/';
346
+ $url = $api_base . $auth . '/api/' . $api_key . '/';
347
+
348
+ $count_posts = wp_count_posts();
349
+ $count_pages = wp_count_posts( 'page' );
350
+ $comments_count = wp_count_comments();
351
+
352
+ // wp_get_theme was introduced in 3.4, for compatibility with older versions, let's do a workaround for now.
353
+ if ( function_exists( 'wp_get_theme' ) ) {
354
+ $theme_data = wp_get_theme();
355
+ $theme_name = urlencode( $theme_data->Name );
356
+ } else {
357
+ $theme_data = get_theme_data( get_stylesheet_directory() . '/style.css' );
358
+ $theme_name = $theme_data['Name'];
359
+ }
360
+
361
+ $plugin_name = '&';
362
+ foreach ( get_plugins() as $plugin_info ) {
363
+ $plugin_name .= $plugin_info['Name'] . '&';
364
+ }
365
+ // CHANGE __FILE__ PATH IF LOCATED OUTSIDE MAIN PLUGIN FILE
366
+ $plugin_data = get_plugin_data( __FILE__ );
367
+ $posts_with_comments = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->posts WHERE post_type='post' AND comment_count > 0" );
368
+ $data = array(
369
+ 'url' => stripslashes( str_replace( array( 'http://', '/', ':' ), '', site_url() ) ),
370
+ 'posts' => $count_posts->publish,
371
+ 'pages' => $count_pages->publish,
372
+ 'comments' => $comments_count->total_comments,
373
+ 'approved' => $comments_count->approved,
374
+ 'spam' => $comments_count->spam,
375
+ 'pingbacks' => $wpdb->get_var( "SELECT COUNT(comment_ID) FROM $wpdb->comments WHERE comment_type = 'pingback'" ),
376
+ 'post_conversion' => ( $count_posts->publish > 0 && $posts_with_comments > 0 ) ? number_format( ( $posts_with_comments / $count_posts->publish ) * 100, 0, '.', '' ) : 0,
377
+ 'theme_version' => $plugin_data['Version'],
378
+ 'theme_name' => $theme_name,
379
+ 'site_name' => str_replace( ' ', '', get_bloginfo( 'name' ) ),
380
+ 'plugins' => count( get_option( 'active_plugins' ) ),
381
+ 'plugin' => urlencode( $plugin_name ),
382
+ 'wpversion' => get_bloginfo( 'version' ),
383
+ );
384
+
385
+ foreach ( $data as $k => $v ) {
386
+ $url .= $k . '/' . $v . '/';
387
+ }
388
+ wp_remote_get( $url );
389
+ set_transient( 'presstrends_cache_data', $data, 60 * 60 * 24 );
390
+ }
391
+ }
392
+ }
393
+ // PressTrends WordPress Action
394
+ add_action('admin_init', 'load_presstrends');
lib/includes/recurse_zip.php CHANGED
@@ -1 +1 @@
1
- <?php
2
  * WP Backitup Recurse Zip Function
3
  *
4
  * @package WP Backitup
5
  *
6
  * @author jcpeden
7
  * @version 1.4.0
8
  * @since 1.0.1
9
  */
 
10
  * WP Backitup Recurse Zip Function
11
  *
12
  * @package WP Backitup
13
  *
14
  * @author jcpeden
15
  * @version 1.4.0
16
  * @since 1.0.1
17
  */
 
1
  * WP Backitup Recurse Zip Function
2
  *
3
  * @package WP Backitup
4
  *
5
  * @author jcpeden
6
  * @version 1.4.0
7
  * @since 1.0.1
8
  */
9
+ <?php
10
  * WP Backitup Recurse Zip Function
11
  *
12
  * @package WP Backitup
13
  *
14
  * @author jcpeden
15
  * @version 1.4.0
16
  * @since 1.0.1
17
  */
logs/status.log CHANGED
@@ -1 +1 @@
1
- <div class="prerequisites">1</div><div class="backupdb">1</div><div class="backupfiles">1</div><div class="infofile">1</div><div class="zipfile">1</div><div class="cleanup">1</div><div class="finalinfo">1</div>
1
+ <div class="upload">1</div><div class="unzipping">1</div><div class="validation">1</div><div class="restore_point">1</div><div class="database">1</div><div class="wpcontent">1</div><div class="cleanup">1</div><div class="finalinfo">1</div>
readme.txt CHANGED
@@ -1,204 +1,210 @@
1
- === WP Backitup ===
2
- Contributors: jcpeden
3
- Donate link: http://www.wpbackitup.com
4
- Tags: backup wordpress, database backup, backup database, download database, backup and restore, restoring wordpress, restore wordpress, restore wordpress backup,
5
- Requires at least: 3.4.2
6
- Tested up to: 3.6.0
7
- Stable tag: 1.4.2
8
- License: GPLv2 or later
9
- License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
-
11
- Create a backup zip of your content and settings with a single click that can be used to restore your site quickly and easily.
12
-
13
- == Description ==
14
-
15
- = The Simple Way to Backup Your Site =
16
- WP Backitup creates a backup zip of your site&apos;s content and configuration in just a single click,
17
- right from your Wordpress dashboard. There is no need to FTP into your site and no knowledge of MySQL or PHPMyAdmin is required.
18
-
19
- You can use your backup zip to restore your site or to clone a site&apos;s content and settings when setting up a new one.
20
-
21
- = Automatically Restore Your Backup Zips =
22
- Tired of messing around in PHPMyAdmin and with FTP trying to restore you backups? <a href="http://www.wpbackitup.com/wp-backitup-pro/" title="WP Backitup">WP Backitup Pro</a> offers all the features of <a href="http://wordpress.org/extend/plugins/wp-backitup/" title="WP Backitup Lite">WP Backitup</a> but allows you to import your backup zips in seconds, right from the Wordpress Dashboard.
23
-
24
- = Easy To Install and Use =
25
- Simply install the plugin directly to Wordpress and browse to the new menu 'WP Backitup'. From there, just follow the on-screen instructions and watch as WP Backitup creates a backup of you site's plugins, themes and uploads as well as you content and settings (including all custom widgets and settings for any additional plugins).
26
-
27
- = More questions? =
28
- Why not head over to the <a href="http://www.wpbackitup.com/" title="WP Backitup">WP Backitup site</a>?
29
-
30
- == Installation ==
31
-
32
- Installation of the plugin is straightforward:
33
-
34
- 1. Upload the plugin to your plugins directory via FTP or through the Wordpress dashboard.
35
- 1. Activate the plugin.
36
- 1. A new menu called 'WP Backitup' will be added to your toolbar.
37
- 1. Click 'WP Backitup' to access the backup/restore interface.
38
-
39
- == Frequently Asked Questions ==
40
-
41
- = Can I manually restore my backup zips? =
42
- Sure! The backup zips generated by WP Backitup contain a database dump and a copy of your wp-content directory. Simply upload your files and import your database.
43
-
44
- = Is there an easier way to restore my backup zips? =
45
- Yes, purchase and download <a href="http://www.wpbackitup.com/wp-backitup-pro/" title="WP Backitup">WP Backitup</a>. Once installed, you'll be able to restore you backup zips without FTP or MySQL.
46
-
47
- = Will the plugin work on shared hosting/sub domains/webhost xxx? =
48
- Yes.
49
-
50
- = Will WP Backitup work on Windows hosting? =
51
- Yes.
52
-
53
- = Are you going to be makinggress bars both for backing up and restoring with this plugin? =
54
- It is likely this will feature in a new version of WP Backitup.
55
-
56
- = Can this plugin back to Amazon S3? =
57
- This will feature in an upcoming version of WP Backitup.
58
-
59
- = Is there an auto back up schedule feature? =
60
- It is likely this will feature in a new version of WP Backitup.
61
-
62
- = Will the plugin work with Wordpres version x.x? =
63
- The plugin works on the latest release of WordPress and is updated to function with all new releases.
64
-
65
- = Can this backup one version of WordPress to a different version? =
66
- No. It is absolutely critical that your WordPress versions are exactly the same.
67
-
68
- = Will WP Backitup work on WordPress Multisite? =
69
- WP Backitup cannot yet backup/restore entire networks but it is compatible with WPMS sites.
70
-
71
- = Does the plugin copy the database details as well? =
72
- Yes, a database dump is created with each backup.
73
-
74
- = Can I make a basic WordPress site, with all my desired plugins and settings, make a few pages, setup permalinks, remove all the default junk and load in a basic themplate? =
75
- Yes. WP Backitup can be used to create a good starting point for any and all sites you work on.
76
-
77
- = Does WP Backitup need to be installed? =
78
- Yes. You must install the WP Backitup plugin on the site you wish to backup and the site you wish to restore to. Its just a simple plugin.
79
-
80
- = Does WP Backitup backup plugins settings or just the plugins themselves? =
81
- WP Backitup creates a database dump and a backup of all your themes, plugins and uploads.
82
-
83
- = Do you have any ideas about how large a blog is too big for WP Backitup to handle? =
84
- I`ve tested up to 5 themes, 20 plugins and 100 posts/pages without any issues.
85
-
86
- = Do you do regularly update thisduct to match with WP version updates? =
87
- Yes.
88
-
89
- == Screenshots ==
90
- 1. Once activated, the plugin loads a new menu into your toolbar.
91
- 2. Simply click 'Backup' to generate a backup of your site. The plugin will update you on itsgress.
92
- 3. When the backup has been created, click the download link to access a zipped backup of your site.
93
-
94
- == Changelog ==
95
-
96
- = 1.4.2 =
97
- Changed DB backup method to work on shared hosting.
98
-
99
- = 1.4.1 =
100
- Setup alert if DB is 0 bytes.
101
-
102
- = 1.4.0 =
103
- Fixed status reporting for backup/restore process and built-in localization.
104
-
105
- = 1.3.0 =
106
- Recommended upgrade: Amalgameted lite and pro versions of the plugin.
107
-
108
- = 1.2.2 =
109
- Major updates to improve plugin performance and stability.
110
-
111
- = 1.2.1 =
112
- Minor updates to plugin functionality.
113
-
114
- = 1.2.0 =
115
- Brought versioning inline with WP Backitup Lite. Fixed incorrecy message on restore interface. Fixed restorationcess.
116
-
117
- = 1.1.0 =
118
- Backup from mysqldump, restore from mysql command line, restore functionality from uploaded files, file size limit check according to server before uploads, setInterval termination after operation, status update as the task completes using XML.
119
-
120
- = 1.0.9 =
121
- Introduced mysqldump for backup and shell exec for copy/delete operations.
122
-
123
- = 1.0.8 =
124
- Added ability to restore from server.
125
-
126
- = 1.0.7 =
127
- Improved auto-update facility and plugin stability.
128
-
129
- = 1.0.6 =
130
- Fixed critical issues the auto-upgradecess.
131
-
132
- = 1.0.5 =
133
- Fixed critical issues the auto-upgradecess.
134
-
135
- = 1.0.4 =
136
- Fixed issues with the restorationcess.
137
-
138
- = 1.0.3 =
139
- Fixed the auto-update engine and license key activation system.
140
-
141
- = 1.0.2 =
142
- Minor bugs patched for auto-update engine.
143
-
144
- = 1.0.1 =
145
- WP Backitup integrated with licensing and auto-update engine.
146
-
147
- = 1.0.0 =
148
- Initial version of the plugin released.
149
-
150
- == Upgrade Notice ==
151
-
152
- = 1.4.2 =
153
- Recommended upgrade: Many people on shared hosting will now be able to backup their database.
154
-
155
- = 1.4.1 =
156
- Recommended upgrade: Backitup will now alert and halt if your database is 0 bytes on backup.
157
-
158
- = 1.4.0 =
159
- Recommended upgrade: Fixed status reporting for backup/restore process and built-in localization.
160
-
161
- = 1.3.0 =
162
- Recommended upgrade: Amalgameted lite and pro versions of the plugin
163
-
164
- = 1.2.2 =
165
- Critical upgrade: Major overhaul of plugin structure
166
-
167
- = 1.2.1 =
168
- Recommended upgrade: Minor update to plugin structure.
169
-
170
- = 1.2.0 =
171
- Recommended upgrade: Minor update to plugin structure.
172
-
173
- = 1.1.0 =
174
- Critical upgrade: Improved plugin performance.
175
-
176
- = 1.0.9 =
177
- Recommended upgrade: Improved reliability and performance.
178
-
179
- = 1.0.8 =
180
- Recommended upgrade: Improved functionality
181
-
182
- = 1.0.7 =
183
- Critical upgrade: Fixed major bugs with auto-upgradecess.
184
-
185
- = 1.0.6 =
186
- Critical upgrade: Fixed major bugs with auto-upgradecess.
187
-
188
- = 1.0.5 =
189
- Critical upgrade: Fixed major bugs with auto-upgradecess.
190
-
191
- = 1.0.4 =
192
- Critical upgrade: Fixed major bugs with restorationcess.
193
-
194
- = 1.0.3 =
195
- Critical upgrade: Patched auto-update engine.
196
-
197
- = 1.0.2 =
198
- Non-critical upgrade: Patched auto-update engine.
199
-
200
- = 1.0.1 =
201
- Recommended upgrade: Added the licensing and auto-update engine.
202
-
203
- = 1.0.0 =
 
 
 
 
 
 
204
  Initial version of the plugin.
1
+ === WP Backitup ===
2
+ Contributors: jcpeden, tarunk
3
+ Donate link: http://www.wpbackitup.com
4
+ Tags: backup wordpress, database backup, backup database, download database, backup and restore, restoring wordpress, restore wordpress, restore wordpress backup,
5
+ Requires at least: 3.4.2
6
+ Tested up to: 3.6.1
7
+ Stable tag: 1.5.0
8
+ License: GPLv2 or later
9
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
+
11
+ Create a backup zip of your content and settings with a single click that can be used to restore your site quickly and easily.
12
+
13
+ == Description ==
14
+
15
+ = The Simple Way to Backup Your Site =
16
+ WP Backitup creates a backup zip of your site&apos;s content and configuration in just a single click,
17
+ right from your Wordpress dashboard. There is no need to FTP into your site and no knowledge of MySQL or PHPMyAdmin is required.
18
+
19
+ You can use your backup zip to restore your site or to clone a site&apos;s content and settings when setting up a new one.
20
+
21
+ = Automatically Restore Your Backup Zips =
22
+ Tired of messing around in PHPMyAdmin and with FTP trying to restore you backups? <a href="http://www.wpbackitup.com/wp-backitup-pro/" title="WP Backitup">WP Backitup Pro</a> offers all the features of <a href="http://wordpress.org/extend/plugins/wp-backitup/" title="WP Backitup Lite">WP Backitup</a> but allows you to import your backup zips in seconds, right from the Wordpress Dashboard.
23
+
24
+ = Easy To Install and Use =
25
+ Simply install the plugin directly to Wordpress and browse to the new menu 'WP Backitup'. From there, just follow the on-screen instructions and watch as WP Backitup creates a backup of you site's plugins, themes and uploads as well as you content and settings (including all custom widgets and settings for any additional plugins).
26
+
27
+ = More questions? =
28
+ Why not head over to the <a href="http://www.wpbackitup.com/" title="WP Backitup">WP Backitup site</a>?
29
+
30
+ == Installation ==
31
+
32
+ Installation of the plugin is straightforward:
33
+
34
+ 1. Upload the plugin to your plugins directory via FTP or through the Wordpress dashboard.
35
+ 1. Activate the plugin.
36
+ 1. A new menu called 'WP Backitup' will be added to your toolbar.
37
+ 1. Click 'WP Backitup' to access the backup/restore interface.
38
+
39
+ == Frequently Asked Questions ==
40
+
41
+ = Can I manually restore my backup zips? =
42
+ Sure! The backup zips generated by WP Backitup contain a database dump and a copy of your wp-content directory. Simply upload your files and import your database.
43
+
44
+ = Is there an easier way to restore my backup zips? =
45
+ Yes, purchase and download <a href="http://www.wpbackitup.com/wp-backitup-pro/" title="WP Backitup">WP Backitup</a>. Once installed, you'll be able to restore you backup zips without FTP or MySQL.
46
+
47
+ = Will the plugin work on shared hosting/sub domains/webhost xxx? =
48
+ Yes.
49
+
50
+ = Will WP Backitup work on Windows hosting? =
51
+ Yes.
52
+
53
+ = Are you going to be makinggress bars both for backing up and restoring with this plugin? =
54
+ It is likely this will feature in a new version of WP Backitup.
55
+
56
+ = Can this plugin back to Amazon S3? =
57
+ This will feature in an upcoming version of WP Backitup.
58
+
59
+ = Is there an auto back up schedule feature? =
60
+ It is likely this will feature in a new version of WP Backitup.
61
+
62
+ = Will the plugin work with Wordpres version x.x? =
63
+ The plugin works on the latest release of WordPress and is updated to function with all new releases.
64
+
65
+ = Can this backup one version of WordPress to a different version? =
66
+ No. It is absolutely critical that your WordPress versions are exactly the same.
67
+
68
+ = Will WP Backitup work on WordPress Multisite? =
69
+ WP Backitup cannot yet backup/restore entire networks but it is compatible with WPMS sites.
70
+
71
+ = Does the plugin copy the database details as well? =
72
+ Yes, a database dump is created with each backup.
73
+
74
+ = Can I make a basic WordPress site, with all my desired plugins and settings, make a few pages, setup permalinks, remove all the default junk and load in a basic themplate? =
75
+ Yes. WP Backitup can be used to create a good starting point for any and all sites you work on.
76
+
77
+ = Does WP Backitup need to be installed? =
78
+ Yes. You must install the WP Backitup plugin on the site you wish to backup and the site you wish to restore to. Its just a simple plugin.
79
+
80
+ = Does WP Backitup backup plugins settings or just the plugins themselves? =
81
+ WP Backitup creates a database dump and a backup of all your themes, plugins and uploads.
82
+
83
+ = Do you have any ideas about how large a blog is too big for WP Backitup to handle? =
84
+ I`ve tested up to 5 themes, 20 plugins and 100 posts/pages without any issues.
85
+
86
+ = Do you do regularly update thisduct to match with WP version updates? =
87
+ Yes.
88
+
89
+ == Screenshots ==
90
+ 1. Once activated, the plugin loads a new menu into your toolbar.
91
+ 2. Simply click 'Backup' to generate a backup of your site. The plugin will update you on itsgress.
92
+ 3. When the backup has been created, click the download link to access a zipped backup of your site.
93
+
94
+ == Changelog ==
95
+
96
+ = 1.5.0 =
97
+ Changed DB Export and import method to work on all hosting.
98
+
99
+ = 1.4.2 =
100
+ Changed DB backup method to work on shared hosting.
101
+
102
+ = 1.4.1 =
103
+ Setup alert if DB is 0 bytes.
104
+
105
+ = 1.4.0 =
106
+ Fixed status reporting for backup/restore process and built-in localization.
107
+
108
+ = 1.3.0 =
109
+ Recommended upgrade: Amalgameted lite and pro versions of the plugin.
110
+
111
+ = 1.2.2 =
112
+ Major updates to improve plugin performance and stability.
113
+
114
+ = 1.2.1 =
115
+ Minor updates to plugin functionality.
116
+
117
+ = 1.2.0 =
118
+ Brought versioning inline with WP Backitup Lite. Fixed incorrecy message on restore interface. Fixed restorationcess.
119
+
120
+ = 1.1.0 =
121
+ Backup from mysqldump, restore from mysql command line, restore functionality from uploaded files, file size limit check according to server before uploads, setInterval termination after operation, status update as the task completes using XML.
122
+
123
+ = 1.0.9 =
124
+ Introduced mysqldump for backup and shell exec for copy/delete operations.
125
+
126
+ = 1.0.8 =
127
+ Added ability to restore from server.
128
+
129
+ = 1.0.7 =
130
+ Improved auto-update facility and plugin stability.
131
+
132
+ = 1.0.6 =
133
+ Fixed critical issues the auto-upgradecess.
134
+
135
+ = 1.0.5 =
136
+ Fixed critical issues the auto-upgradecess.
137
+
138
+ = 1.0.4 =
139
+ Fixed issues with the restorationcess.
140
+
141
+ = 1.0.3 =
142
+ Fixed the auto-update engine and license key activation system.
143
+
144
+ = 1.0.2 =
145
+ Minor bugs patched for auto-update engine.
146
+
147
+ = 1.0.1 =
148
+ WP Backitup integrated with licensing and auto-update engine.
149
+
150
+ = 1.0.0 =
151
+ Initial version of the plugin released.
152
+
153
+ == Upgrade Notice ==
154
+
155
+ = 1.5.0 =
156
+ Critical upgrade: Fixes to backup and import processes to work on a wider range of hosts.
157
+
158
+ = 1.4.2 =
159
+ Recommended upgrade: Many people on shared hosting will now be able to backup their database.
160
+
161
+ = 1.4.1 =
162
+ Recommended upgrade: Backitup will now alert and halt if your database is 0 bytes on backup.
163
+
164
+ = 1.4.0 =
165
+ Recommended upgrade: Fixed status reporting for backup/restore process and built-in localization.
166
+
167
+ = 1.3.0 =
168
+ Recommended upgrade: Amalgameted lite and pro versions of the plugin
169
+
170
+ = 1.2.2 =
171
+ Critical upgrade: Major overhaul of plugin structure
172
+
173
+ = 1.2.1 =
174
+ Recommended upgrade: Minor update to plugin structure.
175
+
176
+ = 1.2.0 =
177
+ Recommended upgrade: Minor update to plugin structure.
178
+
179
+ = 1.1.0 =
180
+ Critical upgrade: Improved plugin performance.
181
+
182
+ = 1.0.9 =
183
+ Recommended upgrade: Improved reliability and performance.
184
+
185
+ = 1.0.8 =
186
+ Recommended upgrade: Improved functionality
187
+
188
+ = 1.0.7 =
189
+ Critical upgrade: Fixed major bugs with auto-upgradecess.
190
+
191
+ = 1.0.6 =
192
+ Critical upgrade: Fixed major bugs with auto-upgradecess.
193
+
194
+ = 1.0.5 =
195
+ Critical upgrade: Fixed major bugs with auto-upgradecess.
196
+
197
+ = 1.0.4 =
198
+ Critical upgrade: Fixed major bugs with restorationcess.
199
+
200
+ = 1.0.3 =
201
+ Critical upgrade: Patched auto-update engine.
202
+
203
+ = 1.0.2 =
204
+ Non-critical upgrade: Patched auto-update engine.
205
+
206
+ = 1.0.1 =
207
+ Recommended upgrade: Added the licensing and auto-update engine.
208
+
209
+ = 1.0.0 =
210
  Initial version of the plugin.