Version Description
Download this release
Release Info
| Developer | mattheu |
| Plugin | |
| Version | 1.3.1 |
| Comparing to | |
| See all releases | |
Code changes from version 1.3 to 1.3.1
- .gitignore +1 -0
- admin.backups-table.php +1 -1
- backup.files.fallback.functions.php +0 -51
- backup.files.functions.php +0 -238
- backup.functions.php +0 -225
- backup.mysql.fallback.functions.php +0 -260
- backup.mysql.functions.php +0 -92
- core.functions.php +0 -603
- functions/backup.functions.php +3 -0
- hmbkp.css +0 -21
- hmbkp.js +0 -53
- icon_backupwordpress_16x16.png +0 -0
- icon_backupwordpress_16x16_hover.png +0 -0
- icon_backupwordpress_32x32.png +0 -0
- interface.functions.php +0 -151
- plugin.php +13 -2
- readme.txt +5 -1
.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
| 1 |
+
.svn
|
admin.backups-table.php
CHANGED
|
@@ -5,7 +5,7 @@ if ( !hmbkp_is_in_progress() )
|
|
| 5 |
hmbkp_delete_old_backups();
|
| 6 |
|
| 7 |
$backup_archives = hmbkp_get_backups();
|
| 8 |
-
if ( count( $backup_archives ) ) : ?>
|
| 9 |
|
| 10 |
<table class="widefat" id="hmbkp_manage_backups_table">
|
| 11 |
<thead>
|
| 5 |
hmbkp_delete_old_backups();
|
| 6 |
|
| 7 |
$backup_archives = hmbkp_get_backups();
|
| 8 |
+
if ( $backup_archives && count( $backup_archives ) ) : ?>
|
| 9 |
|
| 10 |
<table class="widefat" id="hmbkp_manage_backups_table">
|
| 11 |
<thead>
|
backup.files.fallback.functions.php
DELETED
|
@@ -1,51 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Fallback for creating zip archive if zip command is
|
| 5 |
-
* unnavailable.
|
| 6 |
-
*
|
| 7 |
-
* Uses the PCLZIP library that ships with WordPress
|
| 8 |
-
*
|
| 9 |
-
* @todo support zipArchive
|
| 10 |
-
* @param string $path
|
| 11 |
-
*/
|
| 12 |
-
function hmbkp_archive_files_fallback( $path ) {
|
| 13 |
-
|
| 14 |
-
require_once( ABSPATH . 'wp-admin/includes/class-pclzip.php' );
|
| 15 |
-
|
| 16 |
-
$archive = new PclZip( $path );
|
| 17 |
-
|
| 18 |
-
// Zip up everything
|
| 19 |
-
if ( ( defined( 'HMBKP_DATABASE_ONLY' ) && !HMBKP_DATABASE_ONLY ) || !defined( 'HMBKP_DATABASE_ONLY' ) )
|
| 20 |
-
$archive->create( ABSPATH, PCLZIP_OPT_REMOVE_PATH, ABSPATH, PCLZIP_CB_PRE_ADD, 'hmbkp_pclzip_exclude' );
|
| 21 |
-
|
| 22 |
-
// Only zip up the database
|
| 23 |
-
if ( defined( 'HMBKP_DATABASE_ONLY' ) && HMBKP_DATABASE_ONLY )
|
| 24 |
-
$archive->create( hmbkp_path() . '/database_' . DB_NAME . '.sql', PCLZIP_OPT_REMOVE_PATH, hmbkp_path() );
|
| 25 |
-
|
| 26 |
-
}
|
| 27 |
-
|
| 28 |
-
/**
|
| 29 |
-
* Add file callback, excludes files in the backups directory
|
| 30 |
-
* and sets the database dump to be stored in the root
|
| 31 |
-
* of the zip
|
| 32 |
-
*
|
| 33 |
-
* @param string $event
|
| 34 |
-
* @param array &$file
|
| 35 |
-
* @return bool
|
| 36 |
-
*/
|
| 37 |
-
function hmbkp_pclzip_exclude( $event, &$file ) {
|
| 38 |
-
|
| 39 |
-
$excludes = hmbkp_exclude_string( 'pclzip' );
|
| 40 |
-
|
| 41 |
-
// Include the database file
|
| 42 |
-
if ( strpos( $file['filename'], 'database_' . DB_NAME . '.sql' ) !== false )
|
| 43 |
-
$file['stored_filename'] = 'database_' . DB_NAME . '.sql';
|
| 44 |
-
|
| 45 |
-
// Match everything else past the exclude list
|
| 46 |
-
elseif ( preg_match( '(' . $excludes . ')', $file['stored_filename'] ) )
|
| 47 |
-
return false;
|
| 48 |
-
|
| 49 |
-
return true;
|
| 50 |
-
|
| 51 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
backup.files.functions.php
DELETED
|
@@ -1,238 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Zip up all the wordpress files.
|
| 5 |
-
*
|
| 6 |
-
* Attempts to use the shell zip command, if
|
| 7 |
-
* thats not available then it fallsback on
|
| 8 |
-
* PHP zip classes.
|
| 9 |
-
*
|
| 10 |
-
* @param string $path
|
| 11 |
-
*/
|
| 12 |
-
function hmbkp_archive_files( $path ) {
|
| 13 |
-
|
| 14 |
-
// Do we have the path to the zip command
|
| 15 |
-
if ( hmbkp_zip_path() ) :
|
| 16 |
-
|
| 17 |
-
// Zip up ABSPATH
|
| 18 |
-
if ( ( defined( 'HMBKP_DATABASE_ONLY' ) && !HMBKP_DATABASE_ONLY ) || !defined( 'HMBKP_DATABASE_ONLY' ) ) :
|
| 19 |
-
|
| 20 |
-
$excludes = ' -x ' . hmbkp_exclude_string( 'zip' );
|
| 21 |
-
|
| 22 |
-
shell_exec( 'cd ' . escapeshellarg( ABSPATH ) . ' && ' . escapeshellarg( hmbkp_zip_path() ) . ' -rq ' . escapeshellarg( $path ) . ' ./' . $excludes );
|
| 23 |
-
|
| 24 |
-
endif;
|
| 25 |
-
|
| 26 |
-
// Add the database dump to the archive
|
| 27 |
-
if ( ( defined( 'HMBKP_FILES_ONLY' ) && !HMBKP_FILES_ONLY ) || !defined( 'HMBKP_FILES_ONLY' ) ) :
|
| 28 |
-
shell_exec( 'cd ' . escapeshellarg( hmbkp_path() ) . ' && ' . escapeshellarg( hmbkp_zip_path() ) . ' -uq ' . escapeshellarg( $path ) . ' ' . escapeshellarg( 'database_' . DB_NAME . '.sql' ) );
|
| 29 |
-
endif;
|
| 30 |
-
|
| 31 |
-
// If not use the fallback
|
| 32 |
-
else :
|
| 33 |
-
hmbkp_archive_files_fallback( $path );
|
| 34 |
-
|
| 35 |
-
endif;
|
| 36 |
-
|
| 37 |
-
}
|
| 38 |
-
|
| 39 |
-
/**
|
| 40 |
-
* Attempt to work out the path to the zip command
|
| 41 |
-
*
|
| 42 |
-
* Can be overridden by defining HMBKP_ZIP_PATH in
|
| 43 |
-
* wp-config.php.
|
| 44 |
-
*
|
| 45 |
-
* @return string $path on success, empty string on failure
|
| 46 |
-
*/
|
| 47 |
-
function hmbkp_zip_path() {
|
| 48 |
-
|
| 49 |
-
if ( !hmbkp_shell_exec_available() || ( defined( 'HMBKP_ZIP_PATH' ) && !HMBKP_ZIP_PATH ) )
|
| 50 |
-
return false;
|
| 51 |
-
|
| 52 |
-
$path = '';
|
| 53 |
-
|
| 54 |
-
// List of possible zip locations
|
| 55 |
-
$zip_locations = array(
|
| 56 |
-
'zip',
|
| 57 |
-
'/usr/bin/zip'
|
| 58 |
-
);
|
| 59 |
-
|
| 60 |
-
// Allow the path to be overridden
|
| 61 |
-
if ( defined( 'HMBKP_ZIP_PATH' ) && HMBKP_ZIP_PATH )
|
| 62 |
-
array_unshift( $zip_locations, HMBKP_ZIP_PATH );
|
| 63 |
-
|
| 64 |
-
// If we don't have a path set
|
| 65 |
-
if ( !$path = get_option( 'hmbkp_zip_path' ) ) :
|
| 66 |
-
|
| 67 |
-
// Try to find out where zip is
|
| 68 |
-
foreach ( $zip_locations as $location )
|
| 69 |
-
if ( shell_exec( 'which ' . $location ) )
|
| 70 |
-
$path = $location;
|
| 71 |
-
|
| 72 |
-
// Save it for later
|
| 73 |
-
if ( $path )
|
| 74 |
-
update_option( 'hmbkp_zip_path', $path );
|
| 75 |
-
|
| 76 |
-
endif;
|
| 77 |
-
|
| 78 |
-
// Check again in-case the saved path has stopped working for some reason
|
| 79 |
-
if ( $path && !shell_exec( 'which ' . $path ) ) :
|
| 80 |
-
delete_option( 'hmbkp_zip_path' );
|
| 81 |
-
return hmbkp_zip_path();
|
| 82 |
-
|
| 83 |
-
endif;
|
| 84 |
-
|
| 85 |
-
return $path;
|
| 86 |
-
|
| 87 |
-
}
|
| 88 |
-
|
| 89 |
-
/**
|
| 90 |
-
* Returns an array of default exclude paths
|
| 91 |
-
*
|
| 92 |
-
* @access public
|
| 93 |
-
* @return array
|
| 94 |
-
*/
|
| 95 |
-
function hmbkp_excludes() {
|
| 96 |
-
|
| 97 |
-
// Exclude the back up path
|
| 98 |
-
$excludes[] = hmbkp_path();
|
| 99 |
-
|
| 100 |
-
// Exclude the default back up path
|
| 101 |
-
$excludes[] = hmbkp_path_default();
|
| 102 |
-
|
| 103 |
-
// Exclude the custom path if one is defined
|
| 104 |
-
if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH )
|
| 105 |
-
$excludes[] = hmbkp_conform_dir( HMBKP_PATH );
|
| 106 |
-
|
| 107 |
-
return array_map( 'trailingslashit', array_unique( $excludes ) );
|
| 108 |
-
|
| 109 |
-
}
|
| 110 |
-
|
| 111 |
-
/**
|
| 112 |
-
* Generate the exclude param string for the zip backup
|
| 113 |
-
*
|
| 114 |
-
* Takes the exclude rules and formats them for use with either
|
| 115 |
-
* the shell zip command or pclzip
|
| 116 |
-
*
|
| 117 |
-
* @param string $context. (default: 'zip')
|
| 118 |
-
* @return string
|
| 119 |
-
*/
|
| 120 |
-
function hmbkp_exclude_string( $context = 'zip' ) {
|
| 121 |
-
|
| 122 |
-
// Return a comma separated list by default
|
| 123 |
-
$separator = ', ';
|
| 124 |
-
$wildcard = '';
|
| 125 |
-
|
| 126 |
-
// The zip command
|
| 127 |
-
if ( $context == 'zip' ) :
|
| 128 |
-
$wildcard = '*';
|
| 129 |
-
$separator = ' -x ';
|
| 130 |
-
|
| 131 |
-
// The PCLZIP fallback library
|
| 132 |
-
elseif ( $context == 'pclzip' ) :
|
| 133 |
-
$wildcard = '([.]*?)';
|
| 134 |
-
$separator = '|';
|
| 135 |
-
|
| 136 |
-
endif;
|
| 137 |
-
|
| 138 |
-
// Get the excludes
|
| 139 |
-
$excludes = hmbkp_excludes();
|
| 140 |
-
|
| 141 |
-
// Add any defined excludes
|
| 142 |
-
if ( defined( 'HMBKP_EXCLUDE' ) && HMBKP_EXCLUDE )
|
| 143 |
-
$excludes = array_merge( explode( ',', HMBKP_EXCLUDE ), $excludes );
|
| 144 |
-
|
| 145 |
-
$excludes = array_map( 'trim', $excludes );
|
| 146 |
-
|
| 147 |
-
// Add wildcards to the directories
|
| 148 |
-
foreach( $excludes as $key => &$rule ) :
|
| 149 |
-
|
| 150 |
-
$file = $absolute = $fragment = false;
|
| 151 |
-
|
| 152 |
-
// Files don't end with /
|
| 153 |
-
if ( !in_array( substr( $rule, -1 ), array( '\\', '/' ) ) )
|
| 154 |
-
$file = true;
|
| 155 |
-
|
| 156 |
-
// If rule starts with a / then treat as absolute path
|
| 157 |
-
elseif ( in_array( substr( $rule, 0, 1 ), array( '\\', '/' ) ) )
|
| 158 |
-
$absolute = true;
|
| 159 |
-
|
| 160 |
-
// Otherwise treat as dir fragment
|
| 161 |
-
else
|
| 162 |
-
$fragment = true;
|
| 163 |
-
|
| 164 |
-
// Strip ABSPATH and conform
|
| 165 |
-
$rule = str_replace( hmbkp_conform_dir( ABSPATH ), '', untrailingslashit( hmbkp_conform_dir( $rule ) ) );
|
| 166 |
-
|
| 167 |
-
if ( in_array( substr( $rule, 0, 1 ), array( '\\', '/' ) ) )
|
| 168 |
-
$rule = substr( $rule, 1 );
|
| 169 |
-
|
| 170 |
-
// Escape string for regex
|
| 171 |
-
if ( $context == 'pclzip' )
|
| 172 |
-
//$rule = preg_quote( $rule );
|
| 173 |
-
$rule = str_replace( '.', '\.', $rule );
|
| 174 |
-
|
| 175 |
-
// Convert any existing wildcards
|
| 176 |
-
if ( $wildcard != '*' && strpos( $rule, '*' ) !== false )
|
| 177 |
-
$rule = str_replace( '*', $wildcard, $rule );
|
| 178 |
-
|
| 179 |
-
// Wrap directory fragments in wildcards for zip
|
| 180 |
-
if ( $context == 'zip' && $fragment )
|
| 181 |
-
$rule = $wildcard . $rule . $wildcard;
|
| 182 |
-
|
| 183 |
-
// Add a wildcard to the end of absolute url for zips
|
| 184 |
-
if ( $context == 'zip' && $absolute )
|
| 185 |
-
$rule .= $wildcard;
|
| 186 |
-
|
| 187 |
-
// Add and end carrot to files for pclzip
|
| 188 |
-
if ( $file && $context == 'pclzip' )
|
| 189 |
-
$rule .= '$';
|
| 190 |
-
|
| 191 |
-
// Add a start carrot to absolute urls for pclzip
|
| 192 |
-
if ( $absolute && $context == 'pclzip' )
|
| 193 |
-
$rule = '^' . $rule;
|
| 194 |
-
|
| 195 |
-
endforeach;
|
| 196 |
-
|
| 197 |
-
// Escape shell args for zip command
|
| 198 |
-
if ( $context == 'zip' )
|
| 199 |
-
$excludes = array_map( 'escapeshellarg', $excludes );
|
| 200 |
-
|
| 201 |
-
return implode( $separator, $excludes );
|
| 202 |
-
|
| 203 |
-
}
|
| 204 |
-
|
| 205 |
-
/**
|
| 206 |
-
* Return an array of invalid custom exclude rules
|
| 207 |
-
*
|
| 208 |
-
* @return array
|
| 209 |
-
*/
|
| 210 |
-
function hmbkp_invalid_custom_excludes() {
|
| 211 |
-
|
| 212 |
-
$invalid_rules = array();
|
| 213 |
-
|
| 214 |
-
// Check if any absolute path excludes actually exist
|
| 215 |
-
if ( defined( 'HMBKP_EXCLUDE' ) && HMBKP_EXCLUDE )
|
| 216 |
-
foreach ( explode( ',', HMBKP_EXCLUDE ) as $rule )
|
| 217 |
-
if ( ( $rule = trim( $rule ) ) && in_array( substr( $rule, 0, 1 ), array( '/', '\\' ) ) && !file_exists( $rule ) && !file_exists( ABSPATH . $rule ) && !file_exists( trailingslashit( ABSPATH ) . $rule ) )
|
| 218 |
-
$invalid_rules[] = $rule;
|
| 219 |
-
|
| 220 |
-
return $invalid_rules;
|
| 221 |
-
|
| 222 |
-
}
|
| 223 |
-
|
| 224 |
-
/**
|
| 225 |
-
* Return an array of valid custom exclude rules
|
| 226 |
-
*
|
| 227 |
-
* @return array
|
| 228 |
-
*/
|
| 229 |
-
function hmbkp_valid_custom_excludes() {
|
| 230 |
-
|
| 231 |
-
$valid_rules = array();
|
| 232 |
-
|
| 233 |
-
if ( defined( 'HMBKP_EXCLUDE' ) && HMBKP_EXCLUDE )
|
| 234 |
-
$valid_rules = array_diff( explode( ',', HMBKP_EXCLUDE ), hmbkp_invalid_custom_excludes() );
|
| 235 |
-
|
| 236 |
-
return array_map( 'trim', $valid_rules );
|
| 237 |
-
|
| 238 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
backup.functions.php
DELETED
|
@@ -1,225 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Backup database and files
|
| 5 |
-
*
|
| 6 |
-
* Creates a temporary directory containing a copy of all files
|
| 7 |
-
* and a dump of the database. Then zip that up and delete the temporary files
|
| 8 |
-
*
|
| 9 |
-
* @uses hmbkp_backup_mysql
|
| 10 |
-
* @uses hmbkp_backup_files
|
| 11 |
-
* @uses hmbkp_delete_old_backups
|
| 12 |
-
*/
|
| 13 |
-
function hmbkp_do_backup() {
|
| 14 |
-
|
| 15 |
-
// Make sure it's possible to do a backup
|
| 16 |
-
if ( !hmbkp_possible() )
|
| 17 |
-
return false;
|
| 18 |
-
|
| 19 |
-
// Clean up any mess left by the last backup
|
| 20 |
-
hmbkp_cleanup();
|
| 21 |
-
|
| 22 |
-
$time_start = date( 'Y-m-d-H-i-s' );
|
| 23 |
-
|
| 24 |
-
$filename = sanitize_file_name( get_bloginfo( 'name' ) . '.backup.' . $time_start . '.zip' );
|
| 25 |
-
$filepath = trailingslashit( hmbkp_path() ) . $filename;
|
| 26 |
-
|
| 27 |
-
// Set as running for a max of 1 hour
|
| 28 |
-
hmbkp_set_status();
|
| 29 |
-
|
| 30 |
-
// Raise the memory limit
|
| 31 |
-
@ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', '256M' ) );
|
| 32 |
-
@set_time_limit( 0 );
|
| 33 |
-
|
| 34 |
-
hmbkp_set_status( __( 'Dumping database', 'hmbkp' ) );
|
| 35 |
-
|
| 36 |
-
// Backup database
|
| 37 |
-
if ( ( defined( 'HMBKP_FILES_ONLY' ) && !HMBKP_FILES_ONLY ) || !defined( 'HMBKP_FILES_ONLY' ) )
|
| 38 |
-
hmbkp_backup_mysql();
|
| 39 |
-
|
| 40 |
-
hmbkp_set_status( __( 'Creating zip archive', 'hmbkp' ) );
|
| 41 |
-
|
| 42 |
-
// Zip everything up
|
| 43 |
-
hmbkp_archive_files( $filepath );
|
| 44 |
-
|
| 45 |
-
// Delete the database dump file
|
| 46 |
-
if ( ( defined( 'HMBKP_FILES_ONLY' ) && !HMBKP_FILES_ONLY ) || !defined( 'HMBKP_FILES_ONLY' ) )
|
| 47 |
-
unlink( hmbkp_path() . '/database_' . DB_NAME . '.sql' );
|
| 48 |
-
|
| 49 |
-
// Email Backup
|
| 50 |
-
hmbkp_email_backup( $filepath );
|
| 51 |
-
|
| 52 |
-
hmbkp_set_status( __( 'Removing old backups', 'hmbkp' ) );
|
| 53 |
-
|
| 54 |
-
// Delete any old backup files
|
| 55 |
-
hmbkp_delete_old_backups();
|
| 56 |
-
|
| 57 |
-
unlink( hmbkp_path() . '/.backup_running' );
|
| 58 |
-
|
| 59 |
-
$file = hmbkp_path() . '/.backup_complete';
|
| 60 |
-
|
| 61 |
-
if ( !$handle = @fopen( $file, 'w' ) )
|
| 62 |
-
return false;
|
| 63 |
-
|
| 64 |
-
fwrite( $handle );
|
| 65 |
-
|
| 66 |
-
fclose( $handle );
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
}
|
| 70 |
-
|
| 71 |
-
/**
|
| 72 |
-
* Deletes old backup files
|
| 73 |
-
*/
|
| 74 |
-
function hmbkp_delete_old_backups() {
|
| 75 |
-
|
| 76 |
-
$files = hmbkp_get_backups();
|
| 77 |
-
|
| 78 |
-
if ( count( $files ) <= hmbkp_max_backups() )
|
| 79 |
-
return;
|
| 80 |
-
|
| 81 |
-
foreach( array_slice( $files, hmbkp_max_backups() ) as $file )
|
| 82 |
-
hmbkp_delete_backup( base64_encode( $file ) );
|
| 83 |
-
|
| 84 |
-
}
|
| 85 |
-
|
| 86 |
-
/**
|
| 87 |
-
* Returns an array of backup files
|
| 88 |
-
*/
|
| 89 |
-
function hmbkp_get_backups() {
|
| 90 |
-
|
| 91 |
-
$files = array();
|
| 92 |
-
|
| 93 |
-
$hmbkp_path = hmbkp_path();
|
| 94 |
-
|
| 95 |
-
if ( $handle = opendir( $hmbkp_path ) ) :
|
| 96 |
-
|
| 97 |
-
while ( false !== ( $file = readdir( $handle ) ) )
|
| 98 |
-
if ( strpos( $file, '.zip' ) !== false )
|
| 99 |
-
$files[filemtime( trailingslashit( $hmbkp_path ) . $file )] = trailingslashit( $hmbkp_path ) . $file;
|
| 100 |
-
|
| 101 |
-
closedir( $handle );
|
| 102 |
-
|
| 103 |
-
endif;
|
| 104 |
-
|
| 105 |
-
// If there is a custom backups directory and it's not writable then include those backups as well
|
| 106 |
-
if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && is_dir( HMBKP_PATH ) && !is_writable( HMBKP_PATH ) ) :
|
| 107 |
-
|
| 108 |
-
if ( $handle = opendir( HMBKP_PATH ) ) :
|
| 109 |
-
|
| 110 |
-
while ( false !== ( $file = readdir( $handle ) ) )
|
| 111 |
-
if ( strpos( $file, '.zip' ) !== false )
|
| 112 |
-
$files[filemtime( trailingslashit( HMBKP_PATH ) . $file )] = trailingslashit( HMBKP_PATH ) . $file;
|
| 113 |
-
|
| 114 |
-
closedir( $handle );
|
| 115 |
-
|
| 116 |
-
endif;
|
| 117 |
-
|
| 118 |
-
endif;
|
| 119 |
-
|
| 120 |
-
krsort( $files );
|
| 121 |
-
|
| 122 |
-
return $files;
|
| 123 |
-
}
|
| 124 |
-
|
| 125 |
-
/**
|
| 126 |
-
* Delete a backup file
|
| 127 |
-
*
|
| 128 |
-
* @param $file base64 encoded filename
|
| 129 |
-
*/
|
| 130 |
-
function hmbkp_delete_backup( $file ) {
|
| 131 |
-
|
| 132 |
-
$file = base64_decode( $file );
|
| 133 |
-
|
| 134 |
-
// Delete the file
|
| 135 |
-
if ( strpos( $file, hmbkp_path() ) !== false || strpos( $file, WP_CONTENT_DIR . '/backups' ) !== false )
|
| 136 |
-
unlink( $file );
|
| 137 |
-
|
| 138 |
-
}
|
| 139 |
-
|
| 140 |
-
/**
|
| 141 |
-
* Check if a backup is running
|
| 142 |
-
*
|
| 143 |
-
* @return bool
|
| 144 |
-
*/
|
| 145 |
-
function hmbkp_is_in_progress() {
|
| 146 |
-
return file_exists( hmbkp_path() . '/.backup_running' );
|
| 147 |
-
}
|
| 148 |
-
|
| 149 |
-
/**
|
| 150 |
-
* Email backup.
|
| 151 |
-
*
|
| 152 |
-
* @param $file
|
| 153 |
-
* @return bool
|
| 154 |
-
*/
|
| 155 |
-
function hmbkp_email_backup( $file ) {
|
| 156 |
-
|
| 157 |
-
if ( !defined('HMBKP_EMAIL' ) || !HMBKP_EMAIL || !is_email( HMBKP_EMAIL ) )
|
| 158 |
-
return;
|
| 159 |
-
|
| 160 |
-
// Raise the memory and time limit
|
| 161 |
-
@ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', '256M' ) );
|
| 162 |
-
@set_time_limit( 0 );
|
| 163 |
-
|
| 164 |
-
$download = get_bloginfo( 'wpurl' ) . '/wp-admin/tools.php?page=' . HMBKP_PLUGIN_SLUG . '&hmbkp_download=' . base64_encode( $file );
|
| 165 |
-
$domain = parse_url( get_bloginfo( 'url' ), PHP_URL_HOST ) . parse_url( get_bloginfo( 'url' ), PHP_URL_PATH );
|
| 166 |
-
|
| 167 |
-
$subject = sprintf( __( 'Backup of %s', 'hmbkp' ), $domain );
|
| 168 |
-
$message = sprintf( __( "BackUpWordPress has completed a backup of your site %s.\n\nThe backup file should be attached to this email.\n\nYou can also download the backup file by clicking the link below:\n\n%s\n\nKind Regards\n\n The Happy BackUpWordPress Backup Emailing Robot", 'hmbkp' ), get_bloginfo( 'url' ), $download );
|
| 169 |
-
$headers = 'From: BackUpWordPress <' . get_bloginfo( 'admin_email' ) . '>' . "\r\n";
|
| 170 |
-
|
| 171 |
-
// Try to send the email
|
| 172 |
-
$sent = wp_mail( HMBKP_EMAIL, $subject, $message, $headers, $file );
|
| 173 |
-
|
| 174 |
-
// If it failed- Try to send a download link - The file was probably too large.
|
| 175 |
-
if ( !$sent ) :
|
| 176 |
-
|
| 177 |
-
$subject = sprintf( __( 'Backup of %s', 'hmbkp' ), $domain );
|
| 178 |
-
$message = sprintf( __( "BackUpWordPress has completed a backup of your site %s.\n\nUnfortunately the backup file was too large to attach to this email.\n\nYou can download the backup file by clicking the link below:\n\n%s\n\nKind Regards\n\n The Happy BackUpWordPress Backup Emailing Robot", 'hmbkp' ), get_bloginfo( 'url' ), $download );
|
| 179 |
-
|
| 180 |
-
$sent = wp_mail( HMBKP_EMAIL, $subject, $message, $headers );
|
| 181 |
-
|
| 182 |
-
endif;
|
| 183 |
-
|
| 184 |
-
// Set option for email not sent error
|
| 185 |
-
if ( !$sent )
|
| 186 |
-
update_option( 'hmbkp_email_error', 'hmbkp_email_failed' );
|
| 187 |
-
else
|
| 188 |
-
delete_option( 'hmbkp_email_error' );
|
| 189 |
-
|
| 190 |
-
return true;
|
| 191 |
-
|
| 192 |
-
}
|
| 193 |
-
|
| 194 |
-
/**
|
| 195 |
-
* Set the status of the running backup
|
| 196 |
-
*
|
| 197 |
-
* @param string $message. (default: '')
|
| 198 |
-
* @return void
|
| 199 |
-
*/
|
| 200 |
-
function hmbkp_set_status( $message = '' ) {
|
| 201 |
-
|
| 202 |
-
$file = hmbkp_path() . '/.backup_running';
|
| 203 |
-
|
| 204 |
-
if ( !$handle = @fopen( $file, 'w' ) )
|
| 205 |
-
return false;
|
| 206 |
-
|
| 207 |
-
fwrite( $handle, $message );
|
| 208 |
-
|
| 209 |
-
fclose( $handle );
|
| 210 |
-
|
| 211 |
-
}
|
| 212 |
-
|
| 213 |
-
/**
|
| 214 |
-
* Get the status of the running backup
|
| 215 |
-
*
|
| 216 |
-
* @return string
|
| 217 |
-
*/
|
| 218 |
-
function hmbkp_get_status() {
|
| 219 |
-
|
| 220 |
-
if ( !file_exists( hmbkp_path() . '/.backup_running' ) )
|
| 221 |
-
return false;
|
| 222 |
-
|
| 223 |
-
return file_get_contents( hmbkp_path() .'/.backup_running' );
|
| 224 |
-
|
| 225 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
backup.mysql.fallback.functions.php
DELETED
|
@@ -1,260 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* hmbkp_backquote function.
|
| 5 |
-
*
|
| 6 |
-
* Add backquotes to tables and db-names inSQL queries. Taken from phpMyAdmin.
|
| 7 |
-
*
|
| 8 |
-
* @access public
|
| 9 |
-
* @param mixed $a_name
|
| 10 |
-
*/
|
| 11 |
-
function hmbkp_backquote( $a_name ) {
|
| 12 |
-
|
| 13 |
-
if ( !empty( $a_name ) && $a_name != '*' ) :
|
| 14 |
-
|
| 15 |
-
if ( is_array( $a_name ) ) :
|
| 16 |
-
$result = array();
|
| 17 |
-
reset( $a_name );
|
| 18 |
-
|
| 19 |
-
while ( list( $key, $val ) = each( $a_name ) )
|
| 20 |
-
$result[$key] = '`' . $val . '`';
|
| 21 |
-
|
| 22 |
-
return $result;
|
| 23 |
-
|
| 24 |
-
else :
|
| 25 |
-
return '`' . $a_name . '`';
|
| 26 |
-
|
| 27 |
-
endif;
|
| 28 |
-
|
| 29 |
-
else :
|
| 30 |
-
return $a_name;
|
| 31 |
-
endif;
|
| 32 |
-
}
|
| 33 |
-
|
| 34 |
-
/**
|
| 35 |
-
* hmbkp_make_sql function.
|
| 36 |
-
*
|
| 37 |
-
* Reads the Database table in $table and creates
|
| 38 |
-
* SQL Statements for recreating structure and data
|
| 39 |
-
* Taken partially from phpMyAdmin and partially from
|
| 40 |
-
* Alain Wolf, Zurich - Switzerland
|
| 41 |
-
* Website: http://restkultur.ch/personal/wolf/scripts/db_backup/
|
| 42 |
-
*
|
| 43 |
-
* @access public
|
| 44 |
-
* @param mixed $sql_file
|
| 45 |
-
* @param mixed $table
|
| 46 |
-
*/
|
| 47 |
-
function hmbkp_make_sql( $sql_file, $table ) {
|
| 48 |
-
|
| 49 |
-
global $hmbkp_db_connect;
|
| 50 |
-
|
| 51 |
-
// Add SQL statement to drop existing table
|
| 52 |
-
$sql_file = "\n";
|
| 53 |
-
$sql_file .= "\n";
|
| 54 |
-
$sql_file .= "#\n";
|
| 55 |
-
$sql_file .= "# Delete any existing table " . hmbkp_backquote( $table ) . "\n";
|
| 56 |
-
$sql_file .= "#\n";
|
| 57 |
-
$sql_file .= "\n";
|
| 58 |
-
$sql_file .= "DROP TABLE IF EXISTS " . hmbkp_backquote( $table ) . ";\n";
|
| 59 |
-
|
| 60 |
-
/* Table Structure */
|
| 61 |
-
|
| 62 |
-
// Comment in SQL-file
|
| 63 |
-
$sql_file .= "\n";
|
| 64 |
-
$sql_file .= "\n";
|
| 65 |
-
$sql_file .= "#\n";
|
| 66 |
-
$sql_file .= "# Table structure of table " . hmbkp_backquote( $table ) . "\n";
|
| 67 |
-
$sql_file .= "#\n";
|
| 68 |
-
$sql_file .= "\n";
|
| 69 |
-
|
| 70 |
-
// Get table structure
|
| 71 |
-
$query = 'SHOW CREATE TABLE ' . hmbkp_backquote( $table );
|
| 72 |
-
$result = mysql_query( $query, $hmbkp_db_connect );
|
| 73 |
-
|
| 74 |
-
if ( $result ) :
|
| 75 |
-
|
| 76 |
-
if ( mysql_num_rows( $result ) > 0 ) :
|
| 77 |
-
$sql_create_arr = mysql_fetch_array( $result );
|
| 78 |
-
$sql_file .= $sql_create_arr[1];
|
| 79 |
-
endif;
|
| 80 |
-
|
| 81 |
-
mysql_free_result( $result );
|
| 82 |
-
$sql_file .= ' ;';
|
| 83 |
-
|
| 84 |
-
endif;
|
| 85 |
-
|
| 86 |
-
/* Table Contents */
|
| 87 |
-
|
| 88 |
-
// Get table contents
|
| 89 |
-
$query = 'SELECT * FROM ' . hmbkp_backquote( $table );
|
| 90 |
-
$result = mysql_query( $query, $hmbkp_db_connect );
|
| 91 |
-
|
| 92 |
-
if ( $result ) :
|
| 93 |
-
$fields_cnt = mysql_num_fields( $result );
|
| 94 |
-
$rows_cnt = mysql_num_rows( $result );
|
| 95 |
-
endif;
|
| 96 |
-
|
| 97 |
-
// Comment in SQL-file
|
| 98 |
-
$sql_file .= "\n";
|
| 99 |
-
$sql_file .= "\n";
|
| 100 |
-
$sql_file .= "#\n";
|
| 101 |
-
$sql_file .= "# Data contents of table " . $table . " (" . $rows_cnt . " records)\n";
|
| 102 |
-
$sql_file .= "#\n";
|
| 103 |
-
|
| 104 |
-
// Checks whether the field is an integer or not
|
| 105 |
-
for ( $j = 0; $j < $fields_cnt; $j++ ) :
|
| 106 |
-
$field_set[$j] = hmbkp_backquote( mysql_field_name( $result, $j ) );
|
| 107 |
-
$type = mysql_field_type( $result, $j );
|
| 108 |
-
|
| 109 |
-
if ( $type == 'tinyint' || $type == 'smallint' || $type == 'mediumint' || $type == 'int' || $type == 'bigint' ||$type == 'timestamp')
|
| 110 |
-
$field_num[$j] = true;
|
| 111 |
-
else
|
| 112 |
-
$field_num[$j] = false;
|
| 113 |
-
|
| 114 |
-
endfor;
|
| 115 |
-
|
| 116 |
-
// Sets the scheme
|
| 117 |
-
$entries = 'INSERT INTO ' . hmbkp_backquote($table) . ' VALUES (';
|
| 118 |
-
$search = array( '\x00', '\x0a', '\x0d', '\x1a' ); //\x08\\x09, not required
|
| 119 |
-
$replace = array( '\0', '\n', '\r', '\Z' );
|
| 120 |
-
$current_row = 0;
|
| 121 |
-
$batch_write = 0;
|
| 122 |
-
|
| 123 |
-
while ( $row = mysql_fetch_row( $result ) ) :
|
| 124 |
-
$current_row++;
|
| 125 |
-
|
| 126 |
-
// build the statement
|
| 127 |
-
for ( $j = 0; $j < $fields_cnt; $j++ ) :
|
| 128 |
-
|
| 129 |
-
if ( !isset($row[$j] ) ) :
|
| 130 |
-
$values[] = 'NULL';
|
| 131 |
-
|
| 132 |
-
elseif ( $row[$j] == '0' || $row[$j] != '' ) :
|
| 133 |
-
|
| 134 |
-
// a number
|
| 135 |
-
if ( $field_num[$j] )
|
| 136 |
-
$values[] = $row[$j];
|
| 137 |
-
|
| 138 |
-
else
|
| 139 |
-
$values[] = "'" . str_replace( $search, $replace, hmbkp_sql_addslashes( $row[$j] ) ) . "'";
|
| 140 |
-
|
| 141 |
-
else :
|
| 142 |
-
$values[] = "''";
|
| 143 |
-
endif;
|
| 144 |
-
|
| 145 |
-
endfor;
|
| 146 |
-
|
| 147 |
-
$sql_file .= " \n" . $entries . implode( ', ', $values ) . ") ;";
|
| 148 |
-
|
| 149 |
-
// write the rows in batches of 100
|
| 150 |
-
if ( $batch_write == 100 ) :
|
| 151 |
-
$batch_write = 0;
|
| 152 |
-
hmbkp_write_sql( $sql_file );
|
| 153 |
-
$sql_file = '';
|
| 154 |
-
endif;
|
| 155 |
-
|
| 156 |
-
$batch_write++;
|
| 157 |
-
|
| 158 |
-
unset( $values );
|
| 159 |
-
|
| 160 |
-
endwhile;
|
| 161 |
-
|
| 162 |
-
mysql_free_result( $result );
|
| 163 |
-
|
| 164 |
-
// Create footer/closing comment in SQL-file
|
| 165 |
-
$sql_file .= "\n";
|
| 166 |
-
$sql_file .= "#\n";
|
| 167 |
-
$sql_file .= "# End of data contents of table " . $table . "\n";
|
| 168 |
-
$sql_file .= "# --------------------------------------------------------\n";
|
| 169 |
-
$sql_file .= "\n";
|
| 170 |
-
|
| 171 |
-
hmbkp_write_sql( $sql_file );
|
| 172 |
-
|
| 173 |
-
}
|
| 174 |
-
|
| 175 |
-
/**
|
| 176 |
-
* hmbkp_sql_addslashes function.
|
| 177 |
-
*
|
| 178 |
-
* Better addslashes for SQL queries.
|
| 179 |
-
* Taken from phpMyAdmin.
|
| 180 |
-
*
|
| 181 |
-
* @access public
|
| 182 |
-
* @param string $a_string. (default: '')
|
| 183 |
-
* @param bool $is_like. (default: false)
|
| 184 |
-
*/
|
| 185 |
-
function hmbkp_sql_addslashes( $a_string = '', $is_like = false ) {
|
| 186 |
-
|
| 187 |
-
if ( $is_like )
|
| 188 |
-
$a_string = str_replace( '\\', '\\\\\\\\', $a_string );
|
| 189 |
-
|
| 190 |
-
else
|
| 191 |
-
$a_string = str_replace( '\\', '\\\\', $a_string );
|
| 192 |
-
|
| 193 |
-
$a_string = str_replace( '\'', '\\\'', $a_string );
|
| 194 |
-
|
| 195 |
-
return $a_string;
|
| 196 |
-
}
|
| 197 |
-
|
| 198 |
-
/**
|
| 199 |
-
* hmbkp_mysql function.
|
| 200 |
-
*
|
| 201 |
-
* @access public
|
| 202 |
-
*/
|
| 203 |
-
function hmbkp_backup_mysql_fallback() {
|
| 204 |
-
|
| 205 |
-
global $hmbkp_db_connect;
|
| 206 |
-
|
| 207 |
-
$hmbkp_db_connect = mysql_pconnect( DB_HOST, DB_USER, DB_PASSWORD );
|
| 208 |
-
|
| 209 |
-
mysql_select_db( DB_NAME, $hmbkp_db_connect );
|
| 210 |
-
|
| 211 |
-
// Begin new backup of MySql
|
| 212 |
-
$tables = mysql_list_tables( DB_NAME );
|
| 213 |
-
|
| 214 |
-
$sql_file = "# WordPress : " . get_bloginfo( 'url' ) . " MySQL database backup\n";
|
| 215 |
-
$sql_file .= "#\n";
|
| 216 |
-
$sql_file .= "# Generated: " . date( 'l j. F Y H:i T' ) . "\n";
|
| 217 |
-
$sql_file .= "# Hostname: " . DB_HOST . "\n";
|
| 218 |
-
$sql_file .= "# Database: " . hmbkp_backquote( DB_NAME ) . "\n";
|
| 219 |
-
$sql_file .= "# --------------------------------------------------------\n";
|
| 220 |
-
|
| 221 |
-
for ( $i = 0; $i < mysql_num_rows( $tables ); $i++ ) :
|
| 222 |
-
|
| 223 |
-
$curr_table = mysql_tablename( $tables, $i );
|
| 224 |
-
|
| 225 |
-
@set_time_limit( 0 );
|
| 226 |
-
|
| 227 |
-
// Create the SQL statements
|
| 228 |
-
$sql_file .= "# --------------------------------------------------------\n";
|
| 229 |
-
$sql_file .= "# Table: " . hmbkp_backquote( $curr_table ) . "\n";
|
| 230 |
-
$sql_file .= "# --------------------------------------------------------\n";
|
| 231 |
-
hmbkp_make_sql( $sql_file, $curr_table );
|
| 232 |
-
|
| 233 |
-
endfor;
|
| 234 |
-
|
| 235 |
-
}
|
| 236 |
-
|
| 237 |
-
/**
|
| 238 |
-
* hmbkp_write_sql function.
|
| 239 |
-
*
|
| 240 |
-
* @param mixed $sql
|
| 241 |
-
*/
|
| 242 |
-
function hmbkp_write_sql( $sql ) {
|
| 243 |
-
|
| 244 |
-
$sqlname = hmbkp_path() . '/database_' . DB_NAME . '.sql';
|
| 245 |
-
|
| 246 |
-
// Actually write the sql file
|
| 247 |
-
if ( is_writable( $sqlname ) || !file_exists( $sqlname ) ) :
|
| 248 |
-
|
| 249 |
-
if ( !$handle = fopen( $sqlname, 'a' ) )
|
| 250 |
-
return;
|
| 251 |
-
|
| 252 |
-
if ( !fwrite( $handle, $sql ) )
|
| 253 |
-
return;
|
| 254 |
-
|
| 255 |
-
fclose( $handle );
|
| 256 |
-
|
| 257 |
-
return true;
|
| 258 |
-
|
| 259 |
-
endif;
|
| 260 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
backup.mysql.functions.php
DELETED
|
@@ -1,92 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Create the mysql backup
|
| 5 |
-
*
|
| 6 |
-
* Uses mysqldump if available, fallsback to PHP
|
| 7 |
-
* if not.
|
| 8 |
-
*/
|
| 9 |
-
function hmbkp_backup_mysql() {
|
| 10 |
-
|
| 11 |
-
// Use mysqldump if we can
|
| 12 |
-
if ( hmbkp_mysqldump_path() )
|
| 13 |
-
|
| 14 |
-
// Backup everything except whats in the exclude file
|
| 15 |
-
shell_exec(
|
| 16 |
-
escapeshellarg( hmbkp_mysqldump_path() )
|
| 17 |
-
. ' --no-create-db '
|
| 18 |
-
. ' -u ' . escapeshellarg( DB_USER )
|
| 19 |
-
. ' -p' . escapeshellarg( DB_PASSWORD )
|
| 20 |
-
. ' -h ' . escapeshellarg( DB_HOST )
|
| 21 |
-
. ' -r ' . escapeshellarg( hmbkp_path() . '/database_' . DB_NAME . '.sql' ) . ' ' . escapeshellarg( DB_NAME )
|
| 22 |
-
);
|
| 23 |
-
|
| 24 |
-
// Fallback to using PHP if not
|
| 25 |
-
else
|
| 26 |
-
hmbkp_backup_mysql_fallback();
|
| 27 |
-
|
| 28 |
-
}
|
| 29 |
-
|
| 30 |
-
/**
|
| 31 |
-
* Attempt to work out the path to mysqldump
|
| 32 |
-
*
|
| 33 |
-
* Can be overridden by defining HMBKP_MYSQLDUMP_PATH in
|
| 34 |
-
* wp-config.php.
|
| 35 |
-
*
|
| 36 |
-
* @return string $path on success, empty string on failure
|
| 37 |
-
*/
|
| 38 |
-
function hmbkp_mysqldump_path() {
|
| 39 |
-
|
| 40 |
-
if ( !hmbkp_shell_exec_available() || ( defined( 'HMBKP_MYSQLDUMP_PATH' ) && !HMBKP_MYSQLDUMP_PATH ) )
|
| 41 |
-
return false;
|
| 42 |
-
|
| 43 |
-
$path = '';
|
| 44 |
-
|
| 45 |
-
// List of possible mysqldump locations
|
| 46 |
-
$mysqldump_locations = array(
|
| 47 |
-
'mysqldump',
|
| 48 |
-
'/usr/local/bin/mysqldump',
|
| 49 |
-
'/usr/local/mysql/bin/mysqldump',
|
| 50 |
-
'/usr/mysql/bin/mysqldump',
|
| 51 |
-
'/usr/bin/mysqldump',
|
| 52 |
-
'/opt/local/lib/mysql6/bin/mysqldump',
|
| 53 |
-
'/opt/local/lib/mysql5/bin/mysqldump',
|
| 54 |
-
'/opt/local/lib/mysql4/bin/mysqldump',
|
| 55 |
-
'\xampp\mysql\bin\mysqldump',
|
| 56 |
-
'\Program Files\xampp\mysql\bin\mysqldump',
|
| 57 |
-
'\Program Files\MySQL\MySQL Server 6.0\bin\mysqldump',
|
| 58 |
-
'\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump',
|
| 59 |
-
'\Program Files\MySQL\MySQL Server 5.4\bin\mysqldump',
|
| 60 |
-
'\Program Files\MySQL\MySQL Server 5.1\bin\mysqldump',
|
| 61 |
-
'\Program Files\MySQL\MySQL Server 5.0\bin\mysqldump',
|
| 62 |
-
'\Program Files\MySQL\MySQL Server 4.1\bin\mysqldump'
|
| 63 |
-
);
|
| 64 |
-
|
| 65 |
-
// Allow the path to be overridden
|
| 66 |
-
if ( defined( 'HMBKP_MYSQLDUMP_PATH' ) && HMBKP_MYSQLDUMP_PATH )
|
| 67 |
-
array_unshift( $mysqldump_locations, HMBKP_MYSQLDUMP_PATH );
|
| 68 |
-
|
| 69 |
-
// If we don't have a path set
|
| 70 |
-
if ( !$path = get_option( 'hmbkp_mysqldump_path' ) ) :
|
| 71 |
-
|
| 72 |
-
// Try to find out where mysqldump is
|
| 73 |
-
foreach ( $mysqldump_locations as $location )
|
| 74 |
-
if ( shell_exec( $location ) )
|
| 75 |
-
$path = $location;
|
| 76 |
-
|
| 77 |
-
// Save it for later
|
| 78 |
-
if ( $path )
|
| 79 |
-
update_option( 'hmbkp_mysqldump_path', $path );
|
| 80 |
-
|
| 81 |
-
endif;
|
| 82 |
-
|
| 83 |
-
// Check again in-case the saved path has stopped working for some reason
|
| 84 |
-
if ( $path && !shell_exec( $path ) ) :
|
| 85 |
-
delete_option( 'hmbkp_mysqldump_path' );
|
| 86 |
-
return hmbkp_mysqldump_path();
|
| 87 |
-
|
| 88 |
-
endif;
|
| 89 |
-
|
| 90 |
-
return $path;
|
| 91 |
-
|
| 92 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
core.functions.php
DELETED
|
@@ -1,603 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
/**
|
| 4 |
-
* Setup the default options on plugin activation
|
| 5 |
-
*/
|
| 6 |
-
function hmbkp_activate() {
|
| 7 |
-
hmbkp_setup_daily_schedule();
|
| 8 |
-
}
|
| 9 |
-
|
| 10 |
-
/**
|
| 11 |
-
* Cleanup on plugin deactivation
|
| 12 |
-
*
|
| 13 |
-
* Removes options and clears all cron schedules
|
| 14 |
-
*/
|
| 15 |
-
function hmbkp_deactivate() {
|
| 16 |
-
|
| 17 |
-
// Options to delete
|
| 18 |
-
$options = array(
|
| 19 |
-
'hmbkp_zip_path',
|
| 20 |
-
'hmbkp_mysqldump_path',
|
| 21 |
-
'hmbkp_path',
|
| 22 |
-
'hmbkp_max_backups',
|
| 23 |
-
'hmbkp_running',
|
| 24 |
-
'hmbkp_status',
|
| 25 |
-
'hmbkp_complete',
|
| 26 |
-
'hmbkp_email_error'
|
| 27 |
-
);
|
| 28 |
-
|
| 29 |
-
foreach ( $options as $option )
|
| 30 |
-
delete_option( $option );
|
| 31 |
-
|
| 32 |
-
delete_transient( 'hmbkp_running' );
|
| 33 |
-
delete_transient( 'hmbkp_estimated_filesize' );
|
| 34 |
-
|
| 35 |
-
// Clear cron
|
| 36 |
-
wp_clear_scheduled_hook( 'hmbkp_schedule_backup_hook' );
|
| 37 |
-
wp_clear_scheduled_hook( 'hmbkp_schedule_single_backup_hook' );
|
| 38 |
-
|
| 39 |
-
hmbkp_cleanup();
|
| 40 |
-
|
| 41 |
-
}
|
| 42 |
-
|
| 43 |
-
/**
|
| 44 |
-
* Handles anything that needs to be
|
| 45 |
-
* done when the plugin is updated
|
| 46 |
-
*/
|
| 47 |
-
function hmbkp_update() {
|
| 48 |
-
|
| 49 |
-
// Every update
|
| 50 |
-
if ( version_compare( HMBKP_VERSION, get_option( 'hmbkp_plugin_version' ), '>' ) ) :
|
| 51 |
-
|
| 52 |
-
hmbkp_cleanup();
|
| 53 |
-
|
| 54 |
-
delete_transient( 'hmbkp_estimated_filesize' );
|
| 55 |
-
delete_option( 'hmbkp_running' );
|
| 56 |
-
delete_option( 'hmbkp_complete' );
|
| 57 |
-
delete_option( 'hmbkp_status' );
|
| 58 |
-
delete_transient( 'hmbkp_running' );
|
| 59 |
-
|
| 60 |
-
// Check whether we have a logs directory to delete
|
| 61 |
-
if ( is_dir( hmbkp_path() . '/logs' ) )
|
| 62 |
-
hmbkp_rmdirtree( hmbkp_path() . '/logs' );
|
| 63 |
-
|
| 64 |
-
endif;
|
| 65 |
-
|
| 66 |
-
// Pre 1.1
|
| 67 |
-
if ( !get_option( 'hmbkp_plugin_version' ) ) :
|
| 68 |
-
|
| 69 |
-
// Delete the obsolete max backups option
|
| 70 |
-
delete_option( 'hmbkp_max_backups' );
|
| 71 |
-
|
| 72 |
-
endif;
|
| 73 |
-
|
| 74 |
-
// Update from backUpWordPress
|
| 75 |
-
if ( get_option( 'bkpwp_max_backups' ) ) :
|
| 76 |
-
|
| 77 |
-
// Carry over the custom path
|
| 78 |
-
if ( $legacy_path = get_option( 'bkpwppath' ) )
|
| 79 |
-
update_option( 'hmbkp_path', $legacy_path );
|
| 80 |
-
|
| 81 |
-
// Options to remove
|
| 82 |
-
$legacy_options = array(
|
| 83 |
-
'bkpwp_archive_types',
|
| 84 |
-
'bkpwp_automail_from',
|
| 85 |
-
'bkpwp_domain',
|
| 86 |
-
'bkpwp_domain_path',
|
| 87 |
-
'bkpwp_easy_mode',
|
| 88 |
-
'bkpwp_excludelists',
|
| 89 |
-
'bkpwp_install_user',
|
| 90 |
-
'bkpwp_listmax_backups',
|
| 91 |
-
'bkpwp_max_backups',
|
| 92 |
-
'bkpwp_presets',
|
| 93 |
-
'bkpwp_reccurrences',
|
| 94 |
-
'bkpwp_schedules',
|
| 95 |
-
'bkpwp_calculation',
|
| 96 |
-
'bkpwppath',
|
| 97 |
-
'bkpwp_status_config',
|
| 98 |
-
'bkpwp_status'
|
| 99 |
-
);
|
| 100 |
-
|
| 101 |
-
foreach ( $legacy_options as $option )
|
| 102 |
-
delete_option( $option );
|
| 103 |
-
|
| 104 |
-
global $wp_roles;
|
| 105 |
-
|
| 106 |
-
$wp_roles->remove_cap( 'administrator','manage_backups' );
|
| 107 |
-
$wp_roles->remove_cap( 'administrator','download_backups' );
|
| 108 |
-
|
| 109 |
-
wp_clear_scheduled_hook( 'bkpwp_schedule_bkpwp_hook' );
|
| 110 |
-
|
| 111 |
-
endif;
|
| 112 |
-
|
| 113 |
-
// Update the stored version
|
| 114 |
-
if ( get_option( 'hmbkp_plugin_version' ) !== HMBKP_VERSION )
|
| 115 |
-
update_option( 'hmbkp_plugin_version', HMBKP_VERSION );
|
| 116 |
-
|
| 117 |
-
}
|
| 118 |
-
|
| 119 |
-
/**
|
| 120 |
-
* Simply wrapper function for creating timestamps
|
| 121 |
-
*
|
| 122 |
-
* @return timestamp
|
| 123 |
-
*/
|
| 124 |
-
function hmbkp_timestamp() {
|
| 125 |
-
return date( get_option( 'date_format' ) ) . ' ' . date( 'H:i:s' );
|
| 126 |
-
}
|
| 127 |
-
|
| 128 |
-
/**
|
| 129 |
-
* Sanitize a directory path
|
| 130 |
-
*
|
| 131 |
-
* @param string $dir
|
| 132 |
-
* @param bool $rel. (default: false)
|
| 133 |
-
* @return string $dir
|
| 134 |
-
*/
|
| 135 |
-
function hmbkp_conform_dir( $dir, $rel = false ) {
|
| 136 |
-
|
| 137 |
-
// Normalise slashes
|
| 138 |
-
$dir = str_replace( '\\', '/', $dir );
|
| 139 |
-
$dir = str_replace( '//', '/', $dir );
|
| 140 |
-
|
| 141 |
-
// Remove the trailingslash
|
| 142 |
-
$dir = untrailingslashit( $dir );
|
| 143 |
-
|
| 144 |
-
// If we're on Windows
|
| 145 |
-
if ( strpos( ABSPATH, '\\' ) !== false )
|
| 146 |
-
$dir = str_replace( '\\', '/', $dir );
|
| 147 |
-
|
| 148 |
-
if ( $rel == true )
|
| 149 |
-
$dir = str_replace( hmbkp_conform_dir( ABSPATH ), '', $dir );
|
| 150 |
-
|
| 151 |
-
return $dir;
|
| 152 |
-
}
|
| 153 |
-
/**
|
| 154 |
-
* Take a file size and return a human readable
|
| 155 |
-
* version
|
| 156 |
-
*
|
| 157 |
-
* @param int $size
|
| 158 |
-
* @param string $unit. (default: null)
|
| 159 |
-
* @param string $retstring. (default: null)
|
| 160 |
-
* @param bool $si. (default: true)
|
| 161 |
-
* @return int
|
| 162 |
-
*/
|
| 163 |
-
function hmbkp_size_readable( $size, $unit = null, $retstring = '%01.2f %s', $si = true ) {
|
| 164 |
-
|
| 165 |
-
// Units
|
| 166 |
-
if ( $si === true ) :
|
| 167 |
-
$sizes = array( 'B', 'kB', 'MB', 'GB', 'TB', 'PB' );
|
| 168 |
-
$mod = 1000;
|
| 169 |
-
|
| 170 |
-
else :
|
| 171 |
-
$sizes = array('B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB');
|
| 172 |
-
$mod = 1024;
|
| 173 |
-
|
| 174 |
-
endif;
|
| 175 |
-
|
| 176 |
-
$ii = count( $sizes ) - 1;
|
| 177 |
-
|
| 178 |
-
// Max unit
|
| 179 |
-
$unit = array_search( (string) $unit, $sizes );
|
| 180 |
-
|
| 181 |
-
if ( is_null( $unit ) || $unit === false )
|
| 182 |
-
$unit = $ii;
|
| 183 |
-
|
| 184 |
-
// Loop
|
| 185 |
-
$i = 0;
|
| 186 |
-
|
| 187 |
-
while ( $unit != $i && $size >= 1024 && $i < $ii ) {
|
| 188 |
-
$size /= $mod;
|
| 189 |
-
$i++;
|
| 190 |
-
}
|
| 191 |
-
|
| 192 |
-
return sprintf( $retstring, $size, $sizes[$i] );
|
| 193 |
-
}
|
| 194 |
-
|
| 195 |
-
/**
|
| 196 |
-
* Add daily as a cron schedule choice
|
| 197 |
-
*
|
| 198 |
-
* @param array $recc
|
| 199 |
-
* @return array $recc
|
| 200 |
-
*/
|
| 201 |
-
function hmbkp_more_reccurences( $recc ) {
|
| 202 |
-
|
| 203 |
-
$hmbkp_reccurrences = array(
|
| 204 |
-
'hmbkp_daily' => array( 'interval' => 86400, 'display' => 'every day' )
|
| 205 |
-
);
|
| 206 |
-
|
| 207 |
-
return array_merge( $recc, $hmbkp_reccurrences );
|
| 208 |
-
}
|
| 209 |
-
|
| 210 |
-
/**
|
| 211 |
-
* Send a flie to the browser for download
|
| 212 |
-
*
|
| 213 |
-
* @param string $path
|
| 214 |
-
*/
|
| 215 |
-
function hmbkp_send_file( $path ) {
|
| 216 |
-
|
| 217 |
-
session_write_close();
|
| 218 |
-
|
| 219 |
-
ob_end_clean();
|
| 220 |
-
|
| 221 |
-
if ( !is_file( $path ) || connection_status() != 0 )
|
| 222 |
-
return false;
|
| 223 |
-
|
| 224 |
-
// Overide max_execution_time
|
| 225 |
-
@set_time_limit( 0 );
|
| 226 |
-
|
| 227 |
-
$name = basename( $path );
|
| 228 |
-
|
| 229 |
-
// Filenames in IE containing dots will screw up the filename unless we add this
|
| 230 |
-
if ( strstr( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ) )
|
| 231 |
-
$name = preg_replace( '/\./', '%2e', $name, substr_count( $name, '.' ) - 1 );
|
| 232 |
-
|
| 233 |
-
// Force
|
| 234 |
-
header( 'Cache-Control: ' );
|
| 235 |
-
header( 'Pragma: ' );
|
| 236 |
-
header( 'Content-Type: application/octet-stream' );
|
| 237 |
-
header( 'Content-Length: ' . (string) ( filesize( $path ) ) );
|
| 238 |
-
header( 'Content-Disposition: attachment; filename=" ' . $name . '"' );
|
| 239 |
-
header( 'Content-Transfer-Encoding: binary\n' );
|
| 240 |
-
|
| 241 |
-
if ( $file = fopen( $path, 'rb' ) ) :
|
| 242 |
-
|
| 243 |
-
while ( ( !feof( $file ) ) && ( connection_status() == 0) ) :
|
| 244 |
-
|
| 245 |
-
print( fread( $file, 1024 * 8 ) );
|
| 246 |
-
flush();
|
| 247 |
-
|
| 248 |
-
endwhile;
|
| 249 |
-
|
| 250 |
-
fclose( $file );
|
| 251 |
-
|
| 252 |
-
endif;
|
| 253 |
-
|
| 254 |
-
return ( connection_status() == 0 ) and !connection_aborted();
|
| 255 |
-
}
|
| 256 |
-
|
| 257 |
-
/**
|
| 258 |
-
* Takes a directory and returns an array of files.
|
| 259 |
-
* Does traverse sub-directories
|
| 260 |
-
*
|
| 261 |
-
* @param string $dir
|
| 262 |
-
* @param array $files. (default: array())
|
| 263 |
-
* @return arrat $files
|
| 264 |
-
*/
|
| 265 |
-
function hmbkp_ls( $dir, $files = array() ) {
|
| 266 |
-
|
| 267 |
-
if ( !is_readable( $dir ) )
|
| 268 |
-
return $files;
|
| 269 |
-
|
| 270 |
-
$d = opendir( $dir );
|
| 271 |
-
|
| 272 |
-
// Get excluded files & directories.
|
| 273 |
-
$excludes = hmbkp_exclude_string( 'pclzip' );
|
| 274 |
-
|
| 275 |
-
while ( $file = readdir( $d ) ) :
|
| 276 |
-
|
| 277 |
-
// Ignore current dir and containing dir and any unreadable files or directories
|
| 278 |
-
if ( $file == '.' || $file == '..' )
|
| 279 |
-
continue;
|
| 280 |
-
|
| 281 |
-
$file = hmbkp_conform_dir( trailingslashit( $dir ) . $file );
|
| 282 |
-
|
| 283 |
-
// Skip the backups dir and any excluded paths
|
| 284 |
-
if ( ( $file == hmbkp_path() || preg_match( '(' . $excludes . ')', $file ) || !is_readable( $file ) ) )
|
| 285 |
-
continue;
|
| 286 |
-
|
| 287 |
-
$files[] = $file;
|
| 288 |
-
|
| 289 |
-
if ( is_dir( $file ) )
|
| 290 |
-
$files = hmbkp_ls( $file, $files );
|
| 291 |
-
|
| 292 |
-
endwhile;
|
| 293 |
-
|
| 294 |
-
return $files;
|
| 295 |
-
}
|
| 296 |
-
|
| 297 |
-
/**
|
| 298 |
-
* Recursively delete a directory including
|
| 299 |
-
* all the files and sub-directories.
|
| 300 |
-
*
|
| 301 |
-
* @param string $dir
|
| 302 |
-
*/
|
| 303 |
-
function hmbkp_rmdirtree( $dir ) {
|
| 304 |
-
|
| 305 |
-
if ( is_file( $dir ) )
|
| 306 |
-
unlink( $dir );
|
| 307 |
-
|
| 308 |
-
if ( !is_dir( $dir ) )
|
| 309 |
-
return false;
|
| 310 |
-
|
| 311 |
-
$result = array();
|
| 312 |
-
|
| 313 |
-
$dir = trailingslashit( $dir );
|
| 314 |
-
|
| 315 |
-
$handle = opendir( $dir );
|
| 316 |
-
|
| 317 |
-
while ( false !== ( $file = readdir( $handle ) ) ) :
|
| 318 |
-
|
| 319 |
-
// Ignore . and ..
|
| 320 |
-
if ( $file != '.' && $file != '..' ) :
|
| 321 |
-
|
| 322 |
-
$path = $dir . $file;
|
| 323 |
-
|
| 324 |
-
// Recurse if subdir, Delete if file
|
| 325 |
-
if ( is_dir( $path ) ) :
|
| 326 |
-
$result = array_merge( $result, hmbkp_rmdirtree( $path ) );
|
| 327 |
-
|
| 328 |
-
else :
|
| 329 |
-
unlink( $path );
|
| 330 |
-
$result[] .= $path;
|
| 331 |
-
|
| 332 |
-
endif;
|
| 333 |
-
|
| 334 |
-
endif;
|
| 335 |
-
|
| 336 |
-
endwhile;
|
| 337 |
-
|
| 338 |
-
closedir( $handle );
|
| 339 |
-
|
| 340 |
-
rmdir( $dir );
|
| 341 |
-
|
| 342 |
-
$result[] .= $dir;
|
| 343 |
-
|
| 344 |
-
return $result;
|
| 345 |
-
|
| 346 |
-
}
|
| 347 |
-
|
| 348 |
-
/**
|
| 349 |
-
* Calculate the size of the backup
|
| 350 |
-
*
|
| 351 |
-
* Doesn't currently take into account for
|
| 352 |
-
* compression
|
| 353 |
-
*
|
| 354 |
-
* @return string
|
| 355 |
-
*/
|
| 356 |
-
function hmbkp_calculate() {
|
| 357 |
-
|
| 358 |
-
@ini_set( 'memory_limit', apply_filters( 'admin_memory_limit', '256M' ) );
|
| 359 |
-
|
| 360 |
-
// Check cache
|
| 361 |
-
if ( $filesize = get_transient( 'hmbkp_estimated_filesize' ) )
|
| 362 |
-
return hmbkp_size_readable( $filesize, null, '%01u %s' );
|
| 363 |
-
|
| 364 |
-
$filesize = 0;
|
| 365 |
-
|
| 366 |
-
// Don't include database if files only
|
| 367 |
-
if ( ( defined( 'HMBKP_FILES_ONLY' ) && !HMBKP_FILES_ONLY ) || !defined( 'HMBKP_FILES_ONLY' ) ) :
|
| 368 |
-
|
| 369 |
-
global $wpdb;
|
| 370 |
-
|
| 371 |
-
$res = $wpdb->get_results( 'SHOW TABLE STATUS FROM ' . DB_NAME, ARRAY_A );
|
| 372 |
-
|
| 373 |
-
foreach ( $res as $r )
|
| 374 |
-
$filesize += (float) $r['Data_length'];
|
| 375 |
-
|
| 376 |
-
endif;
|
| 377 |
-
|
| 378 |
-
if ( ( defined( 'HMBKP_DATABASE_ONLY' ) && !HMBKP_DATABASE_ONLY ) || !defined( 'HMBKP_DATABASE_ONLY' ) ) :
|
| 379 |
-
|
| 380 |
-
// Get rid of any cached filesizes
|
| 381 |
-
clearstatcache();
|
| 382 |
-
|
| 383 |
-
foreach ( hmbkp_ls( ABSPATH ) as $f )
|
| 384 |
-
$filesize += (float) @filesize( $f );
|
| 385 |
-
|
| 386 |
-
endif;
|
| 387 |
-
|
| 388 |
-
// Cache in a transient for a week
|
| 389 |
-
set_transient( 'hmbkp_estimated_filesize', $filesize, 604800 );
|
| 390 |
-
|
| 391 |
-
return hmbkp_size_readable( $filesize, null, '%01u %s' );
|
| 392 |
-
|
| 393 |
-
}
|
| 394 |
-
|
| 395 |
-
/**
|
| 396 |
-
* Check whether shell_exec has been disabled.
|
| 397 |
-
*
|
| 398 |
-
* @return bool
|
| 399 |
-
*/
|
| 400 |
-
function hmbkp_shell_exec_available() {
|
| 401 |
-
|
| 402 |
-
$disable_functions = ini_get( 'disable_functions' );
|
| 403 |
-
|
| 404 |
-
// Is shell_exec disabled?
|
| 405 |
-
if ( strpos( $disable_functions, 'shell_exec' ) !== false )
|
| 406 |
-
return false;
|
| 407 |
-
|
| 408 |
-
// Are we in Safe Mode
|
| 409 |
-
if ( hmbkp_is_safe_mode_active() )
|
| 410 |
-
return false;
|
| 411 |
-
|
| 412 |
-
return true;
|
| 413 |
-
|
| 414 |
-
}
|
| 415 |
-
|
| 416 |
-
/**
|
| 417 |
-
* Check whether safe mode if active or not
|
| 418 |
-
*
|
| 419 |
-
* @return bool
|
| 420 |
-
*/
|
| 421 |
-
function hmbkp_is_safe_mode_active() {
|
| 422 |
-
|
| 423 |
-
$safe_mode = ini_get( 'safe_mode' );
|
| 424 |
-
|
| 425 |
-
if ( $safe_mode && $safe_mode != 'off' && $safe_mode != 'Off' )
|
| 426 |
-
return true;
|
| 427 |
-
|
| 428 |
-
return false;
|
| 429 |
-
|
| 430 |
-
}
|
| 431 |
-
|
| 432 |
-
/**
|
| 433 |
-
* Calculate the total filesize of all backups
|
| 434 |
-
*
|
| 435 |
-
* @return string
|
| 436 |
-
*/
|
| 437 |
-
function hmbkp_total_filesize() {
|
| 438 |
-
|
| 439 |
-
$files = hmbkp_get_backups();
|
| 440 |
-
$filesize = 0;
|
| 441 |
-
|
| 442 |
-
clearstatcache();
|
| 443 |
-
|
| 444 |
-
foreach ( $files as $f )
|
| 445 |
-
$filesize += @filesize( $f );
|
| 446 |
-
|
| 447 |
-
return hmbkp_size_readable( $filesize );
|
| 448 |
-
|
| 449 |
-
}
|
| 450 |
-
|
| 451 |
-
/**
|
| 452 |
-
* Setup the daily backup schedule
|
| 453 |
-
*/
|
| 454 |
-
function hmbkp_setup_daily_schedule() {
|
| 455 |
-
|
| 456 |
-
// Clear any old schedules
|
| 457 |
-
wp_clear_scheduled_hook( 'hmbkp_schedule_backup_hook' );
|
| 458 |
-
|
| 459 |
-
// Default to 11 in the evening
|
| 460 |
-
$time = '23:00';
|
| 461 |
-
|
| 462 |
-
// Allow it to be overridden
|
| 463 |
-
if ( defined( 'HMBKP_DAILY_SCHEDULE_TIME' ) && HMBKP_DAILY_SCHEDULE_TIME )
|
| 464 |
-
$time = HMBKP_DAILY_SCHEDULE_TIME;
|
| 465 |
-
|
| 466 |
-
if ( time() > strtotime( $time ) )
|
| 467 |
-
$time = 'tomorrow ' . $time;
|
| 468 |
-
|
| 469 |
-
wp_schedule_event( strtotime( $time ), 'hmbkp_daily', 'hmbkp_schedule_backup_hook' );
|
| 470 |
-
}
|
| 471 |
-
|
| 472 |
-
/**
|
| 473 |
-
* Get the path to the backups directory
|
| 474 |
-
*
|
| 475 |
-
* Will try to create it if it doesn't exist
|
| 476 |
-
* and will fallback to default if a custom dir
|
| 477 |
-
* isn't writable.
|
| 478 |
-
*/
|
| 479 |
-
function hmbkp_path() {
|
| 480 |
-
|
| 481 |
-
$path = get_option( 'hmbkp_path' );
|
| 482 |
-
|
| 483 |
-
// Allow the backups path to be defined
|
| 484 |
-
if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH )
|
| 485 |
-
$path = HMBKP_PATH;
|
| 486 |
-
|
| 487 |
-
// If the dir doesn't exist or isn't writable then use wp-content/backups instead
|
| 488 |
-
if ( ( !$path || !is_writable( $path ) ) && hmbkp_conform_dir( $path ) != hmbkp_path_default() )
|
| 489 |
-
$path = hmbkp_path_default();
|
| 490 |
-
|
| 491 |
-
// Create the backups directory if it doesn't exist
|
| 492 |
-
if ( is_writable( dirname( $path ) ) && !is_dir( $path ) )
|
| 493 |
-
mkdir( $path, 0755 );
|
| 494 |
-
|
| 495 |
-
if ( get_option( 'hmbkp_path' ) != $path )
|
| 496 |
-
update_option( 'hmbkp_path', $path );
|
| 497 |
-
|
| 498 |
-
// Secure the directory with a .htaccess file
|
| 499 |
-
$htaccess = $path . '/.htaccess';
|
| 500 |
-
|
| 501 |
-
if ( !file_exists( $htaccess ) && is_writable( $path ) && require_once( ABSPATH . '/wp-admin/includes/misc.php' ) )
|
| 502 |
-
insert_with_markers( $htaccess, 'BackUpWordPress', array( 'deny from all' ) );
|
| 503 |
-
|
| 504 |
-
return hmbkp_conform_dir( $path );
|
| 505 |
-
}
|
| 506 |
-
|
| 507 |
-
/**
|
| 508 |
-
* Return the default backup path
|
| 509 |
-
*
|
| 510 |
-
* @return string path
|
| 511 |
-
*/
|
| 512 |
-
function hmbkp_path_default() {
|
| 513 |
-
return hmbkp_conform_dir( WP_CONTENT_DIR . '/backups' );
|
| 514 |
-
}
|
| 515 |
-
|
| 516 |
-
/**
|
| 517 |
-
* Move the backup directory and all existing backup files to a new
|
| 518 |
-
* location
|
| 519 |
-
*
|
| 520 |
-
* @param string $from path to move the backups dir from
|
| 521 |
-
* @param string $to path to move the backups dir to
|
| 522 |
-
* @return void
|
| 523 |
-
*/
|
| 524 |
-
function hmbkp_path_move( $from, $to ) {
|
| 525 |
-
|
| 526 |
-
// Create the custom backups directory if it doesn't exist
|
| 527 |
-
if ( is_writable( dirname( $to ) ) && !is_dir( $to ) )
|
| 528 |
-
mkdir( $to, 0755 );
|
| 529 |
-
|
| 530 |
-
if ( !is_dir( $to ) || !is_writable( $to ) || !is_dir( $from ) )
|
| 531 |
-
return false;
|
| 532 |
-
|
| 533 |
-
hmbkp_cleanup();
|
| 534 |
-
|
| 535 |
-
if ( $handle = opendir( $from ) ) :
|
| 536 |
-
|
| 537 |
-
while ( false !== ( $file = readdir( $handle ) ) )
|
| 538 |
-
if ( $file != '.' && $file != '..' )
|
| 539 |
-
rename( trailingslashit( $from ) . $file, trailingslashit( $to ) . $file );
|
| 540 |
-
|
| 541 |
-
closedir( $handle );
|
| 542 |
-
|
| 543 |
-
endif;
|
| 544 |
-
|
| 545 |
-
hmbkp_rmdirtree( $from );
|
| 546 |
-
|
| 547 |
-
}
|
| 548 |
-
|
| 549 |
-
/**
|
| 550 |
-
* The maximum number of backups to keep
|
| 551 |
-
* defaults to 10
|
| 552 |
-
*
|
| 553 |
-
* @return int
|
| 554 |
-
*/
|
| 555 |
-
function hmbkp_max_backups() {
|
| 556 |
-
|
| 557 |
-
if ( defined( 'HMBKP_MAX_BACKUPS' ) && is_numeric( HMBKP_MAX_BACKUPS ) )
|
| 558 |
-
return (int) HMBKP_MAX_BACKUPS;
|
| 559 |
-
|
| 560 |
-
return 10;
|
| 561 |
-
|
| 562 |
-
}
|
| 563 |
-
|
| 564 |
-
/**
|
| 565 |
-
* Check if a backup is possible with regards to file
|
| 566 |
-
* permissions etc.
|
| 567 |
-
*
|
| 568 |
-
* @return bool
|
| 569 |
-
*/
|
| 570 |
-
function hmbkp_possible() {
|
| 571 |
-
|
| 572 |
-
if ( !is_writable( hmbkp_path() ) || !is_dir( hmbkp_path() ) || hmbkp_is_safe_mode_active() )
|
| 573 |
-
return false;
|
| 574 |
-
|
| 575 |
-
if ( defined( 'HMBKP_FILES_ONLY' ) && HMBKP_FILES_ONLY && defined( 'HMBKP_DATABASE_ONLY' ) && HMBKP_DATABASE_ONLY )
|
| 576 |
-
return false;
|
| 577 |
-
|
| 578 |
-
return true;
|
| 579 |
-
}
|
| 580 |
-
|
| 581 |
-
/**
|
| 582 |
-
* Remove any non backup.zip files from the backups dir.
|
| 583 |
-
*
|
| 584 |
-
* @return void
|
| 585 |
-
*/
|
| 586 |
-
function hmbkp_cleanup() {
|
| 587 |
-
|
| 588 |
-
$hmbkp_path = hmbkp_path();
|
| 589 |
-
|
| 590 |
-
if ( !is_dir( $hmbkp_path ) )
|
| 591 |
-
return;
|
| 592 |
-
|
| 593 |
-
if ( $handle = opendir( $hmbkp_path ) ) :
|
| 594 |
-
|
| 595 |
-
while ( false !== ( $file = readdir( $handle ) ) )
|
| 596 |
-
if ( $file != '.' && $file != '..' && $file != '.htaccess' && strpos( $file, '.zip' ) === false )
|
| 597 |
-
hmbkp_rmdirtree( trailingslashit( $hmbkp_path ) . $file );
|
| 598 |
-
|
| 599 |
-
closedir( $handle );
|
| 600 |
-
|
| 601 |
-
endif;
|
| 602 |
-
|
| 603 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
functions/backup.functions.php
CHANGED
|
@@ -119,6 +119,9 @@ function hmbkp_get_backups() {
|
|
| 119 |
|
| 120 |
krsort( $files );
|
| 121 |
|
|
|
|
|
|
|
|
|
|
| 122 |
return $files;
|
| 123 |
}
|
| 124 |
|
| 119 |
|
| 120 |
krsort( $files );
|
| 121 |
|
| 122 |
+
if( empty($files) )
|
| 123 |
+
return false;
|
| 124 |
+
|
| 125 |
return $files;
|
| 126 |
}
|
| 127 |
|
hmbkp.css
DELETED
|
@@ -1,21 +0,0 @@
|
|
| 1 |
-
#icon-backupwordpress.icon32 { background: url(icon_backupwordpress_32x32.png); }
|
| 2 |
-
.hmbkp_running .add-new-h2 img { margin: 0 3px -4px -9px; opacity: 0.3; }
|
| 3 |
-
.button.disabled, .button[disabled], .button[disabled="disabled"] { cursor: default; }
|
| 4 |
-
.button.disabled:active, .button[disabled]:active, .button[disabled="disabled"]:active { background: #F2F2F2 url(../../../../wp-admin/images/white-grad.png) repeat-x; }
|
| 5 |
-
tfoot p { margin: 0; font-weight: normal; }
|
| 6 |
-
#hmbkp_advanced-options { display: none; }
|
| 7 |
-
#hmbkp_advanced-options dl { overflow: hidden; margin: 20px 0; }
|
| 8 |
-
#hmbkp_advanced-options dt { float: left; min-width: 250px; clear: both; padding: 6px; margin: 1px 0; cursor: pointer; }
|
| 9 |
-
#hmbkp_advanced-options dd { color: #666; padding: 7px 0 7px 250px; border-top: 1px solid #DFDFDF; margin: 0; cursor: pointer; min-height: 34px; }
|
| 10 |
-
#hmbkp_advanced-options dd:last-child { border-bottom: 1px solid #DFDFDF; }
|
| 11 |
-
#hmbkp_advanced-options dt:not(.hmbkp_active) + dd { background: #F9F9F9; }
|
| 12 |
-
#hmbkp_advanced-options dd .example { white-space: nowrap; display: none; }
|
| 13 |
-
#hmbkp_advanced-options dd p { margin: 0; }
|
| 14 |
-
#hmbkp_advanced-options dt:not(.hmbkp_active):hover + dd, #hmbkp_advanced-options dt:not(.hmbkp_active) + dd:hover { background-color: #FFF; }
|
| 15 |
-
#hmbkp_advanced-options dd:hover p, #hmbkp_advanced-options dt:hover + dd p { display: none; }
|
| 16 |
-
#hmbkp_advanced-options dd:hover .example, #hmbkp_advanced-options dt:hover + dd .example { display: inline; }
|
| 17 |
-
.hmbkp_manage_backups_row .delete { color: #BC0B0B; }
|
| 18 |
-
.hmbkp_manage_backups_row .delete:hover { color: red; }
|
| 19 |
-
.completed th, .completed td { background-color: #FFFFE0; }
|
| 20 |
-
.hmbkp_active:before { content: "\00a0 \2713 "; font-size: 11px; }
|
| 21 |
-
.hmbkp_active, .hmbkp_active code, #hmbkp_advanced-options .hmbkp_active + dd { background: #E5F7E8; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
hmbkp.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
| 1 |
-
jQuery( document ).ready( function( $ ) {
|
| 2 |
-
|
| 3 |
-
if ( $( '.hmbkp_running' ).size() ) {
|
| 4 |
-
hmbkpRedirectOnBackupComplete();
|
| 5 |
-
}
|
| 6 |
-
|
| 7 |
-
if ( $( '.hmbkp_estimated-size .calculate' ).size() ) {
|
| 8 |
-
$.get( ajaxurl, { 'action' : 'hmbkp_calculate' },
|
| 9 |
-
function( data ) {
|
| 10 |
-
$( '.hmbkp_estimated-size .calculate' ).fadeOut( function() {
|
| 11 |
-
$( this ).empty().append( data );
|
| 12 |
-
} ).fadeIn();
|
| 13 |
-
}
|
| 14 |
-
);
|
| 15 |
-
}
|
| 16 |
-
|
| 17 |
-
$.get( ajaxurl, { 'action' : 'hmbkp_cron_test' },
|
| 18 |
-
function( data ) {
|
| 19 |
-
if ( data != 1 ) {
|
| 20 |
-
$( '.wrap > h2' ).after( data );
|
| 21 |
-
}
|
| 22 |
-
}
|
| 23 |
-
);
|
| 24 |
-
|
| 25 |
-
$( '.hmbkp_advanced-options-toggle' ).click( function() {
|
| 26 |
-
$( '#hmbkp_advanced-options' ).toggle();
|
| 27 |
-
} );
|
| 28 |
-
|
| 29 |
-
} );
|
| 30 |
-
|
| 31 |
-
function hmbkpRedirectOnBackupComplete() {
|
| 32 |
-
|
| 33 |
-
img = jQuery( '<div>' ).append( jQuery( '.hmbkp_running a.button[disabled]:first img' ).clone() ).remove().html();
|
| 34 |
-
|
| 35 |
-
jQuery.get( ajaxurl, { 'action' : 'hmbkp_is_in_progress' },
|
| 36 |
-
|
| 37 |
-
function( data ) {
|
| 38 |
-
|
| 39 |
-
if ( data == 0 ) {
|
| 40 |
-
|
| 41 |
-
location.reload( true );
|
| 42 |
-
|
| 43 |
-
} else {
|
| 44 |
-
|
| 45 |
-
setTimeout( 'hmbkpRedirectOnBackupComplete();', 5000 );
|
| 46 |
-
|
| 47 |
-
jQuery( '.hmbkp_running a.button[disabled]:first' ).html( img + data );
|
| 48 |
-
|
| 49 |
-
}
|
| 50 |
-
}
|
| 51 |
-
);
|
| 52 |
-
|
| 53 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
icon_backupwordpress_16x16.png
DELETED
|
Binary file
|
icon_backupwordpress_16x16_hover.png
DELETED
|
Binary file
|
icon_backupwordpress_32x32.png
DELETED
|
Binary file
|
interface.functions.php
DELETED
|
@@ -1,151 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
/**
|
| 3 |
-
* Displays a row in the manage backups table
|
| 4 |
-
*
|
| 5 |
-
* @param string $file
|
| 6 |
-
*/
|
| 7 |
-
function hmbkp_get_backup_row( $file ) {
|
| 8 |
-
|
| 9 |
-
$encode = base64_encode( $file ); ?>
|
| 10 |
-
|
| 11 |
-
<tr class="hmbkp_manage_backups_row<?php if ( file_exists( hmbkp_path() . '/.backup_complete' ) ) : ?> completed<?php unlink( hmbkp_path() . '/.backup_complete' ); endif; ?>">
|
| 12 |
-
|
| 13 |
-
<th scope="row">
|
| 14 |
-
<?php echo date( get_option('date_format'), filemtime( $file ) ) . ' ' . date( 'H:i', filemtime($file ) ); ?>
|
| 15 |
-
</th>
|
| 16 |
-
|
| 17 |
-
<td>
|
| 18 |
-
<?php echo hmbkp_size_readable( filesize( $file ) ); ?>
|
| 19 |
-
</td>
|
| 20 |
-
|
| 21 |
-
<td>
|
| 22 |
-
|
| 23 |
-
<a href="tools.php?page=<?php echo HMBKP_PLUGIN_SLUG; ?>&hmbkp_download=<?php echo $encode; ?>"><?php _e( 'Download', 'hmbkp' ); ?></a> |
|
| 24 |
-
<a href="tools.php?page=<?php echo HMBKP_PLUGIN_SLUG; ?>&hmbkp_delete=<?php echo $encode ?>" class="delete"><?php _e( 'Delete', 'hmbkp' ); ?></a>
|
| 25 |
-
|
| 26 |
-
</td>
|
| 27 |
-
|
| 28 |
-
</tr>
|
| 29 |
-
|
| 30 |
-
<?php }
|
| 31 |
-
|
| 32 |
-
/**
|
| 33 |
-
* Displays admin notices for various error / warning
|
| 34 |
-
* conditions
|
| 35 |
-
*
|
| 36 |
-
* @return void
|
| 37 |
-
*/
|
| 38 |
-
function hmbkp_admin_notices() {
|
| 39 |
-
|
| 40 |
-
// If the backups directory doesn't exist and can't be automatically created
|
| 41 |
-
if ( !is_dir( hmbkp_path() ) ) :
|
| 42 |
-
|
| 43 |
-
function hmbkp_path_exists_warning() {
|
| 44 |
-
$php_user = exec( 'whoami' );
|
| 45 |
-
$php_group = reset( explode( ' ', exec( 'groups' ) ) );
|
| 46 |
-
echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress is almost ready.', 'hmbkp' ) . '</strong> ' . sprintf( __( 'The backups directory can\'t be created because your %s directory isn\'t writable, run %s or %s or create the folder yourself.', 'hmbkp' ), '<code>wp-content</code>', '<code>chown ' . $php_user . ':' . $php_group . ' ' . WP_CONTENT_DIR . '</code>', '<code>chmod 777 ' . WP_CONTENT_DIR . '</code>' ) . '</p></div>';
|
| 47 |
-
}
|
| 48 |
-
add_action( 'admin_notices', 'hmbkp_path_exists_warning' );
|
| 49 |
-
|
| 50 |
-
endif;
|
| 51 |
-
|
| 52 |
-
// If the backups directory exists but isn't writable
|
| 53 |
-
if ( is_dir( hmbkp_path() ) && !is_writable( hmbkp_path() ) ) :
|
| 54 |
-
|
| 55 |
-
function hmbkp_writable_path_warning() {
|
| 56 |
-
$php_user = exec( 'whoami' );
|
| 57 |
-
$php_group = reset( explode( ' ', exec( 'groups' ) ) );
|
| 58 |
-
echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress is almost ready.', 'hmbkp' ) . '</strong> ' . sprintf( __( 'Your backups directory isn\'t writable. run %s or %s or set the permissions yourself.', 'hmbkp' ), '<code>chown -R ' . $php_user . ':' . $php_group . ' ' . hmbkp_path() . '</code>', '<code>chmod -R 777 ' . hmbkp_path() . '</code>' ) . '</p></div>';
|
| 59 |
-
}
|
| 60 |
-
add_action( 'admin_notices', 'hmbkp_writable_path_warning' );
|
| 61 |
-
|
| 62 |
-
endif;
|
| 63 |
-
|
| 64 |
-
// If safe mode is active
|
| 65 |
-
if ( hmbkp_is_safe_mode_active() ) :
|
| 66 |
-
|
| 67 |
-
function hmbkp_safe_mode_warning() {
|
| 68 |
-
echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</strong> ' . sprintf( __( ' %s is running in %s. Please contact your host and ask them to disable %s.', 'hmbkp' ), '<code>PHP</code>', '<a href="http://php.net/manual/en/features.safe-mode.php"><code>Safe Mode</code></a>', '<code>Safe Mode</code>' ) . '</p></div>';
|
| 69 |
-
}
|
| 70 |
-
add_action( 'admin_notices', 'hmbkp_safe_mode_warning' );
|
| 71 |
-
|
| 72 |
-
endif;
|
| 73 |
-
|
| 74 |
-
// If both HMBKP_FILES_ONLY & HMBKP_DATABASE_ONLY are defined at the same time
|
| 75 |
-
if ( defined( 'HMBKP_FILES_ONLY' ) && HMBKP_FILES_ONLY && defined( 'HMBKP_DATABASE_ONLY' ) && HMBKP_DATABASE_ONLY ) :
|
| 76 |
-
|
| 77 |
-
function hmbkp_nothing_to_backup_warning() {
|
| 78 |
-
echo '<div id="hmbkp-warning" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</strong> ' . sprintf( __( 'You have both %s and %s defined so there isn\'t anything to back up.', 'hmbkp' ), '<code>HMBKP_DATABASE_ONLY</code>', '<code>HMBKP_FILES_ONLY</code>' ) . '</p></div>';
|
| 79 |
-
}
|
| 80 |
-
add_action( 'admin_notices', 'hmbkp_nothing_to_backup_warning' );
|
| 81 |
-
|
| 82 |
-
endif;
|
| 83 |
-
|
| 84 |
-
// If the email address is invalid
|
| 85 |
-
if ( defined( 'HMBKP_EMAIL' ) && !is_email( HMBKP_EMAIL ) ) :
|
| 86 |
-
|
| 87 |
-
function hmbkp_email_invalid_warning() {
|
| 88 |
-
echo '<div id="hmbkp-email_invalid" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</strong> ' . sprintf( __( '%s is not a valid email address.', 'hmbkp' ), '<code>' . HMBKP_EMAIL . '</code>' ) . '</p></div>';
|
| 89 |
-
}
|
| 90 |
-
add_action( 'admin_notices', 'hmbkp_email_invalid_warning' );
|
| 91 |
-
|
| 92 |
-
endif;
|
| 93 |
-
|
| 94 |
-
// If the email failed to send
|
| 95 |
-
if ( defined( 'HMBKP_EMAIL' ) && get_option( 'hmbkp_email_error' ) ) :
|
| 96 |
-
|
| 97 |
-
function hmbkp_email_failed_warning() {
|
| 98 |
-
echo '<div id="hmbkp-email_invalid" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</strong> ' . __( 'The last backup email failed to send.', 'hmbkp' ) . '</p></div>';
|
| 99 |
-
}
|
| 100 |
-
add_action( 'admin_notices', 'hmbkp_email_failed_warning' );
|
| 101 |
-
|
| 102 |
-
endif;
|
| 103 |
-
|
| 104 |
-
// If a custom backups directory is defined and it doesn't exist and can't be created
|
| 105 |
-
if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && !is_dir( HMBKP_PATH ) ) :
|
| 106 |
-
|
| 107 |
-
function hmbkp_custom_path_exists_warning() {
|
| 108 |
-
echo '<div id="hmbkp-email_invalid" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</strong> ' . sprintf( __( 'Your custom backups directory %s doesn\'t exist and can\'t be created, your backups will be saved to %s instead.', 'hmbkp' ), '<code>' . HMBKP_PATH . '</code>', '<code>' . hmbkp_path() . '</code>' ) . '</p></div>';
|
| 109 |
-
}
|
| 110 |
-
add_action( 'admin_notices', 'hmbkp_custom_path_exists_warning' );
|
| 111 |
-
|
| 112 |
-
endif;
|
| 113 |
-
|
| 114 |
-
// If a custom backups directory is defined and exists but isn't writable
|
| 115 |
-
if ( defined( 'HMBKP_PATH' ) && HMBKP_PATH && is_dir( HMBKP_PATH ) && !is_writable( HMBKP_PATH ) ) :
|
| 116 |
-
|
| 117 |
-
function hmbkp_custom_path_writable_notice() {
|
| 118 |
-
echo '<div id="hmbkp-email_invalid" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</strong> ' . sprintf( __( 'Your custom backups directory %s isn\'t writable, new backups will be saved to %s instead.', 'hmbkp' ), '<code>' . HMBKP_PATH . '</code>', '<code>' . hmbkp_path() . '</code>' ) . '</p></div>';
|
| 119 |
-
}
|
| 120 |
-
add_action( 'admin_notices', 'hmbkp_custom_path_writable_notice' );
|
| 121 |
-
|
| 122 |
-
endif;
|
| 123 |
-
|
| 124 |
-
// If there are custom excludes defined and any of the files or directories don't exist
|
| 125 |
-
if ( hmbkp_invalid_custom_excludes() ) :
|
| 126 |
-
|
| 127 |
-
function hmbkp_invalid_exclude_notice() {
|
| 128 |
-
echo '<div id="hmbkp-email_invalid" class="updated fade"><p><strong>' . __( 'BackUpWordPress has detected a problem.', 'hmbkp' ) . '</strong> ' . sprintf( __( 'You have defined a custom exclude list but the following paths don\'t exist %s, are you sure you entered them correctly?', 'hmbkp' ), '<code>' . implode( '</code>, <code>', (array) hmbkp_invalid_custom_excludes() ) . '</code>' ) . '</p></div>';
|
| 129 |
-
}
|
| 130 |
-
add_action( 'admin_notices', 'hmbkp_invalid_exclude_notice' );
|
| 131 |
-
|
| 132 |
-
endif;
|
| 133 |
-
|
| 134 |
-
}
|
| 135 |
-
add_action( 'admin_head', 'hmbkp_admin_notices' );
|
| 136 |
-
|
| 137 |
-
/**
|
| 138 |
-
* Hook in an change the plugin description when BackUpWordPress is activated
|
| 139 |
-
*
|
| 140 |
-
* @param array $plugins
|
| 141 |
-
* @return $plugins
|
| 142 |
-
*/
|
| 143 |
-
function hmbkp_plugin_row( $plugins ) {
|
| 144 |
-
|
| 145 |
-
if ( isset( $plugins[HMBKP_PLUGIN_SLUG . '/plugin.php'] ) )
|
| 146 |
-
$plugins[HMBKP_PLUGIN_SLUG . '/plugin.php']['Description'] = str_replace( 'Once activated you\'ll find me under <strong>Tools → Backups</strong>', 'Find me under <strong><a href="' . admin_url( 'tools.php?page=' . HMBKP_PLUGIN_SLUG ) . '">Tools → Backups</a></strong>', $plugins[HMBKP_PLUGIN_SLUG . '/plugin.php']['Description'] );
|
| 147 |
-
|
| 148 |
-
return $plugins;
|
| 149 |
-
|
| 150 |
-
}
|
| 151 |
-
add_filter( 'all_plugins', 'hmbkp_plugin_row', 10 );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
plugin.php
CHANGED
|
@@ -5,7 +5,7 @@ Plugin Name: BackUpWordPress
|
|
| 5 |
Plugin URI: http://humanmade.co.uk/
|
| 6 |
Description: Simple automated backups of your WordPress powered website. Once activated you'll find me under <strong>Tools → Backups</strong>.
|
| 7 |
Author: Human Made Limited
|
| 8 |
-
Version: 1.3
|
| 9 |
Author URI: http://humanmade.co.uk/
|
| 10 |
*/
|
| 11 |
|
|
@@ -31,11 +31,22 @@ define( 'HMBKP_PLUGIN_PATH', WP_PLUGIN_DIR . '/' . HMBKP_PLUGIN_SLUG );
|
|
| 31 |
define( 'HMBKP_PLUGIN_URL', WP_PLUGIN_URL . '/' . HMBKP_PLUGIN_SLUG );
|
| 32 |
define( 'HMBKP_REQUIRED_WP_VERSION', '3.1' );
|
| 33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
// Don't activate on old versions of WordPress
|
| 35 |
if ( version_compare( get_bloginfo('version'), HMBKP_REQUIRED_WP_VERSION, '<' ) ) {
|
| 36 |
|
| 37 |
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
| 38 |
-
|
| 39 |
deactivate_plugins( ABSPATH . 'wp-content/plugins/' . HMBKP_PLUGIN_SLUG . '/plugin.php' );
|
| 40 |
|
| 41 |
if ( isset( $_GET['action'] ) && ( $_GET['action'] == 'activate' || $_GET['action'] == 'error_scrape' ) )
|
| 5 |
Plugin URI: http://humanmade.co.uk/
|
| 6 |
Description: Simple automated backups of your WordPress powered website. Once activated you'll find me under <strong>Tools → Backups</strong>.
|
| 7 |
Author: Human Made Limited
|
| 8 |
+
Version: 1.3.1
|
| 9 |
Author URI: http://humanmade.co.uk/
|
| 10 |
*/
|
| 11 |
|
| 31 |
define( 'HMBKP_PLUGIN_URL', WP_PLUGIN_URL . '/' . HMBKP_PLUGIN_SLUG );
|
| 32 |
define( 'HMBKP_REQUIRED_WP_VERSION', '3.1' );
|
| 33 |
|
| 34 |
+
|
| 35 |
+
// Don't activate on anything less than PHP5
|
| 36 |
+
if ( version_compare( phpversion(), '5.0', '<' ) ) {
|
| 37 |
+
|
| 38 |
+
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
| 39 |
+
deactivate_plugins( ABSPATH . 'wp-content/plugins/' . HMBKP_PLUGIN_SLUG . '/plugin.php' );
|
| 40 |
+
|
| 41 |
+
if ( isset( $_GET['action'] ) && ( $_GET['action'] == 'activate' || $_GET['action'] == 'error_scrape' ) )
|
| 42 |
+
die( __( 'BackUpWordPress requires PHP version 5.0.', 'hmbkp' ) );
|
| 43 |
+
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
// Don't activate on old versions of WordPress
|
| 47 |
if ( version_compare( get_bloginfo('version'), HMBKP_REQUIRED_WP_VERSION, '<' ) ) {
|
| 48 |
|
| 49 |
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
|
|
|
| 50 |
deactivate_plugins( ABSPATH . 'wp-content/plugins/' . HMBKP_PLUGIN_SLUG . '/plugin.php' );
|
| 51 |
|
| 52 |
if ( isset( $_GET['action'] ) && ( $_GET['action'] == 'activate' || $_GET['action'] == 'error_scrape' ) )
|
readme.txt
CHANGED
|
@@ -3,7 +3,7 @@ Contributors: willmot, mattheu, joehoyle, humanmade
|
|
| 3 |
Tags: back up, back up, backup, backups, database, zip, db, files, archive, humanmade
|
| 4 |
Requires at least: 3.1
|
| 5 |
Tested up to: 3.1.2
|
| 6 |
-
Stable tag: 1.3
|
| 7 |
|
| 8 |
Simple automated back ups of your WordPress powered website.
|
| 9 |
|
|
@@ -75,6 +75,10 @@ You can also twitter <a href="http://twitter.com/humanmadeltd">@humanmadeltd</a>
|
|
| 75 |
|
| 76 |
== Changelog ==
|
| 77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
#### 1.3
|
| 79 |
|
| 80 |
* Re-written back up engine, no longer copies everything to a tmp folder before zipping which should improve speed and reliability.
|
| 3 |
Tags: back up, back up, backup, backups, database, zip, db, files, archive, humanmade
|
| 4 |
Requires at least: 3.1
|
| 5 |
Tested up to: 3.1.2
|
| 6 |
+
Stable tag: 1.3.1
|
| 7 |
|
| 8 |
Simple automated back ups of your WordPress powered website.
|
| 9 |
|
| 75 |
|
| 76 |
== Changelog ==
|
| 77 |
|
| 78 |
+
#### 1.3.1
|
| 79 |
+
|
| 80 |
+
* Check for PHP version. Deactivate plugin if running on PHP version 4.
|
| 81 |
+
|
| 82 |
#### 1.3
|
| 83 |
|
| 84 |
* Re-written back up engine, no longer copies everything to a tmp folder before zipping which should improve speed and reliability.
|
