XCloner – Backup and Restore - Version 4.4.4

Version Description

  • fix: missing escapes and sanitizations
Download this release

Release Info

Developer watchful
Plugin Icon 128x128 XCloner – Backup and Restore
Version 4.4.4
Comparing to
See all releases

Code changes from version 4.4.3 to 4.4.4

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.0
8
- Stable tag: 4.4.3
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,9 @@ Of course, schedules can be adjusted accordingly to how often you update your si
117
 
118
  == Changelog ==
119
 
 
 
 
120
  = 4.4.3 =
121
  * remove PHP Short Tags to be compliant with WordPress guidelines
122
 
5
  Requires at least: 5.1
6
  Requires PHP: 7.3
7
  Tested up to: 6.0
8
+ Stable tag: 4.4.4
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.4.4 =
121
+ * fix: missing escapes and sanitizations
122
+
123
  = 4.4.3 =
124
  * remove PHP Short Tags to be compliant with WordPress guidelines
125
 
admin/partials/xcloner_console_page.php CHANGED
@@ -16,9 +16,13 @@ $logger_content = $logger->getLastDebugLines();
16
  <div class="collapsible-header active"><i class="material-icons">bug_report</i>XCloner Debugger
17
  </div>
18
  <div class="collapsible-body">
19
- <div class="console" id="xcloner-console"><?php if (isset($logger_content)) {
20
- echo implode("<br />\n", $logger_content);
21
- } ?></div>
 
 
 
 
22
  </div>
23
  </li>
24
  </ul>
@@ -26,11 +30,8 @@ $logger_content = $logger->getLastDebugLines();
26
  jQuery(document).ready(function () {
27
  var objDiv = document.getElementById("xcloner-console");
28
  objDiv.scrollTop = objDiv.scrollHeight;
29
- /*setInterval(function(){
30
- getXclonerLog();
31
- }, 2000);*/
32
  })
33
  </script>
34
  <?php endif; ?>
35
  </div>
36
- </div>
16
  <div class="collapsible-header active"><i class="material-icons">bug_report</i>XCloner Debugger
17
  </div>
18
  <div class="collapsible-body">
19
+ <div class="console" id="xcloner-console">
20
+ <?php
21
+ if (isset($logger_content)) {
22
+ echo implode("<br />\n", esc_html($logger_content));
23
+ }
24
+ ?>
25
+ </div>
26
  </div>
27
  </li>
28
  </ul>
30
  jQuery(document).ready(function () {
31
  var objDiv = document.getElementById("xcloner-console");
32
  objDiv.scrollTop = objDiv.scrollHeight;
 
 
 
33
  })
34
  </script>
35
  <?php endif; ?>
36
  </div>
37
+ </div>
lib/Xcloner.php CHANGED
@@ -587,12 +587,14 @@ class Xcloner
587
  $is_refresh = true;
588
  }
589
 
590
- if (isset($_REQUEST['code']) && $_REQUEST['code']) {
 
 
591
  $parameters = array(
592
  'client_id' => get_option("xcloner_onedrive_client_id"),
593
  'client_secret' => get_option("xcloner_onedrive_client_secret"),
594
  'redirect_uri' => get_admin_url(),
595
- 'code' => $_REQUEST['code'],
596
  'grant_type' => 'authorization_code'
597
  );
598
  }
587
  $is_refresh = true;
588
  }
589
 
590
+ $code = isset($_REQUEST['code']) ? $this->xcloner_sanitization->sanitize_input_as_string($_REQUEST['code']) : null;
591
+
592
+ if ($code !== null) {
593
  $parameters = array(
594
  'client_id' => get_option("xcloner_onedrive_client_id"),
595
  'client_secret' => get_option("xcloner_onedrive_client_secret"),
596
  'redirect_uri' => get_admin_url(),
597
+ 'code' => $code,
598
  'grant_type' => 'authorization_code'
599
  );
600
  }
lib/Xcloner_Api.php CHANGED
@@ -32,6 +32,7 @@ namespace Watchfulli\XClonerCore;
32
  use Error;
33
  use Exception;
34
  use League\Flysystem\Config;
 
35
  use League\Flysystem\FileNotFoundException;
36
  use League\Flysystem\Filesystem;
37
  use League\Flysystem\Adapter\Local;
@@ -138,16 +139,19 @@ class Xcloner_Api
138
  $this->process_params();
139
  }
140
 
