Version Description
Download this release
Release Info
| Developer | danielbachhuber |
| Plugin | |
| Version | 2.7.2 |
| Comparing to | |
| See all releases | |
Code changes from version 2.7.1 to 2.7.2
- plugin.php +1 -1
- readme.txt +7 -2
- wprp.admin.php +1 -1
- wprp.backups.php +28 -17
- wprp.hm.backup.php +8 -8
plugin.php
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
/*
|
| 4 |
Plugin Name: WP Remote
|
| 5 |
Description: Manage your WordPress site with <a href="https://wpremote.com/">WP Remote</a>. <strong>Deactivate to clear your API Key.</strong>
|
| 6 |
-
Version: 2.7.
|
| 7 |
Author: Human Made Limited
|
| 8 |
Author URI: http://hmn.md/
|
| 9 |
*/
|
| 3 |
/*
|
| 4 |
Plugin Name: WP Remote
|
| 5 |
Description: Manage your WordPress site with <a href="https://wpremote.com/">WP Remote</a>. <strong>Deactivate to clear your API Key.</strong>
|
| 6 |
+
Version: 2.7.2
|
| 7 |
Author: Human Made Limited
|
| 8 |
Author URI: http://hmn.md/
|
| 9 |
*/
|
readme.txt
CHANGED
|
@@ -2,8 +2,8 @@
|
|
| 2 |
Contributors: humanmade, willmot, joehoyle, danielbachhuber, mattheu, pauldewouters, cuvelier, tcrsavage
|
| 3 |
Tags: wpremote, remote administration, multiple wordpress
|
| 4 |
Requires at least: 3.0
|
| 5 |
-
Tested up to: 3.8
|
| 6 |
-
Stable tag: 2.7.
|
| 7 |
|
| 8 |
WP Remote is a free web app that enables you to easily manage all of your WordPress powered sites from one place.
|
| 9 |
|
|
@@ -37,6 +37,11 @@ You can email us at support@wpremote.com for support.
|
|
| 37 |
|
| 38 |
== Changelog ==
|
| 39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
#### 2.7.1 (23 December 2013)
|
| 41 |
|
| 42 |
* Bug fix: Restore plugin and theme installation mechanism.
|
| 2 |
Contributors: humanmade, willmot, joehoyle, danielbachhuber, mattheu, pauldewouters, cuvelier, tcrsavage
|
| 3 |
Tags: wpremote, remote administration, multiple wordpress
|
| 4 |
Requires at least: 3.0
|
| 5 |
+
Tested up to: 3.8.1
|
| 6 |
+
Stable tag: 2.7.2
|
| 7 |
|
| 8 |
WP Remote is a free web app that enables you to easily manage all of your WordPress powered sites from one place.
|
| 9 |
|
| 37 |
|
| 38 |
== Changelog ==
|
| 39 |
|
| 40 |
+
#### 2.7.2 (22 January 2014)
|
| 41 |
+
|
| 42 |
+
* Misc improvements to the accuracy of the backup restart mechanism.
|
| 43 |
+
* Inline styles to insure the API key prompt always appears, even if a theme or plugin may hide admin notices.
|
| 44 |
+
|
| 45 |
#### 2.7.1 (23 December 2013)
|
| 46 |
|
| 47 |
* Bug fix: Restore plugin and theme installation mechanism.
|
wprp.admin.php
CHANGED
|
@@ -20,7 +20,7 @@ add_action( 'admin_menu', 'wprp_setup_admin' );
|
|
| 20 |
*/
|
| 21 |
function wprp_add_api_key_admin_notice() { ?>
|
| 22 |
|
| 23 |
-
<div id="wprp-message" class="updated">
|
| 24 |
|
| 25 |
<form method="post" action="options.php">
|
| 26 |
|
| 20 |
*/
|
| 21 |
function wprp_add_api_key_admin_notice() { ?>
|
| 22 |
|
| 23 |
+
<div id="wprp-message" class="updated" style="display:block !important;">
|
| 24 |
|
| 25 |
<form method="post" action="options.php">
|
| 26 |
|
wprp.backups.php
CHANGED
|
@@ -39,6 +39,8 @@ class WPRP_Backups extends WPRP_HM_Backup {
|
|
| 39 |
*/
|
| 40 |
public function __construct() {
|
| 41 |
|
|
|
|
|
|
|
| 42 |
// Set the backup path
|
| 43 |
$this->set_path( $this->path() );
|
| 44 |
|
|
@@ -353,14 +355,14 @@ class WPRP_Backups extends WPRP_HM_Backup {
|
|
| 353 |
*/
|
| 354 |
private function path_default() {
|
| 355 |
|
| 356 |
-
|
| 357 |
-
|
| 358 |
|
| 359 |
$upload_dir = wp_upload_dir();
|
| 360 |
|
| 361 |
// If the backups dir can't be created in WP_CONTENT_DIR then fallback to uploads
|
| 362 |
if ( ( ( ! is_dir( $path ) && ! is_writable( dirname( $path ) ) ) || ( is_dir( $path ) && ! is_writable( $path ) ) ) && strpos( $path, $upload_dir['basedir'] ) === false )
|
| 363 |
-
$path = parent::conform_dir( trailingslashit( $upload_dir['basedir'] ) .
|
| 364 |
|
| 365 |
return $path;
|
| 366 |
}
|
|
@@ -524,7 +526,7 @@ class WPRP_Backups extends WPRP_HM_Backup {
|
|
| 524 |
*
|
| 525 |
* @access private
|
| 526 |
*/
|
| 527 |
-
private function is_backup_still_running() {
|
| 528 |
|
| 529 |
// Check whether there's supposed to be a backup in progress
|
| 530 |
if ( false === ( $process_id = $this->get_backup_process_id() ) )
|
|
@@ -536,28 +538,37 @@ class WPRP_Backups extends WPRP_HM_Backup {
|
|
| 536 |
else
|
| 537 |
$time_to_wait = 90;
|
| 538 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 539 |
// If the heartbeat has been modified in the last 90 seconds, we might not be dead
|
| 540 |
if ( ( time() - $this->get_heartbeat_timestamp() ) < $time_to_wait )
|
| 541 |
return true;
|
| 542 |
|
| 543 |
-
// Check if
|
| 544 |
-
$
|
| 545 |
-
|
| 546 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 547 |
|
| 548 |
-
|
| 549 |
-
|
| 550 |
-
|
| 551 |
-
foreach( $ziparchive_files as $ziparchive_file ) {
|
| 552 |
-
$ziparchive_mtimes[] = filemtime( $ziparchive_file );
|
| 553 |
}
|
| 554 |
-
|
| 555 |
-
|
| 556 |
-
|
| 557 |
return true;
|
| 558 |
}
|
|
|
|
| 559 |
|
| 560 |
return false;
|
|
|
|
| 561 |
}
|
| 562 |
|
| 563 |
/**
|
|
@@ -580,7 +591,7 @@ class WPRP_Backups extends WPRP_HM_Backup {
|
|
| 580 |
return false;
|
| 581 |
|
| 582 |
// Check whether there's supposed to be a backup in progress
|
| 583 |
-
if ( $this->get_backup_process_id() && $this->is_backup_still_running() )
|
| 584 |
return false;
|
| 585 |
|
| 586 |
// Uh oh, needs to be restarted
|
| 39 |
*/
|
| 40 |
public function __construct() {
|
| 41 |
|
| 42 |
+
parent::__construct();
|
| 43 |
+
|
| 44 |
// Set the backup path
|
| 45 |
$this->set_path( $this->path() );
|
| 46 |
|
| 355 |
*/
|
| 356 |
private function path_default() {
|
| 357 |
|
| 358 |
+
$dirname = substr( $this->key(), 0, 10 ) . '-wprbackups';
|
| 359 |
+
$path = parent::conform_dir( trailingslashit( WP_CONTENT_DIR ) . $dirname );
|
| 360 |
|
| 361 |
$upload_dir = wp_upload_dir();
|
| 362 |
|
| 363 |
// If the backups dir can't be created in WP_CONTENT_DIR then fallback to uploads
|
| 364 |
if ( ( ( ! is_dir( $path ) && ! is_writable( dirname( $path ) ) ) || ( is_dir( $path ) && ! is_writable( $path ) ) ) && strpos( $path, $upload_dir['basedir'] ) === false )
|
| 365 |
+
$path = parent::conform_dir( trailingslashit( $upload_dir['basedir'] ) . $dirname );
|
| 366 |
|
| 367 |
return $path;
|
| 368 |
}
|
| 526 |
*
|
| 527 |
* @access private
|
| 528 |
*/
|
| 529 |
+
private function is_backup_still_running( $context = 'get_backup' ) {
|
| 530 |
|
| 531 |
// Check whether there's supposed to be a backup in progress
|
| 532 |
if ( false === ( $process_id = $this->get_backup_process_id() ) )
|
| 538 |
else
|
| 539 |
$time_to_wait = 90;
|
| 540 |
|
| 541 |
+
// Give heartbeat requests a little bit of time to restart
|
| 542 |
+
if ( 'get_backup' == $context )
|
| 543 |
+
$time_to_wait += 15;
|
| 544 |
+
|
| 545 |
// If the heartbeat has been modified in the last 90 seconds, we might not be dead
|
| 546 |
if ( ( time() - $this->get_heartbeat_timestamp() ) < $time_to_wait )
|
| 547 |
return true;
|
| 548 |
|
| 549 |
+
// Check if there's any file being modified.
|
| 550 |
+
$backup_file_dirs = array( $this->get_path() );
|
| 551 |
+
|
| 552 |
+
if ( $this->is_using_file_manifest() ) {
|
| 553 |
+
$backup_file_dirs[] = $this->get_file_manifest_dirpath();
|
| 554 |
+
}
|
| 555 |
+
|
| 556 |
+
foreach ( $backup_file_dirs as $backup_file_dir ) {
|
| 557 |
+
$backup_files = glob( $backup_file_dir . '/*' );
|
| 558 |
|
| 559 |
+
$file_mtimes = array();
|
| 560 |
+
foreach( $backup_files as $backup_file ) {
|
| 561 |
+
$file_mtimes[] = filemtime( $backup_file );
|
|
|
|
|
|
|
| 562 |
}
|
| 563 |
+
if ( ! empty( $file_mtimes ) ) {
|
| 564 |
+
$latest_file_mtime = max( $file_mtimes );
|
| 565 |
+
if ( ( time() - $latest_file_mtime ) < $time_to_wait )
|
| 566 |
return true;
|
| 567 |
}
|
| 568 |
+
}
|
| 569 |
|
| 570 |
return false;
|
| 571 |
+
|
| 572 |
}
|
| 573 |
|
| 574 |
/**
|
| 591 |
return false;
|
| 592 |
|
| 593 |
// Check whether there's supposed to be a backup in progress
|
| 594 |
+
if ( $this->get_backup_process_id() && $this->is_backup_still_running( 'backup_heartbeat' ) )
|
| 595 |
return false;
|
| 596 |
|
| 597 |
// Uh oh, needs to be restarted
|
wprp.hm.backup.php
CHANGED
|
@@ -1067,8 +1067,14 @@ class WPRP_HM_Backup {
|
|
| 1067 |
|
| 1068 |
$this->do_action( 'hmbkp_archive_started' );
|
| 1069 |
|
| 1070 |
-
//
|
| 1071 |
-
if (
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1072 |
$this->archive_method = 'zip_archive_files';
|
| 1073 |
|
| 1074 |
$ret = $this->zip_archive_files( $next_files );
|
|
@@ -1078,12 +1084,6 @@ class WPRP_HM_Backup {
|
|
| 1078 |
}
|
| 1079 |
}
|
| 1080 |
|
| 1081 |
-
// Fall back to `zip` if ZipArchive doesn't exist
|
| 1082 |
-
else if ( $this->get_zip_command_path() ) {
|
| 1083 |
-
$this->archive_method = 'zip_files';
|
| 1084 |
-
$error = $this->zip_files( $next_files );
|
| 1085 |
-
}
|
| 1086 |
-
|
| 1087 |
// Last opportunity
|
| 1088 |
else {
|
| 1089 |
$this->archive_method = 'pcl_zip_files';
|
| 1067 |
|
| 1068 |
$this->do_action( 'hmbkp_archive_started' );
|
| 1069 |
|
| 1070 |
+
// `zip` is the most performant archive method
|
| 1071 |
+
if ( $this->get_zip_command_path() ) {
|
| 1072 |
+
$this->archive_method = 'zip_files';
|
| 1073 |
+
$error = $this->zip_files( $next_files );
|
| 1074 |
+
}
|
| 1075 |
+
|
| 1076 |
+
// ZipArchive is also pretty fast for chunked backups
|
| 1077 |
+
else if ( class_exists( 'ZipArchive' ) && empty( $this->skip_zip_archive ) ) {
|
| 1078 |
$this->archive_method = 'zip_archive_files';
|
| 1079 |
|
| 1080 |
$ret = $this->zip_archive_files( $next_files );
|
| 1084 |
}
|
| 1085 |
}
|
| 1086 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1087 |
// Last opportunity
|
| 1088 |
else {
|
| 1089 |
$this->archive_method = 'pcl_zip_files';
|
