Version Description
- fix: Backup archives not containing all files: https://github.com/watchfulli/XCloner-Wordpress/issues/179
- fix: File not found error while scanning for files: https://github.com/watchfulli/XCloner-Wordpress/issues/266
Download this release
Release Info
Developer | watchful |
Plugin | XCloner – Backup and Restore |
Version | 4.6.1 |
Comparing to | |
See all releases |
Code changes from version 4.6.0 to 4.6.1
- README.txt +5 -1
- lib/Xcloner.php +50 -7
- lib/Xcloner_Api.php +58 -181
- lib/Xcloner_Archive.php +2 -3
- lib/Xcloner_Database.php +0 -4
- lib/Xcloner_Encryption.php +0 -4
- lib/Xcloner_Filesystem.php +5 -19
- lib/Xcloner_Restore.php +1 -1
- lib/Xcloner_Settings.php +1 -20
- vendor/autoload.php +1 -1
- vendor/composer/autoload_real.php +7 -7
- vendor/composer/autoload_static.php +5 -5
- vendor/composer/installed.php +6 -6
- xcloner.php +1 -1
README.txt
CHANGED
@@ -5,7 +5,7 @@ Tags: backup, database backup, cloud backup, WordPress backup, WordPress migrati
|
|
5 |
Requires at least: 5.1
|
6 |
Requires PHP: 7.3
|
7 |
Tested up to: 6.1
|
8 |
-
Stable tag: 4.6.
|
9 |
|
10 |
|
11 |
XCloner is a backup plugin that allows you to safely back up and restore your WordPress sites. You can send site backups to SFTP, Dropbox, Amazon, Google Drive, Backblaze and other locations.
|
@@ -117,6 +117,10 @@ Of course, schedules can be adjusted accordingly to how often you update your si
|
|
117 |
|
118 |
== Changelog ==
|
119 |
|
|
|
|
|
|
|
|
|
120 |
= 4.6.0 =
|
121 |
* Split UI of local restore and site cloning: https://github.com/watchfulli/XCloner-Wordpress/issues/258
|
122 |
|
5 |
Requires at least: 5.1
|
6 |
Requires PHP: 7.3
|
7 |
Tested up to: 6.1
|
8 |
+
Stable tag: 4.6.1
|
9 |
|
10 |
|
11 |
XCloner is a backup plugin that allows you to safely back up and restore your WordPress sites. You can send site backups to SFTP, Dropbox, Amazon, Google Drive, Backblaze and other locations.
|
117 |
|
118 |
== Changelog ==
|
119 |
|
120 |
+
= 4.6.1 =
|
121 |
+
* fix: Backup archives not containing all files: https://github.com/watchfulli/XCloner-Wordpress/issues/179
|
122 |
+
* fix: File not found error while scanning for files: https://github.com/watchfulli/XCloner-Wordpress/issues/266
|
123 |
+
|
124 |
= 4.6.0 =
|
125 |
* Split UI of local restore and site cloning: https://github.com/watchfulli/XCloner-Wordpress/issues/258
|
126 |
|
lib/Xcloner.php
CHANGED
@@ -88,12 +88,17 @@ class Xcloner
|
|
88 |
/**
|
89 |
* @throws Exception
|
90 |
*/
|
91 |
-
public function __construct()
|
92 |
{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
$this->xcloner_logger = new Xcloner_Logger($this, "xcloner_api");
|
94 |
$this->xcloner_loader = new Xcloner_Loader($this);
|
95 |
-
$this->xcloner_settings = new Xcloner_Settings($this);
|
96 |
-
$this->xcloner_sanitization = new Xcloner_Sanitization();
|
97 |
$this->xcloner_requirements = new Xcloner_Requirements($this);
|
98 |
$this->xcloner_filesystem = new Xcloner_Filesystem($this);
|
99 |
$this->archive_system = new Xcloner_Archive($this);
|
@@ -105,13 +110,53 @@ class Xcloner
|
|
105 |
$this->xcloner_api = new Xcloner_Api($this);
|
106 |
$this->xcloner_restore = new Xcloner_Restore($this);
|
107 |
|
108 |
-
if (!class_exists('Xcloner_Admin')) {
|
109 |
require_once XCLONER_PLUGIN_DIR . '/admin/class-xcloner-admin.php';
|
110 |
}
|
111 |
|
112 |
$this->xcloner_admin = new Xcloner_Admin($this);
|
113 |
}
|
114 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
public function get_xcloner_loader()
|
116 |
{
|
117 |
return $this->xcloner_loader;
|
@@ -368,7 +413,6 @@ class Xcloner
|
|
368 |
|
369 |
public function define_plugin_settings()
|
370 |
{
|
371 |
-
require_once( ABSPATH . '/wp-includes/pluggable.php' );
|
372 |
/**
|
373 |
* register wporg_settings_init to the admin_init action hook
|
374 |
*/
|
@@ -549,7 +593,6 @@ class Xcloner
|
|
549 |
$this->xcloner_loader->add_action('wp_ajax_upload_backup_to_remote', [$this->xcloner_api, 'upload_backup_to_remote']);
|
550 |
$this->xcloner_loader->add_action('wp_ajax_list_backup_files', [$this->xcloner_api, 'list_backup_files']);
|
551 |
$this->xcloner_loader->add_action('wp_ajax_restore_upload_backup', [$this->xcloner_api, 'restore_upload_backup']);
|
552 |
-
$this->xcloner_loader->add_action('wp_ajax_download_restore_script', [$this->xcloner_api, 'download_restore_script']);
|
553 |
$this->xcloner_loader->add_action('wp_ajax_copy_backup_remote_to_local', [$this->xcloner_api, 'copy_backup_remote_to_local']);
|
554 |
$this->xcloner_loader->add_action('wp_ajax_restore_backup', [$this, 'restore_backup']);
|
555 |
$this->xcloner_loader->add_action('wp_ajax_backup_encryption', [$this->xcloner_api, 'backup_encryption']);
|
@@ -816,7 +859,7 @@ class Xcloner
|
|
816 |
*/
|
817 |
public function restore_backup()
|
818 |
{
|
819 |
-
$this->
|
820 |
|
821 |
$action = $this->xcloner_sanitization->sanitize_input_as_string($_POST['xcloner_action']);
|
822 |
if (empty($action)) {
|
88 |
/**
|
89 |
* @throws Exception
|
90 |
*/
|
91 |
+
public function __construct($hash = null)
|
92 |
{
|
93 |
+
$this->xcloner_sanitization = new Xcloner_Sanitization();
|
94 |
+
$this->xcloner_settings = new Xcloner_Settings($this);
|
95 |
+
$hash = $hash ?? $this->get_hash_from_request();
|
96 |
+
if ($hash) {
|
97 |
+
$this->xcloner_settings->set_hash($hash);
|
98 |
+
}
|
99 |
+
|
100 |
$this->xcloner_logger = new Xcloner_Logger($this, "xcloner_api");
|
101 |
$this->xcloner_loader = new Xcloner_Loader($this);
|
|
|
|
|
102 |
$this->xcloner_requirements = new Xcloner_Requirements($this);
|
103 |
$this->xcloner_filesystem = new Xcloner_Filesystem($this);
|
104 |
$this->archive_system = new Xcloner_Archive($this);
|
110 |
$this->xcloner_api = new Xcloner_Api($this);
|
111 |
$this->xcloner_restore = new Xcloner_Restore($this);
|
112 |
|
113 |
+
if (!class_exists('Xcloner_Admin') && defined('XCLONER_PLUGIN_DIR')) {
|
114 |
require_once XCLONER_PLUGIN_DIR . '/admin/class-xcloner-admin.php';
|
115 |
}
|
116 |
|
117 |
$this->xcloner_admin = new Xcloner_Admin($this);
|
118 |
}
|
119 |
|
120 |
+
private function get_hash_from_request()
|
121 |
+
{
|
122 |
+
try {
|
123 |
+
$this->check_access();
|
124 |
+
} catch (Exception $e) {
|
125 |
+
return null;
|
126 |
+
}
|
127 |
+
|
128 |
+
if (!isset($_POST['hash'])) {
|
129 |
+
return null;
|
130 |
+
}
|
131 |
+
|
132 |
+
return $this->xcloner_sanitization->sanitize_input_as_string($_POST['hash']) ?: null;
|
133 |
+
}
|
134 |
+
|
135 |
+
/**
|
136 |
+
* Checks API access
|
137 |
+
* @throws Exception
|
138 |
+
*/
|
139 |
+
public function check_access()
|
140 |
+
{
|
141 |
+
require_once( ABSPATH . '/wp-includes/pluggable.php' );
|
142 |
+
|
143 |
+
if (!function_exists('wp_verify_nonce')) {
|
144 |
+
throw new Exception("wp_verify_nonce function not found");
|
145 |
+
}
|
146 |
+
|
147 |
+
if (!isset($_REQUEST['_wpnonce']) || !wp_verify_nonce($_REQUEST['_wpnonce'], 'xcloner-api-nonce')) {
|
148 |
+
throw new Exception("Invalid nonce, please try again by refreshing the page!");
|
149 |
+
}
|
150 |
+
|
151 |
+
if (!function_exists('current_user_can')) {
|
152 |
+
throw new Exception("current_user_can function not found");
|
153 |
+
}
|
154 |
+
|
155 |
+
if (!current_user_can('manage_options')) {
|
156 |
+
throw new Exception("Access denied!");
|
157 |
+
}
|
158 |
+
}
|
159 |
+
|
160 |
public function get_xcloner_loader()
|
161 |
{
|
162 |
return $this->xcloner_loader;
|
413 |
|
414 |
public function define_plugin_settings()
|
415 |
{
|
|
|
416 |
/**
|
417 |
* register wporg_settings_init to the admin_init action hook
|
418 |
*/
|
593 |
$this->xcloner_loader->add_action('wp_ajax_upload_backup_to_remote', [$this->xcloner_api, 'upload_backup_to_remote']);
|
594 |
$this->xcloner_loader->add_action('wp_ajax_list_backup_files', [$this->xcloner_api, 'list_backup_files']);
|
595 |
$this->xcloner_loader->add_action('wp_ajax_restore_upload_backup', [$this->xcloner_api, 'restore_upload_backup']);
|
|
|
596 |
$this->xcloner_loader->add_action('wp_ajax_copy_backup_remote_to_local', [$this->xcloner_api, 'copy_backup_remote_to_local']);
|
597 |
$this->xcloner_loader->add_action('wp_ajax_restore_backup', [$this, 'restore_backup']);
|
598 |
$this->xcloner_loader->add_action('wp_ajax_backup_encryption', [$this->xcloner_api, 'backup_encryption']);
|
859 |
*/
|
860 |
public function restore_backup()
|
861 |
{
|
862 |
+
$this->check_access();
|
863 |
|
864 |
$action = $this->xcloner_sanitization->sanitize_input_as_string($_POST['xcloner_action']);
|
865 |
if (empty($action)) {
|
lib/Xcloner_Api.php
CHANGED
@@ -67,8 +67,6 @@ class Xcloner_Api
|
|
67 |
*/
|
68 |
public function __construct(Xcloner $xcloner_container)
|
69 |
{
|
70 |
-
//global $wpdb;
|
71 |
-
|
72 |
if (ob_get_length()) {
|
73 |
ob_end_clean();
|
74 |
}
|
@@ -99,37 +97,11 @@ class Xcloner_Api
|
|
99 |
}
|
100 |
|
101 |
/**
|
102 |
-
*
|
103 |
-
*/
|
104 |
-
public function get_xcloner_container()
|
105 |
-
{
|
106 |
-
return $this->xcloner_container;
|
107 |
-
}
|
108 |
-
|
109 |
-
|
110 |
-
/**
|
111 |
-
* Checks API access
|
112 |
-
*/
|
113 |
-
public function check_access()
|
114 |
-
{
|
115 |
-
//preparing nonce verification
|
116 |
-
if (function_exists('wp_verify_nonce')) {
|
117 |
-
if (!isset($_REQUEST['_wpnonce']) || !wp_verify_nonce($_REQUEST['_wpnonce'], 'xcloner-api-nonce')) {
|
118 |
-
throw new Error(json_encode("Invalid nonce, please try again by refreshing the page!"));
|
119 |
-
}
|
120 |
-
}
|
121 |
-
|
122 |
-
if (function_exists('current_user_can') && !current_user_can('manage_options')) {
|
123 |
-
throw new Error(json_encode("Access not allowed!"));
|
124 |
-
}
|
125 |
-
}
|
126 |
-
|
127 |
-
/*
|
128 |
-
* Save Schedule API
|
129 |
*/
|
130 |
public function save_schedule()
|
131 |
{
|
132 |
-
$this->check_access();
|
133 |
|
134 |
$scheduler = $this->xcloner_scheduler;
|
135 |
$schedule = array();
|
@@ -274,12 +246,16 @@ class Xcloner_Api
|
|
274 |
$this->send_response($response);
|
275 |
}
|
276 |
|
|
|
|
|
|
|
|
|
277 |
public function backup_files()
|
278 |
{
|
279 |
$data = array();
|
280 |
$additional = array();
|
281 |
|
282 |
-
$this->check_access();
|
283 |
|
284 |
$init = (int)$this->xcloner_sanitization->sanitize_input_as_int($_POST['init']);
|
285 |
|
@@ -340,12 +316,13 @@ class Xcloner_Api
|
|
340 |
/**
|
341 |
* @throws FileNotFoundException
|
342 |
* @throws FileExistsException
|
|
|
343 |
*/
|
344 |
public function backup_database()
|
345 |
{
|
346 |
$data = array();
|
347 |
|
348 |
-
$this->check_access();
|
349 |
|
350 |
$init = (int)$this->xcloner_sanitization->sanitize_input_as_int($_POST['init']);
|
351 |
|
@@ -368,16 +345,17 @@ class Xcloner_Api
|
|
368 |
$this->send_response($data);
|
369 |
}
|
370 |
|
371 |
-
|
372 |
-
|
373 |
-
*
|
374 |
-
*
|
|
|
375 |
*/
|
376 |
public function scan_filesystem()
|
377 |
{
|
378 |
$data = array();
|
379 |
|
380 |
-
$this->check_access();
|
381 |
|
382 |
$init = (int)$this->xcloner_sanitization->sanitize_input_as_int($_POST['init']);
|
383 |
|
@@ -407,10 +385,6 @@ class Xcloner_Api
|
|
407 |
return;
|
408 |
}
|
409 |
|
410 |
-
if (isset($params->hash)) {
|
411 |
-
$this->xcloner_settings->set_hash($this->xcloner_sanitization->sanitize_input_as_string($params->hash));
|
412 |
-
}
|
413 |
-
|
414 |
$this->form_params['extra'] = array();
|
415 |
$this->form_params['backup_params'] = array();
|
416 |
|
@@ -479,19 +453,15 @@ class Xcloner_Api
|
|
479 |
$this->send_response('{"status":false,"msg":"The data parameter must be valid JSON"}');
|
480 |
}
|
481 |
|
482 |
-
$params->hash = $this->xcloner_sanitization->sanitize_input_as_string($_POST['hash']);
|
483 |
-
|
484 |
return $params;
|
485 |
}
|
486 |
|
487 |
-
|
488 |
-
*
|
489 |
-
* Get file list for tree view API
|
490 |
-
*
|
491 |
*/
|
492 |
public function get_file_system_action()
|
493 |
{
|
494 |
-
$this->check_access();
|
495 |
|
496 |
$folder = $this->xcloner_sanitization->sanitize_input_as_relative_path($_POST['id']);
|
497 |
|
@@ -559,14 +529,12 @@ class Xcloner_Api
|
|
559 |
$this->send_response($data, 0);
|
560 |
}
|
561 |
|
562 |
-
|
563 |
-
*
|
564 |
-
* Get databases/tables list for frontend tree display API
|
565 |
-
*
|
566 |
*/
|
567 |
public function get_database_tables_action()
|
568 |
{
|
569 |
-
$this->check_access();
|
570 |
|
571 |
$database = $this->xcloner_sanitization->sanitize_input_as_raw($_POST['id']);
|
572 |
|
@@ -644,7 +612,7 @@ class Xcloner_Api
|
|
644 |
*/
|
645 |
public function get_schedule_by_id()
|
646 |
{
|
647 |
-
$this->check_access();
|
648 |
|
649 |
$schedule_id = $this->xcloner_sanitization->sanitize_input_as_int($_GET['id']);
|
650 |
$scheduler = $this->xcloner_scheduler;
|
@@ -661,11 +629,15 @@ class Xcloner_Api
|
|
661 |
$this->send_response($data);
|
662 |
}
|
663 |
|
|
|
|
|
|
|
|
|
664 |
public function get_scheduler_list()
|
665 |
{
|
666 |
$return = array();
|
667 |
|
668 |
-
$this->check_access();
|
669 |
|
670 |
$scheduler = $this->xcloner_scheduler;
|
671 |
$data = $scheduler->get_scheduler_list();
|
@@ -744,16 +716,14 @@ class Xcloner_Api
|
|
744 |
$this->send_response($return, 0);
|
745 |
}
|
746 |
|
747 |
-
|
748 |
-
*
|
749 |
-
* Delete Schedule by ID API
|
750 |
-
*
|
751 |
*/
|
752 |
public function delete_schedule_by_id()
|
753 |
{
|
754 |
$data = array();
|
755 |
|
756 |
-
$this->check_access();
|
757 |
|
758 |
$schedule_id = $this->xcloner_sanitization->sanitize_input_as_int($_GET['id']);
|
759 |
$scheduler = $this->xcloner_scheduler;
|
@@ -762,16 +732,15 @@ class Xcloner_Api
|
|
762 |
$this->send_response($data);
|
763 |
}
|
764 |
|
765 |
-
|
766 |
-
*
|
767 |
-
*
|
768 |
-
*
|
769 |
*/
|
770 |
public function delete_backup_by_name()
|
771 |
{
|
772 |
$data = array();
|
773 |
|
774 |
-
$this->check_access();
|
775 |
|
776 |
$backup_name = $this->xcloner_sanitization->sanitize_input_as_string($_POST['name']);
|
777 |
$storage_selection = $this->xcloner_sanitization->sanitize_input_as_string($_POST['storage_selection']);
|
@@ -787,7 +756,7 @@ class Xcloner_Api
|
|
787 |
*/
|
788 |
public function backup_encryption()
|
789 |
{
|
790 |
-
$this->check_access();
|
791 |
|
792 |
$backup_parts = array();
|
793 |
$return = array();
|
@@ -871,7 +840,7 @@ class Xcloner_Api
|
|
871 |
*/
|
872 |
public function backup_decryption()
|
873 |
{
|
874 |
-
$this->check_access();
|
875 |
|
876 |
$backup_parts = array();
|
877 |
$return = array();
|
@@ -917,9 +886,12 @@ class Xcloner_Api
|
|
917 |
$this->send_response($return, 0);
|
918 |
}
|
919 |
|
|
|
|
|
|
|
920 |
public function get_manage_backups_list()
|
921 |
{
|
922 |
-
$this->check_access();
|
923 |
|
924 |
$return = array(
|
925 |
"data" => array()
|
@@ -1124,7 +1096,7 @@ class Xcloner_Api
|
|
1124 |
*/
|
1125 |
public function list_backup_files()
|
1126 |
{
|
1127 |
-
$this->check_access();
|
1128 |
|
1129 |
$backup_parts = array();
|
1130 |
$return = array();
|
@@ -1194,17 +1166,17 @@ class Xcloner_Api
|
|
1194 |
$this->send_response($return, 0);
|
1195 |
}
|
1196 |
|
1197 |
-
|
1198 |
-
*
|
1199 |
*/
|
1200 |
public function copy_backup_remote_to_local()
|
1201 |
{
|
1202 |
-
$this->check_access();
|
1203 |
|
1204 |
$backup_file = $this->xcloner_sanitization->sanitize_input_as_string($_POST['file']);
|
1205 |
$storage_type = $this->xcloner_sanitization->sanitize_input_as_string($_POST['storage_type']);
|
1206 |
|
1207 |
-
$xcloner_remote_storage = $this->
|
1208 |
|
1209 |
$return = array();
|
1210 |
|
@@ -1229,14 +1201,12 @@ class Xcloner_Api
|
|
1229 |
$this->send_response($return, 0);
|
1230 |
}
|
1231 |
|
1232 |
-
|
1233 |
-
*
|
1234 |
-
* Upload backup to remote API
|
1235 |
-
*
|
1236 |
*/
|
1237 |
public function upload_backup_to_remote()
|
1238 |
{
|
1239 |
-
$this->check_access();
|
1240 |
|
1241 |
$return = array();
|
1242 |
|
@@ -1249,7 +1219,7 @@ class Xcloner_Api
|
|
1249 |
$storage_type = $this->xcloner_sanitization->sanitize_input_as_string($_POST['storage_type']);
|
1250 |
$delete_local_copy_after_transfer = $this->xcloner_sanitization->sanitize_input_as_string($_POST['delete_after_transfer']);
|
1251 |
}
|
1252 |
-
$xcloner_remote_storage = $this->
|
1253 |
|
1254 |
try {
|
1255 |
if (method_exists($xcloner_remote_storage, "upload_backup_to_storage")) {
|
@@ -1272,120 +1242,29 @@ class Xcloner_Api
|
|
1272 |
$this->send_response($return, 0);
|
1273 |
}
|
1274 |
|
1275 |
-
|
1276 |
-
*
|
1277 |
-
* Remote Storage Status Save
|
1278 |
-
*
|
1279 |
*/
|
1280 |
public function remote_storage_save_status()
|
1281 |
{
|
1282 |
-
$this->check_access();
|
1283 |
|
1284 |
$return = array();
|
1285 |
|
1286 |
-
$xcloner_remote_storage = $this->
|
1287 |
|
1288 |
$return['finished'] = $xcloner_remote_storage->change_storage_status($_POST['id'], $_POST['value']);
|
1289 |
|
1290 |
$this->send_response($return, 0);
|
1291 |
}
|
1292 |
|
1293 |
-
|
1294 |
-
/**
|
1295 |
-
* @throws ArchiveIllegalCompressionException
|
1296 |
-
* @throws ArchiveIOException
|
1297 |
-
* @throws ArchiveCorruptedException
|
1298 |
-
* @throws FileInfoException
|
1299 |
-
*/
|
1300 |
-
public function download_restore_script()
|
1301 |
-
{
|
1302 |
-
$this->check_access();
|
1303 |
-
|
1304 |
-
ob_end_clean();
|
1305 |
-
|
1306 |
-
$adapter = new Local(dirname(__DIR__), LOCK_EX, '0001');
|
1307 |
-
$xcloner_plugin_filesystem = new Filesystem($adapter, new Config([
|
1308 |
-
'disable_asserts' => true,
|
1309 |
-
]));
|
1310 |
-
|
1311 |
-
/* Generate PHAR FILE
|
1312 |
-
$file = 'restore/vendor.built';
|
1313 |
-
|
1314 |
-
if(file_exists($file))
|
1315 |
-
unlink($file);
|
1316 |
-
$phar2 = new Phar($file, 0, 'vendor.phar');
|
1317 |
-
|
1318 |
-
// add all files in the project, only include php files
|
1319 |
-
$phar2->buildFromIterator(
|
1320 |
-
new RecursiveIteratorIterator(
|
1321 |
-
new RecursiveDirectoryIterator(__DIR__.'/vendor/')),
|
1322 |
-
__DIR__);
|
1323 |
-
|
1324 |
-
$phar2->setStub($phar2->createDefaultStub('vendor/autoload.php', 'vendor/autoload.php'));
|
1325 |
-
* */
|
1326 |
-
|
1327 |
-
$tmp_file = $this->xcloner_settings->get_xcloner_tmp_path() . DS . "xcloner-restore.tgz";
|
1328 |
-
|
1329 |
-
$tar = $this->archive_system;
|
1330 |
-
$tar->create($tmp_file);
|
1331 |
-
|
1332 |
-
$vendor_phar_file = __DIR__ . "/../../../../restore/vendor.build.txt";
|
1333 |
-
if (!file_exists($vendor_phar_file)) {
|
1334 |
-
$vendor_phar_file = __DIR__ . "/../../restore/vendor.build.txt";
|
1335 |
-
}
|
1336 |
-
|
1337 |
-
$tar->addFile($vendor_phar_file, "vendor.phar");
|
1338 |
-
|
1339 |
-
//$tar->addFile(dirname(__DIR__)."/restore/vendor.tgz", "vendor.tgz");
|
1340 |
-
|
1341 |
-
$files = $xcloner_plugin_filesystem->listContents("vendor/", true);
|
1342 |
-
foreach ($files as $file) {
|
1343 |
-
$tar->addFile(dirname(__DIR__) . DS . $file['path'], $file['path']);
|
1344 |
-
}
|
1345 |
-
|
1346 |
-
$xcloner_restore_file = (__DIR__ . "/../../../../restore/xcloner_restore.php");
|
1347 |
-
if (!file_exists($xcloner_restore_file)) {
|
1348 |
-
$xcloner_restore_file = (__DIR__ . "/../../restore/xcloner_restore.php");
|
1349 |
-
}
|
1350 |
-
|
1351 |
-
$content = file_get_contents($xcloner_restore_file);
|
1352 |
-
$content = str_replace("define('AUTH_KEY', '');", "define('AUTH_KEY', '" . md5(AUTH_KEY) . "');", $content);
|
1353 |
-
|
1354 |
-
$tar->addData("xcloner_restore.php", $content);
|
1355 |
-
|
1356 |
-
$tar->close();
|
1357 |
-
|
1358 |
-
if (file_exists($tmp_file)) {
|
1359 |
-
header('Content-Description: File Transfer');
|
1360 |
-
header('Content-Type: application/octet-stream');
|
1361 |
-
header('Content-Disposition: attachment; filename="' . basename($tmp_file) . '"');
|
1362 |
-
header('Expires: 0');
|
1363 |
-
header('Cache-Control: must-revalidate');
|
1364 |
-
header('Pragma: public');
|
1365 |
-
header('Content-Length: ' . filesize($tmp_file));
|
1366 |
-
readfile($tmp_file);
|
1367 |
-
}
|
1368 |
-
|
1369 |
-
try {
|
1370 |
-
unlink($tmp_file);
|
1371 |
-
} catch (Exception $e) {
|
1372 |
-
//We are not interested in the error here
|
1373 |
-
}
|
1374 |
-
|
1375 |
-
die();
|
1376 |
-
}
|
1377 |
-
|
1378 |
-
/*
|
1379 |
-
*
|
1380 |
-
* Download backup by Name from the Storage Path
|
1381 |
-
*
|
1382 |
-
*/
|
1383 |
/**
|
1384 |
* @throws FileNotFoundException
|
|
|
1385 |
*/
|
1386 |
public function download_backup_by_name()
|
1387 |
{
|
1388 |
-
$this->check_access();
|
1389 |
|
1390 |
ob_end_clean();
|
1391 |
|
@@ -1428,15 +1307,13 @@ class Xcloner_Api
|
|
1428 |
wp_die();
|
1429 |
}
|
1430 |
|
1431 |
-
/*
|
1432 |
-
* Restore upload backup
|
1433 |
-
*/
|
1434 |
/**
|
1435 |
* @throws FileNotFoundException
|
|
|
1436 |
*/
|
1437 |
public function restore_upload_backup()
|
1438 |
{
|
1439 |
-
$this->check_access();
|
1440 |
|
1441 |
$return = array();
|
1442 |
|
@@ -1474,7 +1351,7 @@ class Xcloner_Api
|
|
1474 |
}
|
1475 |
|
1476 |
try {
|
1477 |
-
$xcloner_file_transfer = $this->
|
1478 |
$xcloner_file_transfer->set_target($target_url);
|
1479 |
$return['start'] = $xcloner_file_transfer->transfer_file($file, $start, $hash);
|
1480 |
} catch (Exception $e) {
|
67 |
*/
|
68 |
public function __construct(Xcloner $xcloner_container)
|
69 |
{
|
|
|
|
|
70 |
if (ob_get_length()) {
|
71 |
ob_end_clean();
|
72 |
}
|
97 |
}
|
98 |
|
99 |
/**
|
100 |
+
* @throws Exception
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
*/
|
102 |
public function save_schedule()
|
103 |
{
|
104 |
+
$this->xcloner_container->check_access();
|
105 |
|
106 |
$scheduler = $this->xcloner_scheduler;
|
107 |
$schedule = array();
|
246 |
$this->send_response($response);
|
247 |
}
|
248 |
|
249 |
+
/**
|
250 |
+
* @throws FileNotFoundException
|
251 |
+
* @throws Exception
|
252 |
+
*/
|
253 |
public function backup_files()
|
254 |
{
|
255 |
$data = array();
|
256 |
$additional = array();
|
257 |
|
258 |
+
$this->xcloner_container->check_access();
|
259 |
|
260 |
$init = (int)$this->xcloner_sanitization->sanitize_input_as_int($_POST['init']);
|
261 |
|
316 |
/**
|
317 |
* @throws FileNotFoundException
|
318 |
* @throws FileExistsException
|
319 |
+
* @throws Exception
|
320 |
*/
|
321 |
public function backup_database()
|
322 |
{
|
323 |
$data = array();
|
324 |
|
325 |
+
$this->xcloner_container->check_access();
|
326 |
|
327 |
$init = (int)$this->xcloner_sanitization->sanitize_input_as_int($_POST['init']);
|
328 |
|
345 |
$this->send_response($data);
|
346 |
}
|
347 |
|
348 |
+
|
349 |
+
/**
|
350 |
+
* @throws FileNotFoundException
|
351 |
+
* @throws FileExistsException
|
352 |
+
* @throws Exception
|
353 |
*/
|
354 |
public function scan_filesystem()
|
355 |
{
|
356 |
$data = array();
|
357 |
|
358 |
+
$this->xcloner_container->check_access();
|
359 |
|
360 |
$init = (int)$this->xcloner_sanitization->sanitize_input_as_int($_POST['init']);
|
361 |
|
385 |
return;
|
386 |
}
|
387 |
|
|
|
|
|
|
|
|
|
388 |
$this->form_params['extra'] = array();
|
389 |
$this->form_params['backup_params'] = array();
|
390 |
|
453 |
$this->send_response('{"status":false,"msg":"The data parameter must be valid JSON"}');
|
454 |
}
|
455 |
|
|
|
|
|
456 |
return $params;
|
457 |
}
|
458 |
|
459 |
+
/**
|
460 |
+
* @throws Exception
|
|
|
|
|
461 |
*/
|
462 |
public function get_file_system_action()
|
463 |
{
|
464 |
+
$this->xcloner_container->check_access();
|
465 |
|
466 |
$folder = $this->xcloner_sanitization->sanitize_input_as_relative_path($_POST['id']);
|
467 |
|
529 |
$this->send_response($data, 0);
|
530 |
}
|
531 |
|
532 |
+
/**
|
533 |
+
* @throws Exception
|
|
|
|
|
534 |
*/
|
535 |
public function get_database_tables_action()
|
536 |
{
|
537 |
+
$this->xcloner_container->check_access();
|
538 |
|
539 |
$database = $this->xcloner_sanitization->sanitize_input_as_raw($_POST['id']);
|
540 |
|
612 |
*/
|
613 |
public function get_schedule_by_id()
|
614 |
{
|
615 |
+
$this->xcloner_container->check_access();
|
616 |
|
617 |
$schedule_id = $this->xcloner_sanitization->sanitize_input_as_int($_GET['id']);
|
618 |
$scheduler = $this->xcloner_scheduler;
|
629 |
$this->send_response($data);
|
630 |
}
|
631 |
|
632 |
+
/**
|
633 |
+
* @throws FileNotFoundException
|
634 |
+
* @throws Exception
|
635 |
+
*/
|
636 |
public function get_scheduler_list()
|
637 |
{
|
638 |
$return = array();
|
639 |
|
640 |
+
$this->xcloner_container->check_access();
|
641 |
|
642 |
$scheduler = $this->xcloner_scheduler;
|
643 |
$data = $scheduler->get_scheduler_list();
|
716 |
$this->send_response($return, 0);
|
717 |
}
|
718 |
|
719 |
+
/**
|
720 |
+
* @throws Exception
|
|
|
|
|
721 |
*/
|
722 |
public function delete_schedule_by_id()
|
723 |
{
|
724 |
$data = array();
|
725 |
|
726 |
+
$this->xcloner_container->check_access();
|
727 |
|
728 |
$schedule_id = $this->xcloner_sanitization->sanitize_input_as_int($_GET['id']);
|
729 |
$scheduler = $this->xcloner_scheduler;
|
732 |
$this->send_response($data);
|
733 |
}
|
734 |
|
735 |
+
/**
|
736 |
+
* @throws FileNotFoundException
|
737 |
+
* @throws Exception
|
|
|
738 |
*/
|
739 |
public function delete_backup_by_name()
|
740 |
{
|
741 |
$data = array();
|
742 |
|
743 |
+
$this->xcloner_container->check_access();
|
744 |
|
745 |
$backup_name = $this->xcloner_sanitization->sanitize_input_as_string($_POST['name']);
|
746 |
$storage_selection = $this->xcloner_sanitization->sanitize_input_as_string($_POST['storage_selection']);
|
756 |
*/
|
757 |
public function backup_encryption()
|
758 |
{
|
759 |
+
$this->xcloner_container->check_access();
|
760 |
|
761 |
$backup_parts = array();
|
762 |
$return = array();
|
840 |
*/
|
841 |
public function backup_decryption()
|
842 |
{
|
843 |
+
$this->xcloner_container->check_access();
|
844 |
|
845 |
$backup_parts = array();
|
846 |
$return = array();
|
886 |
$this->send_response($return, 0);
|
887 |
}
|
888 |
|
889 |
+
/**
|
890 |
+
* @throws Exception
|
891 |
+
*/
|
892 |
public function get_manage_backups_list()
|
893 |
{
|
894 |
+
$this->xcloner_container->check_access();
|
895 |
|
896 |
$return = array(
|
897 |
"data" => array()
|
1096 |
*/
|
1097 |
public function list_backup_files()
|
1098 |
{
|
1099 |
+
$this->xcloner_container->check_access();
|
1100 |
|
1101 |
$backup_parts = array();
|
1102 |
$return = array();
|
1166 |
$this->send_response($return, 0);
|
1167 |
}
|
1168 |
|
1169 |
+
/**
|
1170 |
+
* @throws Exception
|
1171 |
*/
|
1172 |
public function copy_backup_remote_to_local()
|
1173 |
{
|
1174 |
+
$this->xcloner_container->check_access();
|
1175 |
|
1176 |
$backup_file = $this->xcloner_sanitization->sanitize_input_as_string($_POST['file']);
|
1177 |
$storage_type = $this->xcloner_sanitization->sanitize_input_as_string($_POST['storage_type']);
|
1178 |
|
1179 |
+
$xcloner_remote_storage = $this->xcloner_container->get_xcloner_remote_storage();
|
1180 |
|
1181 |
$return = array();
|
1182 |
|
1201 |
$this->send_response($return, 0);
|
1202 |
}
|
1203 |
|
1204 |
+
/**
|
1205 |
+
* @throws Exception
|
|
|
|
|
1206 |
*/
|
1207 |
public function upload_backup_to_remote()
|
1208 |
{
|
1209 |
+
$this->xcloner_container->check_access();
|
1210 |
|
1211 |
$return = array();
|
1212 |
|
1219 |
$storage_type = $this->xcloner_sanitization->sanitize_input_as_string($_POST['storage_type']);
|
1220 |
$delete_local_copy_after_transfer = $this->xcloner_sanitization->sanitize_input_as_string($_POST['delete_after_transfer']);
|
1221 |
}
|
1222 |
+
$xcloner_remote_storage = $this->xcloner_container->get_xcloner_remote_storage();
|
1223 |
|
1224 |
try {
|
1225 |
if (method_exists($xcloner_remote_storage, "upload_backup_to_storage")) {
|
1242 |
$this->send_response($return, 0);
|
1243 |
}
|
1244 |
|
1245 |
+
/**
|
1246 |
+
* @throws Exception
|
|
|
|
|
1247 |
*/
|
1248 |
public function remote_storage_save_status()
|
1249 |
{
|
1250 |
+
$this->xcloner_container->check_access();
|
1251 |
|
1252 |
$return = array();
|
1253 |
|
1254 |
+
$xcloner_remote_storage = $this->xcloner_container->get_xcloner_remote_storage();
|
1255 |
|
1256 |
$return['finished'] = $xcloner_remote_storage->change_storage_status($_POST['id'], $_POST['value']);
|
1257 |
|
1258 |
$this->send_response($return, 0);
|
1259 |
}
|
1260 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1261 |
/**
|
1262 |
* @throws FileNotFoundException
|
1263 |
+
* @throws Exception
|
1264 |
*/
|
1265 |
public function download_backup_by_name()
|
1266 |
{
|
1267 |
+
$this->xcloner_container->check_access();
|
1268 |
|
1269 |
ob_end_clean();
|
1270 |
|
1307 |
wp_die();
|
1308 |
}
|
1309 |
|
|
|
|
|
|
|
1310 |
/**
|
1311 |
* @throws FileNotFoundException
|
1312 |
+
* @throws Exception
|
1313 |
*/
|
1314 |
public function restore_upload_backup()
|
1315 |
{
|
1316 |
+
$this->xcloner_container->check_access();
|
1317 |
|
1318 |
$return = array();
|
1319 |
|
1351 |
}
|
1352 |
|
1353 |
try {
|
1354 |
+
$xcloner_file_transfer = $this->xcloner_container->get_xcloner_file_transfer();
|
1355 |
$xcloner_file_transfer->set_target($target_url);
|
1356 |
$return['start'] = $xcloner_file_transfer->transfer_file($file, $start, $hash);
|
1357 |
} catch (Exception $e) {
|
lib/Xcloner_Archive.php
CHANGED
@@ -476,7 +476,7 @@ class Xcloner_Archive extends Tar
|
|
476 |
|
477 |
$byte_limit = 0;
|
478 |
|
479 |
-
while (!$file->eof()
|
480 |
$current_line_str = $file->current();
|
481 |
|
482 |
$line = str_getcsv($current_line_str);
|
@@ -718,7 +718,7 @@ class Xcloner_Archive extends Tar
|
|
718 |
/**
|
719 |
* @param integer $append
|
720 |
*/
|
721 |
-
public function add_file_to_archive($file_info, $start_at_byte, $byte_limit
|
722 |
{
|
723 |
$start_adapter = $this->filesystem->get_adapter($filesystem);
|
724 |
$start_filesystem = $this->filesystem->get_adapter($filesystem);
|
@@ -828,7 +828,6 @@ class Xcloner_Archive extends Tar
|
|
828 |
*
|
829 |
* @param string $file path to the original file
|
830 |
* @param int $start starting reading position in file
|
831 |
-
* @param int $end end position in reading multiple with 512
|
832 |
* @param string|FileInfo $fileinfo either the name to us in archive (string) or a FileInfo oject with
|
833 |
* all meta data, empty to take from original
|
834 |
* @throws ArchiveIOException
|
476 |
|
477 |
$byte_limit = 0;
|
478 |
|
479 |
+
while (!$file->eof() && $counter <= $this->files_to_process_per_request) {
|
480 |
$current_line_str = $file->current();
|
481 |
|
482 |
$line = str_getcsv($current_line_str);
|
718 |
/**
|
719 |
* @param integer $append
|
720 |
*/
|
721 |
+
public function add_file_to_archive($file_info, $start_at_byte, $byte_limit, $append, $filesystem)
|
722 |
{
|
723 |
$start_adapter = $this->filesystem->get_adapter($filesystem);
|
724 |
$start_filesystem = $this->filesystem->get_adapter($filesystem);
|
828 |
*
|
829 |
* @param string $file path to the original file
|
830 |
* @param int $start starting reading position in file
|
|
|
831 |
* @param string|FileInfo $fileinfo either the name to us in archive (string) or a FileInfo oject with
|
832 |
* all meta data, empty to take from original
|
833 |
* @throws ArchiveIOException
|
lib/Xcloner_Database.php
CHANGED
@@ -27,10 +27,6 @@ use League\Flysystem\FileExistsException;
|
|
27 |
use League\Flysystem\FileNotFoundException;
|
28 |
use wpdb;
|
29 |
|
30 |
-
if (!class_exists('wpdb')) {
|
31 |
-
require_once __DIR__ . "/../lib/wp-db.php";
|
32 |
-
}
|
33 |
-
|
34 |
class Xcloner_Database extends wpdb
|
35 |
{
|
36 |
public $debug = 0;
|
27 |
use League\Flysystem\FileNotFoundException;
|
28 |
use wpdb;
|
29 |
|
|
|
|
|
|
|
|
|
30 |
class Xcloner_Database extends wpdb
|
31 |
{
|
32 |
public $debug = 0;
|
lib/Xcloner_Encryption.php
CHANGED
@@ -20,11 +20,7 @@ class Xcloner_Encryption
|
|
20 |
public function __construct(Xcloner $xcloner_container)
|
21 |
{
|
22 |
$this->xcloner_container = $xcloner_container;
|
23 |
-
//if (property_exists($xcloner_container, 'xcloner_settings')) {
|
24 |
$this->xcloner_settings = $xcloner_container->get_xcloner_settings();
|
25 |
-
//} else {
|
26 |
-
// $this->xcloner_settings = "";
|
27 |
-
//}
|
28 |
|
29 |
if (property_exists($xcloner_container, 'xcloner_logger')) {
|
30 |
$this->logger = $xcloner_container->get_xcloner_logger()->withName("xcloner_encryption");
|
20 |
public function __construct(Xcloner $xcloner_container)
|
21 |
{
|
22 |
$this->xcloner_container = $xcloner_container;
|
|
|
23 |
$this->xcloner_settings = $xcloner_container->get_xcloner_settings();
|
|
|
|
|
|
|
24 |
|
25 |
if (property_exists($xcloner_container, 'xcloner_logger')) {
|
26 |
$this->logger = $xcloner_container->get_xcloner_logger()->withName("xcloner_encryption");
|
lib/Xcloner_Filesystem.php
CHANGED
@@ -147,11 +147,6 @@ class Xcloner_Filesystem
|
|
147 |
return $this->xcloner_container;
|
148 |
}
|
149 |
|
150 |
-
public function get_hash()
|
151 |
-
{
|
152 |
-
return $this->xcloner_settings->get_hash();
|
153 |
-
}
|
154 |
-
|
155 |
public function get_tmp_filesystem()
|
156 |
{
|
157 |
return $this->tmp_filesystem;
|
@@ -454,6 +449,11 @@ class Xcloner_Filesystem
|
|
454 |
}
|
455 |
|
456 |
if ($this->scan_finished()) {
|
|
|
|
|
|
|
|
|
|
|
457 |
$metadata_dumpfile = $this->get_tmp_filesystem()->getMetadata("index.html");
|
458 |
$this->store_file($metadata_dumpfile, 'tmp_filesystem');
|
459 |
$this->files_counter++;
|
@@ -465,11 +465,6 @@ class Xcloner_Filesystem
|
|
465 |
$this->files_counter++;
|
466 |
}
|
467 |
|
468 |
-
//adding a default index.html to the temp xcloner folder
|
469 |
-
if (!$this->get_tmp_filesystem()->has("index.html")) {
|
470 |
-
$this->get_tmp_filesystem()->write("index.html", "");
|
471 |
-
}
|
472 |
-
|
473 |
//adding the default log file
|
474 |
if ($this->get_tmp_filesystem()->has($this->xcloner_settings->get_logger_filename(1))) {
|
475 |
$metadata_dumpfile = $this->get_tmp_filesystem()->getMetadata($this->xcloner_settings->get_logger_filename(1));
|
@@ -567,7 +562,6 @@ class Xcloner_Filesystem
|
|
567 |
}
|
568 |
|
569 |
/**
|
570 |
-
* @throws FileNotFoundException
|
571 |
* @throws FileExistsException
|
572 |
*/
|
573 |
private function do_system_init()
|
@@ -581,14 +575,6 @@ class Xcloner_Filesystem
|
|
581 |
if (!$this->tmp_filesystem->has("index.html")) {
|
582 |
$this->tmp_filesystem->write("index.html", "");
|
583 |
}
|
584 |
-
|
585 |
-
if ($this->tmp_filesystem->has($this->get_included_files_handler())) {
|
586 |
-
$this->tmp_filesystem->delete($this->get_included_files_handler());
|
587 |
-
}
|
588 |
-
|
589 |
-
if ($this->tmp_filesystem->has($this->get_temp_dir_handler())) {
|
590 |
-
$this->tmp_filesystem->delete($this->get_temp_dir_handler());
|
591 |
-
}
|
592 |
}
|
593 |
|
594 |
public function get_scanned_files_num()
|
147 |
return $this->xcloner_container;
|
148 |
}
|
149 |
|
|
|
|
|
|
|
|
|
|
|
150 |
public function get_tmp_filesystem()
|
151 |
{
|
152 |
return $this->tmp_filesystem;
|
449 |
}
|
450 |
|
451 |
if ($this->scan_finished()) {
|
452 |
+
//adding a default index.html to the temp xcloner folder
|
453 |
+
if (!$this->get_tmp_filesystem()->has("index.html")) {
|
454 |
+
$this->get_tmp_filesystem()->write("index.html", "");
|
455 |
+
}
|
456 |
+
|
457 |
$metadata_dumpfile = $this->get_tmp_filesystem()->getMetadata("index.html");
|
458 |
$this->store_file($metadata_dumpfile, 'tmp_filesystem');
|
459 |
$this->files_counter++;
|
465 |
$this->files_counter++;
|
466 |
}
|
467 |
|
|
|
|
|
|
|
|
|
|
|
468 |
//adding the default log file
|
469 |
if ($this->get_tmp_filesystem()->has($this->xcloner_settings->get_logger_filename(1))) {
|
470 |
$metadata_dumpfile = $this->get_tmp_filesystem()->getMetadata($this->xcloner_settings->get_logger_filename(1));
|
562 |
}
|
563 |
|
564 |
/**
|
|
|
565 |
* @throws FileExistsException
|
566 |
*/
|
567 |
private function do_system_init()
|
575 |
if (!$this->tmp_filesystem->has("index.html")) {
|
576 |
$this->tmp_filesystem->write("index.html", "");
|
577 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
578 |
}
|
579 |
|
580 |
public function get_scanned_files_num()
|
lib/Xcloner_Restore.php
CHANGED
@@ -68,7 +68,7 @@ class Xcloner_Restore
|
|
68 |
|
69 |
if (isset($_POST['API_ID'])) {
|
70 |
$request_id = $this->xcloner_sanitization->sanitize_input_as_string($_POST['API_ID']);
|
71 |
-
$this->logger->info("Processing ajax request ID " .
|
72 |
}
|
73 |
}
|
74 |
|
68 |
|
69 |
if (isset($_POST['API_ID'])) {
|
70 |
$request_id = $this->xcloner_sanitization->sanitize_input_as_string($_POST['API_ID']);
|
71 |
+
$this->logger->info("Processing ajax request ID " . $request_id);
|
72 |
}
|
73 |
}
|
74 |
|
lib/Xcloner_Settings.php
CHANGED
@@ -15,8 +15,6 @@ class Xcloner_Settings
|
|
15 |
private $xcloner_sanitization;
|
16 |
/** @var Xcloner */
|
17 |
private $xcloner_container;
|
18 |
-
/** @var Xcloner_Database */
|
19 |
-
private $xcloner_database;
|
20 |
|
21 |
/**
|
22 |
* XCloner General Settings Class
|
@@ -26,7 +24,6 @@ class Xcloner_Settings
|
|
26 |
public function __construct(Xcloner $xcloner_container)
|
27 |
{
|
28 |
$this->xcloner_container = $xcloner_container;
|
29 |
-
$this->xcloner_database = $this->xcloner_container->get_xcloner_database();
|
30 |
$this->xcloner_sanitization = $this->xcloner_container->get_xcloner_sanitization();
|
31 |
}
|
32 |
|
@@ -48,16 +45,6 @@ class Xcloner_Settings
|
|
48 |
return $this->xcloner_options_prefix;
|
49 |
}
|
50 |
|
51 |
-
/**
|
52 |
-
* Get XCloner Main Container
|
53 |
-
*
|
54 |
-
* @return Xcloner_Standalone
|
55 |
-
*/
|
56 |
-
private function get_xcloner_container()
|
57 |
-
{
|
58 |
-
return $this->xcloner_container;
|
59 |
-
}
|
60 |
-
|
61 |
/**
|
62 |
* Get Logger Filename Setting
|
63 |
*
|
@@ -174,10 +161,6 @@ class Xcloner_Settings
|
|
174 |
return $path;
|
175 |
}
|
176 |
|
177 |
-
/**
|
178 |
-
* Get Enable Mysql Backup Option
|
179 |
-
*
|
180 |
-
*/
|
181 |
public function get_enable_mysql_backup()
|
182 |
{
|
183 |
if ($this->get_xcloner_option('xcloner_enable_mysql_backup')) {
|
@@ -207,11 +190,9 @@ class Xcloner_Settings
|
|
207 |
}
|
208 |
|
209 |
/**
|
210 |
-
* Get Backup Hash
|
211 |
-
*
|
212 |
* @return string
|
213 |
*/
|
214 |
-
public function get_hash(
|
215 |
{
|
216 |
return $this->hash;
|
217 |
}
|
15 |
private $xcloner_sanitization;
|
16 |
/** @var Xcloner */
|
17 |
private $xcloner_container;
|
|
|
|
|
18 |
|
19 |
/**
|
20 |
* XCloner General Settings Class
|
24 |
public function __construct(Xcloner $xcloner_container)
|
25 |
{
|
26 |
$this->xcloner_container = $xcloner_container;
|
|
|
27 |
$this->xcloner_sanitization = $this->xcloner_container->get_xcloner_sanitization();
|
28 |
}
|
29 |
|
45 |
return $this->xcloner_options_prefix;
|
46 |
}
|
47 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
/**
|
49 |
* Get Logger Filename Setting
|
50 |
*
|
161 |
return $path;
|
162 |
}
|
163 |
|
|
|
|
|
|
|
|
|
164 |
public function get_enable_mysql_backup()
|
165 |
{
|
166 |
if ($this->get_xcloner_option('xcloner_enable_mysql_backup')) {
|
190 |
}
|
191 |
|
192 |
/**
|
|
|
|
|
193 |
* @return string
|
194 |
*/
|
195 |
+
public function get_hash()
|
196 |
{
|
197 |
return $this->hash;
|
198 |
}
|
vendor/autoload.php
CHANGED
@@ -22,4 +22,4 @@ if (PHP_VERSION_ID < 50600) {
|
|
22 |
|
23 |
require_once __DIR__ . '/composer/autoload_real.php';
|
24 |
|
25 |
-
return
|
22 |
|
23 |
require_once __DIR__ . '/composer/autoload_real.php';
|
24 |
|
25 |
+
return ComposerAutoloaderInitd09cf045970fa10e33072aaab268d79a::getLoader();
|
vendor/composer/autoload_real.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
-
class
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
@@ -24,18 +24,18 @@ class ComposerAutoloaderInit0da8400daae1fee94a27c0097f9e5eb5
|
|
24 |
|
25 |
require __DIR__ . '/platform_check.php';
|
26 |
|
27 |
-
spl_autoload_register(array('
|
28 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
29 |
-
spl_autoload_unregister(array('
|
30 |
|
31 |
require __DIR__ . '/autoload_static.php';
|
32 |
-
call_user_func(\Composer\Autoload\
|
33 |
|
34 |
$loader->register(true);
|
35 |
|
36 |
-
$includeFiles = \Composer\Autoload\
|
37 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
38 |
-
|
39 |
}
|
40 |
|
41 |
return $loader;
|
@@ -47,7 +47,7 @@ class ComposerAutoloaderInit0da8400daae1fee94a27c0097f9e5eb5
|
|
47 |
* @param string $file
|
48 |
* @return void
|
49 |
*/
|
50 |
-
function
|
51 |
{
|
52 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
53 |
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
2 |
|
3 |
// autoload_real.php @generated by Composer
|
4 |
|
5 |
+
class ComposerAutoloaderInitd09cf045970fa10e33072aaab268d79a
|
6 |
{
|
7 |
private static $loader;
|
8 |
|
24 |
|
25 |
require __DIR__ . '/platform_check.php';
|
26 |
|
27 |
+
spl_autoload_register(array('ComposerAutoloaderInitd09cf045970fa10e33072aaab268d79a', 'loadClassLoader'), true, true);
|
28 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
|
29 |
+
spl_autoload_unregister(array('ComposerAutoloaderInitd09cf045970fa10e33072aaab268d79a', 'loadClassLoader'));
|
30 |
|
31 |
require __DIR__ . '/autoload_static.php';
|
32 |
+
call_user_func(\Composer\Autoload\ComposerStaticInitd09cf045970fa10e33072aaab268d79a::getInitializer($loader));
|
33 |
|
34 |
$loader->register(true);
|
35 |
|
36 |
+
$includeFiles = \Composer\Autoload\ComposerStaticInitd09cf045970fa10e33072aaab268d79a::$files;
|
37 |
foreach ($includeFiles as $fileIdentifier => $file) {
|
38 |
+
composerRequired09cf045970fa10e33072aaab268d79a($fileIdentifier, $file);
|
39 |
}
|
40 |
|
41 |
return $loader;
|
47 |
* @param string $file
|
48 |
* @return void
|
49 |
*/
|
50 |
+
function composerRequired09cf045970fa10e33072aaab268d79a($fileIdentifier, $file)
|
51 |
{
|
52 |
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
53 |
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
vendor/composer/autoload_static.php
CHANGED
@@ -4,7 +4,7 @@
|
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
-
class
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
|
@@ -7873,10 +7873,10 @@ class ComposerStaticInit0da8400daae1fee94a27c0097f9e5eb5
|
|
7873 |
public static function getInitializer(ClassLoader $loader)
|
7874 |
{
|
7875 |
return \Closure::bind(function () use ($loader) {
|
7876 |
-
$loader->prefixLengthsPsr4 =
|
7877 |
-
$loader->prefixDirsPsr4 =
|
7878 |
-
$loader->prefixesPsr0 =
|
7879 |
-
$loader->classMap =
|
7880 |
|
7881 |
}, null, ClassLoader::class);
|
7882 |
}
|
4 |
|
5 |
namespace Composer\Autoload;
|
6 |
|
7 |
+
class ComposerStaticInitd09cf045970fa10e33072aaab268d79a
|
8 |
{
|
9 |
public static $files = array (
|
10 |
'7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
|
7873 |
public static function getInitializer(ClassLoader $loader)
|
7874 |
{
|
7875 |
return \Closure::bind(function () use ($loader) {
|
7876 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInitd09cf045970fa10e33072aaab268d79a::$prefixLengthsPsr4;
|
7877 |
+
$loader->prefixDirsPsr4 = ComposerStaticInitd09cf045970fa10e33072aaab268d79a::$prefixDirsPsr4;
|
7878 |
+
$loader->prefixesPsr0 = ComposerStaticInitd09cf045970fa10e33072aaab268d79a::$prefixesPsr0;
|
7879 |
+
$loader->classMap = ComposerStaticInitd09cf045970fa10e33072aaab268d79a::$classMap;
|
7880 |
|
7881 |
}, null, ClassLoader::class);
|
7882 |
}
|
vendor/composer/installed.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php return array(
|
2 |
'root' => array(
|
3 |
'name' => 'watchfulli/xcloner-wordpress',
|
4 |
-
'pretty_version' => 'v4.6.
|
5 |
-
'version' => '4.6.
|
6 |
-
'reference' => '
|
7 |
'type' => 'library',
|
8 |
'install_path' => __DIR__ . '/../../',
|
9 |
'aliases' => array(),
|
@@ -494,9 +494,9 @@
|
|
494 |
'dev_requirement' => false,
|
495 |
),
|
496 |
'watchfulli/xcloner-wordpress' => array(
|
497 |
-
'pretty_version' => 'v4.6.
|
498 |
-
'version' => '4.6.
|
499 |
-
'reference' => '
|
500 |
'type' => 'library',
|
501 |
'install_path' => __DIR__ . '/../../',
|
502 |
'aliases' => array(),
|
1 |
<?php return array(
|
2 |
'root' => array(
|
3 |
'name' => 'watchfulli/xcloner-wordpress',
|
4 |
+
'pretty_version' => 'v4.6.1',
|
5 |
+
'version' => '4.6.1.0',
|
6 |
+
'reference' => 'b1ea01652136244d63023c609b5377aa927ec5ea',
|
7 |
'type' => 'library',
|
8 |
'install_path' => __DIR__ . '/../../',
|
9 |
'aliases' => array(),
|
494 |
'dev_requirement' => false,
|
495 |
),
|
496 |
'watchfulli/xcloner-wordpress' => array(
|
497 |
+
'pretty_version' => 'v4.6.1',
|
498 |
+
'version' => '4.6.1.0',
|
499 |
+
'reference' => 'b1ea01652136244d63023c609b5377aa927ec5ea',
|
500 |
'type' => 'library',
|
501 |
'install_path' => __DIR__ . '/../../',
|
502 |
'aliases' => array(),
|
xcloner.php
CHANGED
@@ -15,7 +15,7 @@
|
|
15 |
* Plugin Name: XCloner - Site Backup and Restore
|
16 |
* Plugin URI: https://xcloner.com/
|
17 |
* Description: XCloner is a tool that will help you manage your website backups, generate/restore/move so your website will be always secured! With XCloner you will be able to clone your site to any other location with just a few clicks, as well as transfer the backup archives to remote FTP, SFTP, DropBox, Amazon S3, Google Drive, WebDAV, Backblaze, Azure accounts.
|
18 |
-
* Version: 4.6.
|
19 |
* Author: watchful
|
20 |
* Author URI: https://watchful.net/
|
21 |
* License: GPL-2.0+
|
15 |
* Plugin Name: XCloner - Site Backup and Restore
|
16 |
* Plugin URI: https://xcloner.com/
|
17 |
* Description: XCloner is a tool that will help you manage your website backups, generate/restore/move so your website will be always secured! With XCloner you will be able to clone your site to any other location with just a few clicks, as well as transfer the backup archives to remote FTP, SFTP, DropBox, Amazon S3, Google Drive, WebDAV, Backblaze, Azure accounts.
|
18 |
+
* Version: 4.6.1
|
19 |
* Author: watchful
|
20 |
* Author URI: https://watchful.net/
|
21 |
* License: GPL-2.0+
|