141
- if (isset($_POST['id'])) {
142
 
143
- $_POST['id'] = $this->xcloner_sanitization->sanitize_input_as_int($_POST['id']);
 
144
  $this->form_params['backup_params']['backup_name'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['backup_name']);
145
  $this->form_params['backup_params']['email_notification'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['email_notification']);
 
146
  if ($_POST['diff_start_date']) {
147
  $this->form_params['backup_params']['diff_start_date'] = strtotime($this->xcloner_sanitization->sanitize_input_as_string($_POST['diff_start_date']));
148
  } else {
149
  $this->form_params['backup_params']['diff_start_date'] = "";
150
  }
 
151
  $this->form_params['backup_params']['schedule_name'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['schedule_name']);
152
 
153
  if (isset($_POST['backup_encrypt'])) {
@@ -157,10 +161,10 @@ class Xcloner_Api
157
  $this->form_params['backup_params']['start_at'] = strtotime($_POST['schedule_start_date']);
158
  $this->form_params['backup_params']['schedule_frequency'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['schedule_frequency']);
159
  $this->form_params['backup_params']['schedule_storage'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['schedule_storage']);
160
- if (!isset($_POST['backup_delete_after_remote_transfer'])) {
161
- $_POST['backup_delete_after_remote_transfer'] = 0;
162
- }
163
- $this->form_params['backup_params']['backup_delete_after_remote_transfer'] = $this->xcloner_sanitization->sanitize_input_as_int($_POST['backup_delete_after_remote_transfer']);
164
 
165
  $this->form_params['database'] = (stripslashes($this->xcloner_sanitization->sanitize_input_as_raw($_POST['table_params'])));
166
  $this->form_params['excluded_files'] = (stripslashes($this->xcloner_sanitization->sanitize_input_as_raw($_POST['excluded_files'])));
@@ -192,11 +196,9 @@ class Xcloner_Api
192
 
193
  $schedule['start_at'] = $this->form_params['backup_params']['start_at'];
194
 
195
- if (!isset($_POST['status'])) {
196
- $schedule['status'] = 0;
197
- } else {
198
- $schedule['status'] = $this->xcloner_sanitization->sanitize_input_as_int($_POST['status']);
199
- }
200
  } else {
201
  $schedule['status'] = 1;
202
  $schedule['start_at'] = strtotime($this->form_params['backup_params']['schedule_start_date'] .
@@ -213,7 +215,6 @@ class Xcloner_Api
213
  }
214
 
215
  foreach ($tables as $key => $table) {
216
- //echo $this->form_params['database'][$db][$key];
217
  $this->form_params['database'][$db][$key] = substr($table, strlen($db) + 1);
218
  }
219
  }
@@ -234,11 +235,10 @@ class Xcloner_Api
234
  $this->form_params['backup_params']['schedule_storage'] = "";
235
  }
236
  $schedule['remote_storage'] = $this->form_params['backup_params']['schedule_storage'];
237
- //$schedule['backup_type'] = $this->form_params['backup_params']['backup_type'];
238
 
239
  $schedule['params'] = json_encode($this->form_params);
240
 
241
- if (!isset($_POST['id'])) {
242
  $this->xcloner_database->insert(
243
  $this->xcloner_settings->get_table_prefix() . 'xcloner_scheduler',
244
  $schedule,
@@ -251,21 +251,21 @@ class Xcloner_Api
251
  $this->xcloner_database->update(
252
  $this->xcloner_settings->get_table_prefix() . 'xcloner_scheduler',
253
  $schedule,
254
- array('id' => $_POST['id']),
255
  array(
256
  '%s',
257
  '%s'
258
  )
259
  );
260
  }
261
- if (isset($_POST['id'])) {
262
- $scheduler->update_cron_hook($_POST['id']);
 
263
  }
264
 
265
  if ($this->xcloner_database->last_error) {
266
  $response['error'] = 1;
267
- $response['error_message'] = $this->xcloner_database->last_error/*."--".$this->xcloner_database->last_query*/
268
- ;
269
  }
270
 
271
  $scheduler->update_wp_cron_hooks();
@@ -274,11 +274,6 @@ class Xcloner_Api
274
  $this->send_response($response);
275
  }
276
 
277
- /*
278
- *
279
- * Backup Files API
280
- *
281
- */
282
  public function backup_files()
283
  {
284
  $data = array();
@@ -286,13 +281,12 @@ class Xcloner_Api
286
 
287
  $this->check_access();
288
 
289
- $init = (int)$_POST['init'];
290
 
291
  $this->process_params();
292
 
293
  $data['finished'] = 1;
294
 
295
- //$return = $this->archive_system->start_incremental_backup($this->form_params['backup_params'], $this->form_params['extra'], $init);
296
  try {
297
  $data = $this->archive_system->start_incremental_backup(
298
  $this->form_params['backup_params'],
@@ -343,10 +337,9 @@ class Xcloner_Api
343
  $this->send_response($data);
344
  }
345
 
346
- /*
347
- *
348
- * Backup Database API
349
- *
350
  */
351
  public function backup_database()
352
  {
@@ -354,7 +347,7 @@ class Xcloner_Api
354
 
355
  $this->check_access();
356
 
357
- $init = (int)$_POST['init'];
358
 
359
  $this->process_params();
360
 
@@ -415,7 +408,7 @@ class Xcloner_Api
415
  }
416
 
417
  if (isset($params->hash)) {
418
- $this->xcloner_settings->set_hash($params->hash);
419
  }
420
 
421
  $this->form_params['extra'] = array();
@@ -994,7 +987,7 @@ class Xcloner_Api
994
  <ul class="multipart">
995
  <?php foreach ($file_info['childs'] as $child): ?>
996
  <li>
997
- <?php echo $child[0] ?> (<?php echo esc_html(size_format($child[2])) ?>)
998
  <?php
999
  $child_exists_on_local_storage = true;
1000
  if ($storage_selection) {
32
  use Error;
33
  use Exception;
34
  use League\Flysystem\Config;
35
+ use League\Flysystem\FileExistsException;
36
  use League\Flysystem\FileNotFoundException;
37
  use League\Flysystem\Filesystem;
38
  use League\Flysystem\Adapter\Local;
139
  $this->process_params();
140
  }
141
 
142
+ $id = isset($_POST['id']) ? $this->xcloner_sanitization->sanitize_input_as_int($_POST['id']) : null;
143
 
144
+
145
+ if ($id !== null) {
146
  $this->form_params['backup_params']['backup_name'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['backup_name']);
147
  $this->form_params['backup_params']['email_notification'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['email_notification']);
148
+
149
  if ($_POST['diff_start_date']) {
150
  $this->form_params['backup_params']['diff_start_date'] = strtotime($this->xcloner_sanitization->sanitize_input_as_string($_POST['diff_start_date']));
151
  } else {
152
  $this->form_params['backup_params']['diff_start_date'] = "";
153
  }
154
+
155
  $this->form_params['backup_params']['schedule_name'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['schedule_name']);
156
 
157
  if (isset($_POST['backup_encrypt'])) {
161
  $this->form_params['backup_params']['start_at'] = strtotime($_POST['schedule_start_date']);
162
  $this->form_params['backup_params']['schedule_frequency'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['schedule_frequency']);
163
  $this->form_params['backup_params']['schedule_storage'] = $this->xcloner_sanitization->sanitize_input_as_string($_POST['schedule_storage']);
164
+
165
+ $backup_delete_after_remote_transfer = isset($_POST['backup_delete_after_remote_transfer']) ? $this->xcloner_sanitization->sanitize_input_as_int($_POST['backup_delete_after_remote_transfer']) : 0;
166
+
167
+ $this->form_params['backup_params']['backup_delete_after_remote_transfer'] = $backup_delete_after_remote_transfer;
168
 
169
  $this->form_params['database'] = (stripslashes($this->xcloner_sanitization->sanitize_input_as_raw($_POST['table_params'])));
170
  $this->form_params['excluded_files'] = (stripslashes($this->xcloner_sanitization->sanitize_input_as_raw($_POST['excluded_files'])));
196
 
197
  $schedule['start_at'] = $this->form_params['backup_params']['start_at'];
198
 
199
+ $status = isset($_POST['status']) ? $this->xcloner_sanitization->sanitize_input_as_int($_POST['status']) : 0;
200
+
201
+ $schedule['status'] = $status;
 
 
202
  } else {
203
  $schedule['status'] = 1;
204
  $schedule['start_at'] = strtotime($this->form_params['backup_params']['schedule_start_date'] .
215
  }
216
 
217
  foreach ($tables as $key => $table) {
 
218
  $this->form_params['database'][$db][$key] = substr($table, strlen($db) + 1);
219
  }
220
  }
235
  $this->form_params['backup_params']['schedule_storage'] = "";
236
  }
237
  $schedule['remote_storage'] = $this->form_params['backup_params']['schedule_storage'];
 
238
 
239
  $schedule['params'] = json_encode($this->form_params);
240
 
241
+ if ($id === null) {
242
  $this->xcloner_database->insert(
243
  $this->xcloner_settings->get_table_prefix() . 'xcloner_scheduler',
244
  $schedule,
251
  $this->xcloner_database->update(
252
  $this->xcloner_settings->get_table_prefix() . 'xcloner_scheduler',
253
  $schedule,
254
+ array('id' => $id),
255
  array(
256
  '%s',
257
  '%s'
258
  )
259
  );
260
  }
261
+
262
+ if ($id !== null) {
263
+ $scheduler->update_cron_hook($id);
264
  }
265
 
266
  if ($this->xcloner_database->last_error) {
267
  $response['error'] = 1;
268
+ $response['error_message'] = $this->xcloner_database->last_error;
 
269
  }
270
 
271
  $scheduler->update_wp_cron_hooks();
274
  $this->send_response($response);
275
  }
276
 
 
 
 
 
 
277
  public function backup_files()
278
  {
279
  $data = array();
281
 
282
  $this->check_access();
283
 
284
+ $init = (int)$this->xcloner_sanitization->sanitize_input_as_int($_POST['init']);
285
 
286
  $this->process_params();
287
 
288
  $data['finished'] = 1;
289
 
 
290
  try {
291
  $data = $this->archive_system->start_incremental_backup(
292
  $this->form_params['backup_params'],
337
  $this->send_response($data);
338
  }
339
 
340
+ /**
341
+ * @throws FileNotFoundException
342
+ * @throws FileExistsException
 
343
  */
344
  public function backup_database()
345
  {
347
 
348
  $this->check_access();
349
 
350
+ $init = (int)$this->xcloner_sanitization->sanitize_input_as_int($_POST['init']);
351
 
352
  $this->process_params();
353
 
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();
987
  <ul class="multipart">
988
  <?php foreach ($file_info['childs'] as $child): ?>
989
  <li>
990
+ <?php echo esc_html($child[0]) ?> (<?php echo esc_html(size_format($child[2])) ?>)
991
  <?php
992
  $child_exists_on_local_storage = true;
993
  if ($storage_selection) {
vendor/autoload.php CHANGED
@@ -9,4 +9,4 @@ if (PHP_VERSION_ID < 50600) {
9
 
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
- return ComposerAutoloaderInit7d696a29834d5159beec8c46eb63aace::getLoader();
9
 
10
  require_once __DIR__ . '/composer/autoload_real.php';
11
 
12
+ return ComposerAutoloaderInitfaf514c95c094bb20ad810521bbe50d4::getLoader();
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit7d696a29834d5159beec8c46eb63aace
6
  {
7
  private static $loader;
8
 
@@ -24,18 +24,18 @@ class ComposerAutoloaderInit7d696a29834d5159beec8c46eb63aace
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInit7d696a29834d5159beec8c46eb63aace', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
- spl_autoload_unregister(array('ComposerAutoloaderInit7d696a29834d5159beec8c46eb63aace', 'loadClassLoader'));
30
 
31
  require __DIR__ . '/autoload_static.php';
32
- call_user_func(\Composer\Autoload\ComposerStaticInit7d696a29834d5159beec8c46eb63aace::getInitializer($loader));
33
 
34
  $loader->register(true);
35
 
36
- $includeFiles = \Composer\Autoload\ComposerStaticInit7d696a29834d5159beec8c46eb63aace::$files;
37
  foreach ($includeFiles as $fileIdentifier => $file) {
38
- composerRequire7d696a29834d5159beec8c46eb63aace($fileIdentifier, $file);
39
  }
40
 
41
  return $loader;
@@ -47,7 +47,7 @@ class ComposerAutoloaderInit7d696a29834d5159beec8c46eb63aace
47
  * @param string $file
48
  * @return void
49
  */
50
- function composerRequire7d696a29834d5159beec8c46eb63aace($fileIdentifier, $file)
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 ComposerAutoloaderInitfaf514c95c094bb20ad810521bbe50d4
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInitfaf514c95c094bb20ad810521bbe50d4', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInitfaf514c95c094bb20ad810521bbe50d4', 'loadClassLoader'));
30
 
31
  require __DIR__ . '/autoload_static.php';
32
+ call_user_func(\Composer\Autoload\ComposerStaticInitfaf514c95c094bb20ad810521bbe50d4::getInitializer($loader));
33
 
34
  $loader->register(true);
35
 
36
+ $includeFiles = \Composer\Autoload\ComposerStaticInitfaf514c95c094bb20ad810521bbe50d4::$files;
37
  foreach ($includeFiles as $fileIdentifier => $file) {
38
+ composerRequirefaf514c95c094bb20ad810521bbe50d4($fileIdentifier, $file);
39
  }
40
 
41
  return $loader;
47
  * @param string $file
48
  * @return void
49
  */
50
+ function composerRequirefaf514c95c094bb20ad810521bbe50d4($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 ComposerStaticInit7d696a29834d5159beec8c46eb63aace
8
  {
9
  public static $files = array (
10
  '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
@@ -7957,10 +7957,10 @@ class ComposerStaticInit7d696a29834d5159beec8c46eb63aace
7957
  public static function getInitializer(ClassLoader $loader)
7958
  {
7959
  return \Closure::bind(function () use ($loader) {
7960
- $loader->prefixLengthsPsr4 = ComposerStaticInit7d696a29834d5159beec8c46eb63aace::$prefixLengthsPsr4;
7961
- $loader->prefixDirsPsr4 = ComposerStaticInit7d696a29834d5159beec8c46eb63aace::$prefixDirsPsr4;
7962
- $loader->prefixesPsr0 = ComposerStaticInit7d696a29834d5159beec8c46eb63aace::$prefixesPsr0;
7963
- $loader->classMap = ComposerStaticInit7d696a29834d5159beec8c46eb63aace::$classMap;
7964
 
7965
  }, null, ClassLoader::class);
7966
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInitfaf514c95c094bb20ad810521bbe50d4
8
  {
9
  public static $files = array (
10
  '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php',
7957
  public static function getInitializer(ClassLoader $loader)
7958
  {
7959
  return \Closure::bind(function () use ($loader) {
7960
+ $loader->prefixLengthsPsr4 = ComposerStaticInitfaf514c95c094bb20ad810521bbe50d4::$prefixLengthsPsr4;
7961
+ $loader->prefixDirsPsr4 = ComposerStaticInitfaf514c95c094bb20ad810521bbe50d4::$prefixDirsPsr4;
7962
+ $loader->prefixesPsr0 = ComposerStaticInitfaf514c95c094bb20ad810521bbe50d4::$prefixesPsr0;
7963
+ $loader->classMap = ComposerStaticInitfaf514c95c094bb20ad810521bbe50d4::$classMap;
7964
 
7965
  }, null, ClassLoader::class);
7966
  }
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.4.3',
5
- 'version' => '4.4.3.0',
6
- 'reference' => '9652dd8045c6a52e754ec4b94508c954ce323038',
7
  'type' => 'library',
8
  'install_path' => __DIR__ . '/../../',
9
  'aliases' => array(),
@@ -404,9 +404,9 @@
404
  'dev_requirement' => false,
405
  ),
406
  'watchfulli/xcloner-wordpress' => array(
407
- 'pretty_version' => 'v4.4.3',
408
- 'version' => '4.4.3.0',
409
- 'reference' => '9652dd8045c6a52e754ec4b94508c954ce323038',
410
  'type' => 'library',
411
  'install_path' => __DIR__ . '/../../',
412
  'aliases' => array(),
1
  <?php return array(
2
  'root' => array(
3
  'name' => 'watchfulli/xcloner-wordpress',
4
+ 'pretty_version' => 'v4.4.4',
5
+ 'version' => '4.4.4.0',
6
+ 'reference' => 'd4aac816e6c4263451b2510bf01d8fc2281ec576',
7
  'type' => 'library',
8
  'install_path' => __DIR__ . '/../../',
9
  'aliases' => array(),
404
  'dev_requirement' => false,
405
  ),
406
  'watchfulli/xcloner-wordpress' => array(
407
+ 'pretty_version' => 'v4.4.4',
408
+ 'version' => '4.4.4.0',
409
+ 'reference' => 'd4aac816e6c4263451b2510bf01d8fc2281ec576',
410
  'type' => 'library',
411
  'install_path' => __DIR__ . '/../../',
412
  '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.4.3
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.4.4
19
  * Author: watchful
20
  * Author URI: https://watchful.net/
21
  * License: GPL-2.0+