Duplicator – WordPress Migration Plugin - Version 1.4.3

Version Description

Download this release

Release Info

Developer cory@lamle.org
Plugin Icon 128x128 Duplicator – WordPress Migration Plugin
Version 1.4.3
Comparing to
See all releases

Code changes from version 1.4.2 to 1.4.3

Files changed (45) hide show
  1. assets/css/style.css +44 -3
  2. assets/webfonts/fa-brands-400.eot +0 -0
  3. assets/webfonts/fa-brands-400.ttf +0 -0
  4. assets/webfonts/fa-regular-400.eot +0 -0
  5. assets/webfonts/fa-regular-400.ttf +0 -0
  6. assets/webfonts/fa-solid-900.eot +0 -0
  7. assets/webfonts/fa-solid-900.ttf +0 -0
  8. classes/class.server.php +2 -6
  9. define.php +2 -2
  10. duplicator-main.php +0 -2
  11. duplicator.php +2 -2
  12. installer/dup-installer/assets/font-awesome/webfonts/fa-brands-400.eot +0 -0
  13. installer/dup-installer/assets/font-awesome/webfonts/fa-brands-400.ttf +0 -0
  14. installer/dup-installer/assets/font-awesome/webfonts/fa-regular-400.eot +0 -0
  15. installer/dup-installer/assets/font-awesome/webfonts/fa-regular-400.ttf +0 -0
  16. installer/dup-installer/assets/font-awesome/webfonts/fa-solid-900.eot +0 -0
  17. installer/dup-installer/assets/font-awesome/webfonts/fa-solid-900.ttf +0 -0
  18. installer/dup-installer/assets/inc.css.php +1691 -406
  19. installer/dup-installer/classes/class.csrf.php +193 -169
  20. installer/dup-installer/classes/config/class.boot.php +2 -0
  21. installer/dup-installer/classes/config/class.security.php +244 -0
  22. installer/dup-installer/main.installer.php +18 -20
  23. installer/dup-installer/views/view.help.php +24 -6
  24. installer/dup-installer/views/view.init1.php +113 -47
  25. installer/dup-installer/views/view.s1.base.php +162 -158
  26. installer/dup-installer/views/view.s2.base.php +365 -363
  27. installer/dup-installer/views/view.s2.basic.php +29 -22
  28. installer/dup-installer/views/view.s3.php +615 -613
  29. readme.txt +5 -5
  30. tools/Lite/Requirements.php +14 -72
  31. views/packages/main/packages.php +33 -13
  32. views/packages/main/s1.setup2.php +1 -1
  33. views/packages/main/s2.scan2.php +10 -9
  34. views/packages/main/s2.scan3.php +1 -1
  35. views/packages/main/s3.build.php +38 -13
  36. views/packages/screen.php +128 -128
  37. views/settings/controller.php +4 -1
  38. views/settings/gopro.php +37 -38
  39. views/settings/import.php +33 -0
  40. views/settings/schedule.php +27 -27
  41. views/settings/storage.php +1 -1
  42. views/tools/controller.php +1 -4
  43. views/tools/import.php +0 -35
  44. views/tools/recovery.php +29 -28
  45. views/tools/templates.php +28 -28
assets/css/style.css CHANGED
@@ -208,10 +208,7 @@ div.dup-screen-hlp-info {line-height:26px; padding:10px 0 10px 0}
208
  }
209
  }
210
 
211
-
212
  /** Settings **/
213
-
214
-
215
  #installer-name-mode-option {
216
  line-height:25px;
217
  }
@@ -231,3 +228,47 @@ div.dup-screen-hlp-info {line-height:26px; padding:10px 0 10px 0}
231
  display: inline-block;
232
  width: 90px;
233
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
208
  }
209
  }
210
 
 
211
  /** Settings **/
 
 
212
  #installer-name-mode-option {
213
  line-height:25px;
214
  }
228
  display: inline-block;
229
  width: 90px;
230
  }
231
+
232
+ /** Call to action **/
233
+ div.txt-call-action-title {
234
+ margin:40px auto 20px auto;
235
+ font-size:22px;
236
+ line-height:30px;
237
+ font-weight: bold;
238
+ width:100%;
239
+ }
240
+
241
+ div.txt-call-action-sub {
242
+ font-size:16px; line-height:24px; font-weight: bold; width:100%;
243
+ margin:20px auto 40px auto;
244
+ }
245
+
246
+ a.dup-btn-call-action {
247
+ box-shadow: 0px 10px 14px -7px #3e7327;
248
+ background: linear-gradient(to bottom, #5ca53a 5%, #72b352 100%);
249
+ background-color: #4f8e32;
250
+ border-radius: 4px;
251
+ border: 1px solid #4b8f29;
252
+ display: block;
253
+ cursor: pointer;
254
+ color: #ffffff;
255
+ font-family: Arial;
256
+ font-size: 18px;
257
+ font-weight: bold;
258
+ padding: 10px 30px;
259
+ text-decoration: none;
260
+ text-shadow: 0px 1px 0px #5b8a3c;
261
+ width:150px;
262
+ margin:auto;
263
+ text-align: center;
264
+ }
265
+
266
+ a.dup-btn-call-action:hover {
267
+ background:linear-gradient(to bottom, #72b352 5%, #337114 100%);
268
+ background-color:#337114;
269
+ color:#fff;
270
+ }
271
+
272
+ .dup-btn-call-action:active {
273
+ color:#fff;
274
+ }
assets/webfonts/fa-brands-400.eot DELETED
Binary file
assets/webfonts/fa-brands-400.ttf DELETED
Binary file
assets/webfonts/fa-regular-400.eot DELETED
Binary file
assets/webfonts/fa-regular-400.ttf DELETED
Binary file
assets/webfonts/fa-solid-900.eot DELETED
Binary file
assets/webfonts/fa-solid-900.ttf DELETED
Binary file
classes/class.server.php CHANGED
@@ -270,15 +270,11 @@ class DUP_Server
270
  */
271
  private static function logCheckFalse($check, $errorMessage)
272
  {
273
- if (!is_bool($check)) {
274
- throw new Exception('Exception: Not boolean $check [File: '.__FILE__.', Ln: '.__LINE__);
275
- }
276
-
277
  if (empty($errorMessage)) {
278
- throw new Exception('Exception: Empty $errorMessage [File: '.__FILE__.', Ln: '.__LINE__);
279
  }
280
 
281
- if (false === $check) {
282
  DUP_LOG::trace($errorMessage);
283
  }
284
  }
270
  */
271
  private static function logCheckFalse($check, $errorMessage)
272
  {
 
 
 
 
273
  if (empty($errorMessage)) {
274
+ throw new Exception('Exception: Empty $errorMessage variable [File: '.__FILE__.', Ln: '.__LINE__);
275
  }
276
 
277
+ if (filter_var($check, FILTER_VALIDATE_BOOLEAN) === false) {
278
  DUP_LOG::trace($errorMessage);
279
  }
280
  }
define.php CHANGED
@@ -5,8 +5,8 @@ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
5
 
6
  if (function_exists('plugin_dir_url'))
7
  {
8
- define('DUPLICATOR_VERSION', '1.4.2');
9
- define('DUPLICATOR_VERSION_BUILD', '2021-07-07_12:30');
10
  define('DUPLICATOR_PLUGIN_URL', plugin_dir_url(__FILE__));
11
  define('DUPLICATOR_SITE_URL', get_site_url());
12
 
5
 
6
  if (function_exists('plugin_dir_url'))
7
  {
8
+ define('DUPLICATOR_VERSION', '1.4.3');
9
+ define('DUPLICATOR_VERSION_BUILD', '2021-09-08_08:00');
10
  define('DUPLICATOR_PLUGIN_URL', plugin_dir_url(__FILE__));
11
  define('DUPLICATOR_SITE_URL', get_site_url());
12
 
duplicator-main.php CHANGED
@@ -258,8 +258,6 @@ if (Duplicator\Requirements::canRun($currentPluginBootFile) === false) {
258
  add_action('admin_print_scripts-' . $page_tools, 'duplicator_scripts');
259
  add_action('admin_print_scripts-' . $page_gopro, 'duplicator_scripts');
260
 
261
- add_action('wp_enqueue_scripts', 'duplicator_global_scripts');
262
-
263
  //Apply Styles
264
  add_action('admin_print_styles-' . $page_packages, 'duplicator_styles');
265
  add_action('admin_print_styles-' . $page_settings, 'duplicator_styles');
258
  add_action('admin_print_scripts-' . $page_tools, 'duplicator_scripts');
259
  add_action('admin_print_scripts-' . $page_gopro, 'duplicator_scripts');
260
 
 
 
261
  //Apply Styles
262
  add_action('admin_print_styles-' . $page_packages, 'duplicator_styles');
263
  add_action('admin_print_styles-' . $page_settings, 'duplicator_styles');
duplicator.php CHANGED
@@ -3,9 +3,9 @@
3
  Plugin Name: Duplicator
4
  Plugin URI: https://snapcreek.com/duplicator/duplicator-free/
5
  Description: Migrate and backup a copy of your WordPress files and database. Duplicate and move a site from one location to another quickly.
6
- Version: 1.4.2
7
  Requires at least: 4.0
8
- Tested up to: 5.7.2
9
  Requires PHP: 5.3.8
10
  Author: Snap Creek
11
  Author URI: http://www.snapcreek.com/duplicator/
3
  Plugin Name: Duplicator
4
  Plugin URI: https://snapcreek.com/duplicator/duplicator-free/
5
  Description: Migrate and backup a copy of your WordPress files and database. Duplicate and move a site from one location to another quickly.
6
+ Version: 1.4.3
7
  Requires at least: 4.0
8
+ Tested up to: 5.8
9
  Requires PHP: 5.3.8
10
  Author: Snap Creek
11
  Author URI: http://www.snapcreek.com/duplicator/
installer/dup-installer/assets/font-awesome/webfonts/fa-brands-400.eot DELETED
Binary file
installer/dup-installer/assets/font-awesome/webfonts/fa-brands-400.ttf DELETED
Binary file
installer/dup-installer/assets/font-awesome/webfonts/fa-regular-400.eot DELETED
Binary file
installer/dup-installer/assets/font-awesome/webfonts/fa-regular-400.ttf DELETED
Binary file
installer/dup-installer/assets/font-awesome/webfonts/fa-solid-900.eot DELETED
Binary file
installer/dup-installer/assets/font-awesome/webfonts/fa-solid-900.ttf DELETED
Binary file
installer/dup-installer/assets/inc.css.php CHANGED
@@ -1,18 +1,174 @@
1
  <?php defined('ABSPATH') || defined('DUPXABSPATH') || exit; ?>
2
  <style>
3
- body {font-family:Verdana,Arial,sans-serif; font-size:13px}
4
- fieldset {border:1px solid silver; border-radius:3px; padding:10px}
5
- h3 {margin:1px; padding:1px; font-size:13px;}
6
- a {color:#222}
7
- a:hover{color:gray}
8
 
9
- input:not([type=checkbox]):not([type=radio]):not([type=button]) , select {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  width: 100%;
11
  border-radius: 2px;
12
  border: 1px solid silver;
13
  padding: 4px;
14
  padding-left: 4px;
15
- font-family: Verdana,Arial,sans-serif;
16
  line-height: 20px;
17
  height: 30px;
18
  box-sizing: border-box;
@@ -21,479 +177,1597 @@
21
  border-radius: 4px;
22
  }
23
 
24
- input[readonly]:not([type="checkbox"]):not([type="radio"]):not([type="button"]),
25
- select[readonly],
26
- select[readonly] option{
27
- background-color: darkgray;
28
- color: white;
29
- cursor: not-allowed;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  }
31
 
32
- select[size] {
33
- height: auto;
34
- line-height: 25px;
35
  }
36
 
37
- select , option {
38
- color: black;
 
 
39
  }
40
- select {
41
- padding-left:0;
 
42
  }
43
- select option {
44
- padding: 2px 5px;
 
45
  }
46
- select option:disabled {
47
- text-decoration: line-through;
48
- cursor: not-allowed;
49
- color: #A9A9A9;
 
 
 
 
 
 
 
 
50
  }
51
 
52
- select:disabled {background:#EBEBE4}
53
- input.readonly {background-color:#efefef;}
54
- .no-display { display: none; }
 
55
 
56
- /* ============================
57
- COMMON VIEWS
58
- ============================ */
59
- div#content {border:1px solid #CDCDCD; width:850px; min-height:550px; margin:auto; margin-top:18px; border-radius:2px; box-shadow:0 8px 6px -6px #999; font-size:13px}
60
- div#content-inner {padding:10px 25px; min-height:550px}
61
- form.content-form {min-height:550px; position:relative; line-height:17px}
62
- div.logfile-link {float:right; font-weight:normal; font-size:11px; font-style:italic}
63
- span.sub-notes {font-size:10px;}
64
 
65
- /* Header */
66
- table.header-wizard {width:100%; box-shadow:0 5px 3px -3px #999; background-color:#F1F1F1; font-weight:bold}
67
- div.dupx-logfile-link {float:right; font-weight:normal; font-style:italic; font-size:11px; cursor:pointer}
68
- .wiz-dupx-version {white-space:nowrap; color:#777; font-size:11px; font-style:italic; text-align:right; padding:3px 15px 5px 0; line-height:14px; font-weight:normal}
69
- .wiz-dupx-version a { color:#777; }
70
- div.dupx-debug-hdr {padding:5px 0 5px 0; font-size:16px; font-weight:bold}
71
- div.dupx-branding-header {font-size:26px; padding: 10px 0 7px 15px;}
72
-
73
- .dupx-overwrite {color:#AF0000;}
74
- .dupx-pass {display:inline-block; color:green;}
75
- .dupx-fail {display:inline-block; color:#AF0000;}
76
- .dupx-warn {display:inline-block; color:#555;}
77
- .dupx-notice {display:inline-block; color:#000;}
78
- i[data-tooltip].fa-question-circle {cursor: pointer; color:#C3C3C3}
79
- div.status-badge-pass {background-color:#418446;}
80
- div.status-badge-fail {background-color:maroon;}
81
- div.status-badge-warn {background-color:#555;}
82
- div.status-badge-pass, div.status-badge-fail, div.status-badge-warn {float:right; border-radius:4px; color:#fff; padding:0 3px 0 3px; font-size:11px !important; min-width:30px; text-align:center; font-weight:normal;}
83
- button.default-btn, .default-btn, .default-btn:hover {
84
- cursor:pointer; color:#fff; font-size:16px; border-radius:5px; padding:7px 25px 5px 25px;
85
- background-color:#13659C; border:1px solid gray; text-decoration: none;
86
- }
87
- button.disabled, input.disabled {background-color:#F4F4F4; color:silver; border:1px solid silver;}
88
-
89
- div.log-ui-error {padding-top:2px; font-size:13px}
90
- div#progress-area {padding:5px; margin:150px 0 0 0; text-align:center;}
91
- div#ajaxerr-data {padding:6px; height:425px; width:99%; border:1px solid silver; border-radius:2px; background-color:#F1F1F1; font-size:13px; overflow-y:scroll; line-height:20px}
92
- div.hdr-main {font-size:22px; padding:0 0 5px 0; border-bottom:1px solid #D3D3D3; font-weight:bold; margin:15px 0 20px 0;}
93
- div.hdr-main span.step {color:#DB4B38}
94
-
95
- div.sub-header {font-size:11px; font-style:italic; font-weight:normal; margin:5px 0 -1px 0}
96
- div.hdr-sub1 {font-size:18px; margin-bottom:5px;border:1px solid #D3D3D3;padding:7px; background-color:#f9f9f9; font-weight:bold; border-radius:2px}
97
- div.hdr-sub1 a {cursor:pointer; text-decoration: none !important}
98
- div.hdr-sub1 i.fa {font-size:15px; display:inline-block; margin:2px 5px 0 0; vertical-align:top}
99
- div.hdr-sub1-area {padding:5px}
100
- div.hdr-sub2 {font-size:15px; padding:2px 2px 2px 0; font-weight:bold; margin-bottom:5px; border:none}
101
- div.hdr-sub3 {font-size:15px; padding:2px 2px 2px 0; border-bottom:1px solid #D3D3D3; font-weight:bold; margin-bottom:5px;}
102
- div.hdr-sub4 {font-size:15px; padding:7px; border:1px solid #D3D3D3;; font-weight:bold; background-color:#e9e9e9;}
103
- div.hdr-sub4:hover {background-color:#dfdfdf; cursor:pointer}
104
- div.toggle-hdr:hover {cursor:pointer; background-color:#f1f1f1; border:1px solid #dcdcdc; }
105
- div.toggle-hdr:hover a{color:#000}
106
-
107
- [data-type="toggle"] > i.fa,
108
- i.fa.fa-toggle-empty { min-width: 8px; }
109
- div#s1-area-archive-file .ui-widget-header {border: none; border-bottom: 1px solid #D3D3D3 !important; background:#fff}
110
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
111
  /* ============================
112
- NOTICES
113
  ============================ */
114
- /* step messages */
115
- #step-messages { padding: 10px 25px 0; }
116
- .notice {
117
- background: #fff;
118
- border:1px solid #dfdfdf;
119
- border-left: 4px solid #fff;
120
- margin: 4px;
121
- padding: 5px;
122
- border-radius: 2px;
123
- font-size: 12px;
124
  }
125
 
126
- .notice-report {
127
- border-left: 4px solid #fff;
128
- padding-left: 0;
129
- padding-right: 0;
130
- margin-bottom: 4px;
131
  }
132
 
133
- .next-step .title-separator {
 
 
 
 
 
 
 
 
 
 
134
  margin-top: 5px;
135
- padding-top: 5px;
136
- border-top: 1px solid lightgray;
137
  }
138
 
139
- .notice .info pre {
140
- margin: 0;
141
- padding: 0;
142
- overflow: auto;
143
  }
144
 
145
- .notice-report .title {
146
- padding: 0 10px;
 
147
  }
148
 
149
- .notice-report .info {
150
- border-top: 1px solid #dedede;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  padding: 10px;
152
- font-size: 10px;
153
- background: #FAFAFA;
154
- word-wrap: break-word;
155
  }
156
 
157
- .notice.l-info,
158
- .notice.l-notice {border-left-color: #197b19;}
159
- .notice.l-swarning {border-left-color: #636363;}
160
- .notice.l-hwarning {border-left-color: #636363;}
161
- .notice.l-critical {border-left-color: maroon;}
162
- .notice.l-fatal {border-left-color: #000000;}
163
 
164
- .report-sections-list .section {
165
- border: 1px solid #DFDFDF;
166
- margin-bottom: 25px;
167
- box-shadow: 4px 8px 11px -8px rgba(0,0,0,0.41);
168
  }
169
 
170
- .report-sections-list .section > .section-title {
171
- background-color: #efefef;
 
172
  padding: 3px;
173
- font-weight: bold;
174
- text-align: center;
175
  font-size: 14px;
176
  }
177
 
178
- .report-sections-list .section > .section-content {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
179
  padding: 5px;
 
 
180
  }
181
 
182
- .notice-level-status {
 
 
 
 
183
  border-radius: 2px;
184
- padding: 2px;
185
- margin: 1px;
186
- font-size: 10px;
187
- display: inline-block;
188
- color: #FFF;
189
- font-weight: bold;
190
- min-width:55px;
191
  }
192
 
193
- .notice-level-status.l-info,
194
- .notice-level-status.l-notice {background: #197b19;}
195
- .notice-level-status.l-swarning {background: #636363;}
196
- .notice-level-status.l-hwarning {background: #636363;}
197
- .notice-level-status.l-critical {background: maroon;}
198
- .notice-level-status.l-fatal {background: #000000;}
 
 
 
199
 
200
- .gray-panel {
201
- border: 1px solid silver;
202
- margin:5px 0;
203
- padding:10px;
204
- background:#f9f9f9;
205
- border-radius:2px
 
206
  }
207
- .gray-panel.warn-text,
208
- .gray-panel .warn-text {
209
- font-size:12px;
210
- color:maroon
 
 
 
 
211
  }
212
- .gray-panel-overwrite {
213
- font-size:14px !important;
214
- line-height:25px;
215
  }
216
 
217
- /*Adv Opts */
218
- table.dupx-opts {width:100%; border:0px;}
219
- table.dupx-opts td{padding:3px;}
220
- table.dupx-opts td:first-child{width:125px; font-weight: bold}
221
- table.dupx-advopts td:first-child{width:125px;}
222
- table.dupx-advopts label.radio {width:50px; display:inline-block}
223
- table.dupx-advopts label {white-space:nowrap; cursor:pointer}
224
- table.dupx-advopts-space {line-height:24px}
225
-
226
- div.error-pane {border:1px solid #efefef; border-left:4px solid #D54E21; padding:0 0 0 10px; margin:2px 0 10px 0}
227
- div.dupx-ui-error {padding-top:2px; font-size:13px; line-height: 20px}
228
-
229
- div.footer-buttons {position:absolute; bottom:10px; padding:10px; right:0; width:100%; text-align:right}
230
- div.footer-buttons input:hover, button:hover {border:1px solid #000}
231
- div.footer-buttons input[disabled=disabled], button[disabled=disabled]{background-color:#F4F4F4; color:silver; border:1px solid silver;}
232
- form#form-debug {display:block; margin:10px auto; width:750px;}
233
- form#form-debug a {display:inline-block;}
234
- form#form-debug pre {margin-top:-2px; display:none}
235
 
236
- /*Dialog Info */
237
- div.dlg-serv-info {line-height:22px; font-size:12px}
238
- div.dlg-serv-info label {display:inline-block; width:200px; font-weight: bold}
239
- div.dlg-serv-info div.hdr {font-weight: bold; margin-top:5px; padding:2px 5px 2px 0; border-bottom: 1px solid #777; font-size:14px}
240
- div.dupx-modes {color:#999; font-weight:normal; font-style:italic; font-size:11px; padding:5px 10px 0 0; text-align:right}
241
 
242
- /* ============================
243
- INIT 1:SECURE PASSWORD
244
- ============================ */
245
- button.pass-toggle {height:26px; width:26px; position:absolute; top:0px; right:0px; border:1px solid silver; border-radius:0 4px 4px 0;padding:2px 0 0 3px;}
246
- button.pass-toggle i { padding:0; display:block; margin:-4px 0 0 -5px}
247
- div.i1-pass-area {
248
- width:100%;
249
- text-align:center;
250
- max-width: 300px;
251
  margin: auto;
252
- position: relative;
 
 
253
  }
254
- div.i1-pass-data table {width:100%; border-collapse:collapse; padding:0}
255
- div.i1-pass-data label {
256
- display: block;
257
- margin-bottom: 10px;
258
- font-weight:bold;
259
  }
260
- div.i1-pass-errmsg {color:maroon; font-weight:bold}
261
- div#i1-pass-input {position:relative; margin:2px 0 15px 0}
262
- input#secure-pass {border-radius:4px 0 0 4px; width:250px}
263
 
 
 
 
 
 
 
 
 
 
 
264
 
265
- /* ============================
266
- STEP 1 VIEW
267
- ============================ */
268
- div#s1-area-setup-type label {cursor:pointer}
269
- div.s1-setup-type-sub {padding:5px 0 0 25px; display:none}
270
- div#s1-area-archive-file .ui-widget.ui-widget-content {border: 0px solid #d3d3d3}
271
- table.s1-archive-local {width:100%}
272
- table.s1-archive-local td {padding:4px 4px 4px 4px}
273
- table.s1-archive-local td:first-child {font-weight:bold; width:55px}
274
- div.s1-archive-failed-msg {padding:15px; border:1px dashed maroon; font-size: 12px; border-radius:2px;}
275
- div.s1-err-msg {padding:0 0 80px 0; line-height:20px}
276
- div.s1-err-msg i {color:maroon}
277
- .maroon {color:maroon}
278
- .green {color:green}
279
-
280
- div#s1-area-sys-setup div.info-top {text-align:center; font-style:italic; font-size:11px; padding:0 5px 5px 5px}
281
- table.s1-checks-area {width:100%; margin:0; padding:0}
282
- table.s1-checks-area td.title {font-size:16px; width:100%}
283
- table.s1-checks-area td.title small {font-size:11px; font-weight:normal}
284
- table.s1-checks-area td.toggle {font-size:11px; margin-right:7px; font-weight:normal}
285
-
286
- div.s1-reqs {background-color:#efefef; border:1px solid silver; border-radius:2px; padding-bottom:4px}
287
- div.s1-reqs div.header {background-color:#E0E0E0; color:#000; border-bottom: 1px solid silver; padding:2px; font-weight:bold }
288
- div.s1-reqs div.status {float:right; border-radius:2px; color:#fff; padding:0 3px 0 3px; margin:4px 5px 0 0; font-size:11px; min-width:30px; text-align:center;}
289
- div.s1-reqs div.pass {background-color:green;}
290
- div.s1-reqs div.fail {background-color:maroon;}
291
- div.s1-reqs div.title {padding:3px 3px 3px 5px; font-size:13px;}
292
- div.s1-reqs div.title:hover {background-color:#dfdfdf; cursor:pointer}
293
- div.s1-reqs div.info {padding:8px 8px 20px 8px; background-color:#fff; display:none; line-height:18px; font-size: 12px}
294
- div.s1-reqs div.info a {color:#485AA3;}
295
- #archive_engine, #archive_action_input {width:90%; cursor:pointer}
296
-
297
- .info > *:first-child {
298
- margin-top: 0;
299
  }
300
 
301
- .info > *:last-child {
302
- margin-bottom: 0;
 
 
 
 
 
303
  }
304
 
305
- /*Terms and Notices*/
306
- div#s1-warning-check label{cursor:pointer;}
307
- div#s1-warning-msg {padding:5px;font-size:12px; color:#333; line-height:14px;font-style:italic; overflow-y:scroll; height:460px; border:1px solid #dfdfdf; background:#fff; border-radius:2px}
308
- div#s1-warning-check {padding:3px; font-size:14px; font-weight:normal;}
309
- .s1-warning-check [type=checkbox] {
310
- height: 17px;
311
- width: 17px;
312
  }
313
 
 
 
 
 
 
 
 
314
  /* ============================
315
- STEP 2 VIEW
316
- ============================ */
317
- div.s2-opts label {cursor:pointer}
318
- textarea#debug-dbtest-json {width:98%; height:200px}
319
- div.php-chuncking-warning {font-style:italic; font-size:11px; color:maroon; white-space:normal; line-height:16px; padding-left:20px}
320
 
321
- /*Toggle Buttons */
322
- div.s2-btngrp {text-align:center; margin:0 auto 10px auto}
323
- div.s2-btngrp input[type=button] {font-size:14px; padding:6px; width:120px; border:1px solid silver; cursor:pointer}
324
- div.s2-btngrp input[type=button]:first-child {border-radius:5px 0 0 5px; margin-right:-2px}
325
- div.s2-btngrp input[type=button]:last-child {border-radius:0 5px 5px 0; margin-left:-4px}
326
- div.s2-btngrp input[type=button].active {background-color:#13659C; color:#fff;}
327
- div.s2-btngrp input[type=button].in-active {background-color:#E4E4E4; }
328
- div.s2-btngrp input[type=button]:hover {border:1px solid #999}
329
 
330
- /*Basic DB */
331
- select#dbname-select {width:100%; border-radius:3px; height:20px; font-size:12px; border:1px solid silver;}
332
- div#s2-dbrefresh-basic {float:right; font-size:12px; display:none; font-weight:bold; margin:5px 5px 1px 0}
333
- div#s2-db-basic-overwrite div.warn-text {
334
- padding:5px 0 5px 0;
335
  }
336
- div#s2-db-basic-overwrite div.btn-area {
337
- text-align: right;
338
- margin:5px 0
 
 
339
  }
340
- input.overwrite-btn {
341
- cursor:pointer; color:#fff; font-size:13px; border-radius:5px; padding:5px 20px 4px 20px;
342
- background-color:#989898; border:1px solid #777;
 
 
 
343
  }
344
 
345
- /*cPanel DB */
346
- div.s2-cpnl-pane {margin-top:5px}
347
- div.s2-gopro {color: black; margin-top:10px; padding:0 20px 10px 20px; border: 1px solid silver; background-color:#F6F6F6; border-radius: 2px}
348
- div.s2-gopro h2 {text-align: center; margin:10px}
349
- div.s2-gopro small {font-style: italic}
350
- div.s2-cpanel-login {padding:15px; color:#fff; text-align:center; margin:15px 5px 15px 5px; border:1px solid silver; border-radius:2px; background-color:#13659C; font-size:14px; line-height:22px}
351
- div.s2-cpanel-off {padding:15px; color:#fff; text-align:center; margin:15px 5px 15px 5px; border:1px solid silver; border-radius:2px; background-color:#b54949; font-size:14px; line-height:22px}
352
- div.s2-cpnl-panel-no-support {text-align:center; font-size:18px; font-weight:bold; line-height:30px; margin-top:40px}
353
 
354
- /*DATABASE CHECKS */
355
- div.s2-dbtest-area {margin:auto; margin:5px 0 15px 0; min-height:110px}
356
- div.s2-dbtest-area input[type=button] {font-size:11px; height:20px; border:1px solid gray; border-radius:3px; cursor:pointer}
357
- div.s2-dbtest-area small.db-check {color:#000; text-align:center; padding:3px; font-size:11px; font-weight:normal }
358
- div.s2-dbtest-area div.message {padding:10px 10px 10px 10px; margin:5px auto 5px auto; text-align:center; font-style:italic; font-size:15px; line-height:22px; width:100%;}
359
- div.s2-dbtest-area div.sub-message {padding:5px; text-align:center; font-style:italic; color:maroon}
360
- div.s2-dbtest-area div.error-msg {color:maroon}
361
- div.s2-dbtest-area div.success-msg {color:green}
362
- div.s2-dbtest-area pre {font-family:Verdana,Arial,sans-serif; font-size:13px; margin:0; white-space:normal;}
363
-
364
- div.s2-reqs-hdr {border-radius:2px 2px 0 0; border-bottom:none}
365
- div.s2-notices-hdr {border-radius:0; border-bottom:1px solid #D3D3D3; }
366
- div#s2-reqs-all {display:none}
367
- div#s2-notices-all {display:none}
368
-
369
- div.s2-reqs {background-color:#efefef; border:1px solid #D3D3D3; border-top:none}
370
- div.s2-reqs div.status {float:right; border-radius:2px; color:#fff; padding:0 4px 0 4px; margin:4px 7px 0 0; font-size:12px; min-width:30px; text-align:center;}
371
- div.s2-reqs div.title {padding:3px 8px 3px 20px; font-size:13px; background-color:#f1f1f1; border-top: 1px solid #D3D3D3;}
372
- div.s2-reqs div.title:hover {background-color:#dfdfdf; cursor:pointer}
373
- div.s2-reqs div.info {padding:4px 12px 15px 12px;; background-color:#fff; display:none; line-height:18px; font-size: 12px}
374
- div.s2-reqs div.info a {color:#485AA3;}
375
- div.s2-reqs div.info ul {padding-left:25px}
376
- div.s2-reqs div.info ul li {padding:2px}
377
- div.s2-reqs div.info ul.vids {list-style-type: none;}
378
- div.s2-reqs div.sub-title{border-bottom: 1px solid #d3d3d3; font-weight:bold; margin:7px 0 3px 0}
379
-
380
- div.s2-reqs10 table {margin-top:5px;}
381
- div.s2-reqs10 table td {padding:1px;}
382
- div.s2-reqs10 table td:first-child {font-weight:bold; padding-right:10px}
383
- div.s2-reqs40 div.db-list {height:70px; width:95%; overflow-y:scroll; padding:2px 5px 5px 5px; border:1px solid #d3d3d3;}
384
- div.s2-reqs60 div.tbl-list {padding:2px 5px 5px 5px; border:0 }
385
- div.s2-reqs60 div.tbl-list b {display:inline-block; width:55px; }
386
-
387
- div.s2-notice20 table.collation-list table {padding:2px;}
388
- div.s2-notice20 table.collation-list td:first-child {font-weight:bold; padding-right:5px }
389
-
390
- textarea[readonly] {background-color: #efefef;}
391
- .copy-to-clipboard-block textarea {width: 100%; height: 100px;}
392
 
393
- .copy-to-clipboard-block button,
394
- .copy-to-clipboard-block button:hover {font-size: 14px; padding: 5px 8px; margin-bottom: 15px;}
 
395
 
396
- /*Warning Area and Message */
397
- div.s2-warning-emptydb {color:maroon; margin:2px 0 0 0; font-size:11px; display: none; white-space:normal; width: 550px}
398
- div.s2-warning-manualdb {color:#1B67FF; margin:2px 0 0 0; font-size:11px; display:none; white-space:normal; width: 550px}
399
- div.s2-warning-renamedb {color:#1B67FF; margin:2px 0 0 0; font-size:11px; display:none; white-space:normal; width: 550px}
400
- div#s2-tryagain {padding-top:50px; text-align:center; width:100%; font-size:16px; color:#444; font-weight:bold;}
401
 
402
- /* ============================
403
- STEP 3 VIEW
404
- ============================ */
405
- table.s3-opts{width:96%; border:0;}
406
- table.s3-opts i.fa{font-size:16px}
407
- table.s3-opts td{white-space:nowrap; padding:3px;}
408
- table.s3-opts td:first-child{width:90px; font-weight: bold}
409
- div#s3-adv-opts {margin-top:5px; }
410
- div.s3-allnonelinks {font-size:11px; float:right;}
411
- div.s3-manaual-msg {font-style: italic; margin:-2px 0 5px 0}
412
- small.s3-warn {color:maroon; font-style:italic}
413
 
414
- /* ============================
415
- STEP 4 VIEW
416
- ============================ */
417
- div.s4-final-msg {height:110px; border:1px solid #CDCDCD; padding:8px;font-size:12px; border-radius:2px;box-shadow:0 4px 2px -2px #777;}
418
- div.s4-final-title {color:#BE2323; font-size:18px}
419
- div.s4-connect {font-size:12px; text-align:center; font-style:italic; position:absolute; bottom:10px; padding:10px; width:100%; margin-top:20px}
420
- table.s4-report-results,
421
- table.s4-report-errs {border-collapse:collapse; box-shadow: 4px 8px 11px -8px rgba(0,0,0,0.41);}
422
- table.s4-report-errs td {text-align:center; width:33%}
423
- table.s4-report-results th, table.s4-report-errs th {background-color:#d0d0d0; padding:3px; font-size:14px;}
424
- table.s4-report-results td, table.s4-report-errs td {padding:3px; white-space:nowrap; border:1px solid #dfdfdf; text-align:center; font-size:11px}
425
- table.s4-report-results td:first-child {text-align:left; font-weight:bold; padding-left:3px}
426
- div.s4-err-title {background-color:#dfdfdf; font-weight: bold; margin:-3px 0 15px 0; padding:5px; border-radius:2px; font-size:13px}
427
-
428
- div.s4-err-msg {padding:8px; display:none; border:1px dashed #999; margin:10px 0 20px 0; border-radius:2px;}
429
- div.s4-err-msg div.content{padding:5px; font-size:11px; line-height:17px; max-height:125px; overflow-y:scroll; border:1px solid silver; margin:3px; }
430
- div.s4-err-msg div.info-error{padding:7px; background-color:#f9c9c9; border:1px solid silver; border-radius:2px; font-size:12px; line-height:16px }
431
- div.s4-err-msg div.info-notice{padding:7px; background-color:#FCFEC5; border:1px solid silver; border-radius:2px; font-size:12px; line-height:16px;}
432
- table.s4-final-step {width:100%;}
433
- table.s4-final-step td {padding:5px 15px 5px 5px;font-size:13px; }
434
- table.s4-final-step td:first-child {white-space:nowrap; width:165px}
435
- div.s4-go-back {border-top:1px dotted #dfdfdf; margin:auto;font-size:11px; color:#333; padding-top:4px}
436
- div.s4-go-back ul {line-height:18px}
437
- button.s4-final-btns {cursor:pointer; color:#fff; font-size:16px; border-radius:5px; padding:7px; background-color:#13659C; border:1px solid gray; width:145px;}
438
- button.s4-final-btns:hover {background-color: #dfdfdf;}
439
- div.s4-gopro-btn {text-align:center; font-size:14px; margin:auto; width:200px; font-style: italic; font-weight:bold}
440
- div.s4-gopro-btn a{color:green}
441
- div.s4-warn {color:maroon;}
442
- pre.s4-diff-viewer {line-height:11px}
443
- div#s4-notice-reports div.section-content div.title {cursor:pointer}
444
 
445
- /* ============================
446
- STEP 5 HELP
447
- ============================ */
448
- #body-help div#content {
449
  width: 100%;
450
- max-width: 1024px;
 
 
451
  }
452
- div.help-target {float:right;}
453
- div.help-target a {float:right; font-size:16px; color:#13659C}
454
- div#main-help sup {font-size:11px; font-weight:normal; font-style:italic; color:blue}
455
- div.help-online {text-align:center; font-size:18px; padding:10px 0 0 0; line-height:24px}
456
- div.help {color:#555; font-style:italic; font-size:11px; padding:4px; border-top:1px solid #dfdfdf}
457
- div.help-page fieldset {margin-bottom:25px}
458
- div#main-help {font-size:13px; line-height:17px}
459
- div#main-help h3 {border-bottom:1px solid silver; padding:8px; margin:4px 0 8px 0; font-size:20px}
460
- div#main-help span.step {color:#DB4B38}
461
- .help-opt {width: 100%; border: none; border-collapse: collapse; margin:5px 0 0 0;}
462
  .help-opt .col-opt {
463
  width: 250px;
464
  }
465
- .help-opt td.section {background-color:#dfdfdf;}
466
- .help-opt td, .help-opt th {padding:15px 10px; border:1px solid silver;}
467
- .help-opt td:first-child {font-weight:bold; padding-right:10px; white-space:nowrap}
468
- .help-opt th {background: #333; color: #fff;border:1px solid #333 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
469
 
470
  #main-help section {
471
  border: 1px solid silver;
472
  margin-top: 28px;
473
- border-radius:2px;
474
  overflow: hidden;
475
  }
476
 
477
  #main-help section h2.header {
478
- background-color:#F1F1F1;
479
- padding:15px;
480
- margin:0;
481
- font-size:20px;
482
  }
483
 
484
  #main-help section .content {
485
  padding: 10px;
486
  }
487
-
488
  /* ============================
489
  Expandable section
490
- ============================ */
 
491
  .expandable.close .expand-header {
492
- cursor:pointer;
493
  }
494
 
495
  .expandable.open .expand-header {
496
- cursor:pointer;
497
  }
498
 
499
  .expandable .expand-header::before {
@@ -516,24 +1790,25 @@
516
  .expandable.open .content {
517
  display: block;
518
  }
519
-
520
  /* ============================
521
  VIEW EXCEPTION
522
- ============================ */
 
523
  .exception-trace {
524
  overflow: auto;
525
  border: 1px solid lightgray;
526
  padding: 10px;
527
  margin: 0;
528
  }
529
-
530
-
531
  /*!
532
  * password indicator
533
  */
534
 
535
- .top_testresult{
536
- font-weight:bold; font-size:11px; color:#222; display: block;
 
 
 
537
  position: absolute;
538
  top: 0;
539
  right: 30px;
@@ -545,34 +1820,44 @@
545
  line-height: 30px;
546
  }
547
 
548
-
549
  .top_shortPass,
550
  .top_badPass {
551
- background:#edabab;
552
  background: transparent linear-gradient(90deg, transparent 20%, #edabab);
553
- display:block;
554
  }
555
- .top_goodPass{
556
- background:#ffffe0;
 
557
  background: transparent linear-gradient(90deg, transparent 20%, #ffffe0);
558
- display:block;
559
  }
560
- .top_strongPass{
561
- background:#d3edab;
 
562
  background: transparent linear-gradient(90deg, transparent 20%, #d3edab);
563
- display:block;
564
  }
565
-
566
  /*================================================
567
  LIB OVERIDES*/
568
- input.parsley-error, textarea.parsley-error, select.parsley-error {
569
- color:#B94A48 !important;
570
- background-color:#F2DEDE !important;
571
- border:1px solid #EED3D7 !important;
 
 
 
 
 
 
 
 
 
572
  }
573
- ul.parsley-errors-list {margin:1px 0 0 -40px; list-style-type:none; font-size:10px}
574
- .ui-widget {font-size:13px}
575
 
 
 
 
576
 
577
  <?php if (DUPX_Log::isLevel(DUPX_Log::LV_DEBUG)): ?>
578
  .dupx-debug {display:block; margin:0 0 25px 0; font-size:11px; background-color:#f5dbda; padding:8px; border:1px solid silver; border-radius:2px}
1
  <?php defined('ABSPATH') || defined('DUPXABSPATH') || exit; ?>
2
  <style>
3
+ /*******
4
+ HELPER CALSSES
5
+ *******/
 
 
6
 
7
+ .float-right {
8
+ float: right;
9
+ }
10
+
11
+ .float-left {
12
+ float: left;
13
+ }
14
+
15
+ .clearfix:before,
16
+ .clearfix:after {
17
+ content: " ";
18
+ /* 1 */
19
+ display: table;
20
+ /* 2 */
21
+ }
22
+
23
+ .clearfix:after {
24
+ clear: both;
25
+ }
26
+
27
+ .no-display {
28
+ display: none;
29
+ }
30
+
31
+ .transparent {
32
+ opacity: 0;
33
+ }
34
+
35
+ .monospace {
36
+ font-family: monospace;
37
+ }
38
+
39
+ .red {
40
+ color: #AF0000;
41
+ }
42
+
43
+ .orangered {
44
+ color: orangered;
45
+ }
46
+
47
+ .green {
48
+ color: #008000;
49
+ }
50
+
51
+ .maroon {
52
+ color: maroon;
53
+ }
54
+
55
+ .text-center {
56
+ text-align: center;
57
+ }
58
+
59
+ .text-right {
60
+ text-align: right;
61
+ }
62
+
63
+ .display-inline {
64
+ display: inline;
65
+ }
66
+
67
+ .display-inline-block {
68
+ display: inline-block;
69
+ }
70
+
71
+ .display-block {
72
+ display: block;
73
+ }
74
+
75
+ .margin-top-0 {
76
+ margin-top: 0;
77
+ }
78
+
79
+ .margin-top-1 {
80
+ margin-top: 20px;
81
+ }
82
+
83
+ .margin-top-2 {
84
+ margin-top: 40px;
85
+ }
86
+
87
+ .margin-top-3 {
88
+ margin-top: 60px;
89
+ }
90
+
91
+ .margin-top-4 {
92
+ margin-top: 80px;
93
+ }
94
+
95
+ .margin-bottom-0 {
96
+ margin-bottom: 0;
97
+ }
98
+
99
+ .margin-bottom-1 {
100
+ margin-bottom: 20px;
101
+ }
102
+
103
+ .margin-bottom-2 {
104
+ margin-bottom: 40px;
105
+ }
106
+
107
+ .margin-bottom-3 {
108
+ margin-bottom: 60px;
109
+ }
110
+
111
+ .margin-bottom-4 {
112
+ margin-bottom: 80px;
113
+ }
114
+
115
+ .margin-left-0 {
116
+ margin-left: 0;
117
+ }
118
+
119
+ .margin-left-1 {
120
+ margin-left: 20px;
121
+ }
122
+
123
+ .margin-left-2 {
124
+ margin-left: 40px;
125
+ }
126
+
127
+ .margin-right-0 {
128
+ margin-right: 0;
129
+ }
130
+
131
+ .margin-left-1 {
132
+ margin-right: 20px;
133
+ }
134
+
135
+ .margin-left-2 {
136
+ margin-right: 40px;
137
+ }
138
+
139
+ body {
140
+ font-family: Verdana, Arial, sans-serif;
141
+ font-size: 13px
142
+ }
143
+
144
+ fieldset {
145
+ border: 1px solid silver;
146
+ border-radius: 3px;
147
+ padding: 10px
148
+ }
149
+
150
+ h3 {
151
+ margin: 1px;
152
+ padding: 1px;
153
+ font-size: 13px;
154
+ }
155
+
156
+ a {
157
+ color: #222
158
+ }
159
+
160
+ a:hover {
161
+ color: gray
162
+ }
163
+
164
+ input:not([type=checkbox]):not([type=radio]):not([type=button]),
165
+ select {
166
  width: 100%;
167
  border-radius: 2px;
168
  border: 1px solid silver;
169
  padding: 4px;
170
  padding-left: 4px;
171
+ font-family: Verdana, Arial, sans-serif;
172
  line-height: 20px;
173
  height: 30px;
174
  box-sizing: border-box;
177
  border-radius: 4px;
178
  }
179
 
180
+ input[readonly]:not([type="checkbox"]):not([type="radio"]):not([type="button"]),
181
+ select[readonly],
182
+ select[readonly] option {
183
+ background-color: darkgray;
184
+ color: white;
185
+ cursor: not-allowed;
186
+ }
187
+
188
+ input:not([type=checkbox]):not([type=radio]):not([type=button]):disabled,
189
+ select:disabled,
190
+ select option:disabled,
191
+ select:disabled option,
192
+ select:disabled option:focus,
193
+ select:disabled option:active,
194
+ select:disabled option:checked {
195
+ background: #EBEBE4;
196
+ color: #ccc;
197
+ cursor: not-allowed;
198
+ }
199
+
200
+ select:disabled,
201
+ select option:disabled,
202
+ select:disabled option,
203
+ select:disabled option:focus,
204
+ select:disabled option:active,
205
+ select:disabled option:checked {
206
+ text-decoration: line-through;
207
+ }
208
+
209
+ select[size] {
210
+ height: auto;
211
+ line-height: 25px;
212
+ }
213
+
214
+ select,
215
+ option {
216
+ color: black;
217
+ }
218
+
219
+ select {
220
+ padding-left: 0;
221
+ }
222
+
223
+ select option {
224
+ padding: 2px 5px;
225
+ }
226
+
227
+ select option:disabled {
228
+ text-decoration: line-through;
229
+ cursor: not-allowed;
230
+ color: #A9A9A9;
231
+ }
232
+
233
+ select:disabled {
234
+ background: #EBEBE4
235
+ }
236
+
237
+ input.readonly {
238
+ background-color: #efefef;
239
+ }
240
+ /* ============================
241
+ COMMON VIEWS
242
+ ============================ */
243
+
244
+ div#content {
245
+ border: 1px solid #CDCDCD;
246
+ width: 850px;
247
+ min-height: 550px;
248
+ margin: auto;
249
+ margin-top: 18px;
250
+ border-radius: 2px;
251
+ box-shadow: 0 8px 6px -6px #999;
252
+ font-size: 13px
253
+ }
254
+
255
+ div#content-inner {
256
+ padding: 10px 25px;
257
+ min-height: 550px
258
+ }
259
+
260
+ form.content-form {
261
+ min-height: 550px;
262
+ position: relative;
263
+ line-height: 17px
264
+ }
265
+
266
+ div.logfile-link {
267
+ float: right;
268
+ font-weight: normal;
269
+ font-size: 11px;
270
+ font-style: italic
271
+ }
272
+
273
+ span.sub-notes {
274
+ font-size: 10px;
275
+ }
276
+ /* Header */
277
+
278
+ table.header-wizard {
279
+ width: 100%;
280
+ box-shadow: 0 5px 3px -3px #999;
281
+ background-color: #F1F1F1;
282
+ font-weight: bold
283
+ }
284
+
285
+ div.dupx-logfile-link {
286
+ float: right;
287
+ font-weight: normal;
288
+ font-style: italic;
289
+ font-size: 11px;
290
+ cursor: pointer
291
+ }
292
+
293
+ .wiz-dupx-version {
294
+ white-space: nowrap;
295
+ color: #777;
296
+ font-size: 11px;
297
+ font-style: italic;
298
+ text-align: right;
299
+ padding: 3px 15px 5px 0;
300
+ line-height: 14px;
301
+ font-weight: normal
302
+ }
303
+
304
+ .wiz-dupx-version a {
305
+ color: #777;
306
+ }
307
+
308
+ div.dupx-debug-hdr {
309
+ padding: 5px 0 5px 0;
310
+ font-size: 16px;
311
+ font-weight: bold
312
+ }
313
+
314
+ div.dupx-branding-header {
315
+ font-size: 26px;
316
+ padding: 10px 0 7px 15px;
317
+ }
318
+
319
+ .dupx-overwrite {
320
+ color: #AF0000;
321
+ }
322
+
323
+ .dupx-pass {
324
+ display: inline-block;
325
+ color: green;
326
+ }
327
+
328
+ .dupx-fail {
329
+ display: inline-block;
330
+ color: #AF0000;
331
+ }
332
+
333
+ .dupx-warn {
334
+ display: inline-block;
335
+ color: #555;
336
+ }
337
+
338
+ .dupx-notice {
339
+ display: inline-block;
340
+ color: #000;
341
+ }
342
+
343
+ i[data-tooltip].fa-question-circle {
344
+ cursor: pointer;
345
+ color: #C3C3C3
346
+ }
347
+
348
+ div.status-badge-pass {
349
+ background-color: #418446;
350
+ }
351
+
352
+ div.status-badge-fail {
353
+ background-color: maroon;
354
+ }
355
+
356
+ div.status-badge-warn {
357
+ background-color: #555;
358
+ }
359
+
360
+ div.status-badge-pass,
361
+ div.status-badge-fail,
362
+ div.status-badge-warn {
363
+ float: right;
364
+ border-radius: 4px;
365
+ color: #fff;
366
+ padding: 0 3px 0 3px;
367
+ font-size: 11px !important;
368
+ min-width: 30px;
369
+ text-align: center;
370
+ font-weight: normal;
371
+ }
372
+
373
+ button.default-btn,
374
+ .default-btn,
375
+ .default-btn:hover {
376
+ cursor: pointer;
377
+ color: #fff;
378
+ font-size: 16px;
379
+ border-radius: 5px;
380
+ padding: 7px 25px 5px 25px;
381
+ background-color: #13659C;
382
+ border: 1px solid gray;
383
+ text-decoration: none;
384
+ }
385
+
386
+ button.disabled,
387
+ input.disabled {
388
+ background-color: #F4F4F4;
389
+ color: silver;
390
+ border: 1px solid silver;
391
+ }
392
+
393
+ div.log-ui-error {
394
+ padding-top: 2px;
395
+ font-size: 13px
396
+ }
397
+
398
+ div#progress-area {
399
+ padding: 5px;
400
+ margin: 150px 0 0 0;
401
+ text-align: center;
402
+ }
403
+
404
+ div#ajaxerr-data {
405
+ padding: 6px;
406
+ height: 425px;
407
+ width: 99%;
408
+ border: 1px solid silver;
409
+ border-radius: 2px;
410
+ background-color: #F1F1F1;
411
+ font-size: 13px;
412
+ overflow-y: scroll;
413
+ line-height: 20px
414
+ }
415
+
416
+ div.hdr-main {
417
+ font-size: 22px;
418
+ padding: 0 0 5px 0;
419
+ border-bottom: 1px solid #D3D3D3;
420
+ font-weight: bold;
421
+ margin: 15px 0 20px 0;
422
+ }
423
+
424
+ div.hdr-main span.step {
425
+ color: #DB4B38
426
+ }
427
+
428
+ div.sub-header {
429
+ font-size: 11px;
430
+ font-style: italic;
431
+ font-weight: normal;
432
+ margin: 5px 0 -1px 0
433
+ }
434
+
435
+ div.hdr-sub1 {
436
+ font-size: 18px;
437
+ margin-bottom: 5px;
438
+ border: 1px solid #D3D3D3;
439
+ padding: 7px;
440
+ background-color: #f9f9f9;
441
+ font-weight: bold;
442
+ border-radius: 2px
443
+ }
444
+
445
+ div.hdr-sub1 a {
446
+ cursor: pointer;
447
+ text-decoration: none !important
448
+ }
449
+
450
+ div.hdr-sub1 i.fa {
451
+ font-size: 15px;
452
+ display: inline-block;
453
+ margin: 2px 5px 0 0;
454
+ vertical-align: top
455
+ }
456
+
457
+ div.hdr-sub1-area {
458
+ padding: 5px
459
+ }
460
+
461
+ div.hdr-sub2 {
462
+ font-size: 15px;
463
+ padding: 2px 2px 2px 0;
464
+ font-weight: bold;
465
+ margin-bottom: 5px;
466
+ border: none
467
+ }
468
+
469
+ div.hdr-sub3 {
470
+ font-size: 15px;
471
+ padding: 2px 2px 2px 0;
472
+ border-bottom: 1px solid #D3D3D3;
473
+ font-weight: bold;
474
+ margin-bottom: 5px;
475
+ }
476
+
477
+ div.hdr-sub4 {
478
+ font-size: 15px;
479
+ padding: 7px;
480
+ border: 1px solid #D3D3D3;
481
+ ;
482
+ font-weight: bold;
483
+ background-color: #e9e9e9;
484
+ }
485
+
486
+ div.hdr-sub4:hover {
487
+ background-color: #dfdfdf;
488
+ cursor: pointer
489
+ }
490
+
491
+ div.toggle-hdr:hover {
492
+ cursor: pointer;
493
+ background-color: #f1f1f1;
494
+ border: 1px solid #dcdcdc;
495
+ }
496
+
497
+ div.toggle-hdr:hover a {
498
+ color: #000
499
+ }
500
+
501
+ [data-type="toggle"]>i.fa,
502
+ i.fa.fa-toggle-empty {
503
+ min-width: 8px;
504
+ }
505
+
506
+ div#s1-area-archive-file .ui-widget-header {
507
+ border: none;
508
+ border-bottom: 1px solid #D3D3D3 !important;
509
+ background: #fff
510
+ }
511
+ /* ============================
512
+ NOTICES
513
+ ============================ */
514
+ /* step messages */
515
+
516
+ #step-messages {
517
+ padding: 10px 25px 0;
518
+ }
519
+
520
+ .notice {
521
+ background: #fff;
522
+ border: 1px solid #dfdfdf;
523
+ border-left: 4px solid #fff;
524
+ margin: 4px;
525
+ padding: 5px;
526
+ border-radius: 2px;
527
+ font-size: 12px;
528
+ }
529
+
530
+ .notice-report {
531
+ border-left: 4px solid #fff;
532
+ padding-left: 0;
533
+ padding-right: 0;
534
+ margin-bottom: 4px;
535
+ }
536
+
537
+ .next-step .title-separator {
538
+ margin-top: 5px;
539
+ padding-top: 5px;
540
+ border-top: 1px solid lightgray;
541
+ }
542
+
543
+ .notice .info pre {
544
+ margin: 0;
545
+ padding: 0;
546
+ overflow: auto;
547
+ }
548
+
549
+ .notice-report .title {
550
+ padding: 0 10px;
551
+ }
552
+
553
+ .notice-report .info {
554
+ border-top: 1px solid #dedede;
555
+ padding: 10px;
556
+ font-size: 10px;
557
+ background: #FAFAFA;
558
+ word-wrap: break-word;
559
+ }
560
+
561
+ .notice.l-info,
562
+ .notice.l-notice {
563
+ border-left-color: #197b19;
564
+ }
565
+
566
+ .notice.l-swarning {
567
+ border-left-color: #636363;
568
+ }
569
+
570
+ .notice.l-hwarning {
571
+ border-left-color: #636363;
572
+ }
573
+
574
+ .notice.l-critical {
575
+ border-left-color: maroon;
576
+ }
577
+
578
+ .notice.l-fatal {
579
+ border-left-color: #000000;
580
+ }
581
+
582
+ .report-sections-list .section {
583
+ border: 1px solid #DFDFDF;
584
+ margin-bottom: 25px;
585
+ box-shadow: 4px 8px 11px -8px rgba(0, 0, 0, 0.41);
586
+ }
587
+
588
+ .report-sections-list .section>.section-title {
589
+ background-color: #efefef;
590
+ padding: 3px;
591
+ font-weight: bold;
592
+ text-align: center;
593
+ font-size: 14px;
594
+ }
595
+
596
+ .report-sections-list .section>.section-content {
597
+ padding: 5px;
598
+ }
599
+
600
+ .notice-level-status {
601
+ border-radius: 2px;
602
+ padding: 2px;
603
+ margin: 1px;
604
+ font-size: 10px;
605
+ display: inline-block;
606
+ color: #FFF;
607
+ font-weight: bold;
608
+ min-width: 55px;
609
+ }
610
+
611
+ .notice-level-status.l-info,
612
+ .notice-level-status.l-notice {
613
+ background: #197b19;
614
+ }
615
+
616
+ .notice-level-status.l-swarning {
617
+ background: #636363;
618
+ }
619
+
620
+ .notice-level-status.l-hwarning {
621
+ background: #636363;
622
+ }
623
+
624
+ .notice-level-status.l-critical {
625
+ background: maroon;
626
+ }
627
+
628
+ .notice-level-status.l-fatal {
629
+ background: #000000;
630
+ }
631
+
632
+ .gray-panel {
633
+ border: 1px solid silver;
634
+ margin: 5px 0;
635
+ padding: 10px;
636
+ background: #f9f9f9;
637
+ border-radius: 2px
638
+ }
639
+
640
+ .gray-panel.warn-text,
641
+ .gray-panel .warn-text {
642
+ font-size: 12px;
643
+ color: maroon
644
+ }
645
+
646
+ .gray-panel-overwrite {
647
+ font-size: 14px !important;
648
+ line-height: 25px;
649
+ }
650
+ /*Adv Opts */
651
+
652
+ table.dupx-opts {
653
+ width: 100%;
654
+ border: 0px;
655
+ }
656
+
657
+ table.dupx-opts td {
658
+ padding: 3px;
659
+ }
660
+
661
+ table.dupx-opts td:first-child {
662
+ width: 125px;
663
+ font-weight: bold
664
+ }
665
+
666
+ table.dupx-advopts td:first-child {
667
+ width: 125px;
668
+ }
669
+
670
+ table.dupx-advopts label.radio {
671
+ width: 50px;
672
+ display: inline-block
673
+ }
674
+
675
+ table.dupx-advopts label {
676
+ white-space: nowrap;
677
+ cursor: pointer
678
+ }
679
+
680
+ table.dupx-advopts-space {
681
+ line-height: 24px
682
+ }
683
+
684
+ div.error-pane {
685
+ border: 1px solid #efefef;
686
+ border-left: 4px solid #D54E21;
687
+ padding: 0 0 0 10px;
688
+ margin: 2px 0 10px 0
689
+ }
690
+
691
+ div.dupx-ui-error {
692
+ padding-top: 2px;
693
+ font-size: 13px;
694
+ line-height: 20px
695
+ }
696
+
697
+ div.footer-buttons {
698
+ position: absolute;
699
+ bottom: 10px;
700
+ padding: 10px;
701
+ right: 0;
702
+ width: 100%;
703
+ text-align: right
704
+ }
705
+
706
+ div.footer-buttons input:hover,
707
+ button:hover {
708
+ border: 1px solid #000
709
+ }
710
+
711
+ div.footer-buttons input[disabled=disabled],
712
+ button[disabled=disabled] {
713
+ background-color: #F4F4F4;
714
+ color: silver;
715
+ border: 1px solid silver;
716
+ }
717
+
718
+ form#form-debug {
719
+ display: block;
720
+ margin: 10px auto;
721
+ width: 750px;
722
+ }
723
+
724
+ form#form-debug a {
725
+ display: inline-block;
726
+ }
727
+
728
+ form#form-debug pre {
729
+ margin-top: -2px;
730
+ display: none
731
+ }
732
+ /*Dialog Info */
733
+
734
+ div.dlg-serv-info {
735
+ line-height: 22px;
736
+ font-size: 12px
737
+ }
738
+
739
+ div.dlg-serv-info label {
740
+ display: inline-block;
741
+ width: 200px;
742
+ font-weight: bold
743
+ }
744
+
745
+ div.dlg-serv-info div.hdr {
746
+ font-weight: bold;
747
+ margin-top: 5px;
748
+ padding: 2px 5px 2px 0;
749
+ border-bottom: 1px solid #777;
750
+ font-size: 14px
751
+ }
752
+
753
+ div.dupx-modes {
754
+ color: #999;
755
+ font-weight: normal;
756
+ font-style: italic;
757
+ font-size: 11px;
758
+ padding: 5px 10px 0 0;
759
+ text-align: right
760
+ }
761
+ /* ============================
762
+ INIT 1:SECURE PASSWORD
763
+ ============================ */
764
+
765
+ button.pass-toggle {
766
+ height: 26px;
767
+ width: 26px;
768
+ position: absolute;
769
+ top: 0px;
770
+ right: 0px;
771
+ border: 1px solid silver;
772
+ border-radius: 0 4px 4px 0;
773
+ padding: 2px 0 0 3px;
774
+ }
775
+
776
+ button.pass-toggle i {
777
+ padding: 0;
778
+ display: block;
779
+ margin: -4px 0 0 -5px
780
+ }
781
+
782
+ div.i1-pass-area {
783
+ width: 100%;
784
+ text-align: center;
785
+ max-width: 300px;
786
+ margin: auto;
787
+ position: relative;
788
+ }
789
+
790
+ div.i1-pass-data table {
791
+ width: 100%;
792
+ border-collapse: collapse;
793
+ padding: 0
794
+ }
795
+
796
+ div.i1-pass-data label {
797
+ display: block;
798
+ margin-bottom: 10px;
799
+ font-weight: bold;
800
+ }
801
+
802
+ div.i1-pass-errmsg {
803
+ color: maroon;
804
+ font-weight: bold
805
+ }
806
+
807
+ div#i1-pass-input {
808
+ position: relative;
809
+ margin: 2px 0 15px 0
810
+ }
811
+
812
+ input#secure-pass {
813
+ border-radius: 4px 0 0 4px;
814
+ width: 250px
815
+ }
816
+
817
+ #body-secure .param-wrapper {
818
+ display: flex;
819
+ }
820
+
821
+ #body-secure .param-wrapper > label {
822
+ min-width: 150px;
823
+ font-weight: bold;
824
+ line-height: 27px;
825
+ }
826
+
827
+ #body-secure .param-wrapper > *:nth-child(2) {
828
+ width: 100%;
829
+ }
830
+
831
+ .param-wrapper .sub-note {
832
+ display: block;
833
+ font-size: 11px;
834
+ margin-top:6px;
835
+ }
836
+
837
+ #body-secure .param-wrapper .sub-note {
838
+ text-align: right;
839
+ }
840
+
841
+ .box {
842
+ border: 1px solid silver;
843
+ padding: 10px;
844
+ background: #f9f9f9;
845
+ border-radius:2px;
846
+ }
847
+
848
+ .box *:first-child {
849
+ margin-top: 0;
850
+ }
851
+
852
+ .box *:last-child {
853
+ margin-bottom: 0;
854
+ }
855
+
856
+ .box.warning {
857
+ color: maroon;
858
+ border-color: maroon;
859
+ }
860
+ #pass-quick-help-info {
861
+ font-size:13px;
862
+ line-height:22px;
863
+ }
864
+ #pass-quick-help-info li {
865
+ padding:7px 0 7px 0
866
+ }
867
+
868
+ .pass-quick-help-note {
869
+ text-align:center;
870
+ font-size:11px;
871
+ font-style:italic;
872
+ }
873
+
874
+ /* ============================
875
+ STEP 1 VIEW
876
+ ============================ */
877
+
878
+ div#s1-area-setup-type label {
879
+ cursor: pointer
880
+ }
881
+
882
+ div.s1-setup-type-sub {
883
+ padding: 5px 0 0 25px;
884
+ display: none
885
+ }
886
+
887
+ div#s1-area-archive-file .ui-widget.ui-widget-content {
888
+ border: 0px solid #d3d3d3
889
+ }
890
+
891
+ table.s1-archive-local {
892
+ width: 100%
893
+ }
894
+
895
+ table.s1-archive-local td {
896
+ padding: 4px 4px 4px 4px
897
+ }
898
+
899
+ table.s1-archive-local td:first-child {
900
+ font-weight: bold;
901
+ width: 55px
902
+ }
903
+
904
+ div.s1-archive-failed-msg {
905
+ padding: 15px;
906
+ border: 1px dashed maroon;
907
+ font-size: 12px;
908
+ border-radius: 2px;
909
+ }
910
+
911
+ div.s1-err-msg {
912
+ padding: 0 0 80px 0;
913
+ line-height: 20px
914
+ }
915
+
916
+ div.s1-err-msg i {
917
+ color: maroon
918
+ }
919
+
920
+ .maroon {
921
+ color: maroon
922
+ }
923
+
924
+ .green {
925
+ color: green
926
+ }
927
+
928
+ div#s1-area-sys-setup div.info-top {
929
+ text-align: center;
930
+ font-style: italic;
931
+ font-size: 11px;
932
+ padding: 0 5px 5px 5px
933
+ }
934
+
935
+ table.s1-checks-area {
936
+ width: 100%;
937
+ margin: 0;
938
+ padding: 0
939
+ }
940
+
941
+ table.s1-checks-area td.title {
942
+ font-size: 16px;
943
+ width: 100%
944
+ }
945
+
946
+ table.s1-checks-area td.title small {
947
+ font-size: 11px;
948
+ font-weight: normal
949
+ }
950
+
951
+ table.s1-checks-area td.toggle {
952
+ font-size: 11px;
953
+ margin-right: 7px;
954
+ font-weight: normal
955
+ }
956
+
957
+ div.s1-reqs {
958
+ background-color: #efefef;
959
+ border: 1px solid silver;
960
+ border-radius: 2px;
961
+ padding-bottom: 4px
962
+ }
963
+
964
+ div.s1-reqs div.header {
965
+ background-color: #E0E0E0;
966
+ color: #000;
967
+ border-bottom: 1px solid silver;
968
+ padding: 2px;
969
+ font-weight: bold
970
+ }
971
+
972
+ div.s1-reqs div.status {
973
+ float: right;
974
+ border-radius: 2px;
975
+ color: #fff;
976
+ padding: 0 3px 0 3px;
977
+ margin: 4px 5px 0 0;
978
+ font-size: 11px;
979
+ min-width: 30px;
980
+ text-align: center;
981
+ }
982
+
983
+ div.s1-reqs div.pass {
984
+ background-color: green;
985
+ }
986
+
987
+ div.s1-reqs div.fail {
988
+ background-color: maroon;
989
+ }
990
+
991
+ div.s1-reqs div.title {
992
+ padding: 3px 3px 3px 5px;
993
+ font-size: 13px;
994
+ }
995
+
996
+ div.s1-reqs div.title:hover {
997
+ background-color: #dfdfdf;
998
+ cursor: pointer
999
+ }
1000
+
1001
+ div.s1-reqs div.info {
1002
+ padding: 8px 8px 20px 8px;
1003
+ background-color: #fff;
1004
+ display: none;
1005
+ line-height: 18px;
1006
+ font-size: 12px
1007
+ }
1008
+
1009
+ div.s1-reqs div.info a {
1010
+ color: #485AA3;
1011
+ }
1012
+
1013
+ #archive_engine,
1014
+ #archive_action_input {
1015
+ width: 90%;
1016
+ cursor: pointer
1017
+ }
1018
+
1019
+ .info>*:first-child {
1020
+ margin-top: 0;
1021
+ }
1022
+
1023
+ .info>*:last-child {
1024
+ margin-bottom: 0;
1025
+ }
1026
+ /*Terms and Notices*/
1027
+
1028
+ div#s1-warning-check label {
1029
+ cursor: pointer;
1030
+ }
1031
+
1032
+ div#s1-warning-msg {
1033
+ padding: 5px;
1034
+ font-size: 12px;
1035
+ color: #333;
1036
+ line-height: 14px;
1037
+ font-style: italic;
1038
+ overflow-y: scroll;
1039
+ height: 460px;
1040
+ border: 1px solid #dfdfdf;
1041
+ background: #fff;
1042
+ border-radius: 2px
1043
+ }
1044
+
1045
+ div#s1-warning-check {
1046
+ padding: 3px;
1047
+ font-size: 14px;
1048
+ font-weight: normal;
1049
+ }
1050
+
1051
+ .s1-warning-check [type=checkbox] {
1052
+ height: 17px;
1053
+ width: 17px;
1054
+ }
1055
+ /* ============================
1056
+ STEP 2 VIEW
1057
+ ============================ */
1058
+
1059
+ div.s2-opts label {
1060
+ cursor: pointer
1061
+ }
1062
+
1063
+ textarea#debug-dbtest-json {
1064
+ width: 98%;
1065
+ height: 200px
1066
+ }
1067
+
1068
+ div.php-chuncking-warning {
1069
+ font-style: italic;
1070
+ font-size: 11px;
1071
+ color: maroon;
1072
+ white-space: normal;
1073
+ line-height: 16px;
1074
+ padding-left: 20px
1075
+ }
1076
+ /*Toggle Buttons */
1077
+
1078
+ div.s2-btngrp {
1079
+ text-align: center;
1080
+ margin: 0 auto 10px auto
1081
+ }
1082
+
1083
+ div.s2-btngrp input[type=button] {
1084
+ font-size: 14px;
1085
+ padding: 6px;
1086
+ width: 120px;
1087
+ border: 1px solid silver;
1088
+ cursor: pointer
1089
+ }
1090
+
1091
+ div.s2-btngrp input[type=button]:first-child {
1092
+ border-radius: 5px 0 0 5px;
1093
+ margin-right: -2px
1094
+ }
1095
+
1096
+ div.s2-btngrp input[type=button]:last-child {
1097
+ border-radius: 0 5px 5px 0;
1098
+ margin-left: -4px
1099
+ }
1100
+
1101
+ div.s2-btngrp input[type=button].active {
1102
+ background-color: #13659C;
1103
+ color: #fff;
1104
+ }
1105
+
1106
+ div.s2-btngrp input[type=button].in-active {
1107
+ background-color: #E4E4E4;
1108
+ }
1109
+
1110
+ div.s2-btngrp input[type=button]:hover {
1111
+ border: 1px solid #999
1112
+ }
1113
+ /*Basic DB */
1114
+
1115
+ select#dbname-select {
1116
+ width: 100%;
1117
+ border-radius: 3px;
1118
+ height: 20px;
1119
+ font-size: 12px;
1120
+ border: 1px solid silver;
1121
+ }
1122
+
1123
+ div#s2-dbrefresh-basic {
1124
+ float: right;
1125
+ font-size: 12px;
1126
+ display: none;
1127
+ font-weight: bold;
1128
+ margin: 5px 5px 1px 0
1129
+ }
1130
+
1131
+ div#s2-db-basic-overwrite div.warn-text {
1132
+ padding: 5px 0 5px 0;
1133
+ }
1134
+
1135
+ div#s2-db-basic-overwrite div.btn-area {
1136
+ text-align: right;
1137
+ margin: 5px 0
1138
+ }
1139
+
1140
+ div.s2-db-basic-title {
1141
+ margin: 4px;
1142
+ padding: 2px 0 2px 0;
1143
+ font-weight: bold;
1144
+ border-bottom: 1px solid silver
1145
+ }
1146
+
1147
+ input.overwrite-btn {
1148
+ cursor: pointer;
1149
+ color: #fff;
1150
+ font-size: 13px;
1151
+ border-radius: 5px;
1152
+ padding: 5px 20px 4px 20px;
1153
+ background-color: #989898;
1154
+ border: 1px solid #777;
1155
+ }
1156
+ /*cPanel DB */
1157
+
1158
+ div.s2-cpnl-pane {
1159
+ margin-top: 5px
1160
+ }
1161
+
1162
+ div.s2-gopro {
1163
+ color: black;
1164
+ margin-top: 10px;
1165
+ padding: 0 20px 10px 20px;
1166
+ border: 1px solid silver;
1167
+ background-color: #F6F6F6;
1168
+ border-radius: 2px
1169
+ }
1170
+
1171
+ div.s2-gopro h2 {
1172
+ text-align: center;
1173
+ margin: 10px
1174
+ }
1175
+
1176
+ div.s2-gopro small {
1177
+ font-style: italic
1178
+ }
1179
+
1180
+ div.s2-cpanel-login {
1181
+ padding: 15px;
1182
+ color: #fff;
1183
+ text-align: center;
1184
+ margin: 15px 5px 15px 5px;
1185
+ border: 1px solid silver;
1186
+ border-radius: 2px;
1187
+ background-color: #13659C;
1188
+ font-size: 14px;
1189
+ line-height: 22px
1190
+ }
1191
+
1192
+ div.s2-cpanel-off {
1193
+ padding: 15px;
1194
+ color: #fff;
1195
+ text-align: center;
1196
+ margin: 15px 5px 15px 5px;
1197
+ border: 1px solid silver;
1198
+ border-radius: 2px;
1199
+ background-color: #b54949;
1200
+ font-size: 14px;
1201
+ line-height: 22px
1202
+ }
1203
+
1204
+ div.s2-cpnl-panel-no-support {
1205
+ text-align: center;
1206
+ font-size: 18px;
1207
+ font-weight: bold;
1208
+ line-height: 30px;
1209
+ margin-top: 40px
1210
+ }
1211
+ /*DATABASE CHECKS */
1212
+
1213
+ div.s2-dbtest-area {
1214
+ margin: auto;
1215
+ margin: 5px 0 15px 0;
1216
+ min-height: 110px
1217
+ }
1218
+
1219
+ div.s2-dbtest-area input[type=button] {
1220
+ font-size: 11px;
1221
+ height: 20px;
1222
+ border: 1px solid gray;
1223
+ border-radius: 3px;
1224
+ cursor: pointer
1225
+ }
1226
+
1227
+ div.s2-dbtest-area small.db-check {
1228
+ color: #000;
1229
+ text-align: center;
1230
+ padding: 3px;
1231
+ font-size: 11px;
1232
+ font-weight: normal
1233
+ }
1234
+
1235
+ div.s2-dbtest-area div.message {
1236
+ padding: 10px 10px 10px 10px;
1237
+ margin: 5px auto 5px auto;
1238
+ text-align: center;
1239
+ font-style: italic;
1240
+ font-size: 15px;
1241
+ line-height: 22px;
1242
+ width: 100%;
1243
+ }
1244
+
1245
+ div.s2-dbtest-area div.sub-message {
1246
+ padding: 5px;
1247
+ text-align: center;
1248
+ font-style: italic;
1249
+ color: maroon
1250
+ }
1251
+
1252
+ div.s2-dbtest-area div.error-msg {
1253
+ color: maroon
1254
+ }
1255
+
1256
+ div.s2-dbtest-area div.success-msg {
1257
+ color: green
1258
+ }
1259
+
1260
+ div.s2-dbtest-area pre {
1261
+ font-family: Verdana, Arial, sans-serif;
1262
+ font-size: 13px;
1263
+ margin: 0;
1264
+ white-space: normal;
1265
+ }
1266
+
1267
+ div.s2-reqs-hdr {
1268
+ border-radius: 2px 2px 0 0;
1269
+ border-bottom: none
1270
+ }
1271
+
1272
+ div.s2-notices-hdr {
1273
+ border-radius: 0;
1274
+ border-bottom: 1px solid #D3D3D3;
1275
+ }
1276
+
1277
+ div#s2-reqs-all {
1278
+ display: none
1279
+ }
1280
+
1281
+ div#s2-notices-all {
1282
+ display: none
1283
+ }
1284
+
1285
+ div.s2-reqs {
1286
+ background-color: #efefef;
1287
+ border: 1px solid #D3D3D3;
1288
+ border-top: none
1289
+ }
1290
+
1291
+ div.s2-reqs div.status {
1292
+ float: right;
1293
+ border-radius: 2px;
1294
+ color: #fff;
1295
+ padding: 0 4px 0 4px;
1296
+ margin: 4px 7px 0 0;
1297
+ font-size: 12px;
1298
+ min-width: 30px;
1299
+ text-align: center;
1300
+ }
1301
+
1302
+ div.s2-reqs div.title {
1303
+ padding: 3px 8px 3px 20px;
1304
+ font-size: 13px;
1305
+ background-color: #f1f1f1;
1306
+ border-top: 1px solid #D3D3D3;
1307
+ }
1308
+
1309
+ div.s2-reqs div.title:hover {
1310
+ background-color: #dfdfdf;
1311
+ cursor: pointer
1312
+ }
1313
+
1314
+ div.s2-reqs div.info {
1315
+ padding: 4px 12px 15px 12px;
1316
+ ;
1317
+ background-color: #fff;
1318
+ display: none;
1319
+ line-height: 18px;
1320
+ font-size: 12px
1321
+ }
1322
+
1323
+ div.s2-reqs div.info a {
1324
+ color: #485AA3;
1325
+ }
1326
+
1327
+ div.s2-reqs div.info ul {
1328
+ padding-left: 25px
1329
+ }
1330
+
1331
+ div.s2-reqs div.info ul li {
1332
+ padding: 2px
1333
  }
1334
 
1335
+ div.s2-reqs div.info ul.vids {
1336
+ list-style-type: none;
 
1337
  }
1338
 
1339
+ div.s2-reqs div.sub-title {
1340
+ border-bottom: 1px solid #d3d3d3;
1341
+ font-weight: bold;
1342
+ margin: 7px 0 3px 0
1343
  }
1344
+
1345
+ div.s2-reqs10 table {
1346
+ margin-top: 5px;
1347
  }
1348
+
1349
+ div.s2-reqs10 table td {
1350
+ padding: 1px;
1351
  }
1352
+
1353
+ div.s2-reqs10 table td:first-child {
1354
+ font-weight: bold;
1355
+ padding-right: 10px
1356
+ }
1357
+
1358
+ div.s2-reqs40 div.db-list {
1359
+ height: 70px;
1360
+ width: 95%;
1361
+ overflow-y: scroll;
1362
+ padding: 2px 5px 5px 5px;
1363
+ border: 1px solid #d3d3d3;
1364
  }
1365
 
1366
+ div.s2-reqs60 div.tbl-list {
1367
+ padding: 2px 5px 5px 5px;
1368
+ border: 0
1369
+ }
1370
 
1371
+ div.s2-reqs60 div.tbl-list b {
1372
+ display: inline-block;
1373
+ width: 55px;
1374
+ }
 
 
 
 
1375
 
1376
+ div.s2-notice20 table.collation-list table {
1377
+ padding: 2px;
1378
+ }
1379
+
1380
+ div.s2-notice20 table.collation-list td:first-child {
1381
+ font-weight: bold;
1382
+ padding-right: 5px
1383
+ }
1384
+
1385
+ textarea[readonly] {
1386
+ background-color: #efefef;
1387
+ }
1388
+
1389
+ .copy-to-clipboard-block textarea {
1390
+ width: 100%;
1391
+ height: 100px;
1392
+ }
1393
+
1394
+ .copy-to-clipboard-block button,
1395
+ .copy-to-clipboard-block button:hover {
1396
+ font-size: 14px;
1397
+ padding: 5px 8px;
1398
+ margin-bottom: 15px;
1399
+ }
1400
+ /*Warning Area and Message */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1401
 
1402
+ div.s2-warning-emptydb {
1403
+ color: maroon;
1404
+ margin: 2px 0 0 0;
1405
+ font-size: 11px;
1406
+ display: none;
1407
+ white-space: normal;
1408
+ width: 550px
1409
+ }
1410
+
1411
+ div.s2-warning-manualdb {
1412
+ color: #1B67FF;
1413
+ margin: 2px 0 0 0;
1414
+ font-size: 11px;
1415
+ display: none;
1416
+ white-space: normal;
1417
+ width: 550px
1418
+ }
1419
+
1420
+ div.s2-warning-renamedb {
1421
+ color: #1B67FF;
1422
+ margin: 2px 0 0 0;
1423
+ font-size: 11px;
1424
+ display: none;
1425
+ white-space: normal;
1426
+ width: 550px
1427
+ }
1428
+
1429
+ div#s2-tryagain {
1430
+ padding-top: 50px;
1431
+ text-align: center;
1432
+ width: 100%;
1433
+ font-size: 16px;
1434
+ color: #444;
1435
+ font-weight: bold;
1436
+ }
1437
  /* ============================
1438
+ STEP 3 VIEW
1439
  ============================ */
1440
+
1441
+ table.s3-opts {
1442
+ width: 96%;
1443
+ border: 0;
 
 
 
 
 
 
1444
  }
1445
 
1446
+ table.s3-opts i.fa {
1447
+ font-size: 16px
 
 
 
1448
  }
1449
 
1450
+ table.s3-opts td {
1451
+ white-space: nowrap;
1452
+ padding: 3px;
1453
+ }
1454
+
1455
+ table.s3-opts td:first-child {
1456
+ width: 90px;
1457
+ font-weight: bold
1458
+ }
1459
+
1460
+ div#s3-adv-opts {
1461
  margin-top: 5px;
 
 
1462
  }
1463
 
1464
+ div.s3-allnonelinks {
1465
+ font-size: 11px;
1466
+ float: right;
 
1467
  }
1468
 
1469
+ div.s3-manaual-msg {
1470
+ font-style: italic;
1471
+ margin: -2px 0 5px 0
1472
  }
1473
 
1474
+ small.s3-warn {
1475
+ color: maroon;
1476
+ font-style: italic
1477
+ }
1478
+ /* ============================
1479
+ STEP 4 VIEW
1480
+ ============================ */
1481
+
1482
+ div.s4-final-msg {
1483
+ height: 110px;
1484
+ border: 1px solid #CDCDCD;
1485
+ padding: 8px;
1486
+ font-size: 12px;
1487
+ border-radius: 2px;
1488
+ box-shadow: 0 4px 2px -2px #777;
1489
+ }
1490
+
1491
+ div.s4-final-title {
1492
+ color: #BE2323;
1493
+ font-size: 18px
1494
+ }
1495
+
1496
+ div.s4-connect {
1497
+ font-size: 12px;
1498
+ text-align: center;
1499
+ font-style: italic;
1500
+ position: absolute;
1501
+ bottom: 10px;
1502
  padding: 10px;
1503
+ width: 100%;
1504
+ margin-top: 20px
 
1505
  }
1506
 
1507
+ table.s4-report-results,
1508
+ table.s4-report-errs {
1509
+ border-collapse: collapse;
1510
+ box-shadow: 4px 8px 11px -8px rgba(0, 0, 0, 0.41);
1511
+ }
 
1512
 
1513
+ table.s4-report-errs td {
1514
+ text-align: center;
1515
+ width: 33%
 
1516
  }
1517
 
1518
+ table.s4-report-results th,
1519
+ table.s4-report-errs th {
1520
+ background-color: #d0d0d0;
1521
  padding: 3px;
 
 
1522
  font-size: 14px;
1523
  }
1524
 
1525
+ table.s4-report-results td,
1526
+ table.s4-report-errs td {
1527
+ padding: 3px;
1528
+ white-space: nowrap;
1529
+ border: 1px solid #dfdfdf;
1530
+ text-align: center;
1531
+ font-size: 11px
1532
+ }
1533
+
1534
+ table.s4-report-results td:first-child {
1535
+ text-align: left;
1536
+ font-weight: bold;
1537
+ padding-left: 3px
1538
+ }
1539
+
1540
+ div.s4-err-title {
1541
+ background-color: #dfdfdf;
1542
+ font-weight: bold;
1543
+ margin: -3px 0 15px 0;
1544
  padding: 5px;
1545
+ border-radius: 2px;
1546
+ font-size: 13px
1547
  }
1548
 
1549
+ div.s4-err-msg {
1550
+ padding: 8px;
1551
+ display: none;
1552
+ border: 1px dashed #999;
1553
+ margin: 10px 0 20px 0;
1554
  border-radius: 2px;
 
 
 
 
 
 
 
1555
  }
1556
 
1557
+ div.s4-err-msg div.content {
1558
+ padding: 5px;
1559
+ font-size: 11px;
1560
+ line-height: 17px;
1561
+ max-height: 125px;
1562
+ overflow-y: scroll;
1563
+ border: 1px solid silver;
1564
+ margin: 3px;
1565
+ }
1566
 
1567
+ div.s4-err-msg div.info-error {
1568
+ padding: 7px;
1569
+ background-color: #f9c9c9;
1570
+ border: 1px solid silver;
1571
+ border-radius: 2px;
1572
+ font-size: 12px;
1573
+ line-height: 16px
1574
  }
1575
+
1576
+ div.s4-err-msg div.info-notice {
1577
+ padding: 7px;
1578
+ background-color: #FCFEC5;
1579
+ border: 1px solid silver;
1580
+ border-radius: 2px;
1581
+ font-size: 12px;
1582
+ line-height: 16px;
1583
  }
1584
+
1585
+ table.s4-final-step {
1586
+ width: 100%;
1587
  }
1588
 
1589
+ table.s4-final-step td {
1590
+ padding: 5px 15px 5px 5px;
1591
+ font-size: 13px;
1592
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1593
 
1594
+ table.s4-final-step td:first-child {
1595
+ white-space: nowrap;
1596
+ width: 165px
1597
+ }
 
1598
 
1599
+ div.s4-go-back {
1600
+ border-top: 1px dotted #dfdfdf;
 
 
 
 
 
 
 
1601
  margin: auto;
1602
+ font-size: 11px;
1603
+ color: #333;
1604
+ padding-top: 4px
1605
  }
1606
+
1607
+ div.s4-go-back ul {
1608
+ line-height: 18px
 
 
1609
  }
 
 
 
1610
 
1611
+ button.s4-final-btns {
1612
+ cursor: pointer;
1613
+ color: #fff;
1614
+ font-size: 16px;
1615
+ border-radius: 5px;
1616
+ padding: 7px;
1617
+ background-color: #13659C;
1618
+ border: 1px solid gray;
1619
+ width: 145px;
1620
+ }
1621
 
1622
+ button.s4-final-btns:hover {
1623
+ background-color: #dfdfdf;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1624
  }
1625
 
1626
+ div.s4-gopro-btn {
1627
+ text-align: center;
1628
+ font-size: 14px;
1629
+ margin: auto;
1630
+ width: 200px;
1631
+ font-style: italic;
1632
+ font-weight: bold
1633
  }
1634
 
1635
+ div.s4-gopro-btn a {
1636
+ color: green
1637
+ }
1638
+
1639
+ div.s4-warn {
1640
+ color: maroon;
 
1641
  }
1642
 
1643
+ pre.s4-diff-viewer {
1644
+ line-height: 11px
1645
+ }
1646
+
1647
+ div#s4-notice-reports div.section-content div.title {
1648
+ cursor: pointer
1649
+ }
1650
  /* ============================
1651
+ STEP 5 HELP
1652
+ ============================ */
 
 
 
1653
 
1654
+ #body-help div#content {
1655
+ width: 100%;
1656
+ max-width: 1024px;
1657
+ }
 
 
 
 
1658
 
1659
+ div.help-target {
1660
+ float: right;
 
 
 
1661
  }
1662
+
1663
+ div.help-target a {
1664
+ float: right;
1665
+ font-size: 16px;
1666
+ color: #13659C
1667
  }
1668
+
1669
+ div#main-help sup {
1670
+ font-size: 11px;
1671
+ font-weight: normal;
1672
+ font-style: italic;
1673
+ color: blue
1674
  }
1675
 
1676
+ div.help-online {
1677
+ text-align: center;
1678
+ font-size: 18px;
1679
+ padding: 10px 0 0 0;
1680
+ line-height: 24px
1681
+ }
 
 
1682
 
1683
+ div.help {
1684
+ color: #555;
1685
+ font-style: italic;
1686
+ font-size: 11px;
1687
+ padding: 4px;
1688
+ border-top: 1px solid #dfdfdf
1689
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1690
 
1691
+ div.help-page fieldset {
1692
+ margin-bottom: 25px
1693
+ }
1694
 
1695
+ div#main-help {
1696
+ font-size: 13px;
1697
+ line-height: 17px
1698
+ }
 
1699
 
1700
+ div#main-help h3 {
1701
+ border-bottom: 1px solid silver;
1702
+ padding: 8px;
1703
+ margin: 4px 0 8px 0;
1704
+ font-size: 20px
1705
+ }
 
 
 
 
 
1706
 
1707
+ div#main-help span.step {
1708
+ color: #DB4B38
1709
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1710
 
1711
+ .help-opt {
 
 
 
1712
  width: 100%;
1713
+ border: none;
1714
+ border-collapse: collapse;
1715
+ margin: 5px 0 0 0;
1716
  }
1717
+
 
 
 
 
 
 
 
 
 
1718
  .help-opt .col-opt {
1719
  width: 250px;
1720
  }
1721
+
1722
+ .help-opt td.section {
1723
+ background-color: #dfdfdf;
1724
+ }
1725
+
1726
+ .help-opt td,
1727
+ .help-opt th {
1728
+ padding: 15px 10px;
1729
+ border: 1px solid silver;
1730
+ }
1731
+
1732
+ .help-opt td:first-child {
1733
+ font-weight: bold;
1734
+ padding-right: 10px;
1735
+ white-space: nowrap
1736
+ }
1737
+
1738
+ .help-opt th {
1739
+ background: #333;
1740
+ color: #fff;
1741
+ border: 1px solid #333
1742
+ }
1743
 
1744
  #main-help section {
1745
  border: 1px solid silver;
1746
  margin-top: 28px;
1747
+ border-radius: 2px;
1748
  overflow: hidden;
1749
  }
1750
 
1751
  #main-help section h2.header {
1752
+ background-color: #F1F1F1;
1753
+ padding: 15px;
1754
+ margin: 0;
1755
+ font-size: 20px;
1756
  }
1757
 
1758
  #main-help section .content {
1759
  padding: 10px;
1760
  }
 
1761
  /* ============================
1762
  Expandable section
1763
+ ============================ */
1764
+
1765
  .expandable.close .expand-header {
1766
+ cursor: pointer;
1767
  }
1768
 
1769
  .expandable.open .expand-header {
1770
+ cursor: pointer;
1771
  }
1772
 
1773
  .expandable .expand-header::before {
1790
  .expandable.open .content {
1791
  display: block;
1792
  }
 
1793
  /* ============================
1794
  VIEW EXCEPTION
1795
+ ============================ */
1796
+
1797
  .exception-trace {
1798
  overflow: auto;
1799
  border: 1px solid lightgray;
1800
  padding: 10px;
1801
  margin: 0;
1802
  }
 
 
1803
  /*!
1804
  * password indicator
1805
  */
1806
 
1807
+ .top_testresult {
1808
+ font-weight: bold;
1809
+ font-size: 11px;
1810
+ color: #222;
1811
+ display: block;
1812
  position: absolute;
1813
  top: 0;
1814
  right: 30px;
1820
  line-height: 30px;
1821
  }
1822
 
 
1823
  .top_shortPass,
1824
  .top_badPass {
1825
+ background: #edabab;
1826
  background: transparent linear-gradient(90deg, transparent 20%, #edabab);
1827
+ display: block;
1828
  }
1829
+
1830
+ .top_goodPass {
1831
+ background: #ffffe0;
1832
  background: transparent linear-gradient(90deg, transparent 20%, #ffffe0);
1833
+ display: block;
1834
  }
1835
+
1836
+ .top_strongPass {
1837
+ background: #d3edab;
1838
  background: transparent linear-gradient(90deg, transparent 20%, #d3edab);
1839
+ display: block;
1840
  }
 
1841
  /*================================================
1842
  LIB OVERIDES*/
1843
+
1844
+ input.parsley-error,
1845
+ textarea.parsley-error,
1846
+ select.parsley-error {
1847
+ color: #B94A48 !important;
1848
+ background-color: #F2DEDE !important;
1849
+ border: 1px solid #EED3D7 !important;
1850
+ }
1851
+
1852
+ ul.parsley-errors-list {
1853
+ margin: 1px 0 0 -40px;
1854
+ list-style-type: none;
1855
+ font-size: 10px
1856
  }
 
 
1857
 
1858
+ .ui-widget {
1859
+ font-size: 13px
1860
+ }
1861
 
1862
  <?php if (DUPX_Log::isLevel(DUPX_Log::LV_DEBUG)): ?>
1863
  .dupx-debug {display:block; margin:0 0 25px 0; font-size:11px; background-color:#f5dbda; padding:8px; border:1px solid silver; border-radius:2px}
installer/dup-installer/classes/class.csrf.php CHANGED
@@ -1,182 +1,206 @@
1
  <?php
 
2
  defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
 
4
- class DUPX_CSRF {
5
-
6
- /**
7
- * Session var name prefix
8
- * @var string
9
- */
10
- public static $prefix = '_DUPX_CSRF';
11
-
12
- /**
13
- * Stores all CSRF values: Key as CSRF name and Val as CRF value
14
- * @var array
15
- */
16
- private static $CSRFVars;
17
 
18
- /**
19
- * Set new CSRF
20
- *
21
- * @param $key string CSRF Key
22
- * @param $key string CSRF Val
23
- *
24
- * @return Void
25
- */
26
- public static function setKeyVal($key, $val) {
27
- $CSRFVars = self::getCSRFVars();
28
- $CSRFVars[$key] = $val;
29
- self::saveCSRFVars($CSRFVars);
30
- self::$CSRFVars = false;
31
- }
32
 
33
  /**
34
- * Get CSRF value by passing CSRF key
35
- *
36
- * @param $key string CSRF key
37
- *
38
- * @return string|boolean If CSRF value set for give n Key, It returns CRF value otherise returns false
39
- */
40
- public static function getVal($key) {
41
- $CSRFVars = self::getCSRFVars();
42
- if (isset($CSRFVars[$key])) {
43
- return $CSRFVars[$key];
44
- } else {
45
- return false;
46
- }
47
- }
48
-
49
- /** Generate DUPX_CSRF value for form
50
- *
51
- * @param string $form - Form name as session key
52
- * @return string - token
53
- */
54
- public static function generate($form = NULL) {
55
- $keyName = self::getKeyName($form);
56
-
57
- $existingToken = self::getVal($keyName);
58
- if (false !== $existingToken) {
59
- $token = $existingToken;
60
- } else {
61
- $token = DUPX_CSRF::token() . DUPX_CSRF::fingerprint();
62
- }
63
-
64
- self::setKeyVal($keyName, $token);
65
- return $token;
66
- }
67
 
68
- /**
69
- * Check DUPX_CSRF value of form
70
- *
71
- * @param string $token - Token
72
- * @param string $form - Form name as session key
73
- * @return boolean
74
- */
75
- public static function check($token, $form = NULL) {
76
- $keyName = self::getKeyName($form);
77
- $CSRFVars = self::getCSRFVars();
78
- if (isset($CSRFVars[$keyName]) && $CSRFVars[$keyName] == $token) { // token OK
79
- return true;
80
- }
81
- return false;
82
- }
83
-
84
- /** Generate token
85
- * @param void
86
- * @return string
87
- */
88
- protected static function token() {
89
- mt_srand((double) microtime() * 10000);
90
- $charid = strtoupper(md5(uniqid(rand(), TRUE)));
91
- return substr($charid, 0, 8) . substr($charid, 8, 4) . substr($charid, 12, 4) . substr($charid, 16, 4) . substr($charid, 20, 12);
92
- }
93
 
94
- /** Returns "digital fingerprint" of user
95
- * @param void
96
- * @return string - MD5 hashed data
97
- */
98
- protected static function fingerprint() {
99
- return strtoupper(md5(implode('|', array($_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']))));
100
- }
101
 
102
- /**
103
- * Generate CSRF Key name
104
- *
105
- * @param string the form name for which CSRF key need to generate
106
- * @return string CSRF key
107
- */
108
- private static function getKeyName($form) {
109
- return DUPX_CSRF::$prefix . '_' . $form;
110
- }
 
 
 
 
 
 
111
 
112
- /**
113
- * Get Package hash
114
- *
115
- * @return string Package hash
116
- */
117
- private static function getPackageHash() {
118
- if (class_exists('DUPX_Bootstrap')) {
119
- return DUPX_Bootstrap::PACKAGE_HASH;
120
- } else {
121
- return $GLOBALS['PACKAGE_HASH'];
122
- }
123
- }
 
 
 
 
124
 
125
- /**
126
- * Get file path where CSRF tokens are stored in JSON encoded format
127
- *
128
- * @return string file path where CSRF token stored
129
- */
130
- private static function getFilePath() {
131
- if (class_exists('DUPX_Bootstrap')) {
132
- $dupInstallerfolderPath = dirname(__FILE__).'/dup-installer/';
133
- } else {
134
- $dupInstallerfolderPath = $GLOBALS['DUPX_INIT'].'/';
135
- }
136
- $packageHash = self::getPackageHash();
137
- $fileName = 'dup-installer-csrf__'.$packageHash.'.txt';
138
- $filePath = $dupInstallerfolderPath.$fileName;
139
- return $filePath;
140
- }
141
 
142
- /**
143
- * Get all CSRF vars in array format
144
- *
145
- * @return array Key as CSRF name and value as CSRF value
146
- */
147
- private static function getCSRFVars() {
148
- if (!isset(self::$CSRFVars) || false === self::$CSRFVars) {
149
- $filePath = self::getFilePath();
150
- if (file_exists($filePath)) {
151
- if (!($contents = file_get_contents($filePath))) {
152
- throw new Exception('Fail to read the CSRF file.');
153
- }
154
- if (empty($contents)) {
155
- self::$CSRFVars = array();
156
- } else {
157
- $CSRFobjs = json_decode($contents);
158
- foreach ($CSRFobjs as $key => $value) {
159
- self::$CSRFVars[$key] = $value;
160
- }
161
- }
162
- } else {
163
- self::$CSRFVars = array();
164
- }
165
- }
166
- return self::$CSRFVars;
167
- }
168
 
169
- /**
170
- * Stores all CSRF vars
171
- *
172
- * @param $CSRFVars array holds all CSRF key val
173
- * @return void
174
- */
175
- private static function saveCSRFVars($CSRFVars) {
176
- $contents = DupLiteSnapJsonU::wp_json_encode($CSRFVars);
177
- $filePath = self::getFilePath();
178
- if (!file_put_contents($filePath, $contents, LOCK_EX)) {
179
- throw new Exception('Fail to write the CSRF file.');
180
- }
181
- }
182
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+
3
  defined('ABSPATH') || defined('DUPXABSPATH') || exit;
4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
 
6
+ class DUPX_CSRF
7
+ {
8
+
9
+ private static $packagHash = null;
10
+ private static $mainFolder = null;
 
 
 
 
 
 
 
 
 
11
 
12
  /**
13
+ * Session var name prefix
14
+ * @var string
15
+ */
16
+ public static $prefix = '_DUPX_CSRF';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
+ /**
19
+ * Stores all CSRF values: Key as CSRF name and Val as CRF value
20
+ * @var array
21
+ */
22
+ private static $CSRFVars = null;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
+ public static function init($mainFolderm, $packageHash)
25
+ {
26
+ self::$mainFolder = $mainFolderm;
27
+ self::$packagHash = $packageHash;
28
+ self::$CSRFVars = null;
29
+ }
 
30
 
31
+ /**
32
+ * Set new CSRF
33
+ *
34
+ * @param string $key CSRF Key
35
+ * @param string $val CSRF Val
36
+ *
37
+ * @return Void
38
+ */
39
+ public static function setKeyVal($key, $val)
40
+ {
41
+ $CSRFVars = self::getCSRFVars();
42
+ $CSRFVars[$key] = $val;
43
+ self::saveCSRFVars($CSRFVars);
44
+ self::$CSRFVars = null;
45
+ }
46
 
47
+ /**
48
+ * Get CSRF value by passing CSRF key
49
+ *
50
+ * @param string $key CSRF key
51
+ *
52
+ * @return string|boolean If CSRF value set for give n Key, It returns CRF value otherise returns false
53
+ */
54
+ public static function getVal($key)
55
+ {
56
+ $CSRFVars = self::getCSRFVars();
57
+ if (isset($CSRFVars[$key])) {
58
+ return $CSRFVars[$key];
59
+ } else {
60
+ return false;
61
+ }
62
+ }
63
 
64
+ /**
65
+ * Generate DUPX_CSRF value for form
66
+ *
67
+ * @param string $form // Form name as session key
68
+ *
69
+ * @return string // token
70
+ */
71
+ public static function generate($form = null)
72
+ {
73
+ $keyName = self::getKeyName($form);
74
+ $existingToken = self::getVal($keyName);
75
+ if (false !== $existingToken) {
76
+ $token = $existingToken;
77
+ } else {
78
+ $token = DUPX_CSRF::token() . DUPX_CSRF::fingerprint();
79
+ }
80
 
81
+ self::setKeyVal($keyName, $token);
82
+ return $token;
83
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
 
85
+ /**
86
+ * Check DUPX_CSRF value of form
87
+ *
88
+ * @param string $token - Token
89
+ * @param string $form - Form name as session key
90
+ * @return boolean
91
+ */
92
+ public static function check($token, $form = null)
93
+ {
94
+ if (empty($form)) {
95
+ return false;
96
+ }
97
+
98
+ $keyName = self::getKeyName($form);
99
+ $CSRFVars = self::getCSRFVars();
100
+ if (isset($CSRFVars[$keyName]) && $CSRFVars[$keyName] == $token) {
101
+ // token OK
102
+ return true;
103
+ }
104
+ return false;
105
+ }
106
+
107
+ /** Generate token
108
+ *
109
+ * @return string
110
+ */
111
+ protected static function token()
112
+ {
113
+ mt_srand((double) microtime() * 10000);
114
+ $charid = strtoupper(md5(uniqid(rand(), true)));
115
+ return substr($charid, 0, 8) . substr($charid, 8, 4) . substr($charid, 12, 4) . substr($charid, 16, 4) . substr($charid, 20, 12);
116
+ }
117
+
118
+ /** Returns "digital fingerprint" of user
119
+ *
120
+ * @return string - MD5 hashed data
121
+ */
122
+ protected static function fingerprint()
123
+ {
124
+ return strtoupper(md5(implode('|', array($_SERVER['REMOTE_ADDR'], $_SERVER['HTTP_USER_AGENT']))));
125
+ }
126
+
127
+ /**
128
+ * Generate CSRF Key name
129
+ *
130
+ * @param string $form the form name for which CSRF key need to generate
131
+ * @return string CSRF key
132
+ */
133
+ private static function getKeyName($form)
134
+ {
135
+ return DUPX_CSRF::$prefix . '_' . $form;
136
+ }
137
+
138
+ /**
139
+ * Get Package hash
140
+ *
141
+ * @return string Package hash
142
+ */
143
+ private static function getPackageHash()
144
+ {
145
+ if (is_null(self::$packagHash)) {
146
+ throw new Exception('Not init CSFR CLASS');
147
+ }
148
+ return self::$packagHash;
149
+ }
150
+
151
+ /**
152
+ * Get file path where CSRF tokens are stored in JSON encoded format
153
+ *
154
+ * @return string file path where CSRF token stored
155
+ */
156
+ public static function getFilePath()
157
+ {
158
+ if (is_null(self::$mainFolder)) {
159
+ throw new Exception('Not init CSFR CLASS');
160
+ }
161
+ $dupInstallerfolderPath = self::$mainFolder;
162
+ $packageHash = self::getPackageHash();
163
+ $fileName = 'dup-installer-csrf__' . $packageHash . '.txt';
164
+ $filePath = $dupInstallerfolderPath . '/' . $fileName;
165
+ return $filePath;
166
+ }
167
+
168
+ /**
169
+ * Get all CSRF vars in array format
170
+ *
171
+ * @return array Key as CSRF name and value as CSRF value
172
+ */
173
+ private static function getCSRFVars()
174
+ {
175
+ if (is_null(self::$CSRFVars)) {
176
+ $filePath = self::getFilePath();
177
+ if (file_exists($filePath)) {
178
+ $contents = file_get_contents($filePath);
179
+ if (empty($contents)) {
180
+ self::$CSRFVars = array();
181
+ } else {
182
+ $CSRFobjs = json_decode($contents);
183
+ foreach ($CSRFobjs as $key => $value) {
184
+ self::$CSRFVars[$key] = $value;
185
+ }
186
+ }
187
+ } else {
188
+ self::$CSRFVars = array();
189
+ }
190
+ }
191
+ return self::$CSRFVars;
192
+ }
193
+
194
+ /**
195
+ * Stores all CSRF vars
196
+ *
197
+ * @param array $CSRFVars holds all CSRF key val
198
+ * @return void
199
+ */
200
+ private static function saveCSRFVars($CSRFVars)
201
+ {
202
+ $contents = DupLiteSnapJsonU::wp_json_encode($CSRFVars);
203
+ $filePath = self::getFilePath();
204
+ file_put_contents($filePath, $contents);
205
+ }
206
+ }
installer/dup-installer/classes/config/class.boot.php CHANGED
@@ -55,6 +55,7 @@ class DUPX_Boot
55
  // set all PHP.INI settings
56
  self::phpIni();
57
  self::initParamsBase();
 
58
 
59
  /*
60
  * INIZIALIZE
@@ -153,6 +154,7 @@ class DUPX_Boot
153
  require_once($GLOBALS['DUPX_INIT'].'/classes/class.package.php');
154
  require_once($GLOBALS['DUPX_INIT'].'/ctrls/ctrl.base.php');
155
  require_once($GLOBALS['DUPX_INIT'].'/classes/config/class.archive.config.php');
 
156
  require_once($GLOBALS['DUPX_INIT'].'/classes/class.logging.php');
157
  require_once($GLOBALS['DUPX_INIT'].'/classes/host/class.custom.host.manager.php');
158
  }
55
  // set all PHP.INI settings
56
  self::phpIni();
57
  self::initParamsBase();
58
+ DUPX_Security::getInstance();
59
 
60
  /*
61
  * INIZIALIZE
154
  require_once($GLOBALS['DUPX_INIT'].'/classes/class.package.php');
155
  require_once($GLOBALS['DUPX_INIT'].'/ctrls/ctrl.base.php');
156
  require_once($GLOBALS['DUPX_INIT'].'/classes/config/class.archive.config.php');
157
+ require_once($GLOBALS['DUPX_INIT'].'/classes/config/class.security.php');
158
  require_once($GLOBALS['DUPX_INIT'].'/classes/class.logging.php');
159
  require_once($GLOBALS['DUPX_INIT'].'/classes/host/class.custom.host.manager.php');
160
  }
installer/dup-installer/classes/config/class.security.php ADDED
@@ -0,0 +1,244 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Security class
5
+ *
6
+ * Standard: PSR-2
7
+ * @link http://www.php-fig.org/psr/psr-2 Full Documentation
8
+ *
9
+ * @package SC\DUPX\Constants
10
+ *
11
+ */
12
+
13
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
14
+
15
+ /**
16
+ * singleton class
17
+ *
18
+ *
19
+ * In this class all installer security checks are performed. If the security checks are not passed, an exception is thrown and the installer is stopped.
20
+ * This happens before anything else so the class must work without the initialization of all global duplicator variables.
21
+ */
22
+ class DUPX_Security
23
+ {
24
+ const SECURITY_NONE = 'none';
25
+ const SECURITY_PASSWORD = 'pwd';
26
+ const SECURITY_ARCHIVE = 'archive';
27
+
28
+ /**
29
+ *
30
+ * @var self
31
+ */
32
+ private static $instance = null;
33
+
34
+ /**
35
+ * archive path read from csrf file
36
+ * @var string
37
+ */
38
+ private $archivePath = null;
39
+
40
+ /**
41
+ * installer name read from csrf file
42
+ * @var string
43
+ */
44
+ private $bootloader = null;
45
+
46
+ /**
47
+ * installer url path read from csrf file
48
+ * @var string
49
+ */
50
+ private $bootUrl = null;
51
+
52
+ /**
53
+ * boot log file full path read from csrf file
54
+ * @var string
55
+ */
56
+ private $bootFilePath = null;
57
+
58
+ /**
59
+ * boot log file full path read from csrf file
60
+ * @var string
61
+ */
62
+ private $bootLogFile = null;
63
+
64
+ /**
65
+ * package hash read from csrf file
66
+ * @var string
67
+ */
68
+ private $packageHash = null;
69
+
70
+ /**
71
+ * public package hash read from csrf file
72
+ * @var string
73
+ */
74
+ private $secondaryPackageHash = null;
75
+
76
+ /**
77
+ *
78
+ * @return self
79
+ */
80
+ public static function getInstance()
81
+ {
82
+ if (is_null(self::$instance)) {
83
+ self::$instance = new self();
84
+ }
85
+
86
+ return self::$instance;
87
+ }
88
+
89
+ private function __construct()
90
+ {
91
+ DUPX_CSRF::init($GLOBALS['DUPX_INIT'], DUPX_Boot::getPackageHash());
92
+
93
+ if (!file_exists(DUPX_CSRF::getFilePath())) {
94
+ throw new Exception("CSRF FILE NOT FOUND\n"
95
+ . "Please, check webroot file permsission and dup-installer folder permission");
96
+ }
97
+
98
+ $this->bootloader = DUPX_CSRF::getVal('bootloader');
99
+ $this->bootUrl = DUPX_CSRF::getVal('booturl');
100
+ $this->bootLogFile = DupLiteSnapLibIOU::safePath(DUPX_CSRF::getVal('bootLogFile'));
101
+ $this->bootFilePath = DupLiteSnapLibIOU::safePath(DUPX_CSRF::getVal('installerOrigPath'));
102
+ $this->archivePath = DupLiteSnapLibIOU::safePath(DUPX_CSRF::getVal('archive'));
103
+ $this->packageHash = DUPX_CSRF::getVal('package_hash');
104
+ $this->secondaryPackageHash = DUPX_CSRF::getVal('secondaryHash');
105
+ }
106
+
107
+ /**
108
+ * archive path read from installer.php passed by DUPX_CSFR
109
+ *
110
+ * @return string
111
+ */
112
+ public function getArchivePath()
113
+ {
114
+ return $this->archivePath;
115
+ }
116
+
117
+ /**
118
+ * installer full path read from installer.php passed by DUPX_CSFR
119
+ *
120
+ * @return string
121
+ */
122
+ public function getBootFilePath()
123
+ {
124
+ return $this->bootFilePath;
125
+ }
126
+
127
+ /**
128
+ * boot log file full path read from installer.php passed by DUPX_CSFR
129
+ *
130
+ * @return string
131
+ */
132
+ public function getBootLogFile()
133
+ {
134
+ return $this->bootLogFile;
135
+ }
136
+
137
+ /**
138
+ * bootloader path read from installer.php passed by DUPX_CSFR
139
+ *
140
+ * @return string
141
+ */
142
+ public function getBootloader()
143
+ {
144
+ return $this->bootloader;
145
+ }
146
+
147
+ /**
148
+ * bootloader path read from installer.php passed by DUPX_CSFR
149
+ *
150
+ * @return string
151
+ */
152
+ public function getBootUrl()
153
+ {
154
+ return $this->bootUrl;
155
+ }
156
+
157
+ /**
158
+ * package hash read from installer.php passed by DUPX_CSFR
159
+ *
160
+ * @return string
161
+ */
162
+ public function getPackageHash()
163
+ {
164
+ return $this->packageHash;
165
+ }
166
+
167
+ /**
168
+ * package public hash read from installer.php passed by DUPX_CSFR
169
+ *
170
+ * @return string
171
+ */
172
+ public function getSecondaryPackageHash()
173
+ {
174
+ return $this->secondaryPackageHash;
175
+ }
176
+
177
+ /**
178
+ * Get security tipe (NONE, PASSWORD, ARCHIVE)
179
+ *
180
+ * @return string enum type
181
+ */
182
+ public function getSecurityType()
183
+ {
184
+ if ($GLOBALS['DUPX_AC']->secure_on == true) {
185
+ return self::SECURITY_PASSWORD;
186
+ }
187
+
188
+ if (
189
+ DUPX_InstallerState::getInstance()->mode == DUPX_InstallerMode::OverwriteInstall &&
190
+ basename($this->bootFilePath) == 'installer.php' &&
191
+ !in_array($_SERVER['REMOTE_ADDR'], self::getSecurityAddrWhitelist())
192
+ ) {
193
+ return self::SECURITY_ARCHIVE;
194
+ }
195
+
196
+ return self::SECURITY_NONE;
197
+ }
198
+
199
+ /**
200
+ * Get IPs white list for remote requests
201
+ *
202
+ * @return string[]
203
+ */
204
+ private static function getSecurityAddrWhitelist()
205
+ {
206
+ // uncomment this to test security archive on localhost
207
+ // return array();
208
+ // -------
209
+ return array(
210
+ '127.0.0.1',
211
+ '::1'
212
+ );
213
+ }
214
+
215
+ /**
216
+ * return true if security check is passed
217
+ *
218
+ * @return bool
219
+ */
220
+ public function securityCheck()
221
+ {
222
+ $archiveConfig = DUPX_ArchiveConfig::getInstance();
223
+ $result = false;
224
+ switch ($this->getSecurityType()) {
225
+ case self::SECURITY_NONE:
226
+ $result = true;
227
+ break;
228
+ case self::SECURITY_PASSWORD:
229
+ $securePass = isset($_POST['secure-pass']) ? DupLiteSnapLibUtil::sanitize_non_stamp_chars_and_newline($_POST['secure-pass']) : '';
230
+ $pass_hasher = new DUPX_PasswordHash(8, false);
231
+ $base64Pass = base64_encode($securePass);
232
+ $result = $pass_hasher->CheckPassword($base64Pass, $archiveConfig->secure_pass);
233
+ break;
234
+ case self::SECURITY_ARCHIVE:
235
+ $secureArchive = isset($_POST['secure-archive']) ? DupLiteSnapLibUtil::sanitize_non_stamp_chars_newline_and_trim($_POST['secure-archive']) : '';
236
+ $result = (strcmp(basename($this->archivePath), $secureArchive) == 0);
237
+ break;
238
+ default:
239
+ throw new Exception('Security type not valid ' . $this->getSecurityType());
240
+ break;
241
+ }
242
+ return $result;
243
+ }
244
+ }
installer/dup-installer/main.installer.php CHANGED
@@ -59,7 +59,6 @@ try {
59
  DUPX_Log::setThrowExceptionOnError(true);
60
 
61
  // DUPX_Boot::initArchiveAndLog();
62
-
63
  require_once($GLOBALS['DUPX_INIT'].'/classes/class.installer.state.php');
64
  require_once($GLOBALS['DUPX_INIT'].'/classes/class.password.php');
65
  require_once($GLOBALS['DUPX_INIT'].'/classes/class.db.php');
@@ -79,7 +78,7 @@ try {
79
 
80
  // ?view=help
81
  if (!empty($_GET['view']) && 'help' == $_GET['view']) {
82
-
83
  } else if (isset($_GET['is_daws']) && 1 == $_GET['is_daws']) { // For daws action
84
  $post_ctrl_csrf_token = isset($_GET['daws_csrf_token']) ? DUPX_U::sanitize_text_field($_GET['daws_csrf_token']) : '';
85
  if (DUPX_CSRF::check($post_ctrl_csrf_token, 'daws')) {
@@ -159,13 +158,8 @@ try {
159
  }
160
 
161
  //Password Check
162
- $_POST['secure-pass'] = isset($_POST['secure-pass']) ? $_POST['secure-pass'] : '';
163
- if ($GLOBALS['DUPX_AC']->secure_on && $GLOBALS['VIEW'] != 'help') {
164
- $pass_hasher = new DUPX_PasswordHash(8, FALSE);
165
- $pass_check = $pass_hasher->CheckPassword(base64_encode($_POST['secure-pass']), $GLOBALS['DUPX_AC']->secure_pass);
166
- if (! $pass_check) {
167
- $GLOBALS['VIEW'] = 'secure';
168
- }
169
  }
170
 
171
  // Constants which are dependent on the $GLOBALS['DUPX_AC']
@@ -231,12 +225,8 @@ try {
231
  die();
232
  }
233
  //PASSWORD CHECK
234
- if ($GLOBALS['DUPX_AC']->secure_on) {
235
- $pass_hasher = new DUPX_PasswordHash(8, FALSE);
236
- $pass_check = $pass_hasher->CheckPassword(base64_encode($_POST['secure-pass']), $GLOBALS['DUPX_AC']->secure_pass);
237
- if (! $pass_check) {
238
- DUPX_Log::error("Unauthorized Access: Please provide a password!");
239
- }
240
  }
241
 
242
  // the controllers must die in case of error
@@ -265,6 +255,8 @@ try {
265
  }
266
  } catch (Exception $e) {
267
  $exceptionError = $e;
 
 
268
  }
269
 
270
  /**
@@ -276,6 +268,15 @@ if (!empty($unespectOutput)) {
276
  DUPX_Log::info('ERROR: Unespect output '.DUPX_Log::varToString($unespectOutput));
277
  $exceptionError = new Exception('Unespected output '.DUPX_Log::varToString($unespectOutput));
278
  }
 
 
 
 
 
 
 
 
 
279
  ?><!DOCTYPE html>
280
  <html>
281
  <head>
@@ -288,7 +289,7 @@ if (!empty($unespectOutput)) {
288
  <link rel="icon" type="image/png" sizes="32x32" href="favicon/lite01_favicon-32x32.png">
289
  <link rel="icon" type="image/png" sizes="16x16" href="favicon/lite01_favicon-16x16.png">
290
  <link rel="manifest" href="favicon/site.webmanifest">
291
- <link rel="mask-icon" href="favicon/lite01_safari-pinned-tab.svg" color="#5bbad5">
292
  <link rel="shortcut icon" href="favicon/lite01_favicon.ico">
293
  <meta name="msapplication-TileColor" content="#da532c">
294
  <meta name="msapplication-config" content="favicon/browserconfig.xml">
@@ -399,10 +400,7 @@ FORM DATA: User-Interface views -->
399
 
400
  /** flush view output **/
401
  ob_end_flush();
402
-
403
- }
404
-
405
- if ($exceptionError !== false) {
406
  DUPX_Log::info("--------------------------------------");
407
  DUPX_Log::info('EXCEPTION: '.$exceptionError->getMessage());
408
  DUPX_Log::info('TRACE:');
59
  DUPX_Log::setThrowExceptionOnError(true);
60
 
61
  // DUPX_Boot::initArchiveAndLog();
 
62
  require_once($GLOBALS['DUPX_INIT'].'/classes/class.installer.state.php');
63
  require_once($GLOBALS['DUPX_INIT'].'/classes/class.password.php');
64
  require_once($GLOBALS['DUPX_INIT'].'/classes/class.db.php');
78
 
79
  // ?view=help
80
  if (!empty($_GET['view']) && 'help' == $_GET['view']) {
81
+ $GLOBALS['VIEW'] = 'help';
82
  } else if (isset($_GET['is_daws']) && 1 == $_GET['is_daws']) { // For daws action
83
  $post_ctrl_csrf_token = isset($_GET['daws_csrf_token']) ? DUPX_U::sanitize_text_field($_GET['daws_csrf_token']) : '';
84
  if (DUPX_CSRF::check($post_ctrl_csrf_token, 'daws')) {
158
  }
159
 
160
  //Password Check
161
+ if ($GLOBALS['VIEW'] !== 'help' && !DUPX_Security::getInstance()->securityCheck()) {
162
+ $GLOBALS['VIEW'] = 'secure';
 
 
 
 
 
163
  }
164
 
165
  // Constants which are dependent on the $GLOBALS['DUPX_AC']
225
  die();
226
  }
227
  //PASSWORD CHECK
228
+ if (!DUPX_Security::getInstance()->securityCheck()) {
229
+ DUPX_Log::error("Unauthorized Access: Please provide a password!");
 
 
 
 
230
  }
231
 
232
  // the controllers must die in case of error
255
  }
256
  } catch (Exception $e) {
257
  $exceptionError = $e;
258
+ } catch (Error $e) {
259
+ $exceptionError = $e;
260
  }
261
 
262
  /**
268
  DUPX_Log::info('ERROR: Unespect output '.DUPX_Log::varToString($unespectOutput));
269
  $exceptionError = new Exception('Unespected output '.DUPX_Log::varToString($unespectOutput));
270
  }
271
+
272
+ if ($exceptionError != false) {
273
+ $GLOBALS["VIEW"] = 'exception';
274
+ echo '<pre>'.$exceptionError->getMessage()."\n";
275
+ echo "\tFILE:".$exceptionError->getFile().'['.$exceptionError->getLIne().']'."\n";
276
+ echo "\tTRACE:\n".$exceptionError->getTraceAsString()."</pre>";
277
+ die;
278
+ }
279
+
280
  ?><!DOCTYPE html>
281
  <html>
282
  <head>
289
  <link rel="icon" type="image/png" sizes="32x32" href="favicon/lite01_favicon-32x32.png">
290
  <link rel="icon" type="image/png" sizes="16x16" href="favicon/lite01_favicon-16x16.png">
291
  <link rel="manifest" href="favicon/site.webmanifest">
292
+ <link rel="mask-icon" href="favicon/lite01_safari-pinned-tab.svg">
293
  <link rel="shortcut icon" href="favicon/lite01_favicon.ico">
294
  <meta name="msapplication-TileColor" content="#da532c">
295
  <meta name="msapplication-config" content="favicon/browserconfig.xml">
400
 
401
  /** flush view output **/
402
  ob_end_flush();
403
+ } else {
 
 
 
404
  DUPX_Log::info("--------------------------------------");
405
  DUPX_Log::info('EXCEPTION: '.$exceptionError->getMessage());
406
  DUPX_Log::info('TRACE:');
installer/dup-installer/views/view.help.php CHANGED
@@ -28,13 +28,31 @@ $expandClass = $sectionId == $open_section ? 'open' : 'close';
28
  <div class="content" >
29
  <a name="help-s1-init"></a>
30
  <div id="dup-help-installer" class="help-page">
31
- The installer security screen will allow for basic password protection on the installer. The password is set at package creation time. The password
32
- input on this screen must be entered before proceeding with an install. This setting is optional and can be turned on/off via the package creation screens.
33
- <br/><br/>
34
 
35
- If you do not recall the password then login to the site where the package was created and click the details of the package to view the original password.
36
- To validate the password just typed you can toggle the view by clicking on the lock icon. For detail on how to override this setting visit the online FAQ for
 
 
 
 
 
 
37
  <a href="https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-030-q" target="_blankopen_section">more details</a>.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
  <table class="help-opt">
40
  <tr>
@@ -543,7 +561,7 @@ $expandClass = $sectionId == $open_section ? 'open' : 'close';
543
  </tr>
544
  <tr>
545
  <td class="col-opt">Post GUID</td>
546
- <td>If your moving a site keep this value checked. For more details see the <a href="http://codex.wordpress.org/Changing_The_Site_URL#Important_GUID_Note" target="_blank">notes on GUIDS</a>. Changing values in the posts table GUID column can change RSS readers to evaluate that the posts are new and may show them in feeds again.</td>
547
  </tr>
548
  <tr>
549
  <td class="col-opt">Cross search <sup>pro</sup></td>
28
  <div class="content" >
29
  <a name="help-s1-init"></a>
30
  <div id="dup-help-installer" class="help-page">
31
+ The installer allows for two basic types of security: password and filename-based.<br/><br/>
 
 
32
 
33
+ <b>Password Security</b><br/>
34
+ The installer can provide basic password protection, with the password being set at package creation time. The password input on this screen
35
+ must be entered before proceeding with an install. This setting is optional and can be turned on/off via the package creation screens.
36
+ <br/>
37
+ <small>
38
+ Note: If you do not recall the password then login to the site where the package was created and click the details of the package to view the
39
+ original password. To validate the password just typed you can toggle the view by clicking on the lock icon. For detail on how to override
40
+ this setting visit the online FAQ for
41
  <a href="https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-030-q" target="_blankopen_section">more details</a>.
42
+ </small>
43
+ <br/><br/>
44
+
45
+ <b>Filename Security</b><br/>
46
+ When you attempt an <i class="maroon">"Overwrite Install"</i> using the "installer.php" filename on a public server (non localhost) and have
47
+ not set a password, the installer will prompt for the filename of the associated archive.zip/daf file. This is to prevent an outside entity
48
+ from executing the installer. To complete the install, simply copy the filename of the archive and paste (or type) it into the
49
+ archive filename box.<br/>
50
+
51
+ <small>
52
+ Note: Using a hashed installer name (Settings ❯ Packages), renaming the installer to something unique (e.g. installer_932fe.php), setting
53
+ a password or installing from localhost will cause the archive filename to no longer be required.
54
+ </small>
55
+ <br/><br/>
56
 
57
  <table class="help-opt">
58
  <tr>
561
  </tr>
562
  <tr>
563
  <td class="col-opt">Post GUID</td>
564
+ <td>If your moving a site keep this value checked. For more details see the <a href="https://wordpress.org/support/article/changing-the-site-url/#important-guid-note" target="_blank">notes on GUIDS</a>. Changing values in the posts table GUID column can change RSS readers to evaluate that the posts are new and may show them in feeds again.</td>
565
  </tr>
566
  <tr>
567
  <td class="col-opt">Cross search <sup>pro</sup></td>
installer/dup-installer/views/view.init1.php CHANGED
@@ -3,77 +3,136 @@ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
  /** IDE HELPERS */
4
  /* @var $GLOBALS['DUPX_AC'] DUPX_ArchiveConfig */
5
 
6
- $_POST['secure-pass'] = isset($_POST['secure-pass']) ? DUPX_U::sanitize_text_field($_POST['secure-pass']) : '' ;
7
- $_POST['secure-try'] = isset($_POST['secure-try']) ? 1 : 0 ;
8
- $_GET['debug'] = isset($_GET['debug']) ? $_GET['debug'] : 0;
9
  $page_url = DUPX_HTTP::get_request_uri();
10
- $page_err = 0;
11
- $pass_hasher = new DUPX_PasswordHash(8, FALSE);
12
- $pass_check = $pass_hasher->CheckPassword(base64_encode($_POST['secure-pass']), $GLOBALS['DUPX_AC']->secure_pass);
13
-
14
- //FORWARD: password not enabled
15
- if (! $GLOBALS['DUPX_AC']->secure_on && ! $_GET['debug']) {
16
- DUPX_HTTP::post_with_html($page_url, array(
17
- 'action_step' => '1',
18
- 'csrf_token' => DUPX_CSRF::generate('step1')
19
- ));
20
- exit;
21
  }
22
 
23
- //POSTBACK: valid password
24
- if ($pass_check) {
25
- DUPX_HTTP::post_with_html($page_url,
26
- array(
27
- 'action_step' => '1',
28
- 'csrf_token' => DUPX_CSRF::generate('step1'),
29
- 'secure-pass' => $_POST['secure-pass']
30
- ));
31
- exit;
 
 
32
  }
 
33
 
34
- //ERROR: invalid password
35
- if ($_POST['secure-try'] && ! $pass_check) {
36
- $page_err = 1;
 
 
 
 
 
 
 
 
37
  }
 
 
 
 
38
  ?>
39
 
 
 
 
 
 
 
 
40
  <!-- =========================================
41
  VIEW: STEP 0 - PASSWORD -->
42
- <form method="post" id="i1-pass-form" class="content-form" data-parsley-validate="" autocomplete="off" >
43
  <input type="hidden" name="view" value="secure" />
44
  <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('secure'); ?>">
45
  <input type="hidden" name="secure-try" value="1" />
46
 
47
  <div class="hdr-main">
48
- Installer Password
49
  </div>
50
 
51
- <?php if ($page_err) : ?>
52
  <div class="error-pane">
53
- <p>Invalid Password! Please try again...</p>
54
  </div>
55
- <?php endif; ?>
56
 
57
- <div style="text-align: center">
58
- This file was password protected when it was created. If you do not remember the password check the details of the package on the site where it was created or visit
59
- the online FAQ for <a href="https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-030-q" target="_blank">more details</a>.
60
- <br/><br/><br/>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
61
  </div>
62
 
63
- <div class="i1-pass-area">
64
- <div class="i1-pass-data">
65
- <label for="secure-pass">&nbsp; Enter Password</label>
66
- <?php
67
- DUPX_U_Html::inputPasswordToggle('secure-pass', 'secure-pass', array(),
68
- array(
69
- 'required' => 'required'
70
- ));
71
- ?>
72
- <br><br>
73
- <button type="button" name="secure-btn" id="secure-btn" class="default-btn" onclick="DUPX.checkPassword()">Submit</button>
74
- </div>
75
  </div>
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  </form>
78
 
79
  <script>
@@ -89,5 +148,12 @@ VIEW: STEP 0 - PASSWORD -->
89
  }
90
  $form.submit();
91
  }
 
 
 
 
 
 
 
92
  </script>
93
  <!-- END OF VIEW INIT 1 -->
3
  /** IDE HELPERS */
4
  /* @var $GLOBALS['DUPX_AC'] DUPX_ArchiveConfig */
5
 
 
 
 
6
  $page_url = DUPX_HTTP::get_request_uri();
7
+
8
+ $security = DUPX_Security::getInstance();
9
+
10
+ if ($security->getSecurityType() == DUPX_Security::SECURITY_NONE) {
11
+ DUPX_HTTP::post_with_html($page_url, array(
12
+ 'action_step' => '1',
13
+ 'csrf_token' => DUPX_CSRF::generate('step1')
14
+ ));
15
+ exit;
 
 
16
  }
17
 
18
+ //POSTBACK: valid security
19
+ if ($security->securityCheck()) {
20
+ DUPX_HTTP::post_with_html($page_url,
21
+ array(
22
+ 'action_step' => '1',
23
+ 'csrf_token' => DUPX_CSRF::generate('step1'),
24
+ 'secure-pass' => $_POST['secure-pass'],
25
+ 'secure-archive' => $_POST['secure-archive']
26
+ )
27
+ );
28
+ exit;
29
  }
30
+ $page_err = isset($_POST['secure-try']) ? 1 : 0;
31
 
32
+ switch (DUPX_Security::getInstance()->getSecurityType()) {
33
+ case DUPX_Security::SECURITY_PASSWORD:
34
+ $errorMsg = 'Invalid Password! Please try again...';
35
+ break;
36
+ case DUPX_Security::SECURITY_ARCHIVE:
37
+ $errorMsg = 'Invalid Archive name! Please try again...';
38
+ break;
39
+ case DUPX_Security::SECURITY_NONE:
40
+ default:
41
+ $errorMsg = '';
42
+ break;
43
  }
44
+
45
+ $css_why_display = ($GLOBALS['DUPX_STATE']->mode === DUPX_InstallerMode::OverwriteInstall) ? "" : "no-display";
46
+ $archive_name = isset($_POST['secure-archive']) ? $_POST['secure-archive'] : '';
47
+
48
  ?>
49
 
50
+ <style>
51
+ div#content {min-height: 250px}
52
+ div#content-inner {min-height: 250px}
53
+ form#i1-pass-form {min-height: 250px}
54
+ div.footer-buttons {position: static}
55
+ </style>
56
+
57
  <!-- =========================================
58
  VIEW: STEP 0 - PASSWORD -->
59
+ <form method="post" id="i1-pass-form" class="content-form" data-parsley-validate="" autocomplete="off">
60
  <input type="hidden" name="view" value="secure" />
61
  <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('secure'); ?>">
62
  <input type="hidden" name="secure-try" value="1" />
63
 
64
  <div class="hdr-main">
65
+ Installer Security
66
  </div>
67
 
68
+ <?php if ($page_err) : ?>
69
  <div class="error-pane">
70
+ <p><?php echo $errorMsg; ?></p>
71
  </div>
72
+ <?php endif; ?>
73
 
74
+ <div class="margin-top-0 margin-bottom-2">
75
+ <div class="text-right" >
76
+ <a href="javascript:void(0)" id="pass-quick-link" class="link-style" onclick="jQuery('#pass-quick-help-info').toggleClass('no-display');" >
77
+ Why do I see this screen?
78
+ </a>
79
+ </div>
80
+ <div id="pass-quick-help-info" class="box info <?php echo $css_why_display?>">
81
+ This screen will show under the following conditions:
82
+ <ul>
83
+ <li>
84
+ <b>Password Protection:</b> If the file was password protected when it was created then the password input below should
85
+ be enabled. If the input is disabled then no password was set.
86
+ </li>
87
+ <li>
88
+ <b>Simple Installer Name:</b> If no password is set and you are performing an <i class="maroon">"Overwrite Install"</i> on a public server
89
+ (non localhost) without a secure installer.php file name (i.e. [hash]_installer.php). Then users will need to enter the archive file for
90
+ a valid security check. If the Archive File Name input is disabled then it can be ignored.
91
+ </li>
92
+ </ul>
93
+ </div>
94
  </div>
95
 
96
+ <div id="wrapper_item_secure-pass" class="param-wrapper margin-bottom-2">
97
+ <label for="secure-pass">Password:</label>
98
+ <?php
99
+ $attrs = array();
100
+ if ($security->getSecurityType() == $security::SECURITY_PASSWORD) {
101
+ $attrs['required'] = 'required';
102
+ } else {
103
+ $attrs['placeholder'] = 'Password not enabled';
104
+ $attrs['disabled'] = 'disabled';
105
+ }
106
+ DUPX_U_Html::inputPasswordToggle('secure-pass', 'secure-pass', array(), $attrs);
107
+ ?>
108
  </div>
109
 
110
+ <?php if ($GLOBALS['DUPX_STATE']->mode === DUPX_InstallerMode::OverwriteInstall) : ?>
111
+ <div id="wrapper_item_secure-archive" class="param-wrapper margin-bottom-4">
112
+ <label for="param_item_secure-archive">Archive File Name:</label>
113
+ <div>
114
+ <input
115
+ type="text"
116
+ id="param_item_secure-archive"
117
+ name="secure-archive"
118
+ value="<?php echo $archive_name; ?>"
119
+ class="input-item"
120
+ placeholder="example: [full-unique-name]_archive.zip"
121
+ <?php echo ($security->getSecurityType() == $security::SECURITY_ARCHIVE ? '' : 'disabled'); ?>>
122
+ <div class="sub-note">
123
+ <?php DUPX_View_Funcs::helpLink('secure', 'How to get archive file name?'); ?>
124
+ </div>
125
+ </div>
126
+ </div>
127
+ <?php endif;?>
128
+
129
+ <div class="footer-buttons" >
130
+ <div class="content-center" >
131
+ <button type="submit" name="secure-btn" id="secure-btn" class="default-btn" onclick="DUPX.checkPassword()">
132
+ Submit
133
+ </button>
134
+ </div>
135
+ </div>
136
  </form>
137
 
138
  <script>
148
  }
149
  $form.submit();
150
  }
151
+
152
+ //DOCUMENT LOAD
153
+ $(document).ready(function()
154
+ {
155
+ $('#secure-pass').focus();
156
+ $('#param_item_secure-archive').focus();
157
+ });
158
  </script>
159
  <!-- END OF VIEW INIT 1 -->
installer/dup-installer/views/view.s1.base.php CHANGED
@@ -99,6 +99,7 @@ $archive_config = DUPX_ArchiveConfig::getInstance();
99
  <input type="hidden" name="ctrl_action" value="ctrl-step1" />
100
  <input type="hidden" name="ctrl_csrf_token" value="<?php echo DUPX_U::esc_attr(DUPX_CSRF::generate('ctrl-step1')); ?>">
101
  <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_html($_POST['secure-pass']); ?>" />
 
102
  <input type="hidden" id="s1-input-form-extra-data" name="extra_data" />
103
 
104
  <div class="hdr-main">
@@ -110,7 +111,7 @@ $archive_config = DUPX_ArchiveConfig::getInstance();
110
  SETUP TYPE: @todo implement
111
  ==================================== -->
112
  <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s1-area-setup-type" style="display:none">
113
- <a id="s1-area-setup-type-link"><i class="fa fa-plus-square"></i>Setup</a>
114
  </div>
115
  <div id="s1-area-setup-type" style="display:none">
116
 
@@ -161,7 +162,7 @@ $archive_config = DUPX_ArchiveConfig::getInstance();
161
  ARCHIVE
162
  ==================================== -->
163
  <div class="hdr-sub1 toggle-hdr" data-status="<?php echo strtolower($arcCheck); ?>" data-type="toggle auto" data-target="#s1-area-archive-file">
164
- <a id="s1-area-archive-file-link"><i class="fa fa-plus-square"></i>Setup</a>
165
  <?php
166
  $badge = DUPX_View_Funcs::getBadgeClassFromCheckStatus($arcCheck);
167
  ?>
@@ -244,7 +245,163 @@ $archive_config = DUPX_ArchiveConfig::getInstance();
244
  </div>
245
  <!--div id="tabs-2"><p>Content Here</p></div-->
246
  </div>
247
- </div><br/><br/>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
248
 
249
  <!-- ====================================
250
  VALIDATION
@@ -596,161 +753,6 @@ $archive_config = DUPX_ArchiveConfig::getInstance();
596
  <br/><br/>
597
 
598
 
599
- <!-- ====================================
600
- OPTIONS
601
- ==================================== -->
602
- <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s1-area-adv-opts">
603
- <a href="javascript:void(0)"><i class="fa fa-plus-square"></i>Options</a>
604
- </div>
605
- <div id="s1-area-adv-opts" class="hdr-sub1-area" style="display:none">
606
- <div class="help-target">
607
- <?php DUPX_View_Funcs::helpIconLink('step1'); ?>
608
- </div>
609
- <div class="hdr-sub3">General</div>
610
- <table class="dupx-opts dupx-advopts">
611
- <tr>
612
- <td>Extraction:</td>
613
- <td>
614
- <?php
615
- $options = array();
616
- $extra_attr = ($arcCheck == 'Warn' && $is_wpconfarc_present) ? ' selected="selected"' : '';
617
- $options[] = '<option '.($is_wpconfarc_present ? '' : 'disabled').$extra_attr.' value="manual">Manual Archive Extraction '.($is_wpconfarc_present ? '' : '*').'</option>';
618
- if ($archive_config->isZipArchive()) {
619
- //ZIP-ARCHIVE
620
- $extra_attr = ('Pass' == $arcCheck && $zip_archive_enabled && !$shell_exec_zip_enabled) ? ' selected="selected"' : '';
621
- $extra_attr .= ('Pass' != $arcCheck || !$zip_archive_enabled) ? ' disabled="disabled"' : '';
622
- $options[] = '<option value="ziparchive"'.$extra_attr.'>PHP ZipArchive</option>';
623
-
624
- //SHELL-EXEC UNZIP
625
- $extra_attr = ('Pass' != $arcCheck || !$shell_exec_zip_enabled) ? ' disabled="disabled"' : '';
626
- $extra_attr .= ('Pass' == $arcCheck && $shell_exec_zip_enabled) ? ' selected="selected"' : '';
627
- $options[] = '<option value="shellexec_unzip"'.$extra_attr.'>Shell Exec Unzip</option>';
628
- } else { // DUPARCHIVE
629
- $extra_attr = ('Pass' == $arcCheck) ? ' selected="selected"' : 'disabled="disabled"';
630
- $options[] = '<option value="duparchive"'.$extra_attr.'>DupArchive</option>';
631
- }
632
- $num_selections = count($options);
633
- ?>
634
- <select id="archive_engine" name="archive_engine" size="<?php echo DUPX_U::esc_attr($num_selections); ?>">
635
- <?php echo implode('', $options); ?>
636
- </select><br/>
637
- <?php if (!$is_wpconfarc_present): ?>
638
- <span class="sub-notes">
639
- *Option enabled when archive has been pre-extracted
640
- <a href="https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-015-q" target="_blank">[more info]</a>
641
- </span>
642
- <?php endif; ?>
643
- </td>
644
- </tr>
645
- <tr>
646
- <td style="vertical-align: top;padding-top: 10px;" >Archive Action:</td>
647
- <td id="archive_action_wrapper">
648
- <select id="archive_action_input" name="<?php echo DUP_LITE_Extraction::INPUT_NAME_ARCHIVE_ACTION; ?>" class="input-item" >
649
- <option value="<?php echo DUP_LITE_Extraction::ACTION_DO_NOTHING; ?>" selected="selected">
650
- Extract files over current files
651
- </option>
652
- <option value="<?php echo DUP_LITE_Extraction::ACTION_REMOVE_WP_FILES; ?>">
653
- Remove WP core and content and extract
654
- </option>
655
- <option value="<?php echo DUP_LITE_Extraction::ACTION_REMOVE_ALL_FILES; ?>">
656
- Remove all files and extract
657
- </option>
658
- </select>
659
- <div class="sub-note" style="margin-top:5px; max-width:90%; font-size:10px">
660
- <div class="archive-action-note archive-action-<?php echo DUP_LITE_Extraction::ACTION_DO_NOTHING; ?>">
661
- Note: <b>Files are extracted over existing files.</b> After install, the destination folder will contain a combination of the old site files and
662
- the files extracted from the archive. This option is the most conservative option for those who want to make sure they do not want to lose data.
663
- </div>
664
- <div class="archive-action-note archive-action-<?php echo DUP_LITE_Extraction::ACTION_REMOVE_ALL_FILES; ?> no-display">
665
- Note: Before extracting the package files, <b>all files and folders in the installation folder will be removed</b> except for folders that contain
666
- WordPress installations or Duplicator backup folders. This option is recommended for those who want to delete all files related to old installations
667
- or external applications.
668
- </div>
669
- <div class="archive-action-note archive-action-<?php echo DUP_LITE_Extraction::ACTION_REMOVE_WP_FILES; ?> no-display">
670
- Note: Before extracting the package files, <b>all current WordPress core and content files and folders will be removed</b> (wp-include, wp-content ... )
671
- This option is for those who want to avoid having old site media mixed with new but have other files/folders in the home path that they don't want to
672
- delete.
673
- </div>
674
- </div>
675
- </td>
676
- </tr>
677
- </table><br/><br/>
678
-
679
- <div class="hdr-sub3">Advanced</div>
680
- <table class="dupx-opts dupx-advopts">
681
- <tr>
682
- <td>Permissions:</td>
683
- <td>
684
- <input type="checkbox" name="set_file_perms" id="set_file_perms" value="1" onclick="jQuery('#file_perms_value').prop('disabled', !jQuery(this).is(':checked'));"/>
685
- <label for="set_file_perms">All Files</label><input name="file_perms_value" id="file_perms_value" style="width:45px; margin-left:7px;" value="644" disabled> &nbsp;
686
- <input type="checkbox" name="set_dir_perms" id="set_dir_perms" value="1" onclick="jQuery('#dir_perms_value').prop('disabled', !jQuery(this).is(':checked'));"/>
687
- <label for="set_dir_perms">All Directories</label><input name="dir_perms_value" id="dir_perms_value" style="width:45px; margin-left:7px;" value="755" disabled>
688
- </td>
689
- </tr>
690
- <tr>
691
- <td>Safe Mode:</td>
692
- <td>
693
- <select name="exe_safe_mode" id="exe_safe_mode" onchange="DUPX.onSafeModeSwitch();" style="width:250px;">
694
- <option value="0">Off</option>
695
- <option value="1">Basic</option>
696
- <option value="2">Advanced</option>
697
- </select>
698
- </td>
699
- </tr>
700
- <tr>
701
- <td>Config Files:</td>
702
- <td>
703
- <select name="config_mode" id="config_mode" style="width:250px;">
704
- <option value="NEW">Create New (recommended)</option>
705
- <optgroup label="Advanced">
706
- <option value="RESTORE">Restore Original</option>
707
- <option value="IGNORE">Ignore All</option>
708
- </optgroup>
709
- </select> <br/>
710
- <span class="sub-notes" style="font-weight: normal">
711
- Controls how .htaccess, .user.ini and web.config are used.<br/>
712
- These options are not applied until step 3 is ran.
713
- <?php DUPX_View_Funcs::helpLink('step1', '[more info]'); ?>
714
- </span>
715
- </td>
716
- </tr>
717
- <tr>
718
- <td>File Times:</td>
719
- <td>
720
- <input type="radio" name="zip_filetime" id="zip_filetime_now" value="current" checked="checked" />
721
- <label class="radio" for="zip_filetime_now" title='Set the files current date time to now'>Current</label> &nbsp;
722
- <input type="radio" name="zip_filetime" id="zip_filetime_orginal" value="original" />
723
- <label class="radio" for="zip_filetime_orginal" title="Keep the files date time the same">Original</label>
724
- </td>
725
- </tr>
726
- <tr>
727
- <td>Logging:</td>
728
- <td>
729
- <input type="radio" name="logging" id="logging-light" value="<?php echo DUPX_Log::LV_DEFAULT; ?>" checked="true"> <label for="logging-light" class="radio">Light</label> &nbsp;
730
- <input type="radio" name="logging" id="logging-detailed" value="<?php echo DUPX_Log::LV_DETAILED; ?>"> <label for="logging-detailed" class="radio">Detailed</label> &nbsp;
731
- <input type="radio" name="logging" id="logging-debug" value="<?php echo DUPX_Log::LV_DEBUG; ?>"> <label for="logging-debug" class="radio">Debug</label> &nbsp;
732
- <input type="radio" name="logging" id="logging-h-debug" value="<?php echo DUPX_Log::LV_HARD_DEBUG; ?>"> <label for="logging-h-debug" class="radio">Hard debug</label>
733
- </td>
734
- </tr>
735
- <?php if (!$archive_config->isZipArchive()): ?>
736
- <tr>
737
- <td>Client-Kickoff:</td>
738
- <td>
739
- <input type="checkbox" name="clientside_kickoff" id="clientside_kickoff" value="1" checked/>
740
- <label for="clientside_kickoff" style="font-weight: normal">Browser drives the archive engine.</label>
741
- </td>
742
- </tr>
743
- <?php endif; ?>
744
- <tr>
745
- <td>Testing:</td>
746
- <td>
747
- <a href="javascript:void(0)" target="db-test" onclick="DUPX.openDBValidationWindow(); return false;">[Quick Database Connection Test]</a>
748
- </td>
749
- </tr>
750
- </table>
751
- </div><br/>
752
-
753
-
754
  <?php if ($req_success && $arcCheck != 'Fail') : ?>
755
  <div id="s1-warning-check">
756
  <?php if ($is_overwrite_mode && $is_wordpress) { ?>
@@ -793,6 +795,7 @@ VIEW: STEP 1 - DB QUICK TEST
793
  <input type="hidden" name="view" value="step2" />
794
  <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step2'); ?>">
795
  <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
 
796
  </form>
797
 
798
 
@@ -814,6 +817,7 @@ Auto Posts to view.step2.php
814
  <input type="hidden" name="view" value="step2" />
815
  <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step2'); ?>">
816
  <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
 
817
  <input type="hidden" name="logging" id="ajax-logging" />
818
  <input type="hidden" name="config_mode" id="ajax-config-mode" />
819
  <input type="hidden" name="exe_safe_mode" id="exe-safe-mode" value="0" />
99
  <input type="hidden" name="ctrl_action" value="ctrl-step1" />
100
  <input type="hidden" name="ctrl_csrf_token" value="<?php echo DUPX_U::esc_attr(DUPX_CSRF::generate('ctrl-step1')); ?>">
101
  <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_html($_POST['secure-pass']); ?>" />
102
+ <input type="hidden" name="secure-archive" value="<?php echo DUPX_U::esc_html($_POST['secure-archive']); ?>" />
103
  <input type="hidden" id="s1-input-form-extra-data" name="extra_data" />
104
 
105
  <div class="hdr-main">
111
  SETUP TYPE: @todo implement
112
  ==================================== -->
113
  <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s1-area-setup-type" style="display:none">
114
+ <a id="s1-area-setup-type-link"><i class="fa fa-plus-square"></i>Overview</a>
115
  </div>
116
  <div id="s1-area-setup-type" style="display:none">
117
 
162
  ARCHIVE
163
  ==================================== -->
164
  <div class="hdr-sub1 toggle-hdr" data-status="<?php echo strtolower($arcCheck); ?>" data-type="toggle auto" data-target="#s1-area-archive-file">
165
+ <a id="s1-area-archive-file-link"><i class="fa fa-plus-square"></i>Overview</a>
166
  <?php
167
  $badge = DUPX_View_Funcs::getBadgeClassFromCheckStatus($arcCheck);
168
  ?>
245
  </div>
246
  <!--div id="tabs-2"><p>Content Here</p></div-->
247
  </div>
248
+ </div><br/>
249
+
250
+
251
+ <!-- ====================================
252
+ OPTIONS
253
+ ==================================== -->
254
+ <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s1-area-adv-opts">
255
+ <a href="javascript:void(0)"><i class="fa fa-plus-square"></i>Options</a>
256
+ </div>
257
+ <div id="s1-area-adv-opts" class="hdr-sub1-area" style="display:none">
258
+ <div class="help-target">
259
+ <?php DUPX_View_Funcs::helpIconLink('step1'); ?>
260
+ </div>
261
+ <div class="hdr-sub3">General</div>
262
+ <table class="dupx-opts dupx-advopts">
263
+ <tr>
264
+ <td>Extraction:</td>
265
+ <td>
266
+ <?php
267
+ $options = array();
268
+ $extra_attr = ($arcCheck == 'Warn' && $is_wpconfarc_present) ? ' selected="selected"' : '';
269
+ $options[] = '<option '.($is_wpconfarc_present ? '' : 'disabled').$extra_attr.' value="manual">Manual Archive Extraction '.($is_wpconfarc_present ? '' : '*').'</option>';
270
+ if ($archive_config->isZipArchive()) {
271
+ //ZIP-ARCHIVE
272
+ $extra_attr = ('Pass' == $arcCheck && $zip_archive_enabled && !$shell_exec_zip_enabled) ? ' selected="selected"' : '';
273
+ $extra_attr .= ('Pass' != $arcCheck || !$zip_archive_enabled) ? ' disabled="disabled"' : '';
274
+ $options[] = '<option value="ziparchive"'.$extra_attr.'>PHP ZipArchive</option>';
275
+
276
+ //SHELL-EXEC UNZIP
277
+ $extra_attr = ('Pass' != $arcCheck || !$shell_exec_zip_enabled) ? ' disabled="disabled"' : '';
278
+ $extra_attr .= ('Pass' == $arcCheck && $shell_exec_zip_enabled) ? ' selected="selected"' : '';
279
+ $options[] = '<option value="shellexec_unzip"'.$extra_attr.'>Shell Exec Unzip</option>';
280
+ } else { // DUPARCHIVE
281
+ $extra_attr = ('Pass' == $arcCheck) ? ' selected="selected"' : 'disabled="disabled"';
282
+ $options[] = '<option value="duparchive"'.$extra_attr.'>DupArchive</option>';
283
+ }
284
+ $num_selections = count($options);
285
+ ?>
286
+ <select id="archive_engine" name="archive_engine" size="<?php echo DUPX_U::esc_attr($num_selections); ?>">
287
+ <?php echo implode('', $options); ?>
288
+ </select><br/>
289
+ <?php if (!$is_wpconfarc_present): ?>
290
+ <span class="sub-notes">
291
+ *Option enabled when archive has been pre-extracted
292
+ <a href="https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-015-q" target="_blank">[more info]</a>
293
+ </span>
294
+ <?php endif; ?>
295
+ </td>
296
+ </tr>
297
+ <tr>
298
+ <td style="vertical-align: top;padding-top: 10px;" >Archive Action:</td>
299
+ <td id="archive_action_wrapper">
300
+ <select id="archive_action_input" name="<?php echo DUP_LITE_Extraction::INPUT_NAME_ARCHIVE_ACTION; ?>" class="input-item" >
301
+ <option value="<?php echo DUP_LITE_Extraction::ACTION_DO_NOTHING; ?>" selected="selected">
302
+ Extract files over current files
303
+ </option>
304
+ <option value="<?php echo DUP_LITE_Extraction::ACTION_REMOVE_WP_FILES; ?>">
305
+ Remove WP core and content and extract
306
+ </option>
307
+ <option value="<?php echo DUP_LITE_Extraction::ACTION_REMOVE_ALL_FILES; ?>">
308
+ Remove all files and extract
309
+ </option>
310
+ </select>
311
+ <div class="sub-note" style="margin-top:5px; max-width:90%; font-size:10px">
312
+ <div class="archive-action-note archive-action-<?php echo DUP_LITE_Extraction::ACTION_DO_NOTHING; ?>">
313
+ Note: <b>Files are extracted over existing files.</b> After install, the destination folder will contain a combination of the old site files and
314
+ the files extracted from the archive. This option is the most conservative option for those who want to make sure they do not want to lose data.
315
+ </div>
316
+ <div class="archive-action-note archive-action-<?php echo DUP_LITE_Extraction::ACTION_REMOVE_ALL_FILES; ?> no-display">
317
+ Note: Before extracting the package files, <b>all files and folders in the installation folder will be removed</b> except for folders that contain
318
+ WordPress installations or Duplicator backup folders. This option is recommended for those who want to delete all files related to old installations
319
+ or external applications.
320
+ </div>
321
+ <div class="archive-action-note archive-action-<?php echo DUP_LITE_Extraction::ACTION_REMOVE_WP_FILES; ?> no-display">
322
+ Note: Before extracting the package files, <b>all current WordPress core and content files and folders will be removed</b> (wp-include, wp-content ... )
323
+ This option is for those who want to avoid having old site media mixed with new but have other files/folders in the home path that they don't want to
324
+ delete.
325
+ </div>
326
+ </div>
327
+ </td>
328
+ </tr>
329
+ </table><br/><br/>
330
+
331
+ <div class="hdr-sub3">Advanced</div>
332
+ <table class="dupx-opts dupx-advopts">
333
+ <tr>
334
+ <td>Permissions:</td>
335
+ <td>
336
+ <input type="checkbox" name="set_file_perms" id="set_file_perms" value="1" onclick="jQuery('#file_perms_value').prop('disabled', !jQuery(this).is(':checked'));"/>
337
+ <label for="set_file_perms">All Files</label><input name="file_perms_value" id="file_perms_value" style="width:45px; margin-left:7px;" value="644" disabled> &nbsp;
338
+ <input type="checkbox" name="set_dir_perms" id="set_dir_perms" value="1" onclick="jQuery('#dir_perms_value').prop('disabled', !jQuery(this).is(':checked'));"/>
339
+ <label for="set_dir_perms">All Directories</label><input name="dir_perms_value" id="dir_perms_value" style="width:45px; margin-left:7px;" value="755" disabled>
340
+ </td>
341
+ </tr>
342
+ <tr>
343
+ <td>Safe Mode:</td>
344
+ <td>
345
+ <select name="exe_safe_mode" id="exe_safe_mode" onchange="DUPX.onSafeModeSwitch();" style="width:250px;">
346
+ <option value="0">Off</option>
347
+ <option value="1">Basic</option>
348
+ <option value="2">Advanced</option>
349
+ </select>
350
+ </td>
351
+ </tr>
352
+ <tr>
353
+ <td>Config Files:</td>
354
+ <td>
355
+ <select name="config_mode" id="config_mode" style="width:250px;">
356
+ <option value="NEW">Create New (recommended)</option>
357
+ <optgroup label="Advanced">
358
+ <option value="RESTORE">Restore Original</option>
359
+ <option value="IGNORE">Ignore All</option>
360
+ </optgroup>
361
+ </select> <br/>
362
+ <span class="sub-notes" style="font-weight: normal">
363
+ Controls how .htaccess, .user.ini and web.config are used.<br/>
364
+ These options are not applied until step 3 is ran.
365
+ <?php DUPX_View_Funcs::helpLink('step1', '[more info]'); ?>
366
+ </span>
367
+ </td>
368
+ </tr>
369
+ <tr>
370
+ <td>File Times:</td>
371
+ <td>
372
+ <input type="radio" name="zip_filetime" id="zip_filetime_now" value="current" checked="checked" />
373
+ <label class="radio" for="zip_filetime_now" title='Set the files current date time to now'>Current</label> &nbsp;
374
+ <input type="radio" name="zip_filetime" id="zip_filetime_orginal" value="original" />
375
+ <label class="radio" for="zip_filetime_orginal" title="Keep the files date time the same">Original</label>
376
+ </td>
377
+ </tr>
378
+ <tr>
379
+ <td>Logging:</td>
380
+ <td>
381
+ <input type="radio" name="logging" id="logging-light" value="<?php echo DUPX_Log::LV_DEFAULT; ?>" checked="true"> <label for="logging-light" class="radio">Light</label> &nbsp;
382
+ <input type="radio" name="logging" id="logging-detailed" value="<?php echo DUPX_Log::LV_DETAILED; ?>"> <label for="logging-detailed" class="radio">Detailed</label> &nbsp;
383
+ <input type="radio" name="logging" id="logging-debug" value="<?php echo DUPX_Log::LV_DEBUG; ?>"> <label for="logging-debug" class="radio">Debug</label> &nbsp;
384
+ <input type="radio" name="logging" id="logging-h-debug" value="<?php echo DUPX_Log::LV_HARD_DEBUG; ?>"> <label for="logging-h-debug" class="radio">Hard debug</label>
385
+ </td>
386
+ </tr>
387
+ <?php if (!$archive_config->isZipArchive()): ?>
388
+ <tr>
389
+ <td>Client-Kickoff:</td>
390
+ <td>
391
+ <input type="checkbox" name="clientside_kickoff" id="clientside_kickoff" value="1" checked/>
392
+ <label for="clientside_kickoff" style="font-weight: normal">Browser drives the archive engine.</label>
393
+ </td>
394
+ </tr>
395
+ <?php endif; ?>
396
+ <tr>
397
+ <td>Testing:</td>
398
+ <td>
399
+ <a href="javascript:void(0)" target="db-test" onclick="DUPX.openDBValidationWindow(); return false;">[Quick Database Connection Test]</a>
400
+ </td>
401
+ </tr>
402
+ </table>
403
+ </div><br/>
404
+
405
 
406
  <!-- ====================================
407
  VALIDATION
753
  <br/><br/>
754
 
755
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
756
  <?php if ($req_success && $arcCheck != 'Fail') : ?>
757
  <div id="s1-warning-check">
758
  <?php if ($is_overwrite_mode && $is_wordpress) { ?>
795
  <input type="hidden" name="view" value="step2" />
796
  <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step2'); ?>">
797
  <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
798
+ <input type="hidden" name="secure-archive" value="<?php echo DUPX_U::esc_attr($_POST['secure-archive']); ?>" />
799
  </form>
800
 
801
 
817
  <input type="hidden" name="view" value="step2" />
818
  <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step2'); ?>">
819
  <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
820
+ <input type="hidden" name="secure-archive" value="<?php echo DUPX_U::esc_attr($_POST['secure-archive']); ?>" />
821
  <input type="hidden" name="logging" id="ajax-logging" />
822
  <input type="hidden" name="config_mode" id="ajax-config-mode" />
823
  <input type="hidden" name="exe_safe_mode" id="exe-safe-mode" value="0" />
installer/dup-installer/views/view.s2.base.php CHANGED
@@ -1,364 +1,366 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
-
4
- /** IDE HELPERS */
5
- /* @var $GLOBALS['DUPX_AC'] DUPX_ArchiveConfig */
6
-
7
- require_once($GLOBALS['DUPX_INIT'] . '/classes/config/class.archive.config.php');
8
-
9
- //-- START OF VIEW STEP 2
10
- $archive_config = DUPX_ArchiveConfig::getInstance();
11
-
12
- $dbcharset = empty($archive_config->dbcharset)
13
- ? $GLOBALS['DBCHARSET_DEFAULT']
14
- : $archive_config->dbcharset;
15
- $_POST['dbcharset'] = isset($_POST['dbcharset']) ? trim($_POST['dbcharset']) : $dbcharset;
16
-
17
- $dbcollate = empty($archive_config->dbcollation)
18
- ? $GLOBALS['DBCOLLATE_DEFAULT']
19
- : $archive_config->dbcollation;
20
- $_POST['dbcollate'] = isset($_POST['dbcollate']) ? trim($_POST['dbcollate']) : $dbcollate;
21
-
22
- $_POST['exe_safe_mode'] = (isset($_POST['exe_safe_mode'])) ? DUPX_U::sanitize_text_field($_POST['exe_safe_mode']) : 0;
23
- $is_dbtest_mode = isset($_POST['dbonlytest']) ? 1 : 0;
24
-
25
- if (isset($_POST['logging'])) {
26
- $post_logging = DUPX_U::sanitize_text_field($_POST['logging']);
27
- $_POST['logging'] = trim($post_logging);
28
- } else {
29
- $_POST['logging'] = 1;
30
- }
31
-
32
- $cpnl_supported = DUPX_U::$on_php_53_plus ? true : false;
33
- ?>
34
-
35
- <form id='s2-input-form' method="post" class="content-form" autocomplete="off" data-parsley-validate="true" data-parsley-excluded="input[type=hidden], [disabled], :hidden">
36
-
37
- <?php if ($is_dbtest_mode) : ?>
38
- <div class="hdr-main">Database Validation </div>
39
- <?php else : ?>
40
- <div class="dupx-logfile-link">
41
- <?php DUPX_View_Funcs::installerLogLink(); ?>
42
- </div>
43
- <div class="hdr-main">
44
- Step <span class="step">2</span> of 4: Install Database
45
- <div class="sub-header">This step will install the database from the archive.</div>
46
- </div>
47
- <div class="s2-btngrp">
48
- <input id="s2-basic-btn" type="button" value="Basic" class="active" onclick="DUPX.togglePanels('basic')" />
49
- <input id="s2-cpnl-btn" type="button" value="cPanel" class="in-active" onclick="DUPX.togglePanels('cpanel')" />
50
- </div>
51
- <?php endif; ?>
52
-
53
- <!-- POST PARAMS -->
54
- <div class="dupx-debug">
55
- <i>Step 2 - Page Load</i>
56
- <input type="hidden" name="view" value="step2" />
57
- <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step2'); ?>">
58
- <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
59
- <input type="hidden" name="logging" id="logging" value="<?php echo DUPX_U::esc_attr($_POST['logging']); ?>" />
60
- <input type="hidden" name="dbcolsearchreplace"/>
61
- <input type="hidden" name="ctrl_action" value="ctrl-step2" />
62
- <input type="hidden" name="ctrl_csrf_token" value="<?php echo DUPX_CSRF::generate('ctrl-step2'); ?>">
63
- <input type="hidden" name="view_mode" id="s2-input-form-mode" />
64
- <input type="hidden" name="exe_safe_mode" id="exe-safe-mode" value="<?php echo DUPX_U::esc_attr($_POST['exe_safe_mode']); ?>"/>
65
- <textarea name="dbtest-response" id="debug-dbtest-json"></textarea>
66
- </div>
67
-
68
- <!-- DATABASE CHECKS -->
69
- <?php require_once('view.s2.dbtest.php'); ?>
70
-
71
- <!-- BASIC TAB -->
72
- <div id="s2-basic-pane">
73
- <?php require_once('view.s2.basic.php'); ?>
74
- </div>
75
-
76
- <!-- CPANEL TAB -->
77
- <div id="s2-cpnl-pane" style="display: none">
78
- <?php require_once('view.s2.cpnl.lite.php'); ?>
79
- </div>
80
- </form>
81
-
82
-
83
- <!-- CONFIRM DIALOG -->
84
- <div id="dialog-confirm" title="Install Confirmation" style="display:none">
85
- <div style="padding: 10px 0 25px 0">
86
- <b>Run installer with these settings?</b>
87
- </div>
88
-
89
- <b>Database Settings:</b><br/>
90
- <table style="margin-left:20px">
91
- <tr>
92
- <td><b>Server:</b></td>
93
- <td><i id="dlg-dbhost"></i></td>
94
- </tr>
95
- <tr>
96
- <td><b>Name:</b></td>
97
- <td><i id="dlg-dbname"></i></td>
98
- </tr>
99
- <tr>
100
- <td><b>User:</b></td>
101
- <td><i id="dlg-dbuser"></i></td>
102
- </tr>
103
- </table>
104
- <br/><br/>
105
-
106
- <small><i class="fa fa-exclamation-triangle fa-sm"></i> WARNING: Be sure these database parameters are correct! Entering the wrong information WILL overwrite an existing database.
107
- Make sure to have backups of all your data before proceeding.</small><br/>
108
- </div>
109
-
110
-
111
- <!-- =========================================
112
- VIEW: STEP 2 - AJAX RESULT
113
- Auto Posts to view.step3.php -->
114
- <form id='s2-result-form' method="post" class="content-form" style="display:none" autocomplete="off">
115
-
116
- <div class="dupx-logfile-link"><?php DUPX_View_Funcs::installerLogLink(); ?></div>
117
- <div class="hdr-main">
118
- Step <span class="step">2</span> of 4: Install Database
119
- <div class="sub-header">This step will install the database from the archive.</div>
120
- </div>
121
-
122
- <!-- POST PARAMS -->
123
- <div class="dupx-debug">
124
- <i>Step 2 - AJAX Response</i>
125
- <input type="hidden" name="view" value="step3" />
126
- <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step3'); ?>">
127
- <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
128
- <input type="hidden" name="logging" id="ajax-logging" />
129
- <input type="hidden" name="dbaction" id="ajax-dbaction" />
130
- <input type="hidden" name="dbhost" id="ajax-dbhost" />
131
- <input type="hidden" name="dbname" id="ajax-dbname" />
132
- <input type="hidden" name="dbuser" id="ajax-dbuser" />
133
- <input type="hidden" name="dbpass" id="ajax-dbpass" />
134
- <input type="hidden" name="dbcharset" id="ajax-dbcharset" />
135
- <input type="hidden" name="dbcollate" id="ajax-dbcollate" />
136
- <input type="hidden" name="exe_safe_mode" id="ajax-exe-safe-mode" />
137
- <input type="hidden" name="config_mode" value="<?php echo DUPX_U::esc_attr($_POST['config_mode']); ?>" />
138
- <input type="hidden" name="json" id="ajax-json" />
139
- <input type='submit' value='manual submit'>
140
- </div>
141
-
142
- <!-- PROGRESS BAR -->
143
- <div id="progress-area">
144
- <div style="width:500px; margin:auto">
145
- <div style="font-size:1.7em; margin-bottom:20px"><i class="fas fa-circle-notch fa-spin"></i> Installing Database</div>
146
- <div id="progress-bar"></div>
147
- <h3> Please Wait...</h3><br/><br/>
148
- <i>Keep this window open during the creation process.</i><br/>
149
- <i>This can take several minutes.</i>
150
- </div>
151
- </div>
152
-
153
- <!-- AJAX SYSTEM ERROR -->
154
- <div id="ajaxerr-area" style="display:none">
155
- <p>Please try again an issue has occurred.</p>
156
- <div style="padding: 0px 10px 10px 0px;">
157
- <div id="ajaxerr-data">An unknown issue has occurred with the file and database setup process. Please see the <?php DUPX_View_Funcs::installerLogLink(); ?> file for more details.</div>
158
- <div style="text-align:center; margin:10px auto 0px auto">
159
- <input type="button" onclick="$('#s2-result-form').hide(); $('#s2-input-form').show(200); $('#dbchunk_retry').val(0);" value="&laquo; Try Again" class="default-btn" /><br/><br/>
160
- <i style='font-size:11px'>See online help for more details at <a href='https://snapcreek.com/' target='_blank'>snapcreek.com</a></i>
161
- </div>
162
- </div>
163
- </div>
164
- </form>
165
-
166
- <script>
167
- /**
168
- * Toggles the cpanel Login area */
169
- DUPX.togglePanels = function (pane)
170
- {
171
- $('#s2-basic-pane, #s2-cpnl-pane').hide();
172
- $('#s2-basic-btn, #s2-cpnl-btn').removeClass('active in-active');
173
- var cpnlSupport = <?php echo var_export($cpnl_supported); ?>
174
-
175
- if (pane == 'basic') {
176
- $('#s2-input-form-mode').val('basic');
177
- $('#s2-basic-pane').show();
178
- $('#s2-basic-btn').addClass('active');
179
- $('#s2-cpnl-btn').addClass('in-active');
180
- if (! cpnlSupport) {
181
- $('#s2-opts-hdr-basic, div.footer-buttons').show();
182
- }
183
- } else {
184
- $('#s2-input-form-mode').val('cpnl');
185
- $('#s2-cpnl-pane').show();
186
- $('#s2-cpnl-btn').addClass('active');
187
- $('#s2-basic-btn').addClass('in-active');
188
- if (! cpnlSupport) {
189
- $('#s2-opts-hdr-cpnl, div.footer-buttons').hide();
190
- }
191
- }
192
- }
193
-
194
-
195
- /**
196
- * Open an in-line confirm dialog*/
197
- DUPX.confirmDeployment= function ()
198
- {
199
- var dbhost = $("#dbhost").val();
200
- var dbname = $("#dbname").val();
201
- var dbuser = $("#dbuser").val();
202
- var dbchunk = $("#dbchunk").val();
203
-
204
- var $formInput = $('#s2-input-form');
205
- $formInput.parsley().validate();
206
- if (!$formInput.parsley().isValid()) {
207
- return;
208
- }
209
-
210
- $( "#dialog-confirm" ).dialog({
211
- resizable: false,
212
- height: "auto",
213
- width: 550,
214
- modal: true,
215
- position: { my: 'top', at: 'top+150' },
216
- buttons: {
217
- "OK": function() {
218
- DUPX.runDeployment();
219
- $(this).dialog("close");
220
- },
221
- Cancel: function() {
222
- $(this).dialog("close");
223
- }
224
- }
225
- });
226
-
227
- $('#dlg-dbhost').html(dbhost);
228
- $('#dlg-dbname').html(dbname);
229
- $('#dlg-dbuser').html(dbuser);
230
- }
231
-
232
- /**
233
- * Performs Ajax post to extract files and create db
234
- * Timeout (10000000 = 166 minutes) */
235
- DUPX.runDeployment = function (data)
236
- {
237
- var $formInput = $('#s2-input-form');
238
- var $formResult = $('#s2-result-form');
239
- var local_data = data;
240
- var dbhost = $("#dbhost").val();
241
- var dbname = $("#dbname").val();
242
- var dbuser = $("#dbuser").val();
243
- var dbchunk = $("#dbchunk").is(':checked');
244
-
245
- if(local_data === undefined && dbchunk == true){
246
- local_data = {
247
- continue_chunking: dbchunk == true,
248
- pos: 0,
249
- pass: 0,
250
- first_chunk: 1,
251
- };
252
- }else if(!dbchunk){
253
- local_data = {};
254
- }
255
- var new_data = (local_data !== undefined) ? '&'+$.param(local_data) : '';
256
-
257
- $.ajax({
258
- type: "POST",
259
- timeout: 10000000,
260
- url: window.location.href,
261
- data: $formInput.serialize()+new_data,
262
- beforeSend: function () {
263
- DUPX.showProgressBar();
264
- $formInput.hide();
265
- $formResult.show();
266
- },
267
- success: function (respData, textStatus, xhr) {
268
- try {
269
- var data = DUPX.parseJSON(respData);
270
- } catch(err) {
271
- console.error(err);
272
- console.error('JSON parse failed for response data: ' + respData);
273
- var status = "<b>Server Code:</b> " + xhr.status + "<br/>";
274
- status += "<b>Status:</b> " + xhr.statusText + "<br/>";
275
- status += "<b>Response:</b> " + xhr.responseText + "<hr/>";
276
-
277
- if(textStatus && textStatus.toLowerCase() == "timeout" || textStatus.toLowerCase() == "service unavailable") {
278
- status += "<b>Recommendation:</b><br/>";
279
- status += "To resolve this problem please follow the instructions showing <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-100-q'>in the FAQ</a>.<br/><br/>";
280
- }
281
- else if((xhr.status == 403) || (xhr.status == 500)) {
282
- status += "<b>Recommendation</b><br/>";
283
- status += "See <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-120-q'>this section</a> of the Technical FAQ for possible resolutions.<br/><br/>"
284
- }
285
- else if(xhr.status == 0) {
286
- status += "<b>Recommendation</b><br/>";
287
- status += "This may be a server timeout and performing a 'Manual Extract' install can avoid timeouts. See <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/?reload=1#faq-installer-015-q'>this section</a> of the FAQ for a description of how to do that.<br/><br/>"
288
- } else {
289
- status += "<b>Additional Troubleshooting Tips:</b><br/> ";
290
- status += "&raquo; <a target='_blank' href='https://snapcreek.com/duplicator/docs/'>Help Resources</a><br/>";
291
- status += "&raquo; <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/'>Technical FAQ</a>";
292
- }
293
-
294
- $('#ajaxerr-data').html(status);
295
- DUPX.hideProgressBar();
296
- return false;
297
- }
298
-
299
- if(local_data.continue_chunking){
300
- DUPX.runDeployment(data);
301
- return;
302
- }
303
- if (typeof (data) != 'undefined' && data.pass == 1)
304
- {
305
- $("#ajax-dbaction").val($("#dbaction").val());
306
- $("#ajax-dbhost").val(dbhost);
307
- $("#ajax-dbname").val(dbname);
308
- $("#ajax-dbuser").val(dbuser);
309
- $("#ajax-dbpass").val($("#dbpass").val());
310
-
311
- //Advanced Opts
312
- $("#ajax-dbcharset").val($("#dbcharset").val());
313
- $("#ajax-dbcollate").val($("#dbcollate").val());
314
- $("#ajax-logging").val($("#logging").val());
315
- $("#ajax-exe-safe-mode").val($("#exe-safe-mode").val());
316
- $("#ajax-json").val(escape(JSON.stringify(data)));
317
-
318
- <?php if (!DUPX_Log::isLevel(DUPX_Log::LV_DEBUG)) : ?>
319
- setTimeout(function () {$formResult.submit();}, 1000);
320
- <?php endif; ?>
321
- $('#progress-area').fadeOut(700);
322
- } else {
323
- if (data.error_message) {
324
- $('#ajaxerr-data').html(data.error_message);
325
- }
326
- DUPX.hideProgressBar();
327
- }
328
- },
329
- error: function (xhr, textStatus) {
330
- var status = "<b>Server Code:</b> " + xhr.status + "<br/>";
331
- status += "<b>Status:</b> " + xhr.statusText + "<br/>";
332
- status += "<b>Response:</b> " + xhr.responseText + "<hr/>";
333
-
334
- if(textStatus && textStatus.toLowerCase() == "timeout" || textStatus.toLowerCase() == "service unavailable") {
335
- status += "<b>Recommendation:</b><br/>";
336
- status += "To resolve this problem please follow the instructions showing <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-100-q'>in the FAQ</a>.<br/><br/>";
337
- }
338
- else if((xhr.status == 403) || (xhr.status == 500)) {
339
- status += "<b>Recommendation</b><br/>";
340
- status += "See <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-120-q'>this section</a> of the Technical FAQ for possible resolutions.<br/><br/>"
341
- }
342
- else if(xhr.status == 0) {
343
- status += "<b>Recommendation</b><br/>";
344
- status += "This may be a server timeout and performing a 'Manual Extract' install can avoid timeouts. See <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/?reload=1#faq-installer-015-q'>this section</a> of the FAQ for a description of how to do that.<br/><br/>"
345
- } else {
346
- status += "<b>Additional Troubleshooting Tips:</b><br/> ";
347
- status += "&raquo; <a target='_blank' href='https://snapcreek.com/duplicator/docs/'>Help Resources</a><br/>";
348
- status += "&raquo; <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/'>Technical FAQ</a>";
349
- }
350
-
351
- $('#ajaxerr-data').html(status);
352
- DUPX.hideProgressBar();
353
- }
354
- });
355
- };
356
-
357
- //DOCUMENT LOAD
358
- $(document).ready(function () {
359
- //Init
360
- DUPX.togglePanels("basic");
361
- DUPX.initToggle();
362
-
363
- });
 
 
364
  </script>
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+
4
+ /** IDE HELPERS */
5
+ /* @var $GLOBALS['DUPX_AC'] DUPX_ArchiveConfig */
6
+
7
+ require_once($GLOBALS['DUPX_INIT'] . '/classes/config/class.archive.config.php');
8
+
9
+ //-- START OF VIEW STEP 2
10
+ $archive_config = DUPX_ArchiveConfig::getInstance();
11
+
12
+ $dbcharset = empty($archive_config->dbcharset)
13
+ ? $GLOBALS['DBCHARSET_DEFAULT']
14
+ : $archive_config->dbcharset;
15
+ $_POST['dbcharset'] = isset($_POST['dbcharset']) ? trim($_POST['dbcharset']) : $dbcharset;
16
+
17
+ $dbcollate = empty($archive_config->dbcollation)
18
+ ? $GLOBALS['DBCOLLATE_DEFAULT']
19
+ : $archive_config->dbcollation;
20
+ $_POST['dbcollate'] = isset($_POST['dbcollate']) ? trim($_POST['dbcollate']) : $dbcollate;
21
+
22
+ $_POST['exe_safe_mode'] = (isset($_POST['exe_safe_mode'])) ? DUPX_U::sanitize_text_field($_POST['exe_safe_mode']) : 0;
23
+ $is_dbtest_mode = isset($_POST['dbonlytest']) ? 1 : 0;
24
+
25
+ if (isset($_POST['logging'])) {
26
+ $post_logging = DUPX_U::sanitize_text_field($_POST['logging']);
27
+ $_POST['logging'] = trim($post_logging);
28
+ } else {
29
+ $_POST['logging'] = 1;
30
+ }
31
+
32
+ $cpnl_supported = DUPX_U::$on_php_53_plus ? true : false;
33
+ ?>
34
+
35
+ <form id='s2-input-form' method="post" class="content-form" autocomplete="off" data-parsley-validate="true" data-parsley-excluded="input[type=hidden], [disabled], :hidden">
36
+
37
+ <?php if ($is_dbtest_mode) : ?>
38
+ <div class="hdr-main">Database Validation </div>
39
+ <?php else : ?>
40
+ <div class="dupx-logfile-link">
41
+ <?php DUPX_View_Funcs::installerLogLink(); ?>
42
+ </div>
43
+ <div class="hdr-main">
44
+ Step <span class="step">2</span> of 4: Install Database
45
+ <div class="sub-header">This step will install the database from the archive.</div>
46
+ </div>
47
+ <div class="s2-btngrp">
48
+ <input id="s2-basic-btn" type="button" value="Basic" class="active" onclick="DUPX.togglePanels('basic')" />
49
+ <input id="s2-cpnl-btn" type="button" value="cPanel" class="in-active" onclick="DUPX.togglePanels('cpanel')" />
50
+ </div>
51
+ <?php endif; ?>
52
+
53
+ <!-- POST PARAMS -->
54
+ <div class="dupx-debug">
55
+ <i>Step 2 - Page Load</i>
56
+ <input type="hidden" name="view" value="step2" />
57
+ <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step2'); ?>">
58
+ <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
59
+ <input type="hidden" name="secure-archive" value="<?php echo DUPX_U::esc_attr($_POST['secure-archive']); ?>" />
60
+ <input type="hidden" name="logging" id="logging" value="<?php echo DUPX_U::esc_attr($_POST['logging']); ?>" />
61
+ <input type="hidden" name="dbcolsearchreplace"/>
62
+ <input type="hidden" name="ctrl_action" value="ctrl-step2" />
63
+ <input type="hidden" name="ctrl_csrf_token" value="<?php echo DUPX_CSRF::generate('ctrl-step2'); ?>">
64
+ <input type="hidden" name="view_mode" id="s2-input-form-mode" />
65
+ <input type="hidden" name="exe_safe_mode" id="exe-safe-mode" value="<?php echo DUPX_U::esc_attr($_POST['exe_safe_mode']); ?>"/>
66
+ <textarea name="dbtest-response" id="debug-dbtest-json"></textarea>
67
+ </div>
68
+
69
+ <!-- BASIC TAB -->
70
+ <div id="s2-basic-pane">
71
+ <?php require_once('view.s2.basic.php'); ?>
72
+ </div>
73
+
74
+ <!-- CPANEL TAB -->
75
+ <div id="s2-cpnl-pane" style="display: none">
76
+ <?php require_once('view.s2.cpnl.lite.php'); ?>
77
+ </div>
78
+
79
+ <!-- VALIDATION -->
80
+ <?php require_once('view.s2.dbtest.php'); ?>
81
+ </form>
82
+
83
+
84
+ <!-- CONFIRM DIALOG -->
85
+ <div id="dialog-confirm" title="Install Confirmation" style="display:none">
86
+ <div style="padding: 10px 0 25px 0">
87
+ <b>Run installer with these settings?</b>
88
+ </div>
89
+
90
+ <b>Database Settings:</b><br/>
91
+ <table style="margin-left:20px">
92
+ <tr>
93
+ <td><b>Server:</b></td>
94
+ <td><i id="dlg-dbhost"></i></td>
95
+ </tr>
96
+ <tr>
97
+ <td><b>Name:</b></td>
98
+ <td><i id="dlg-dbname"></i></td>
99
+ </tr>
100
+ <tr>
101
+ <td><b>User:</b></td>
102
+ <td><i id="dlg-dbuser"></i></td>
103
+ </tr>
104
+ </table>
105
+ <br/><br/>
106
+
107
+ <small><i class="fa fa-exclamation-triangle fa-sm"></i> WARNING: Be sure these database parameters are correct! Entering the wrong information WILL overwrite an existing database.
108
+ Make sure to have backups of all your data before proceeding.</small><br/>
109
+ </div>
110
+
111
+
112
+ <!-- =========================================
113
+ VIEW: STEP 2 - AJAX RESULT
114
+ Auto Posts to view.step3.php -->
115
+ <form id='s2-result-form' method="post" class="content-form" style="display:none" autocomplete="off">
116
+
117
+ <div class="dupx-logfile-link"><?php DUPX_View_Funcs::installerLogLink(); ?></div>
118
+ <div class="hdr-main">
119
+ Step <span class="step">2</span> of 4: Install Database
120
+ <div class="sub-header">This step will install the database from the archive.</div>
121
+ </div>
122
+
123
+ <!-- POST PARAMS -->
124
+ <div class="dupx-debug">
125
+ <i>Step 2 - AJAX Response</i>
126
+ <input type="hidden" name="view" value="step3" />
127
+ <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step3'); ?>">
128
+ <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
129
+ <input type="hidden" name="secure-archive" value="<?php echo DUPX_U::esc_attr($_POST['secure-archive']); ?>" />
130
+ <input type="hidden" name="logging" id="ajax-logging" />
131
+ <input type="hidden" name="dbaction" id="ajax-dbaction" />
132
+ <input type="hidden" name="dbhost" id="ajax-dbhost" />
133
+ <input type="hidden" name="dbname" id="ajax-dbname" />
134
+ <input type="hidden" name="dbuser" id="ajax-dbuser" />
135
+ <input type="hidden" name="dbpass" id="ajax-dbpass" />
136
+ <input type="hidden" name="dbcharset" id="ajax-dbcharset" />
137
+ <input type="hidden" name="dbcollate" id="ajax-dbcollate" />
138
+ <input type="hidden" name="exe_safe_mode" id="ajax-exe-safe-mode" />
139
+ <input type="hidden" name="config_mode" value="<?php echo DUPX_U::esc_attr($_POST['config_mode']); ?>" />
140
+ <input type="hidden" name="json" id="ajax-json" />
141
+ <input type='submit' value='manual submit'>
142
+ </div>
143
+
144
+ <!-- PROGRESS BAR -->
145
+ <div id="progress-area">
146
+ <div style="width:500px; margin:auto">
147
+ <div style="font-size:1.7em; margin-bottom:20px"><i class="fas fa-circle-notch fa-spin"></i> Installing Database</div>
148
+ <div id="progress-bar"></div>
149
+ <h3> Please Wait...</h3><br/><br/>
150
+ <i>Keep this window open during the creation process.</i><br/>
151
+ <i>This can take several minutes.</i>
152
+ </div>
153
+ </div>
154
+
155
+ <!-- AJAX SYSTEM ERROR -->
156
+ <div id="ajaxerr-area" style="display:none">
157
+ <p>Please try again an issue has occurred.</p>
158
+ <div style="padding: 0px 10px 10px 0px;">
159
+ <div id="ajaxerr-data">An unknown issue has occurred with the file and database setup process. Please see the <?php DUPX_View_Funcs::installerLogLink(); ?> file for more details.</div>
160
+ <div style="text-align:center; margin:10px auto 0px auto">
161
+ <input type="button" onclick="$('#s2-result-form').hide(); $('#s2-input-form').show(200); $('#dbchunk_retry').val(0);" value="&laquo; Try Again" class="default-btn" /><br/><br/>
162
+ <i style='font-size:11px'>See online help for more details at <a href='https://snapcreek.com/' target='_blank'>snapcreek.com</a></i>
163
+ </div>
164
+ </div>
165
+ </div>
166
+ </form>
167
+
168
+ <script>
169
+ /**
170
+ * Toggles the cpanel Login area */
171
+ DUPX.togglePanels = function (pane)
172
+ {
173
+ $('#s2-basic-pane, #s2-cpnl-pane').hide();
174
+ $('#s2-basic-btn, #s2-cpnl-btn').removeClass('active in-active');
175
+ var cpnlSupport = <?php echo var_export($cpnl_supported); ?>
176
+
177
+ if (pane == 'basic') {
178
+ $('#s2-input-form-mode').val('basic');
179
+ $('#s2-basic-pane').show();
180
+ $('#s2-basic-btn').addClass('active');
181
+ $('#s2-cpnl-btn').addClass('in-active');
182
+ if (! cpnlSupport) {
183
+ $('#s2-opts-hdr-basic, div.footer-buttons').show();
184
+ }
185
+ } else {
186
+ $('#s2-input-form-mode').val('cpnl');
187
+ $('#s2-cpnl-pane').show();
188
+ $('#s2-cpnl-btn').addClass('active');
189
+ $('#s2-basic-btn').addClass('in-active');
190
+ if (! cpnlSupport) {
191
+ $('#s2-opts-hdr-cpnl, div.footer-buttons').hide();
192
+ }
193
+ }
194
+ }
195
+
196
+
197
+ /**
198
+ * Open an in-line confirm dialog*/
199
+ DUPX.confirmDeployment= function ()
200
+ {
201
+ var dbhost = $("#dbhost").val();
202
+ var dbname = $("#dbname").val();
203
+ var dbuser = $("#dbuser").val();
204
+ var dbchunk = $("#dbchunk").val();
205
+
206
+ var $formInput = $('#s2-input-form');
207
+ $formInput.parsley().validate();
208
+ if (!$formInput.parsley().isValid()) {
209
+ return;
210
+ }
211
+
212
+ $( "#dialog-confirm" ).dialog({
213
+ resizable: false,
214
+ height: "auto",
215
+ width: 550,
216
+ modal: true,
217
+ position: { my: 'top', at: 'top+150' },
218
+ buttons: {
219
+ "OK": function() {
220
+ DUPX.runDeployment();
221
+ $(this).dialog("close");
222
+ },
223
+ Cancel: function() {
224
+ $(this).dialog("close");
225
+ }
226
+ }
227
+ });
228
+
229
+ $('#dlg-dbhost').html(dbhost);
230
+ $('#dlg-dbname').html(dbname);
231
+ $('#dlg-dbuser').html(dbuser);
232
+ }
233
+
234
+ /**
235
+ * Performs Ajax post to extract files and create db
236
+ * Timeout (10000000 = 166 minutes) */
237
+ DUPX.runDeployment = function (data)
238
+ {
239
+ var $formInput = $('#s2-input-form');
240
+ var $formResult = $('#s2-result-form');
241
+ var local_data = data;
242
+ var dbhost = $("#dbhost").val();
243
+ var dbname = $("#dbname").val();
244
+ var dbuser = $("#dbuser").val();
245
+ var dbchunk = $("#dbchunk").is(':checked');
246
+
247
+ if(local_data === undefined && dbchunk == true){
248
+ local_data = {
249
+ continue_chunking: dbchunk == true,
250
+ pos: 0,
251
+ pass: 0,
252
+ first_chunk: 1,
253
+ };
254
+ }else if(!dbchunk){
255
+ local_data = {};
256
+ }
257
+ var new_data = (local_data !== undefined) ? '&'+$.param(local_data) : '';
258
+
259
+ $.ajax({
260
+ type: "POST",
261
+ timeout: 10000000,
262
+ url: window.location.href,
263
+ data: $formInput.serialize()+new_data,
264
+ beforeSend: function () {
265
+ DUPX.showProgressBar();
266
+ $formInput.hide();
267
+ $formResult.show();
268
+ },
269
+ success: function (respData, textStatus, xhr) {
270
+ try {
271
+ var data = DUPX.parseJSON(respData);
272
+ } catch(err) {
273
+ console.error(err);
274
+ console.error('JSON parse failed for response data: ' + respData);
275
+ var status = "<b>Server Code:</b> " + xhr.status + "<br/>";
276
+ status += "<b>Status:</b> " + xhr.statusText + "<br/>";
277
+ status += "<b>Response:</b> " + xhr.responseText + "<hr/>";
278
+
279
+ if(textStatus && textStatus.toLowerCase() == "timeout" || textStatus.toLowerCase() == "service unavailable") {
280
+ status += "<b>Recommendation:</b><br/>";
281
+ status += "To resolve this problem please follow the instructions showing <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-100-q'>in the FAQ</a>.<br/><br/>";
282
+ }
283
+ else if((xhr.status == 403) || (xhr.status == 500)) {
284
+ status += "<b>Recommendation</b><br/>";
285
+ status += "See <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-120-q'>this section</a> of the Technical FAQ for possible resolutions.<br/><br/>"
286
+ }
287
+ else if(xhr.status == 0) {
288
+ status += "<b>Recommendation</b><br/>";
289
+ status += "This may be a server timeout and performing a 'Manual Extract' install can avoid timeouts. See <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/?reload=1#faq-installer-015-q'>this section</a> of the FAQ for a description of how to do that.<br/><br/>"
290
+ } else {
291
+ status += "<b>Additional Troubleshooting Tips:</b><br/> ";
292
+ status += "&raquo; <a target='_blank' href='https://snapcreek.com/duplicator/docs/'>Help Resources</a><br/>";
293
+ status += "&raquo; <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/'>Technical FAQ</a>";
294
+ }
295
+
296
+ $('#ajaxerr-data').html(status);
297
+ DUPX.hideProgressBar();
298
+ return false;
299
+ }
300
+
301
+ if(local_data.continue_chunking){
302
+ DUPX.runDeployment(data);
303
+ return;
304
+ }
305
+ if (typeof (data) != 'undefined' && data.pass == 1)
306
+ {
307
+ $("#ajax-dbaction").val($("#dbaction").val());
308
+ $("#ajax-dbhost").val(dbhost);
309
+ $("#ajax-dbname").val(dbname);
310
+ $("#ajax-dbuser").val(dbuser);
311
+ $("#ajax-dbpass").val($("#dbpass").val());
312
+
313
+ //Advanced Opts
314
+ $("#ajax-dbcharset").val($("#dbcharset").val());
315
+ $("#ajax-dbcollate").val($("#dbcollate").val());
316
+ $("#ajax-logging").val($("#logging").val());
317
+ $("#ajax-exe-safe-mode").val($("#exe-safe-mode").val());
318
+ $("#ajax-json").val(escape(JSON.stringify(data)));
319
+
320
+ <?php if (!DUPX_Log::isLevel(DUPX_Log::LV_DEBUG)) : ?>
321
+ setTimeout(function () {$formResult.submit();}, 1000);
322
+ <?php endif; ?>
323
+ $('#progress-area').fadeOut(700);
324
+ } else {
325
+ if (data.error_message) {
326
+ $('#ajaxerr-data').html(data.error_message);
327
+ }
328
+ DUPX.hideProgressBar();
329
+ }
330
+ },
331
+ error: function (xhr, textStatus) {
332
+ var status = "<b>Server Code:</b> " + xhr.status + "<br/>";
333
+ status += "<b>Status:</b> " + xhr.statusText + "<br/>";
334
+ status += "<b>Response:</b> " + xhr.responseText + "<hr/>";
335
+
336
+ if(textStatus && textStatus.toLowerCase() == "timeout" || textStatus.toLowerCase() == "service unavailable") {
337
+ status += "<b>Recommendation:</b><br/>";
338
+ status += "To resolve this problem please follow the instructions showing <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-100-q'>in the FAQ</a>.<br/><br/>";
339
+ }
340
+ else if((xhr.status == 403) || (xhr.status == 500)) {
341
+ status += "<b>Recommendation</b><br/>";
342
+ status += "See <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-installer-120-q'>this section</a> of the Technical FAQ for possible resolutions.<br/><br/>"
343
+ }
344
+ else if(xhr.status == 0) {
345
+ status += "<b>Recommendation</b><br/>";
346
+ status += "This may be a server timeout and performing a 'Manual Extract' install can avoid timeouts. See <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/?reload=1#faq-installer-015-q'>this section</a> of the FAQ for a description of how to do that.<br/><br/>"
347
+ } else {
348
+ status += "<b>Additional Troubleshooting Tips:</b><br/> ";
349
+ status += "&raquo; <a target='_blank' href='https://snapcreek.com/duplicator/docs/'>Help Resources</a><br/>";
350
+ status += "&raquo; <a target='_blank' href='https://snapcreek.com/duplicator/docs/faqs-tech/'>Technical FAQ</a>";
351
+ }
352
+
353
+ $('#ajaxerr-data').html(status);
354
+ DUPX.hideProgressBar();
355
+ }
356
+ });
357
+ };
358
+
359
+ //DOCUMENT LOAD
360
+ $(document).ready(function () {
361
+ //Init
362
+ DUPX.togglePanels("basic");
363
+ DUPX.initToggle();
364
+
365
+ });
366
  </script>
installer/dup-installer/views/view.s2.basic.php CHANGED
@@ -55,6 +55,9 @@ BASIC PANEL -->
55
  <a href="javascript:void(0)"><i class="fa fa-minus-square"></i>Setup</a>
56
  </div>
57
  <div id="s2-db-basic">
 
 
 
58
  <?php if ($is_overwrite_mode) : ?>
59
  <div id="s2-db-basic-overwrite" class="gray-panel" >
60
  <b style='color:maroon'>Ready to connect to existing sites database? </b><br/>
@@ -81,7 +84,9 @@ BASIC PANEL -->
81
  <?php if ($is_standard_mode) : ?>
82
  <option value="create">Create New Database</option>
83
  <?php endif; ?>
84
- <option value="empty" selected>Connect and Remove All Data</option>
 
 
85
  </select>
86
  </td>
87
  </tr>
@@ -120,26 +125,8 @@ BASIC PANEL -->
120
  </tr>
121
  </table>
122
  </div>
123
- <br/><br/>
124
 
125
- <!-- =========================================
126
- BASIC: DB VALIDATION -->
127
- <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s2-dbtest-area-basic">
128
- <a href="javascript:void(0)"><i class="fa fa-minus-square"></i>Validation</a>
129
- </div>
130
-
131
- <div id="s2-dbtest-area-basic" class="s2-dbtest-area hdr-sub1-area">
132
- <div id="s2-dbrefresh-basic">
133
- <a href="javascript:void(0)" onclick="DUPX.testDBConnect()"><i class="fa fa-sync"></i> Retry Test</a>
134
- </div>
135
- <div style="clear:both"></div>
136
- <div id="s2-dbtest-hb-basic" class="s2-dbtest-hb">
137
- <div class="message">
138
- To continue click the 'Test Database' button <br/>
139
- to perform a database integrity check.
140
- </div>
141
- </div>
142
- </div>
143
 
144
  <?php if (!$is_dbtest_mode) : ?>
145
  <!-- =========================================
@@ -208,12 +195,32 @@ BASIC: DB VALIDATION -->
208
  </td>
209
  </tr>
210
  </table>
211
- </div>
212
- <br/><br/>
213
  <?php endif; ?>
214
 
215
 
216
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
217
  <br/><br/><br/>
218
  <br/><br/><br/>
219
 
55
  <a href="javascript:void(0)"><i class="fa fa-minus-square"></i>Setup</a>
56
  </div>
57
  <div id="s2-db-basic">
58
+ <div class="s2-db-basic-title">
59
+ Database Connection
60
+ </div>
61
  <?php if ($is_overwrite_mode) : ?>
62
  <div id="s2-db-basic-overwrite" class="gray-panel" >
63
  <b style='color:maroon'>Ready to connect to existing sites database? </b><br/>
84
  <?php if ($is_standard_mode) : ?>
85
  <option value="create">Create New Database</option>
86
  <?php endif; ?>
87
+ <option value="empty" selected>Remove All Data</option>
88
+ <option value="null" disabled="disabled">Backup and Rename Existing Tables (Pro Only)</option>
89
+ <option value="null" disabled="disabled">Manual SQL Execution (Pro Only)</option>
90
  </select>
91
  </td>
92
  </tr>
125
  </tr>
126
  </table>
127
  </div>
128
+ <br/>
129
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
 
131
  <?php if (!$is_dbtest_mode) : ?>
132
  <!-- =========================================
195
  </td>
196
  </tr>
197
  </table>
198
+ </div><br/>
 
199
  <?php endif; ?>
200
 
201
 
202
 
203
+ <!-- =========================================
204
+ BASIC: DB VALIDATION -->
205
+ <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s2-dbtest-area-basic">
206
+ <a href="javascript:void(0)"><i class="fa fa-minus-square"></i>Validation</a>
207
+ </div>
208
+
209
+ <div id="s2-dbtest-area-basic" class="s2-dbtest-area hdr-sub1-area">
210
+ <div id="s2-dbrefresh-basic">
211
+ <a href="javascript:void(0)" onclick="DUPX.testDBConnect()"><i class="fa fa-sync"></i> Retry Test</a>
212
+ </div>
213
+ <div style="clear:both"></div>
214
+ <div id="s2-dbtest-hb-basic" class="s2-dbtest-hb">
215
+ <div class="message">
216
+ To continue click the 'Test Database' button <br/>
217
+ to perform a database integrity check.
218
+ </div>
219
+ </div>
220
+ </div>
221
+
222
+
223
+
224
  <br/><br/><br/>
225
  <br/><br/><br/>
226
 
installer/dup-installer/views/view.s3.php CHANGED
@@ -1,613 +1,615 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
- /** IDE HELPERS */
4
- /* @var $GLOBALS['DUPX_AC'] DUPX_ArchiveConfig */
5
-
6
- //-- START OF VIEW STEP 3
7
- $_POST['dbaction'] = isset($_POST['dbaction']) ? DUPX_U::sanitize_text_field($_POST['dbaction']) : 'create';
8
-
9
- if (isset($_POST['dbhost'])) {
10
- $post_db_host = DUPX_U::sanitize_text_field($_POST['dbhost']);
11
- $_POST['dbhost'] = trim($post_db_host);
12
- } else {
13
- $_POST['dbhost'] = null;
14
- }
15
-
16
- if (isset($_POST['dbname'])) {
17
- $post_db_name = DUPX_U::sanitize_text_field($_POST['dbname']);
18
- $_POST['dbname'] = trim($post_db_name);
19
- } else {
20
- $_POST['dbname'] = null;
21
- }
22
-
23
- if (isset($_POST['dbuser'])) {
24
- $post_db_user = DUPX_U::sanitize_text_field($_POST['dbuser']);
25
- $_POST['dbuser'] = trim($post_db_user);
26
- } else {
27
- $_POST['dbuser'] = null;
28
- }
29
-
30
- if (isset($_POST['dbpass'])) {
31
- $_POST['dbpass'] = $_POST['dbpass'];
32
- } else {
33
- $_POST['dbpass'] = null;
34
- }
35
-
36
- if (isset($_POST['dbhost'])) {
37
- $post_db_host = DUPX_U::sanitize_text_field($_POST['dbhost']);
38
- $_POST['dbport'] = parse_url($post_db_host, PHP_URL_PORT);
39
- } else {
40
- $_POST['dbport'] = 3306;
41
- }
42
-
43
- if (!empty($_POST['dbport'])) {
44
- $_POST['dbport'] = DUPX_U::sanitize_text_field($_POST['dbport']);
45
- } else {
46
- $_POST['dbport'] = 3306;
47
- }
48
-
49
- $_POST['exe_safe_mode'] = isset($_POST['exe_safe_mode']) ? DUPX_U::sanitize_text_field($_POST['exe_safe_mode']) : 0;
50
-
51
- $dbh = DUPX_DB::connect($_POST['dbhost'], $_POST['dbuser'], $_POST['dbpass'], $_POST['dbname'], $_POST['dbport']);
52
-
53
- $all_tables = DUPX_DB::getTables($dbh);
54
- $active_plugins = DUPX_U::getActivePlugins($dbh);
55
- $old_path = $GLOBALS['DUPX_AC']->wproot;
56
-
57
- // RSR TODO: need to do the path too?
58
- $new_path = $GLOBALS['DUPX_ROOT'];
59
- $new_path = ((strrpos($old_path, '/') + 1) == strlen($old_path)) ? DUPX_U::addSlash($new_path) : $new_path;
60
- $empty_schedule_display = (DUPX_U::$on_php_53_plus) ? 'table-row' : 'none';
61
- ?>
62
-
63
- <!-- =========================================
64
- VIEW: STEP 3- INPUT -->
65
- <form id='s3-input-form' method="post" class="content-form" autocomplete="off">
66
-
67
- <div class="logfile-link">
68
- <?php DUPX_View_Funcs::installerLogLink(); ?>
69
- </div>
70
- <div class="hdr-main">
71
- Step <span class="step">3</span> of 4: Update Data
72
- <div class="sub-header">This step will update the database and config files to match your new sites values.</div>
73
- </div>
74
-
75
- <?php
76
- if ($_POST['dbaction'] == 'manual') {
77
- echo '<div class="dupx-notice s3-manaual-msg">Manual SQL execution is enabled</div>';
78
- }
79
- ?>
80
-
81
- <!-- POST PARAMS -->
82
- <div class="dupx-debug">
83
- <i>Step 3 - Page Load</i>
84
- <input type="hidden" name="ctrl_action" value="ctrl-step3" />
85
- <input type="hidden" name="ctrl_csrf_token" value="<?php echo DUPX_CSRF::generate('ctrl-step3'); ?>">
86
- <input type="hidden" name="view" value="step3" />
87
- <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step3'); ?>">
88
- <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
89
- <input type="hidden" name="logging" value="<?php echo DUPX_U::esc_attr($_POST['logging']); ?>" />
90
- <input type="hidden" name="dbhost" value="<?php echo DUPX_U::esc_attr($_POST['dbhost']); ?>" />
91
- <input type="hidden" name="dbuser" value="<?php echo DUPX_U::esc_attr($_POST['dbuser']); ?>" />
92
- <input type="hidden" name="dbpass" value="<?php echo DUPX_U::esc_attr($_POST['dbpass']); ?>" />
93
- <input type="hidden" name="dbname" value="<?php echo DUPX_U::esc_attr($_POST['dbname']); ?>" />
94
- <input type="hidden" name="dbcharset" value="<?php echo DUPX_U::esc_attr($_POST['dbcharset']); ?>" />
95
- <input type="hidden" name="dbcollate" value="<?php echo DUPX_U::esc_attr($_POST['dbcollate']); ?>" />
96
- <input type="hidden" name="config_mode" value="<?php echo DUPX_U::esc_attr($_POST['config_mode']); ?>" />
97
- <input type="hidden" name="exe_safe_mode" id="exe-safe-mode" value="<?php echo DUPX_U::esc_attr($_POST['exe_safe_mode']); ?>" />
98
- <input type="hidden" name="json" value="<?php echo DUPX_U::esc_attr($_POST['json']); ?>" />
99
- </div>
100
-
101
- <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s3-new-settings">
102
- <a href="javascript:void(0)"><i class="fa fa-minus-square"></i>Setup</a>
103
- </div>
104
- <div id="s3-new-settings">
105
- <table class="s3-opts">
106
- <tr>
107
- <td>Title:</td>
108
- <td><input type="text" name="blogname" id="blogname" value="<?php echo DUPX_U::esc_attr($GLOBALS['DUPX_AC']->blogname); ?>" /></td>
109
- </tr>
110
- <tr>
111
- <td>URL:</td>
112
- <td>
113
- <input type="text" name="url_new" id="url_new" value="" />
114
- <a href="javascript:DUPX.getNewURL('url_new')" style="font-size:12px">get</a>
115
- </td>
116
- </tr>
117
- <tr>
118
- <td>Path:</td>
119
- <td><input type="text" name="path_new" id="path_new" value="<?php echo DUPX_U::esc_attr($new_path); ?>" /></td>
120
- </tr>
121
- </table>
122
- </div>
123
- <br/><br/>
124
-
125
- <!-- =========================
126
- SEARCH AND REPLACE -->
127
- <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s3-custom-replace">
128
- <a href="javascript:void(0)"><i class="fa fa-plus-square"></i>Replace</a>
129
- </div>
130
-
131
- <div id="s3-custom-replace" class="hdr-sub1-area" style="display:none; text-align: center">
132
- <div class="help-target">
133
- <?php DUPX_View_Funcs::helpIconLink('step3'); ?>
134
- </div><br/>
135
- Add additional search and replace URLs to replace additional data.<br/>
136
- This option is available only in
137
- <a href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_campaign=duplicator_pro&utm_content=free_inst_replaceopts">Duplicator Pro</a>
138
- </div>
139
- <br/><br/>
140
-
141
- <!-- ==========================
142
- OPTIONS -->
143
- <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s3-adv-opts">
144
- <a href="javascript:void(0)"><i class="fa fa-plus-square"></i>Options</a>
145
- </div>
146
- <div id="s3-adv-opts" class="hdr-sub1-area" style="display:none;">
147
-
148
- <!-- START TABS -->
149
- <div id="tabs">
150
- <ul>
151
- <li><a href="#tabs-admin-account">Admin Account</a></li>
152
- <li><a href="#tabs-scan-options">Scan Options</a></li>
153
- <li><a href="#tabs-wp-config-file">WP-Config File</a></li>
154
- </ul>
155
-
156
- <!-- =====================
157
- ADMIN TAB -->
158
- <div id="tabs-admin-account">
159
- <div class="help-target">
160
- <?php DUPX_View_Funcs::helpIconLink('step3'); ?>
161
- </div><br/>
162
-
163
- <div class="hdr-sub3">New Admin Account</div>
164
- <div style="text-align: center">
165
- <i style="color:gray;font-size: 11px">This feature is optional. If the username already exists the account will NOT be created or updated.</i>
166
- </div>
167
-
168
- <table class="s3-opts" style="margin-top:7px">
169
- <tr>
170
- <td>Username:</td>
171
- <td><input type="text" name="wp_username" id="wp_username" value="" title="4 characters minimum" placeholder="(4 or more characters)" /></td>
172
- </tr>
173
- <tr>
174
- <td>Password:</td>
175
- <td>
176
- <?php
177
- DUPX_U_Html::inputPasswordToggle('wp_password', 'wp_password', array(),
178
- array(
179
- 'placeholder' => '(6 or more characters)',
180
- 'title' => '6 characters minimum'
181
- ));
182
- ?>
183
- </tr>
184
- <tr>
185
- <td>Email:</td>
186
- <td><input type="text" name="wp_mail" id="wp_mail" value="" title="" placeholder="" /></td>
187
- </tr>
188
- <tr>
189
- <td>Nickname:</td>
190
- <td><input type="text" name="wp_nickname" id="wp_nickname" value="" title="if username is empty" placeholder="(if username is empty)" /></td>
191
- </tr>
192
- <tr>
193
- <td>First name:</td>
194
- <td><input type="text" name="wp_first_name" id="wp_first_name" value="" title="optional" placeholder="(optional)" /></td>
195
- </tr>
196
- <tr>
197
- <td>Last name:</td>
198
- <td><input type="text" name="wp_last_name" id="wp_last_name" value="" title="optional" placeholder="(optional)" /></td>
199
- </tr>
200
- </table>
201
- <br/><br/>
202
- </div>
203
-
204
- <!-- =====================
205
- SCAN TAB -->
206
- <div id="tabs-scan-options">
207
- <div class="help-target">
208
- <?php DUPX_View_Funcs::helpIconLink('step3'); ?>
209
- </div><br/>
210
- <div class="hdr-sub3">Database Scan Options</div>
211
- <table class="s3-opts">
212
- <tr>
213
- <td style="width:105px">Site URL:</td>
214
- <td style="white-space: nowrap">
215
- <input type="text" name="siteurl" id="siteurl" value="" />
216
- <a href="javascript:DUPX.getNewURL('siteurl')" style="font-size:12px">get</a><br/>
217
- </td>
218
- </tr>
219
- <tr valign="top">
220
- <td style="width:80px">Old URL:</td>
221
- <td>
222
- <input type="text" name="url_old" id="url_old" value="<?php echo DUPX_U::esc_attr($GLOBALS['DUPX_AC']->url_old); ?>" readonly="readonly" class="readonly" />
223
- <a href="javascript:DUPX.editOldURL()" id="edit_url_old" style="font-size:12px">edit</a>
224
- </td>
225
- </tr>
226
- <tr valign="top">
227
- <td>Old Path:</td>
228
- <td>
229
- <input type="text" name="path_old" id="path_old" value="<?php echo DUPX_U::esc_attr($old_path); ?>" readonly="readonly" class="readonly" />
230
- <a href="javascript:DUPX.editOldPath()" id="edit_path_old" style="font-size:12px">edit</a>
231
- </td>
232
- </tr>
233
- </table><br/>
234
-
235
- <table>
236
- <tr>
237
- <td style="padding-right:10px">
238
- <b>Scan Tables:</b>
239
- <div class="s3-allnonelinks">
240
- <a href="javascript:void(0)" onclick="$('#tables option').prop('selected',true);">[All]</a>
241
- <a href="javascript:void(0)" onclick="$('#tables option').prop('selected',false);">[None]</a>
242
- </div><br style="clear:both" />
243
- <select id="tables" name="tables[]" multiple="multiple" style="width:315px;" size="10">
244
- <?php
245
- foreach( $all_tables as $table ) {
246
- echo '<option selected="selected" value="' . DUPX_U::esc_attr( $table ) . '">' . DUPX_U::esc_html($table) . '</option>';
247
- }
248
- ?>
249
- </select>
250
-
251
- </td>
252
- <td valign="top">
253
- <b>Activate Plugins:</b>
254
- <?php echo ($_POST['exe_safe_mode'] > 0) ? '<small class="s3-warn">Safe Mode Enabled</small>' : '' ; ?>
255
- <div class="s3-allnonelinks" style="<?php echo ($_POST['exe_safe_mode']>0)? 'display:none':''; ?>">
256
- <a href="javascript:void(0)" onclick="$('#plugins option').prop('selected',true);">[All]</a>
257
- <a href="javascript:void(0)" onclick="$('#plugins option').prop('selected',false);">[None]</a>
258
- </div><br style="clear:both" />
259
- <select id="plugins" name="plugins[]" multiple="multiple" style="width:315px;" <?php echo ($_POST['exe_safe_mode'] > 0) ? 'disabled="true"' : ''; ?> size="10">
260
- <?php
261
- $selected_string = 'selected="selected"';
262
- foreach ($active_plugins as $plugin) {
263
- $label = dirname($plugin) == '.' ? $plugin : dirname($plugin);
264
- echo "<option {$selected_string} value='" . DUPX_U::esc_attr( $plugin ) . "'>" . DUPX_U::esc_html($label) . '</option>';
265
- }
266
- ?>
267
- </select>
268
- </td>
269
- </tr>
270
- </table>
271
- <br/>
272
- <input type="checkbox" name="search_replace_email_domain" id="search_replace_email_domain" value="1" /> <label for="search_replace_email_domain">Update email domains</label><br/>
273
- <input type="checkbox" name="fullsearch" id="fullsearch" value="1" /> <label for="fullsearch">Use Database Full Search Mode</label><br/>
274
- <input type="checkbox" name="postguid" id="postguid" value="1" /> <label for="postguid">Keep Post GUID Unchanged</label><br/>
275
- <label>
276
- <B>Max size check for serialize objects:</b>
277
- <input type="number"
278
- name="<?php echo DUPX_CTRL::NAME_MAX_SERIALIZE_STRLEN_IN_M; ?>"
279
- value="<?php echo DUPX_Constants::DEFAULT_MAX_STRLEN_SERIALIZED_CHECK_IN_M; ?>"
280
- min="0" max="99" step="1" size="2"
281
- style="width: 40px;width: 50px; text-align: center;" /> MB
282
- </label>
283
- <br/><br/>
284
- </div>
285
-
286
- <!-- =====================
287
- WP-CONFIG TAB -->
288
- <div id="tabs-wp-config-file">
289
- <div class="help-target">
290
- <?php DUPX_View_Funcs::helpIconLink('step3'); ?>
291
- </div><br/>
292
- <div class="hdr-sub3">WP-Config File</div>
293
- <?php
294
- require_once($GLOBALS['DUPX_INIT'].'/lib/config/class.wp.config.tranformer.php');
295
- $root_path = $GLOBALS['DUPX_ROOT'];
296
- $root_path = $GLOBALS['DUPX_ROOT'];
297
- $wpconfig_ark_path = ($GLOBALS['DUPX_AC']->installSiteOverwriteOn) ? "{$root_path}/dup-wp-config-arc__{$GLOBALS['DUPX_AC']->package_hash}.txt" : "{$root_path}/wp-config.php";
298
-
299
- if (file_exists($wpconfig_ark_path)) {
300
- $config_transformer = new DupLiteWPConfigTransformer($wpconfig_ark_path);
301
- } else {
302
- $config_transformer = null;
303
- }
304
-
305
- ?>
306
- <table class="dupx-opts dupx-advopts">
307
- <?php
308
- if (file_exists($wpconfig_ark_path)) { ?>
309
- <tr>
310
- <td>Cache:</td>
311
- <td>
312
- <?php
313
- $wp_cache_val = false;
314
- if (!is_null($config_transformer) && $config_transformer->exists('constant', 'WP_CACHE')) {
315
- $wp_cache_val = $config_transformer->get_value('constant', 'WP_CACHE');
316
- }
317
- ?>
318
- <input type="checkbox" name="cache_wp" id="cache_wp" <?php DupLiteSnapLibUIU::echoChecked($wp_cache_val);?> /> <label for="cache_wp">Keep Enabled</label>
319
- </td>
320
- </tr>
321
- <tr>
322
- <td></td>
323
- <td>
324
- <?php
325
- $wpcachehome_val = '';
326
- if (!is_null($config_transformer) && $config_transformer->exists('constant', 'WPCACHEHOME')) {
327
- $wpcachehome_val = $config_transformer->get_value('constant', 'WPCACHEHOME');
328
- }
329
- ?>
330
- <input type="checkbox" name="cache_path" id="cache_path" <?php DupLiteSnapLibUIU::echoChecked($wpcachehome_val);?> /> <label for="cache_path">Keep Home Path</label>
331
- <br><br>
332
- </td>
333
- </tr>
334
- <tr>
335
- <td>SSL:</td>
336
- <td>
337
- <?php
338
- $force_ssl_admin_val = false;
339
- if (!is_null($config_transformer) && $config_transformer->exists('constant', 'FORCE_SSL_ADMIN')) {
340
- $force_ssl_admin_val = $config_transformer->get_value('constant', 'FORCE_SSL_ADMIN');
341
- }
342
- ?>
343
- <input type="checkbox" name="ssl_admin" id="ssl_admin" <?php DupLiteSnapLibUIU::echoChecked($force_ssl_admin_val);?> /> <label for="ssl_admin">Enforce on Admin</label>
344
- </td>
345
- </tr>
346
- <?php } else { ?>
347
- <tr>
348
- <td>wp-config.php not found</td>
349
- <td>No action on the wp-config is possible.<br>
350
- After migration, be sure to insert a properly modified wp-config for correct wordpress operation.</td>
351
- </tr>
352
- <?php } ?>
353
- </table><br/>
354
- <i>
355
- Need more control? With <a href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_campaign=duplicator_pro&utm_content=wpconfig" target="_blank">Duplicator Pro</a>
356
- you can change many wp-config settings automatically from this section, without having to manually edit the file.
357
- </i>
358
- </div>
359
- </div>
360
- <!-- END TABS -->
361
- </div>
362
- <br/><br/><br/><br/>
363
-
364
-
365
- <div class="footer-buttons">
366
- <button id="s3-next" type="button" onclick="DUPX.runUpdate()" class="default-btn"> Next <i class="fa fa-caret-right"></i> </button>
367
- </div>
368
- </form>
369
-
370
- <!-- =========================================
371
- VIEW: STEP 3 - AJAX RESULT -->
372
- <form id='s3-result-form' method="post" class="content-form" style="display:none" autocomplete="off">
373
-
374
- <div class="logfile-link"><?php DUPX_View_Funcs::installerLogLink(); ?></div>
375
- <div class="hdr-main">
376
- Step <span class="step">3</span> of 4: Update Data
377
- <div class="sub-header">This step will update the database and config files to match your new sites values.</div>
378
- </div>
379
-
380
- <!-- POST PARAMS -->
381
- <div class="dupx-debug">
382
- <i>Step 3 - AJAX Response</i>
383
- <input type="hidden" name="view" value="step4" />
384
- <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step4'); ?>">
385
- <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
386
- <input type="hidden" name="logging" id="logging" value="<?php echo DUPX_U::esc_attr($_POST['logging']); ?>" />
387
- <input type="hidden" name="url_new" id="ajax-url_new" />
388
- <input type="hidden" name="exe_safe_mode" id="ajax-exe-safe-mode" />
389
- <input type="hidden" name="json" id="ajax-json" />
390
- <input type='submit' value='manual submit'>
391
- </div>
392
-
393
- <!-- PROGRESS BAR -->
394
- <div id="progress-area">
395
- <div style="width:500px; margin:auto">
396
- <div style="font-size:1.7em; margin-bottom:20px"><i class="fas fa-circle-notch fa-spin"></i> Processing Data Replacement</div>
397
- <div id="progress-bar"></div>
398
- <h3> Please Wait...</h3><br/><br/>
399
- <i>Keep this window open during the replacement process.</i><br/>
400
- <i>This can take several minutes.</i>
401
- </div>
402
- </div>
403
-
404
- <!-- AJAX SYSTEM ERROR -->
405
- <div id="ajaxerr-area" style="display:none">
406
- <p>Please try again an issue has occurred.</p>
407
- <div style="padding: 0px 10px 10px 10px;">
408
- <div id="ajaxerr-data">An unknown issue has occurred with the update setup step. Please see the <?php DUPX_View_Funcs::installerLogLink(); ?> file for more details.</div>
409
- <div style="text-align:center; margin:10px auto 0px auto">
410
- <input type="button" onclick='DUPX.hideErrorResult2()' value="&laquo; Try Again" class="default-btn" /><br/><br/>
411
- <i style='font-size:11px'>See online help for more details at <a href='https://snapcreek.com' target='_blank'>snapcreek.com</a></i>
412
- </div>
413
- </div>
414
- </div>
415
- </form>
416
-
417
- <script>
418
- /**
419
- * Timeout (10000000 = 166 minutes) */
420
- DUPX.runUpdate = function()
421
- {
422
- //Validation
423
- var wp_username = $.trim($("#wp_username").val()).length || 0;
424
- var wp_password = $.trim($("#wp_password").val()).length || 0;
425
- var wp_mail = $.trim($("#wp_mail").val()).length || 0;
426
-
427
-
428
- if ( $.trim($("#url_new").val()) == "" ) {alert("The 'New URL' field is required!"); return false;}
429
- if ( $.trim($("#siteurl").val()) == "" ) {alert("The 'Site URL' field is required!"); return false;}
430
-
431
- if (wp_username >= 1) {
432
- if (wp_username < 4) {
433
- alert("The New Admin Account 'Username' must be four or more characters");
434
- return false;
435
- } else if (wp_password < 6) {
436
- alert("The New Admin Account 'Password' must be six or more characters");
437
- return false;
438
- } else if (wp_mail === 0) {
439
- alert("The New Admin Account 'mail' is required");
440
- return false;
441
- }
442
- }
443
-
444
- var nonHttp = false;
445
- var failureText = '';
446
-
447
- /* IMPORTANT - not trimming the value for good - just in the check */
448
- $('input[name="search[]"]').each(function() {
449
- var val = $(this).val();
450
-
451
- if(val.trim() != "") {
452
- if(val.length < 3) {
453
- failureText = "Custom search fields must be at least three characters.";
454
- }
455
-
456
- if(val.toLowerCase().indexOf('http') != 0) {
457
- nonHttp = true;
458
- }
459
- }
460
- });
461
-
462
- $('input[name="replace[]"]').each(function() {
463
- var val = $(this).val();
464
- if(val.trim() != "") {
465
- // Replace fields can be anything
466
- if(val.toLowerCase().indexOf('http') != 0) {
467
- nonHttp = true;
468
- }
469
- }
470
- });
471
-
472
- if(failureText != '') {
473
- alert(failureText);
474
- return false;
475
- }
476
-
477
- if(nonHttp) {
478
- if(confirm('One or more custom search and replace strings are not URLs. Are you sure you want to continue?') == false) {
479
- return false;
480
- }
481
- }
482
-
483
- $.ajax({
484
- type: "POST",
485
- timeout: 10000000,
486
- url: window.location.href,
487
- data: $('#s3-input-form').serialize(),
488
- beforeSend: function() {
489
- DUPX.showProgressBar();
490
- $('#s3-input-form').hide();
491
- $('#s3-result-form').show();
492
- },
493
- success: function(respData, textStatus, xHr){
494
- try {
495
- var data = DUPX.parseJSON(respData);
496
- } catch(err) {
497
- console.error(err);
498
- console.error('JSON parse failed for response data: ' + respData);
499
- var status = "<b>Server Code:</b> " + xHr.status + "<br/>";
500
- status += "<b>Status:</b> " + textStatus + "<br/>";
501
- status += "<b>Response:</b> " + xHr.responseText + "<hr/>";
502
- status += "<b>Additional Troubleshooting Tips:</b><br/>";
503
- status += "- Check the <a href='./<?php echo DUPX_U::esc_attr($GLOBALS["LOG_FILE_NAME"]);?>' target='dup-installer'>dup-installer-log.txt</a> file for warnings or errors.<br/>";
504
- status += "- Check the web server and PHP error logs. <br/>";
505
- status += "- For timeout issues visit the <a href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-100-q' target='_blank'>Timeout FAQ Section</a><br/>";
506
- $('#ajaxerr-data').html(status);
507
- DUPX.hideProgressBar();
508
- return false;
509
- }
510
- if (typeof(data) != 'undefined' && data.step3.pass == 1) {
511
- $("#ajax-url_new").val($("#url_new").val());
512
- $("#ajax-exe-safe-mode").val($("#exe-safe-mode").val());
513
- $("#ajax-json").val(escape(JSON.stringify(data)));
514
- <?php if (!DUPX_Log::isLevel(DUPX_Log::LV_DEBUG)) : ?>
515
- setTimeout(function(){$('#s3-result-form').submit();}, 1000);
516
- <?php endif; ?>
517
- $('#progress-area').fadeOut(1800);
518
- } else {
519
- DUPX.hideProgressBar();
520
- }
521
- },
522
- error: function(xhr) {
523
- var status = "<b>Server Code:</b> " + xhr.status + "<br/>";
524
- status += "<b>Status:</b> " + xhr.statusText + "<br/>";
525
- status += "<b>Response:</b> " + xhr.responseText + "<hr/>";
526
- status += "<b>Additional Troubleshooting Tips:</b><br/>";
527
- status += "- Check the <a href='./<?php echo DUPX_U::esc_attr($GLOBALS["LOG_FILE_NAME"]);?>' target='dup-installer'>dup-installer-log.txt</a> file for warnings or errors.<br/>";
528
- status += "- Check the web server and PHP error logs. <br/>";
529
- status += "- For timeout issues visit the <a href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-100-q' target='_blank'>Timeout FAQ Section</a><br/>";
530
- $('#ajaxerr-data').html(status);
531
- DUPX.hideProgressBar();
532
- }
533
- });
534
- };
535
-
536
- /**
537
- * Returns the windows active url */
538
- DUPX.getNewURL = function(id)
539
- {
540
- var filename = window.location.pathname.split('/').pop() || 'main.installer.php' ;
541
- var newVal = window.location.href.split("?")[0];
542
- newVal = newVal.replace("/" + filename, '');
543
- var last_slash = newVal.lastIndexOf("/");
544
- newVal = newVal.substring(0, last_slash);
545
-
546
- $("#" + id).val(newVal);
547
- };
548
-
549
- /**
550
- * Allows user to edit the package url */
551
- DUPX.editOldURL = function()
552
- {
553
- var msg = 'This is the URL that was generated when the package was created.\n';
554
- msg += 'Changing this value may cause issues with the install process.\n\n';
555
- msg += 'Only modify this value if you know exactly what the value should be.\n';
556
- msg += 'See "General Settings" in the WordPress Administrator for more details.\n\n';
557
- msg += 'Are you sure you want to continue?';
558
-
559
- if (confirm(msg)) {
560
- $("#url_old").removeAttr('readonly');
561
- $("#url_old").removeClass('readonly');
562
- $('#edit_url_old').hide('slow');
563
- }
564
- };
565
-
566
- /**
567
- * Allows user to edit the package path */
568
- DUPX.editOldPath = function()
569
- {
570
- var msg = 'This is the SERVER URL that was generated when the package was created.\n';
571
- msg += 'Changing this value may cause issues with the install process.\n\n';
572
- msg += 'Only modify this value if you know exactly what the value should be.\n';
573
- msg += 'Are you sure you want to continue?';
574
-
575
- if (confirm(msg)) {
576
- $("#path_old").removeAttr('readonly');
577
- $("#path_old").removeClass('readonly');
578
- $('#edit_path_old').hide('slow');
579
- }
580
- };
581
-
582
-
583
-
584
- /**
585
- * Go back on AJAX result view */
586
- DUPX.hideErrorResult2 = function()
587
- {
588
- $('#s3-result-form').hide();
589
- $('#s3-input-form').show(200);
590
- };
591
-
592
- //DOCUMENT LOAD
593
- $(document).ready(function()
594
- {
595
- setTimeout(function() {
596
- $('#wp_username').val('');
597
- $('#wp_password').val('');
598
- }, 900);
599
- $("#tabs").tabs();
600
- DUPX.getNewURL('url_new');
601
- DUPX.getNewURL('siteurl');
602
- DUPX.initToggle();
603
- $("#wp_password").passStrength({
604
- shortPass: "top_shortPass",
605
- badPass: "top_badPass",
606
- goodPass: "top_goodPass",
607
- strongPass: "top_strongPass",
608
- baseStyle: "top_testresult",
609
- userid: "#wp_username",
610
- messageloc: 1
611
- });
612
- });
613
- </script>
 
 
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+ /** IDE HELPERS */
4
+ /* @var $GLOBALS['DUPX_AC'] DUPX_ArchiveConfig */
5
+
6
+ //-- START OF VIEW STEP 3
7
+ $_POST['dbaction'] = isset($_POST['dbaction']) ? DUPX_U::sanitize_text_field($_POST['dbaction']) : 'create';
8
+
9
+ if (isset($_POST['dbhost'])) {
10
+ $post_db_host = DUPX_U::sanitize_text_field($_POST['dbhost']);
11
+ $_POST['dbhost'] = trim($post_db_host);
12
+ } else {
13
+ $_POST['dbhost'] = null;
14
+ }
15
+
16
+ if (isset($_POST['dbname'])) {
17
+ $post_db_name = DUPX_U::sanitize_text_field($_POST['dbname']);
18
+ $_POST['dbname'] = trim($post_db_name);
19
+ } else {
20
+ $_POST['dbname'] = null;
21
+ }
22
+
23
+ if (isset($_POST['dbuser'])) {
24
+ $post_db_user = DUPX_U::sanitize_text_field($_POST['dbuser']);
25
+ $_POST['dbuser'] = trim($post_db_user);
26
+ } else {
27
+ $_POST['dbuser'] = null;
28
+ }
29
+
30
+ if (isset($_POST['dbpass'])) {
31
+ $_POST['dbpass'] = $_POST['dbpass'];
32
+ } else {
33
+ $_POST['dbpass'] = null;
34
+ }
35
+
36
+ if (isset($_POST['dbhost'])) {
37
+ $post_db_host = DUPX_U::sanitize_text_field($_POST['dbhost']);
38
+ $_POST['dbport'] = parse_url($post_db_host, PHP_URL_PORT);
39
+ } else {
40
+ $_POST['dbport'] = 3306;
41
+ }
42
+
43
+ if (!empty($_POST['dbport'])) {
44
+ $_POST['dbport'] = DUPX_U::sanitize_text_field($_POST['dbport']);
45
+ } else {
46
+ $_POST['dbport'] = 3306;
47
+ }
48
+
49
+ $_POST['exe_safe_mode'] = isset($_POST['exe_safe_mode']) ? DUPX_U::sanitize_text_field($_POST['exe_safe_mode']) : 0;
50
+
51
+ $dbh = DUPX_DB::connect($_POST['dbhost'], $_POST['dbuser'], $_POST['dbpass'], $_POST['dbname'], $_POST['dbport']);
52
+
53
+ $all_tables = DUPX_DB::getTables($dbh);
54
+ $active_plugins = DUPX_U::getActivePlugins($dbh);
55
+ $old_path = $GLOBALS['DUPX_AC']->wproot;
56
+
57
+ // RSR TODO: need to do the path too?
58
+ $new_path = $GLOBALS['DUPX_ROOT'];
59
+ $new_path = ((strrpos($old_path, '/') + 1) == strlen($old_path)) ? DUPX_U::addSlash($new_path) : $new_path;
60
+ $empty_schedule_display = (DUPX_U::$on_php_53_plus) ? 'table-row' : 'none';
61
+ ?>
62
+
63
+ <!-- =========================================
64
+ VIEW: STEP 3- INPUT -->
65
+ <form id='s3-input-form' method="post" class="content-form" autocomplete="off">
66
+
67
+ <div class="logfile-link">
68
+ <?php DUPX_View_Funcs::installerLogLink(); ?>
69
+ </div>
70
+ <div class="hdr-main">
71
+ Step <span class="step">3</span> of 4: Update Data
72
+ <div class="sub-header">This step will update the database and config files to match your new sites values.</div>
73
+ </div>
74
+
75
+ <?php
76
+ if ($_POST['dbaction'] == 'manual') {
77
+ echo '<div class="dupx-notice s3-manaual-msg">Manual SQL execution is enabled</div>';
78
+ }
79
+ ?>
80
+
81
+ <!-- POST PARAMS -->
82
+ <div class="dupx-debug">
83
+ <i>Step 3 - Page Load</i>
84
+ <input type="hidden" name="ctrl_action" value="ctrl-step3" />
85
+ <input type="hidden" name="ctrl_csrf_token" value="<?php echo DUPX_CSRF::generate('ctrl-step3'); ?>">
86
+ <input type="hidden" name="view" value="step3" />
87
+ <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step3'); ?>">
88
+ <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
89
+ <input type="hidden" name="secure-archive" value="<?php echo DUPX_U::esc_attr($_POST['secure-archive']); ?>" />
90
+ <input type="hidden" name="logging" value="<?php echo DUPX_U::esc_attr($_POST['logging']); ?>" />
91
+ <input type="hidden" name="dbhost" value="<?php echo DUPX_U::esc_attr($_POST['dbhost']); ?>" />
92
+ <input type="hidden" name="dbuser" value="<?php echo DUPX_U::esc_attr($_POST['dbuser']); ?>" />
93
+ <input type="hidden" name="dbpass" value="<?php echo DUPX_U::esc_attr($_POST['dbpass']); ?>" />
94
+ <input type="hidden" name="dbname" value="<?php echo DUPX_U::esc_attr($_POST['dbname']); ?>" />
95
+ <input type="hidden" name="dbcharset" value="<?php echo DUPX_U::esc_attr($_POST['dbcharset']); ?>" />
96
+ <input type="hidden" name="dbcollate" value="<?php echo DUPX_U::esc_attr($_POST['dbcollate']); ?>" />
97
+ <input type="hidden" name="config_mode" value="<?php echo DUPX_U::esc_attr($_POST['config_mode']); ?>" />
98
+ <input type="hidden" name="exe_safe_mode" id="exe-safe-mode" value="<?php echo DUPX_U::esc_attr($_POST['exe_safe_mode']); ?>" />
99
+ <input type="hidden" name="json" value="<?php echo DUPX_U::esc_attr($_POST['json']); ?>" />
100
+ </div>
101
+
102
+ <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s3-new-settings">
103
+ <a href="javascript:void(0)"><i class="fa fa-minus-square"></i>Setup</a>
104
+ </div>
105
+ <div id="s3-new-settings">
106
+ <table class="s3-opts">
107
+ <tr>
108
+ <td>Title:</td>
109
+ <td><input type="text" name="blogname" id="blogname" value="<?php echo DUPX_U::esc_attr($GLOBALS['DUPX_AC']->blogname); ?>" /></td>
110
+ </tr>
111
+ <tr>
112
+ <td>URL:</td>
113
+ <td>
114
+ <input type="text" name="url_new" id="url_new" value="" />
115
+ <a href="javascript:DUPX.getNewURL('url_new')" style="font-size:12px">get</a>
116
+ </td>
117
+ </tr>
118
+ <tr>
119
+ <td>Path:</td>
120
+ <td><input type="text" name="path_new" id="path_new" value="<?php echo DUPX_U::esc_attr($new_path); ?>" /></td>
121
+ </tr>
122
+ </table>
123
+ </div>
124
+ <br/>
125
+
126
+ <!-- =========================
127
+ SEARCH AND REPLACE -->
128
+ <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s3-custom-replace">
129
+ <a href="javascript:void(0)"><i class="fa fa-plus-square"></i>Replace</a>
130
+ </div>
131
+
132
+ <div id="s3-custom-replace" class="hdr-sub1-area" style="display:none; text-align: center">
133
+ <div class="help-target">
134
+ <?php DUPX_View_Funcs::helpIconLink('step3'); ?>
135
+ </div><br/>
136
+ Add additional search and replace URLs to replace additional data.<br/>
137
+ This option is available only in
138
+ <a href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_campaign=duplicator_pro&utm_content=free_inst_replaceopts">Duplicator Pro</a>
139
+ </div>
140
+ <br/>
141
+
142
+ <!-- ==========================
143
+ OPTIONS -->
144
+ <div class="hdr-sub1 toggle-hdr" data-type="toggle" data-target="#s3-adv-opts">
145
+ <a href="javascript:void(0)"><i class="fa fa-plus-square"></i>Options</a>
146
+ </div>
147
+ <div id="s3-adv-opts" class="hdr-sub1-area" style="display:none;">
148
+
149
+ <!-- START TABS -->
150
+ <div id="tabs">
151
+ <ul>
152
+ <li><a href="#tabs-admin-account">Admin Account</a></li>
153
+ <li><a href="#tabs-scan-options">Scan Options</a></li>
154
+ <li><a href="#tabs-wp-config-file">WP-Config File</a></li>
155
+ </ul>
156
+
157
+ <!-- =====================
158
+ ADMIN TAB -->
159
+ <div id="tabs-admin-account">
160
+ <div class="help-target">
161
+ <?php DUPX_View_Funcs::helpIconLink('step3'); ?>
162
+ </div><br/>
163
+
164
+ <div class="hdr-sub3">New Admin Account</div>
165
+ <div style="text-align: center">
166
+ <i style="color:gray;font-size: 11px">This feature is optional. If the username already exists the account will NOT be created or updated.</i>
167
+ </div>
168
+
169
+ <table class="s3-opts" style="margin-top:7px">
170
+ <tr>
171
+ <td>Username:</td>
172
+ <td><input type="text" name="wp_username" id="wp_username" value="" title="4 characters minimum" placeholder="(4 or more characters)" /></td>
173
+ </tr>
174
+ <tr>
175
+ <td>Password:</td>
176
+ <td>
177
+ <?php
178
+ DUPX_U_Html::inputPasswordToggle('wp_password', 'wp_password', array(),
179
+ array(
180
+ 'placeholder' => '(6 or more characters)',
181
+ 'title' => '6 characters minimum'
182
+ ));
183
+ ?>
184
+ </tr>
185
+ <tr>
186
+ <td>Email:</td>
187
+ <td><input type="text" name="wp_mail" id="wp_mail" value="" title="" placeholder="" /></td>
188
+ </tr>
189
+ <tr>
190
+ <td>Nickname:</td>
191
+ <td><input type="text" name="wp_nickname" id="wp_nickname" value="" title="if username is empty" placeholder="(if username is empty)" /></td>
192
+ </tr>
193
+ <tr>
194
+ <td>First name:</td>
195
+ <td><input type="text" name="wp_first_name" id="wp_first_name" value="" title="optional" placeholder="(optional)" /></td>
196
+ </tr>
197
+ <tr>
198
+ <td>Last name:</td>
199
+ <td><input type="text" name="wp_last_name" id="wp_last_name" value="" title="optional" placeholder="(optional)" /></td>
200
+ </tr>
201
+ </table>
202
+ <br/><br/>
203
+ </div>
204
+
205
+ <!-- =====================
206
+ SCAN TAB -->
207
+ <div id="tabs-scan-options">
208
+ <div class="help-target">
209
+ <?php DUPX_View_Funcs::helpIconLink('step3'); ?>
210
+ </div><br/>
211
+ <div class="hdr-sub3">Database Scan Options</div>
212
+ <table class="s3-opts">
213
+ <tr>
214
+ <td style="width:105px">Site URL:</td>
215
+ <td style="white-space: nowrap">
216
+ <input type="text" name="siteurl" id="siteurl" value="" />
217
+ <a href="javascript:DUPX.getNewURL('siteurl')" style="font-size:12px">get</a><br/>
218
+ </td>
219
+ </tr>
220
+ <tr valign="top">
221
+ <td style="width:80px">Old URL:</td>
222
+ <td>
223
+ <input type="text" name="url_old" id="url_old" value="<?php echo DUPX_U::esc_attr($GLOBALS['DUPX_AC']->url_old); ?>" readonly="readonly" class="readonly" />
224
+ <a href="javascript:DUPX.editOldURL()" id="edit_url_old" style="font-size:12px">edit</a>
225
+ </td>
226
+ </tr>
227
+ <tr valign="top">
228
+ <td>Old Path:</td>
229
+ <td>
230
+ <input type="text" name="path_old" id="path_old" value="<?php echo DUPX_U::esc_attr($old_path); ?>" readonly="readonly" class="readonly" />
231
+ <a href="javascript:DUPX.editOldPath()" id="edit_path_old" style="font-size:12px">edit</a>
232
+ </td>
233
+ </tr>
234
+ </table><br/>
235
+
236
+ <table>
237
+ <tr>
238
+ <td style="padding-right:10px">
239
+ <b>Scan Tables:</b>
240
+ <div class="s3-allnonelinks">
241
+ <a href="javascript:void(0)" onclick="$('#tables option').prop('selected',true);">[All]</a>
242
+ <a href="javascript:void(0)" onclick="$('#tables option').prop('selected',false);">[None]</a>
243
+ </div><br style="clear:both" />
244
+ <select id="tables" name="tables[]" multiple="multiple" style="width:315px;" size="10">
245
+ <?php
246
+ foreach( $all_tables as $table ) {
247
+ echo '<option selected="selected" value="' . DUPX_U::esc_attr( $table ) . '">' . DUPX_U::esc_html($table) . '</option>';
248
+ }
249
+ ?>
250
+ </select>
251
+
252
+ </td>
253
+ <td valign="top">
254
+ <b>Activate Plugins:</b>
255
+ <?php echo ($_POST['exe_safe_mode'] > 0) ? '<small class="s3-warn">Safe Mode Enabled</small>' : '' ; ?>
256
+ <div class="s3-allnonelinks" style="<?php echo ($_POST['exe_safe_mode']>0)? 'display:none':''; ?>">
257
+ <a href="javascript:void(0)" onclick="$('#plugins option').prop('selected',true);">[All]</a>
258
+ <a href="javascript:void(0)" onclick="$('#plugins option').prop('selected',false);">[None]</a>
259
+ </div><br style="clear:both" />
260
+ <select id="plugins" name="plugins[]" multiple="multiple" style="width:315px;" <?php echo ($_POST['exe_safe_mode'] > 0) ? 'disabled="true"' : ''; ?> size="10">
261
+ <?php
262
+ $selected_string = 'selected="selected"';
263
+ foreach ($active_plugins as $plugin) {
264
+ $label = dirname($plugin) == '.' ? $plugin : dirname($plugin);
265
+ echo "<option {$selected_string} value='" . DUPX_U::esc_attr( $plugin ) . "'>" . DUPX_U::esc_html($label) . '</option>';
266
+ }
267
+ ?>
268
+ </select>
269
+ </td>
270
+ </tr>
271
+ </table>
272
+ <br/>
273
+ <input type="checkbox" name="search_replace_email_domain" id="search_replace_email_domain" value="1" /> <label for="search_replace_email_domain">Update email domains</label><br/>
274
+ <input type="checkbox" name="fullsearch" id="fullsearch" value="1" /> <label for="fullsearch">Use Database Full Search Mode</label><br/>
275
+ <input type="checkbox" name="postguid" id="postguid" value="1" /> <label for="postguid">Keep Post GUID Unchanged</label><br/>
276
+ <label>
277
+ <B>Max size check for serialize objects:</b>
278
+ <input type="number"
279
+ name="<?php echo DUPX_CTRL::NAME_MAX_SERIALIZE_STRLEN_IN_M; ?>"
280
+ value="<?php echo DUPX_Constants::DEFAULT_MAX_STRLEN_SERIALIZED_CHECK_IN_M; ?>"
281
+ min="0" max="99" step="1" size="2"
282
+ style="width: 40px;width: 50px; text-align: center;" /> MB
283
+ </label>
284
+ <br/><br/>
285
+ </div>
286
+
287
+ <!-- =====================
288
+ WP-CONFIG TAB -->
289
+ <div id="tabs-wp-config-file">
290
+ <div class="help-target">
291
+ <?php DUPX_View_Funcs::helpIconLink('step3'); ?>
292
+ </div><br/>
293
+ <div class="hdr-sub3">WP-Config File</div>
294
+ <?php
295
+ require_once($GLOBALS['DUPX_INIT'].'/lib/config/class.wp.config.tranformer.php');
296
+ $root_path = $GLOBALS['DUPX_ROOT'];
297
+ $root_path = $GLOBALS['DUPX_ROOT'];
298
+ $wpconfig_ark_path = ($GLOBALS['DUPX_AC']->installSiteOverwriteOn) ? "{$root_path}/dup-wp-config-arc__{$GLOBALS['DUPX_AC']->package_hash}.txt" : "{$root_path}/wp-config.php";
299
+
300
+ if (file_exists($wpconfig_ark_path)) {
301
+ $config_transformer = new DupLiteWPConfigTransformer($wpconfig_ark_path);
302
+ } else {
303
+ $config_transformer = null;
304
+ }
305
+
306
+ ?>
307
+ <table class="dupx-opts dupx-advopts">
308
+ <?php
309
+ if (file_exists($wpconfig_ark_path)) { ?>
310
+ <tr>
311
+ <td>Cache:</td>
312
+ <td>
313
+ <?php
314
+ $wp_cache_val = false;
315
+ if (!is_null($config_transformer) && $config_transformer->exists('constant', 'WP_CACHE')) {
316
+ $wp_cache_val = $config_transformer->get_value('constant', 'WP_CACHE');
317
+ }
318
+ ?>
319
+ <input type="checkbox" name="cache_wp" id="cache_wp" <?php DupLiteSnapLibUIU::echoChecked($wp_cache_val);?> /> <label for="cache_wp">Keep Enabled</label>
320
+ </td>
321
+ </tr>
322
+ <tr>
323
+ <td></td>
324
+ <td>
325
+ <?php
326
+ $wpcachehome_val = '';
327
+ if (!is_null($config_transformer) && $config_transformer->exists('constant', 'WPCACHEHOME')) {
328
+ $wpcachehome_val = $config_transformer->get_value('constant', 'WPCACHEHOME');
329
+ }
330
+ ?>
331
+ <input type="checkbox" name="cache_path" id="cache_path" <?php DupLiteSnapLibUIU::echoChecked($wpcachehome_val);?> /> <label for="cache_path">Keep Home Path</label>
332
+ <br><br>
333
+ </td>
334
+ </tr>
335
+ <tr>
336
+ <td>SSL:</td>
337
+ <td>
338
+ <?php
339
+ $force_ssl_admin_val = false;
340
+ if (!is_null($config_transformer) && $config_transformer->exists('constant', 'FORCE_SSL_ADMIN')) {
341
+ $force_ssl_admin_val = $config_transformer->get_value('constant', 'FORCE_SSL_ADMIN');
342
+ }
343
+ ?>
344
+ <input type="checkbox" name="ssl_admin" id="ssl_admin" <?php DupLiteSnapLibUIU::echoChecked($force_ssl_admin_val);?> /> <label for="ssl_admin">Enforce on Admin</label>
345
+ </td>
346
+ </tr>
347
+ <?php } else { ?>
348
+ <tr>
349
+ <td>wp-config.php not found</td>
350
+ <td>No action on the wp-config is possible.<br>
351
+ After migration, be sure to insert a properly modified wp-config for correct wordpress operation.</td>
352
+ </tr>
353
+ <?php } ?>
354
+ </table><br/>
355
+ <i>
356
+ Need more control? With <a href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_campaign=duplicator_pro&utm_content=wpconfig" target="_blank">Duplicator Pro</a>
357
+ you can change many wp-config settings automatically from this section, without having to manually edit the file.
358
+ </i>
359
+ </div>
360
+ </div>
361
+ <!-- END TABS -->
362
+ </div>
363
+ <br/><br/><br/><br/>
364
+
365
+
366
+ <div class="footer-buttons">
367
+ <button id="s3-next" type="button" onclick="DUPX.runUpdate()" class="default-btn"> Next <i class="fa fa-caret-right"></i> </button>
368
+ </div>
369
+ </form>
370
+
371
+ <!-- =========================================
372
+ VIEW: STEP 3 - AJAX RESULT -->
373
+ <form id='s3-result-form' method="post" class="content-form" style="display:none" autocomplete="off">
374
+
375
+ <div class="logfile-link"><?php DUPX_View_Funcs::installerLogLink(); ?></div>
376
+ <div class="hdr-main">
377
+ Step <span class="step">3</span> of 4: Update Data
378
+ <div class="sub-header">This step will update the database and config files to match your new sites values.</div>
379
+ </div>
380
+
381
+ <!-- POST PARAMS -->
382
+ <div class="dupx-debug">
383
+ <i>Step 3 - AJAX Response</i>
384
+ <input type="hidden" name="view" value="step4" />
385
+ <input type="hidden" name="csrf_token" value="<?php echo DUPX_CSRF::generate('step4'); ?>">
386
+ <input type="hidden" name="secure-pass" value="<?php echo DUPX_U::esc_attr($_POST['secure-pass']); ?>" />
387
+ <input type="hidden" name="secure-archive" value="<?php echo DUPX_U::esc_attr($_POST['secure-archive']); ?>" />
388
+ <input type="hidden" name="logging" id="logging" value="<?php echo DUPX_U::esc_attr($_POST['logging']); ?>" />
389
+ <input type="hidden" name="url_new" id="ajax-url_new" />
390
+ <input type="hidden" name="exe_safe_mode" id="ajax-exe-safe-mode" />
391
+ <input type="hidden" name="json" id="ajax-json" />
392
+ <input type='submit' value='manual submit'>
393
+ </div>
394
+
395
+ <!-- PROGRESS BAR -->
396
+ <div id="progress-area">
397
+ <div style="width:500px; margin:auto">
398
+ <div style="font-size:1.7em; margin-bottom:20px"><i class="fas fa-circle-notch fa-spin"></i> Processing Data Replacement</div>
399
+ <div id="progress-bar"></div>
400
+ <h3> Please Wait...</h3><br/><br/>
401
+ <i>Keep this window open during the replacement process.</i><br/>
402
+ <i>This can take several minutes.</i>
403
+ </div>
404
+ </div>
405
+
406
+ <!-- AJAX SYSTEM ERROR -->
407
+ <div id="ajaxerr-area" style="display:none">
408
+ <p>Please try again an issue has occurred.</p>
409
+ <div style="padding: 0px 10px 10px 10px;">
410
+ <div id="ajaxerr-data">An unknown issue has occurred with the update setup step. Please see the <?php DUPX_View_Funcs::installerLogLink(); ?> file for more details.</div>
411
+ <div style="text-align:center; margin:10px auto 0px auto">
412
+ <input type="button" onclick='DUPX.hideErrorResult2()' value="&laquo; Try Again" class="default-btn" /><br/><br/>
413
+ <i style='font-size:11px'>See online help for more details at <a href='https://snapcreek.com' target='_blank'>snapcreek.com</a></i>
414
+ </div>
415
+ </div>
416
+ </div>
417
+ </form>
418
+
419
+ <script>
420
+ /**
421
+ * Timeout (10000000 = 166 minutes) */
422
+ DUPX.runUpdate = function()
423
+ {
424
+ //Validation
425
+ var wp_username = $.trim($("#wp_username").val()).length || 0;
426
+ var wp_password = $.trim($("#wp_password").val()).length || 0;
427
+ var wp_mail = $.trim($("#wp_mail").val()).length || 0;
428
+
429
+
430
+ if ( $.trim($("#url_new").val()) == "" ) {alert("The 'New URL' field is required!"); return false;}
431
+ if ( $.trim($("#siteurl").val()) == "" ) {alert("The 'Site URL' field is required!"); return false;}
432
+
433
+ if (wp_username >= 1) {
434
+ if (wp_username < 4) {
435
+ alert("The New Admin Account 'Username' must be four or more characters");
436
+ return false;
437
+ } else if (wp_password < 6) {
438
+ alert("The New Admin Account 'Password' must be six or more characters");
439
+ return false;
440
+ } else if (wp_mail === 0) {
441
+ alert("The New Admin Account 'mail' is required");
442
+ return false;
443
+ }
444
+ }
445
+
446
+ var nonHttp = false;
447
+ var failureText = '';
448
+
449
+ /* IMPORTANT - not trimming the value for good - just in the check */
450
+ $('input[name="search[]"]').each(function() {
451
+ var val = $(this).val();
452
+
453
+ if(val.trim() != "") {
454
+ if(val.length < 3) {
455
+ failureText = "Custom search fields must be at least three characters.";
456
+ }
457
+
458
+ if(val.toLowerCase().indexOf('http') != 0) {
459
+ nonHttp = true;
460
+ }
461
+ }
462
+ });
463
+
464
+ $('input[name="replace[]"]').each(function() {
465
+ var val = $(this).val();
466
+ if(val.trim() != "") {
467
+ // Replace fields can be anything
468
+ if(val.toLowerCase().indexOf('http') != 0) {
469
+ nonHttp = true;
470
+ }
471
+ }
472
+ });
473
+
474
+ if(failureText != '') {
475
+ alert(failureText);
476
+ return false;
477
+ }
478
+
479
+ if(nonHttp) {
480
+ if(confirm('One or more custom search and replace strings are not URLs. Are you sure you want to continue?') == false) {
481
+ return false;
482
+ }
483
+ }
484
+
485
+ $.ajax({
486
+ type: "POST",
487
+ timeout: 10000000,
488
+ url: window.location.href,
489
+ data: $('#s3-input-form').serialize(),
490
+ beforeSend: function() {
491
+ DUPX.showProgressBar();
492
+ $('#s3-input-form').hide();
493
+ $('#s3-result-form').show();
494
+ },
495
+ success: function(respData, textStatus, xHr){
496
+ try {
497
+ var data = DUPX.parseJSON(respData);
498
+ } catch(err) {
499
+ console.error(err);
500
+ console.error('JSON parse failed for response data: ' + respData);
501
+ var status = "<b>Server Code:</b> " + xHr.status + "<br/>";
502
+ status += "<b>Status:</b> " + textStatus + "<br/>";
503
+ status += "<b>Response:</b> " + xHr.responseText + "<hr/>";
504
+ status += "<b>Additional Troubleshooting Tips:</b><br/>";
505
+ status += "- Check the <a href='./<?php echo DUPX_U::esc_attr($GLOBALS["LOG_FILE_NAME"]);?>' target='dup-installer'>dup-installer-log.txt</a> file for warnings or errors.<br/>";
506
+ status += "- Check the web server and PHP error logs. <br/>";
507
+ status += "- For timeout issues visit the <a href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-100-q' target='_blank'>Timeout FAQ Section</a><br/>";
508
+ $('#ajaxerr-data').html(status);
509
+ DUPX.hideProgressBar();
510
+ return false;
511
+ }
512
+ if (typeof(data) != 'undefined' && data.step3.pass == 1) {
513
+ $("#ajax-url_new").val($("#url_new").val());
514
+ $("#ajax-exe-safe-mode").val($("#exe-safe-mode").val());
515
+ $("#ajax-json").val(escape(JSON.stringify(data)));
516
+ <?php if (!DUPX_Log::isLevel(DUPX_Log::LV_DEBUG)) : ?>
517
+ setTimeout(function(){$('#s3-result-form').submit();}, 1000);
518
+ <?php endif; ?>
519
+ $('#progress-area').fadeOut(1800);
520
+ } else {
521
+ DUPX.hideProgressBar();
522
+ }
523
+ },
524
+ error: function(xhr) {
525
+ var status = "<b>Server Code:</b> " + xhr.status + "<br/>";
526
+ status += "<b>Status:</b> " + xhr.statusText + "<br/>";
527
+ status += "<b>Response:</b> " + xhr.responseText + "<hr/>";
528
+ status += "<b>Additional Troubleshooting Tips:</b><br/>";
529
+ status += "- Check the <a href='./<?php echo DUPX_U::esc_attr($GLOBALS["LOG_FILE_NAME"]);?>' target='dup-installer'>dup-installer-log.txt</a> file for warnings or errors.<br/>";
530
+ status += "- Check the web server and PHP error logs. <br/>";
531
+ status += "- For timeout issues visit the <a href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-100-q' target='_blank'>Timeout FAQ Section</a><br/>";
532
+ $('#ajaxerr-data').html(status);
533
+ DUPX.hideProgressBar();
534
+ }
535
+ });
536
+ };
537
+
538
+ /**
539
+ * Returns the windows active url */
540
+ DUPX.getNewURL = function(id)
541
+ {
542
+ var filename = window.location.pathname.split('/').pop() || 'main.installer.php' ;
543
+ var newVal = window.location.href.split("?")[0];
544
+ newVal = newVal.replace("/" + filename, '');
545
+ var last_slash = newVal.lastIndexOf("/");
546
+ newVal = newVal.substring(0, last_slash);
547
+
548
+ $("#" + id).val(newVal);
549
+ };
550
+
551
+ /**
552
+ * Allows user to edit the package url */
553
+ DUPX.editOldURL = function()
554
+ {
555
+ var msg = 'This is the URL that was generated when the package was created.\n';
556
+ msg += 'Changing this value may cause issues with the install process.\n\n';
557
+ msg += 'Only modify this value if you know exactly what the value should be.\n';
558
+ msg += 'See "General Settings" in the WordPress Administrator for more details.\n\n';
559
+ msg += 'Are you sure you want to continue?';
560
+
561
+ if (confirm(msg)) {
562
+ $("#url_old").removeAttr('readonly');
563
+ $("#url_old").removeClass('readonly');
564
+ $('#edit_url_old').hide('slow');
565
+ }
566
+ };
567
+
568
+ /**
569
+ * Allows user to edit the package path */
570
+ DUPX.editOldPath = function()
571
+ {
572
+ var msg = 'This is the SERVER URL that was generated when the package was created.\n';
573
+ msg += 'Changing this value may cause issues with the install process.\n\n';
574
+ msg += 'Only modify this value if you know exactly what the value should be.\n';
575
+ msg += 'Are you sure you want to continue?';
576
+
577
+ if (confirm(msg)) {
578
+ $("#path_old").removeAttr('readonly');
579
+ $("#path_old").removeClass('readonly');
580
+ $('#edit_path_old').hide('slow');
581
+ }
582
+ };
583
+
584
+
585
+
586
+ /**
587
+ * Go back on AJAX result view */
588
+ DUPX.hideErrorResult2 = function()
589
+ {
590
+ $('#s3-result-form').hide();
591
+ $('#s3-input-form').show(200);
592
+ };
593
+
594
+ //DOCUMENT LOAD
595
+ $(document).ready(function()
596
+ {
597
+ setTimeout(function() {
598
+ $('#wp_username').val('');
599
+ $('#wp_password').val('');
600
+ }, 900);
601
+ $("#tabs").tabs();
602
+ DUPX.getNewURL('url_new');
603
+ DUPX.getNewURL('siteurl');
604
+ DUPX.initToggle();
605
+ $("#wp_password").passStrength({
606
+ shortPass: "top_shortPass",
607
+ badPass: "top_badPass",
608
+ goodPass: "top_goodPass",
609
+ strongPass: "top_strongPass",
610
+ baseStyle: "top_testresult",
611
+ userid: "#wp_username",
612
+ messageloc: 1
613
+ });
614
+ });
615
+ </script>
readme.txt CHANGED
@@ -4,16 +4,16 @@ Tags: migration, backup, duplicate, move, migrate, restore, transfer, clone, aut
4
  Requires at least: 4.0
5
  Tested up to: 5.8
6
  Requires PHP: 5.3.8
7
- Stable tag: 1.4.2
8
  License: GPLv2
9
 
10
- WordPress migration and backups are much easier with Duplicator! Clone, backup, move and transfer an entire site from one location to another.
11
 
12
  == Description ==
13
 
14
  > With over **25 million downloads** Duplicator successfully gives WordPress users the ability to migrate, copy, move or clone a site from one location to another and also serves as a simple backup utility. Duplicator handles serialized and base64 serialized replacements. Standard WordPress migration and WordPress backups are easily handled by this plugin as are **zero downtime migrations**.
15
 
16
- For complete details visit [snapcreek.com](https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wp_org&utm_content=desc_details&utm_campaign=duplicator_free).
17
 
18
  = Quick Video Demo =
19
  http://www.youtube.com/watch?v=oc73jtvHWYQ
@@ -33,7 +33,7 @@ Duplicator is the most powerful migrator available. It enables you to:
33
  Duplicator creates a package that bundles all the site's plugins, themes, content, database and WordPress files into a simple zip file called a package. This package can then be used to easily migrate a WordPress site to any location you wish. Move on the same server, across servers and pretty much any location a WordPress site can be hosted. *WordPress is not required for installation* since the package contains all site files.
34
 
35
  = Improve Your Workflow with Pre-Bundled Sites =
36
- Duplicator lets you make your own preconfigured sites to eliminate rework. Instead of manually configuring your favorite theme, set of plugins or content over and over, now just configure a single site and bundle it up into a Duplicator package. Once you have the bundled site, you can migrate the WordPress site over and over to different locations to instantly create many preconfigured sites!
37
 
38
  = Duplicator Pro =
39
  Duplicator Pro takes Duplicator to the next level with features you'll really appreciate, such as:
@@ -69,7 +69,7 @@ This plugin does require some technical knowledge. If you plan to migrate WordP
69
  <li>[Nicolas Richer](http://nicolasricher.fr) (French)</li>
70
 
71
  == Screenshots ==
72
-
73
  1. Main Interface for all Packages
74
  2. Create Package Step 1
75
  3. Create Package Step 2
4
  Requires at least: 4.0
5
  Tested up to: 5.8
6
  Requires PHP: 5.3.8
7
+ Stable tag: 1.4.3
8
  License: GPLv2
9
 
10
+ WordPress migration and backups are much easier with Duplicator! Clone, backup, move and transfer an entire site from one location to another.
11
 
12
  == Description ==
13
 
14
  > With over **25 million downloads** Duplicator successfully gives WordPress users the ability to migrate, copy, move or clone a site from one location to another and also serves as a simple backup utility. Duplicator handles serialized and base64 serialized replacements. Standard WordPress migration and WordPress backups are easily handled by this plugin as are **zero downtime migrations**.
15
 
16
+ For complete details visit [snapcreek.com](https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wp_org&utm_content=desc_details&utm_campaign=duplicator_free).
17
 
18
  = Quick Video Demo =
19
  http://www.youtube.com/watch?v=oc73jtvHWYQ
33
  Duplicator creates a package that bundles all the site's plugins, themes, content, database and WordPress files into a simple zip file called a package. This package can then be used to easily migrate a WordPress site to any location you wish. Move on the same server, across servers and pretty much any location a WordPress site can be hosted. *WordPress is not required for installation* since the package contains all site files.
34
 
35
  = Improve Your Workflow with Pre-Bundled Sites =
36
+ Duplicator lets you make your own preconfigured sites to eliminate rework. Instead of manually configuring your favorite theme, set of plugins or content over and over, now just configure a single site and bundle it up into a Duplicator package. Once you have the bundled site, you can migrate the WordPress site over and over to different locations to instantly create many preconfigured sites!
37
 
38
  = Duplicator Pro =
39
  Duplicator Pro takes Duplicator to the next level with features you'll really appreciate, such as:
69
  <li>[Nicolas Richer](http://nicolasricher.fr) (French)</li>
70
 
71
  == Screenshots ==
72
+
73
  1. Main Interface for all Packages
74
  2. Create Package Step 1
75
  3. Create Package Step 2
tools/Lite/Requirements.php CHANGED
@@ -43,28 +43,13 @@ class Requirements
43
  $result = true;
44
  self::$pluginFile = $pluginFile;
45
 
46
- if ($result === true && is_multisite()) {
47
- /* Deactivation of the plugin disabled in favor of a notification for the next version
48
- * Uncomment this to enable the logic.
49
- *
50
- add_action('admin_init', array(__CLASS__, 'addMultisiteNotice'));
51
- self::$deactivationMessage = __('Can\'t enable Duplicator LITE in a multisite installation', 'duplicator');
52
- $result = false;
53
- */
54
-
55
- // TEMP WARNING NOTICE, remove this when the deactiovation logic is enable
56
- add_action('admin_init', array(__CLASS__, 'addTempWarningMultisiteNotice'));
57
- }
58
-
59
-
60
  if ($result === true && self::isPluginActive(self::DUP_PRO_PLUGIN_KEY)) {
61
- /* Deactivation of the plugin disabled in favor of a notification for the next version
62
- * Uncomment this to enable the logic. */
63
- add_action('admin_init', array(__CLASS__, 'addProEnableNotice'));
64
- self::$deactivationMessage = __('The "Duplicator Lite" and "Duplicator Pro" plugins cannot both be active at the same time.', 'duplicator') . '<br/>'
65
- . __('Please deactivate one of them, then reactivate either Lite or Pro from the ', 'duplicator')
66
- ."<a href='plugins.php'>" . __('plugins page', 'duplicator') . ".</a>";
67
- $result = false;
68
  }
69
 
70
  if ($result === false) {
@@ -116,13 +101,6 @@ class Requirements
116
  }
117
  }
118
 
119
- public static function addTempWarningMultisiteNotice()
120
- {
121
- if (current_user_can('activate_plugins') && !is_plugin_active_for_network(plugin_basename(self::$pluginFile)) && false === get_option(\DUP_UI_Notice::OPTION_KEY_IS_MU_NOTICE_DISMISSED, false)) {
122
- add_action('admin_notices', array(__CLASS__, 'tempWarningMultisiteNotice'));
123
- }
124
- }
125
-
126
  /**
127
  * deactivate current plugin on activation
128
  */
@@ -137,55 +115,19 @@ class Requirements
137
  */
138
  public static function proEnabledNotice()
139
  {
 
140
  ?>
141
  <div class="error notice">
142
  <p>
143
- <?php
144
- echo '<span class="dashicons dashicons-warning"></span>&nbsp;';
145
- echo '<b>' . __('Duplicator Notice:', 'duplicator') . '</b>&nbsp; ';
146
- echo __('The "Duplicator Lite" and "Duplicator Pro" plugins cannot both be active at the same time. ', 'duplicator');
147
- echo '</br>';
148
- echo __('To use "Duplicator Lite" please deactivate "Duplicator Pro" from the ', 'duplicator');
149
- echo "<a href='plugins.php'>" . __('plugins page', 'duplicator') . ".</a>";
150
- ?>
151
- </p>
152
- </div>
153
- <?php
154
- }
155
-
156
- /**
157
- * Display admin notice if duplicator pro is enabled
158
- */
159
- public static function multisiteNotice()
160
- {
161
- ?>
162
- <div class="error notice">
163
- <p>
164
- <?php
165
- echo 'DUPLICATOR LITE: ' . __('Duplicator LITE can\'t work on multisite installation.', 'duplicator');
166
- ?>
167
  </p>
168
  <p>
169
- <?php
170
- echo __('The PRO version also works in multi-site installations.', 'duplicator');
171
- ?>
172
- </p>
173
- </div>
174
- <?php
175
- }
176
-
177
- /**
178
- * Display admin notice if duplicator pro is enabled
179
- */
180
- public static function tempWarningMultisiteNotice()
181
- {
182
- ?>
183
- <div class="notice notice-warning duplicator-admin-notice is-dismissible" data-to-dismiss="<?php echo \DUP_UI_Notice::OPTION_KEY_IS_MU_NOTICE_DISMISSED;?>">
184
- <p>
185
- <?php
186
- echo '<i class="fas fa-exclamation-circle"></i> ' . __('NOTICE: Duplicator Lite cannot be activated individually in the sub-sites of a multisite installation but must be activated only on the network. '
187
- . 'Please deactivate Duplicator Lite at this site and activate it on the network.', 'duplicator');
188
- ?>
189
  </p>
190
  </div>
191
  <?php
43
  $result = true;
44
  self::$pluginFile = $pluginFile;
45
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  if ($result === true && self::isPluginActive(self::DUP_PRO_PLUGIN_KEY)) {
47
+ add_action('admin_init', array(__CLASS__, 'addProEnableNotice'));
48
+ $pluginUrl = (is_multisite() ? network_admin_url('plugins.php') : admin_url('plugins.php'));
49
+ self::$deactivationMessage = __('Can\'t enable Duplicator LITE if the PRO version is enabled.', 'duplicator') . '<br/>'
50
+ . __('Please deactivate Duplicator PRO, then reactivate LITE version from the ', 'duplicator')
51
+ . "<a href='" . $pluginUrl . "'>" . __('plugins page', 'duplicator') . ".</a>";
52
+ $result = false;
 
53
  }
54
 
55
  if ($result === false) {
101
  }
102
  }
103
 
 
 
 
 
 
 
 
104
  /**
105
  * deactivate current plugin on activation
106
  */
115
  */
116
  public static function proEnabledNotice()
117
  {
118
+ $pluginUrl = (is_multisite() ? network_admin_url('plugins.php') : admin_url('plugins.php'));
119
  ?>
120
  <div class="error notice">
121
  <p>
122
+ <span class="dashicons dashicons-warning"></span>
123
+ <b><?php _e('Duplicator Notice:', 'duplicator'); ?></b>
124
+ <?php _e('The "Duplicator Lite" and "Duplicator Pro" plugins cannot both be active at the same time. ', 'duplicator'); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
  </p>
126
  <p>
127
+ <?php _e('To use "Duplicator LITE" please deactivate "Duplicator PRO" from the ', 'duplicator-pro'); ?>
128
+ <a href="<?php echo esc_url($pluginUrl); ?>">
129
+ <?php _e('plugins page', 'duplicator'); ?>.
130
+ </a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
131
  </p>
132
  </div>
133
  <?php
views/packages/main/packages.php CHANGED
@@ -8,6 +8,7 @@ DUP_Package::purge_incomplete_package();
8
  $totalElements = DUP_Package::count_by_status();
9
  $completeCount = DUP_Package::count_by_status(array(array('op' => '>=', 'status' => DUP_PackageStatus::COMPLETE))); // total packages completed
10
  $active_package_present = DUP_Package::is_active_package_present();
 
11
 
12
  $package_running = false;
13
  global $packageTablerowCount;
@@ -35,6 +36,8 @@ if (DUP_Settings::Get('installer_name_mode') == DUP_Settings::INSTALLER_NAME_MOD
35
  input#dup-bulk-action-all {margin:0px;padding:0px 0px 0px 5px;}
36
  button.dup-button-selected {border:1px solid #000 !important; background-color:#dfdfdf !important;}
37
  div.dup-quick-start {font-style:italic; font-size: 13px; line-height: 18px; margin-top: 15px}
 
 
38
 
39
  /* Table package details */
40
  table.dup-pack-table {word-break:break-all;}
@@ -70,7 +73,6 @@ if (DUP_Settings::Get('installer_name_mode') == DUP_Settings::INSTALLER_NAME_MOD
70
  .dup-pack-info.is-running .get-btns button {display: none;}
71
  div.sc-footer-left {color:maroon; font-size:11px; font-style: italic; float:left}
72
  div.sc-footer-right {font-style: italic; float:right; font-size:12px}
73
-
74
  </style>
75
 
76
  <form id="form-duplicator" method="post">
@@ -86,22 +88,23 @@ if (DUP_Settings::Get('installer_name_mode') == DUP_Settings::INSTALLER_NAME_MOD
86
  </select>
87
  <input type="button" id="dup-pack-bulk-apply" class="button action" value="<?php esc_html_e("Apply", 'duplicator') ?>" onclick="Duplicator.Pack.ConfirmDelete()">
88
  <span class="btn-separator"></span>
89
- <a href="javascript:void(0)" class="button" title="<?php esc_attr_e("Get Help", 'duplicator') ?>" onclick="Duplicator.Pack.showHelp()">
90
- <i class="fa fa-question-circle"></i>
91
- </a>
92
  <a href="admin.php?page=duplicator-settings&tab=package" class="button" title="<?php esc_attr_e("Settings", 'duplicator') ?>"><i class="fas fa-cog"></i></a>
 
 
 
 
93
  </td>
94
  <td>
95
- <a href="javascript:void(0)" class="button disabled"><i class="fa fa-archive fa-sm"></i> <?php esc_html_e("Packages", 'duplicator'); ?></a>
96
  <?php
97
  $package_url = admin_url('admin.php?page=duplicator&tab=new1');
98
  $package_nonce_url = wp_nonce_url($package_url, 'new1-package');
99
  ?>
100
  <a id="dup-create-new"
101
- onClick="return Duplicator.Pack.CreateNew(this);"
102
  href="<?php echo $package_nonce_url; ?>"
103
- class="button <?php echo ($active_package_present ? 'disabled' : ''); ?>"
104
- >
105
  <?php esc_html_e("Create New", 'duplicator'); ?>
106
  </a>
107
  </td>
@@ -120,12 +123,22 @@ if (DUP_Settings::Get('installer_name_mode') == DUP_Settings::INSTALLER_NAME_MOD
120
  <i class="fa fa-archive fa-sm"></i>
121
  <?php esc_html_e("No Packages Found.", 'duplicator'); ?><br/>
122
  <?php esc_html_e("Click the 'Create New' button to build a package.", 'duplicator'); ?><br/>
123
- <div class="dup-quick-start">
124
  <?php esc_html_e("New to Duplicator?", 'duplicator'); ?><br/>
125
- <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=packages_empty&utm_campaign=quick_start" target="_blank">
126
  <?php esc_html_e("Check out the 'Quick Start' guide!", 'duplicator'); ?>
127
  </a>
128
  </div>
 
 
 
 
 
 
 
 
 
 
129
  <div style="height:75px">&nbsp;</div>
130
  </div>
131
  </td>
@@ -163,7 +176,7 @@ if (DUP_Settings::Get('installer_name_mode') == DUP_Settings::INSTALLER_NAME_MOD
163
  <?php esc_html_e("Click the 'Create New' button to build a package.", 'duplicator'); ?><br/>
164
  <div class="dup-quick-start">
165
  <?php esc_html_e("New to Duplicator?", 'duplicator'); ?><br/>
166
- <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=packages_empty&utm_campaign=quick_start" target="_blank">
167
  <?php esc_html_e("Check out the 'Quick Start' guide!", 'duplicator'); ?>
168
  </a>
169
  </div>
@@ -276,6 +289,13 @@ if (DUP_Settings::Get('installer_name_mode') == DUP_Settings::INSTALLER_NAME_MOD
276
  <?php
277
  if ( DUP_Settings::Get('trace_log_enabled')) {
278
  esc_html_e("Trace Logging Enabled. Please disable when trace capture is complete.", 'duplicator');
 
 
 
 
 
 
 
279
  }
280
  ?>
281
  </div>
@@ -345,13 +365,13 @@ DIALOG: HELP DIALOG -->
345
  <div id="dup-help-dlg-info" style="display:none">
346
  <b><?php esc_html_e("Common Questions:", 'duplicator') ?></b><hr size='1'/>
347
  <i class="far fa-file-alt fa-sm"></i> <a href="https://snapcreek.com/duplicator/docs/quick-start?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=help_btn_pack_help&utm_campaign=duplicator_free#quick-010-q" target="_blank"><?php esc_html_e("How do I create a package", 'duplicator') ?></a> <br/>
348
- <i class="far fa-file-alt fa-sm"></i> <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=help_btn_install_help&utm_campaign=duplicator_free#quick-040-q" target="_blank"><?php esc_html_e('How do I install a package?', 'duplicator'); ?></a> <br/>
349
  <i class="far fa-file-code"></i> <a href="https://snapcreek.com/duplicator/docs/faqs-tech?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=help_btn_faq&utm_campaign=duplicator_free" target="_blank"><?php esc_html_e("Frequently Asked Questions!", 'duplicator') ?></a>
350
  <br/><br/>
351
 
352
  <b><?php esc_html_e("Other Resources:", 'duplicator') ?></b><hr size='1'/>
353
  <i class="fas fa-question-circle fa-sm"></i> <a href="https://snapcreek.com/ticket?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=help_btn_ticket&utm_campaign=duplicator_free" target="_blank"><?php esc_html_e("Need help with the plugin?", 'duplicator') ?></a> <br/>
354
- <i class="fa fa-lightbulb"></i> <a href="https://snapcreek.com/support?idea=1&utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=help_btn_idea&utm_campaign=duplicator_free" target="_blank"><?php esc_html_e("Have an idea for the plugin?", 'duplicator') ?></a> <br/>
355
  <?php if ($completeCount >= 3) : ?>
356
  <i class="fa fa-star"></i> <a href="https://wordpress.org/support/plugin/duplicator/reviews/?filter=5" target="vote-wp"><?php esc_html_e("Help review the plugin!", 'duplicator') ?></a>
357
  <?php endif; ?>
8
  $totalElements = DUP_Package::count_by_status();
9
  $completeCount = DUP_Package::count_by_status(array(array('op' => '>=', 'status' => DUP_PackageStatus::COMPLETE))); // total packages completed
10
  $active_package_present = DUP_Package::is_active_package_present();
11
+ $is_mu = is_multisite();
12
 
13
  $package_running = false;
14
  global $packageTablerowCount;
36
  input#dup-bulk-action-all {margin:0px;padding:0px 0px 0px 5px;}
37
  button.dup-button-selected {border:1px solid #000 !important; background-color:#dfdfdf !important;}
38
  div.dup-quick-start {font-style:italic; font-size: 13px; line-height: 18px; margin-top: 15px}
39
+ div.dup-no-mu {font-size:13px; margin-top:25px; color:maroon; line-height:18px}
40
+ a.dup-btn-disabled {color:#999 !important; border: 1px solid #999 !important}
41
 
42
  /* Table package details */
43
  table.dup-pack-table {word-break:break-all;}
73
  .dup-pack-info.is-running .get-btns button {display: none;}
74
  div.sc-footer-left {color:maroon; font-size:11px; font-style: italic; float:left}
75
  div.sc-footer-right {font-style: italic; float:right; font-size:12px}
 
76
  </style>
77
 
78
  <form id="form-duplicator" method="post">
88
  </select>
89
  <input type="button" id="dup-pack-bulk-apply" class="button action" value="<?php esc_html_e("Apply", 'duplicator') ?>" onclick="Duplicator.Pack.ConfirmDelete()">
90
  <span class="btn-separator"></span>
91
+ <a href="javascript:void(0)" class="button" title="<?php esc_attr_e("Get Help", 'duplicator') ?>" onclick="Duplicator.Pack.showHelp()"><i class="fa fa-question-circle"></i></a>
 
 
92
  <a href="admin.php?page=duplicator-settings&tab=package" class="button" title="<?php esc_attr_e("Settings", 'duplicator') ?>"><i class="fas fa-cog"></i></a>
93
+ <a href="admin.php?page=duplicator-settings&tab=import" class="button dup-btn-disabled" title="<?php esc_html_e("Import", 'duplicator'); ?>"><i class="fas fa-arrow-alt-circle-down"></i></a>
94
+ <span class="btn-separator"></span>
95
+ <a href="admin.php?page=duplicator-tools&tab=templates" class="button dup-btn-disabled" title="<?php esc_html_e("Templates", 'duplicator'); ?>"><i class="far fa-clone"></i></a>
96
+ <a href="admin.php?page=duplicator-tools&tab=recovery" class="button dup-btn-disabled" title="<?php esc_html_e("Recovery", 'duplicator'); ?>"><i class="fas fa-undo-alt"></i></a>
97
  </td>
98
  <td>
99
+ <a href="javascript:void(0)" class="button disabled"><i class="fa fa-archive fa-sm"></i> <?php esc_html_e("Packages", 'duplicator'); ?></a>
100
  <?php
101
  $package_url = admin_url('admin.php?page=duplicator&tab=new1');
102
  $package_nonce_url = wp_nonce_url($package_url, 'new1-package');
103
  ?>
104
  <a id="dup-create-new"
105
+ onclick="return Duplicator.Pack.CreateNew(this);"
106
  href="<?php echo $package_nonce_url; ?>"
107
+ class="button <?php echo ($active_package_present ? 'disabled' : ''); ?>">
 
108
  <?php esc_html_e("Create New", 'duplicator'); ?>
109
  </a>
110
  </td>
123
  <i class="fa fa-archive fa-sm"></i>
124
  <?php esc_html_e("No Packages Found.", 'duplicator'); ?><br/>
125
  <?php esc_html_e("Click the 'Create New' button to build a package.", 'duplicator'); ?><br/>
126
+ <div class="dup-quick-start" <?php echo ($is_mu) ? 'style="display:none"' : ''; ?>>
127
  <?php esc_html_e("New to Duplicator?", 'duplicator'); ?><br/>
128
+ <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=packages_empty1&utm_campaign=quick_start" target="_blank">
129
  <?php esc_html_e("Check out the 'Quick Start' guide!", 'duplicator'); ?>
130
  </a>
131
  </div>
132
+ <?php if ($is_mu) {
133
+ echo '<div class="dup-no-mu">';
134
+ echo '<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;';
135
+ esc_html_e('Duplicator Lite does not officially support WordPress multisite.', 'duplicator');
136
+ echo "<br/>";
137
+ esc_html_e('We strongly recommend upgrading to ', 'duplicator');
138
+ echo "&nbsp;<i><a href='https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_is_mu_warn1&utm_campaign=duplicator_pro' target='_blank'>[" . esc_html__('Duplicator Pro', 'duplicator') . "]</a></i>.";
139
+ echo '</div>';
140
+ }
141
+ ?>
142
  <div style="height:75px">&nbsp;</div>
143
  </div>
144
  </td>
176
  <?php esc_html_e("Click the 'Create New' button to build a package.", 'duplicator'); ?><br/>
177
  <div class="dup-quick-start">
178
  <?php esc_html_e("New to Duplicator?", 'duplicator'); ?><br/>
179
+ <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=packages_empty2&utm_campaign=quick_start" target="_blank">
180
  <?php esc_html_e("Check out the 'Quick Start' guide!", 'duplicator'); ?>
181
  </a>
182
  </div>
289
  <?php
290
  if ( DUP_Settings::Get('trace_log_enabled')) {
291
  esc_html_e("Trace Logging Enabled. Please disable when trace capture is complete.", 'duplicator');
292
+ echo '<br/>';
293
+ }
294
+ if ($is_mu) {
295
+ esc_html_e('Duplicator Lite does not officially support WordPress multisite.', 'duplicator');
296
+ echo '<br/>';
297
+ esc_html_e('We strongly recommend using', 'duplicator');
298
+ echo "&nbsp;<i><a href='https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_is_mu_warn2&utm_campaign=duplicator_pro' target='_blank'>[" . esc_html__('Duplicator Pro', 'duplicator') . "]</a></i>.";
299
  }
300
  ?>
301
  </div>
365
  <div id="dup-help-dlg-info" style="display:none">
366
  <b><?php esc_html_e("Common Questions:", 'duplicator') ?></b><hr size='1'/>
367
  <i class="far fa-file-alt fa-sm"></i> <a href="https://snapcreek.com/duplicator/docs/quick-start?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=help_btn_pack_help&utm_campaign=duplicator_free#quick-010-q" target="_blank"><?php esc_html_e("How do I create a package", 'duplicator') ?></a> <br/>
368
+ <i class="far fa-file-alt fa-sm"></i> <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=help_btn_install_help&utm_campaign=duplicator_free#install_site" target="_blank"><?php esc_html_e('How do I install a package?', 'duplicator'); ?></a> <br/>
369
  <i class="far fa-file-code"></i> <a href="https://snapcreek.com/duplicator/docs/faqs-tech?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=help_btn_faq&utm_campaign=duplicator_free" target="_blank"><?php esc_html_e("Frequently Asked Questions!", 'duplicator') ?></a>
370
  <br/><br/>
371
 
372
  <b><?php esc_html_e("Other Resources:", 'duplicator') ?></b><hr size='1'/>
373
  <i class="fas fa-question-circle fa-sm"></i> <a href="https://snapcreek.com/ticket?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=help_btn_ticket&utm_campaign=duplicator_free" target="_blank"><?php esc_html_e("Need help with the plugin?", 'duplicator') ?></a> <br/>
374
+ <i class="fa fa-lightbulb"></i> <a href="https://snapcreek.com/ticket/index.php?a=add&category=69" target="_blank"><?php esc_html_e("Have an idea for the plugin?", 'duplicator') ?></a> <br/>
375
  <?php if ($completeCount >= 3) : ?>
376
  <i class="fa fa-star"></i> <a href="https://wordpress.org/support/plugin/duplicator/reviews/?filter=5" target="vote-wp"><?php esc_html_e("Help review the plugin!", 'duplicator') ?></a>
377
  <?php endif; ?>
views/packages/main/s1.setup2.php CHANGED
@@ -244,7 +244,7 @@ ARCHIVE -->
244
  if ($retry_state == '2') {
245
  echo '<i style="color:maroon">';
246
  _e("This option has automatically been checked because you have opted for a <i class='fa fa-random'></i> Two-Part Install Process. Please complete the package build and continue with the ", 'duplicator');
247
- printf('%s <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=host_interupt_2partlink&utm_campaign=build_issues#quick-060-q" target="faq">%s</a>.',
248
  '',
249
  esc_html__('Quick Start Two-Part Install Instructions', 'duplicator'));
250
  echo '</i><br/><br/>';
244
  if ($retry_state == '2') {
245
  echo '<i style="color:maroon">';
246
  _e("This option has automatically been checked because you have opted for a <i class='fa fa-random'></i> Two-Part Install Process. Please complete the package build and continue with the ", 'duplicator');
247
+ printf('%s <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=host_interupt_2partlink1&utm_campaign=build_issues#quick-060-q" target="faq">%s</a>.',
248
  '',
249
  esc_html__('Quick Start Two-Part Install Instructions', 'duplicator'));
250
  echo '</i><br/><br/>';
views/packages/main/s2.scan2.php CHANGED
@@ -5,8 +5,9 @@ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
5
  SERVER -->
6
  <div class="details-title">
7
  <i class="fa fa-hdd-o"></i> <i class="far fa-hdd fa-sm"></i> <?php esc_html_e("Setup", 'duplicator'); ?>
8
- <div class="dup-more-details" title="<?php esc_attr_e('Show Diagnostics', 'duplicator');?>">
9
- <a href="?page=duplicator-tools&tab=diagnostics" target="_blank"><i class="fa fa-microchip"></i></a>
 
10
  </div>
11
  </div>
12
 
@@ -105,7 +106,7 @@ PHP SETTINGS -->
105
  _e('<b>Due to these constraints Lite does not officially support the migration of managed hosts.</b> '
106
  .'It’s possible one could get the package to install but it may require custom manual effort. '
107
  .'To get support and the advanced installer processing required for managed host support we encourage users to <i>'
108
- .'<a href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&amp;utm_medium=wordpress_plugin&amp;utm_content=free_is_mu_warn&amp;utm_campaign=duplicator_pro" target="_blank">upgrade to Duplicator Pro</a></i>. '
109
  .'Pro has more sophisticated package and installer logic and accounts for odd configurations associated with managed hosts.', 'duplicator');
110
  echo '<br/><br/>';
111
 
@@ -186,18 +187,18 @@ WP SETTINGS -->
186
  //MU SITE
187
  if (is_multisite()) {
188
  echo '<hr size="1" /><span><div class="scan-warn"><i class="fa fa-exclamation-triangle fa-sm"></i></div></span>&nbsp;<b>' . esc_html__('Multisite: Unsupported', 'duplicator') . "</b> <br/>";
189
- esc_html_e('Duplicator does not support WordPress multisite migrations. We recommend using Duplicator Pro which currently supports full multisite migrations and subsite to '
190
- . 'standalone site migrations.', 'duplicator');
191
  echo '<br/><br/>';
192
 
193
- esc_html_e('While it is not recommended you can still continue with the build of this package. Please note that at install time additional manual custom configurations will '
194
- . 'need to be made to finalize this multisite migration.', 'duplicator');
195
- echo "&nbsp;<i><a href='https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_is_mu_warn&utm_campaign=duplicator_pro' target='_blank'>[" . esc_html__('upgrade to pro', 'duplicator') . "]</a></i>";
196
  } else {
197
  echo '<hr size="1" /><span><div class="scan-good"><i class="fa fa-check"></i></div></span>&nbsp;<b>' . esc_html__('Multisite: N/A', 'duplicator') . "</b> <br/>";
198
  esc_html_e('This is not a multisite install so duplication will proceed without issue. Duplicator does not officially support multisite. However, Duplicator Pro supports '
199
  . 'duplication of a full multisite network and also has the ability to install a multisite subsite as a standalone site.', 'duplicator');
200
- echo "&nbsp;<i><a href='https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_is_mu_warn&utm_campaign=duplicator_pro' target='_blank'>[" . esc_html__('upgrade to pro', 'duplicator') . "]</a></i>";
201
  }
202
  ?>
203
  </div>
5
  SERVER -->
6
  <div class="details-title">
7
  <i class="fa fa-hdd-o"></i> <i class="far fa-hdd fa-sm"></i> <?php esc_html_e("Setup", 'duplicator'); ?>
8
+ <div class="dup-more-details">
9
+ <a href="?page=duplicator-tools&tab=diagnostics" target="_blank" title="<?php esc_attr_e('Show Diagnostics', 'duplicator');?>"><i class="fa fa-microchip"></i></a>&nbsp;
10
+ <a href="site-health.php" target="_blank" title="<?php esc_attr_e('Check Site Health', 'duplicator');?>"><i class="fas fa-file-medical-alt"></i></a>
11
  </div>
12
  </div>
13
 
106
  _e('<b>Due to these constraints Lite does not officially support the migration of managed hosts.</b> '
107
  .'It’s possible one could get the package to install but it may require custom manual effort. '
108
  .'To get support and the advanced installer processing required for managed host support we encourage users to <i>'
109
+ .'<a href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&amp;utm_medium=wordpress_plugin&amp;utm_content=free_is_mu_warn3&amp;utm_campaign=duplicator_pro" target="_blank">upgrade to Duplicator Pro</a></i>. '
110
  .'Pro has more sophisticated package and installer logic and accounts for odd configurations associated with managed hosts.', 'duplicator');
111
  echo '<br/><br/>';
112
 
187
  //MU SITE
188
  if (is_multisite()) {
189
  echo '<hr size="1" /><span><div class="scan-warn"><i class="fa fa-exclamation-triangle fa-sm"></i></div></span>&nbsp;<b>' . esc_html__('Multisite: Unsupported', 'duplicator') . "</b> <br/>";
190
+ esc_html_e('Duplicator does not support WordPress multisite migrations. We strongly recommend using Duplicator Pro which currently supports full multisite migrations and various other '
191
+ . 'subsite scenarios.', 'duplicator');
192
  echo '<br/><br/>';
193
 
194
+ esc_html_e('While it is not recommended you can still continue with the build of this package. At install time additional manual custom configurations will '
195
+ . 'need to be made to finalize this multisite migration. Please note that any support requests for mulitsite with Duplicator Lite will not be supported.', 'duplicator');
196
+ echo "&nbsp;<i><a href='https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_is_mu_warn4&utm_campaign=duplicator_pro' target='_blank'>[" . esc_html__('upgrade to pro', 'duplicator') . "]</a></i>";
197
  } else {
198
  echo '<hr size="1" /><span><div class="scan-good"><i class="fa fa-check"></i></div></span>&nbsp;<b>' . esc_html__('Multisite: N/A', 'duplicator') . "</b> <br/>";
199
  esc_html_e('This is not a multisite install so duplication will proceed without issue. Duplicator does not officially support multisite. However, Duplicator Pro supports '
200
  . 'duplication of a full multisite network and also has the ability to install a multisite subsite as a standalone site.', 'duplicator');
201
+ echo "&nbsp;<i><a href='https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_is_mu_warn5&utm_campaign=duplicator_pro' target='_blank'>[" . esc_html__('upgrade to pro', 'duplicator') . "]</a></i>";
202
  }
203
  ?>
204
  </div>
views/packages/main/s2.scan3.php CHANGED
@@ -53,7 +53,7 @@ ARCHIVE -->
53
  if ($Package->Archive->ExportOnlyDB) { ?>
54
  <div class="scan-item ">
55
  <div class='title' onclick="Duplicator.Pack.toggleScanItem(this);">
56
- <div class="text"><i class="fa fa-caret-right"></i> <?php esc_html_e('Database only', 'duplicator');?></div>
57
  <div id="only-db-scan-status"><div class="badge badge-warn"><?php esc_html_e("Notice", 'duplicator'); ?></div></div>
58
  </div>
59
  <div class="info">
53
  if ($Package->Archive->ExportOnlyDB) { ?>
54
  <div class="scan-item ">
55
  <div class='title' onclick="Duplicator.Pack.toggleScanItem(this);">
56
+ <div class="text"><i class="fa fa-caret-right"></i> <?php esc_html_e('Database Only', 'duplicator');?></div>
57
  <div id="only-db-scan-status"><div class="badge badge-warn"><?php esc_html_e("Notice", 'duplicator'); ?></div></div>
58
  </div>
59
  <div class="info">
views/packages/main/s3.build.php CHANGED
@@ -32,6 +32,8 @@ $rand_txt[0] = $atext0;
32
  div#dup-progress-area h2.title {background-color:#efefef; margin:0px}
33
  div#dup-progress-area span.label {font-weight:bold}
34
  div#dup-msg-success {color:#18592A; padding:5px;}
 
 
35
 
36
  div.dup-msg-success-stats{color:#999;margin:5px 0; font-size:11px; line-height:13px}
37
  div.dup-msg-success-links {margin:20px 5px 5px 5px; font-size: 13px;}
@@ -42,7 +44,7 @@ $rand_txt[0] = $atext0;
42
  div#dup-create-area-nolink, div#dup-create-area-link {float:right; font-weight: bold; margin: 0; padding: 0}
43
  div#dup-create-area-link {display:none; margin-left: -5px}
44
  div#dup-progress-area div.dup-panel-panel { border-top: 1px solid silver}
45
- fieldset.download-area {border:2px dashed #dfdfdf; padding:20px 20px 10px 20px; border-radius:9px; margin: auto; width:400px }
46
  fieldset.download-area legend {font-weight: bold; font-size: 16px; margin:auto}
47
  button#dup-btn-installer, button#dup-btn-archive { line-height: 28px; min-width: 150px}
48
  div.one-click-download {margin:15px 0 10px 0; font-size:16px; font-weight: bold}
@@ -53,7 +55,10 @@ $rand_txt[0] = $atext0;
53
  button.button {font-size:16px !important; height:30px !important; font-weight:bold; padding:0px 10px 5px 10px !important; min-width: 150px }
54
  span.dup-btn-size {font-size:11px;font-weight: normal}
55
  p.get-pro {font-size:13px; color:#222; border-top:1px solid #eeeeee; padding:5px 0 0 0; margin:0; font-style:italic}
56
- div.dup-howto-exe {font-size:16px; font-style: italic; font-weight: bold; margin:45px 0 45px 0}
 
 
 
57
 
58
  /*HOST TIMEOUT */
59
  div#dup-msg-error {color:maroon; padding:5px;}
@@ -129,14 +134,13 @@ TOOL BAR: STEPS -->
129
  </div>
130
 
131
  <div class="dup-msg-success-stats">
132
- <!--b><?php esc_html_e('Name', 'duplicator'); ?>:</b> <span id="data-name-hash"></span><br/-->
133
  <b><?php esc_html_e('Process Time', 'duplicator'); ?>:</b> <span id="data-time"></span><br/>
134
  </div><br/>
135
 
136
  <!-- DOWNLOAD FILES -->
137
  <fieldset class="download-area">
138
  <legend>
139
- &nbsp; <?php esc_html_e("Download Files", 'duplicator') ?> <i class="fa fa-download"></i> &nbsp;
140
  </legend>
141
  <button id="dup-btn-installer" class="button button-primary button-large" title="<?php esc_attr_e("Click to download installer file", 'duplicator') ?>">
142
  <i class="fa fa-bolt fa-sm"></i> <?php esc_html_e("Installer", 'duplicator') ?> &nbsp;
@@ -160,18 +164,39 @@ TOOL BAR: STEPS -->
160
  </div>
161
  <div style="margin-top:20px; font-size:11px">
162
  <span id="dup-click-to-copy-installer-name" class="link-style no-decoration" data-dup-copy-text="<?php echo esc_attr(DUP_Installer::DEFAULT_INSTALLER_FILE_NAME_WITHOUT_HASH); ?>">
163
- <?php
164
- esc_html_e("[Copy Installer Name to Clipboard]", 'duplicator');
165
- ?>
166
  <i class="far fa-copy"></i>
167
  </span>
168
  </div>
169
  </fieldset>
170
 
171
- <div class="dup-howto-exe">
172
- <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=package_built_install_help&utm_campaign=duplicator_free#quick-040-q" target="_blank">
173
- <?php esc_html_e('How do I install this Package?', 'duplicator'); ?>
174
- </a>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
  </div>
176
 
177
  <p class="get-pro">
@@ -284,7 +309,7 @@ TOOL BAR: STEPS -->
284
  <li>
285
  <?php esc_html_e('Complete the package build and follow the ', 'duplicator'); ?>
286
  <?php
287
- printf('%s "<a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=host_interupt_2partlink&utm_campaign=build_issues#quick-060-q" target="faq">%s</a>".',
288
  '', esc_html__('Quick Start Two-Part Install Instructions', 'duplicator'));
289
  ?>
290
  </li>
@@ -715,4 +740,4 @@ jQuery(document).ready(function ($)
715
  Duplicator.Pack.CreateDupArchive();
716
  <?php endif; ?>
717
  });
718
- </script>
32
  div#dup-progress-area h2.title {background-color:#efefef; margin:0px}
33
  div#dup-progress-area span.label {font-weight:bold}
34
  div#dup-msg-success {color:#18592A; padding:5px;}
35
+ div.dup-no-mu {font-size:13px; margin-top:15px; color:maroon; line-height:18px}
36
+ sup.dup-new {font-weight: normal; color:#b10202; font-size:12px}
37
 
38
  div.dup-msg-success-stats{color:#999;margin:5px 0; font-size:11px; line-height:13px}
39
  div.dup-msg-success-links {margin:20px 5px 5px 5px; font-size: 13px;}
44
  div#dup-create-area-nolink, div#dup-create-area-link {float:right; font-weight: bold; margin: 0; padding: 0}
45
  div#dup-create-area-link {display:none; margin-left: -5px}
46
  div#dup-progress-area div.dup-panel-panel { border-top: 1px solid silver}
47
+ fieldset.download-area {border:2px dashed #b5b5b5; padding:20px 20px 10px 20px; border-radius:9px; margin: auto; width:400px }
48
  fieldset.download-area legend {font-weight: bold; font-size: 16px; margin:auto}
49
  button#dup-btn-installer, button#dup-btn-archive { line-height: 28px; min-width: 150px}
50
  div.one-click-download {margin:15px 0 10px 0; font-size:16px; font-weight: bold}
55
  button.button {font-size:16px !important; height:30px !important; font-weight:bold; padding:0px 10px 5px 10px !important; min-width: 150px }
56
  span.dup-btn-size {font-size:11px;font-weight: normal}
57
  p.get-pro {font-size:13px; color:#222; border-top:1px solid #eeeeee; padding:5px 0 0 0; margin:0; font-style:italic}
58
+ div.dup-howto-exe {font-size:14px; font-weight: bold; margin:45px 0 20px 0; line-height:20px;color:#000; padding-top:10px; border-top:1px solid #eee}
59
+ div.dup-howto-exe-title {font-size:16px; margin:0 0 8px 0; color:#000}
60
+ div.dup-howto-exe small {font-weight: normal; display: block; margin-top: -2px; font-style: italic; font-size:11px; color:#777 }
61
+ div.dup-howto-exe a {margin-top: 8px; display: inline-block}
62
 
63
  /*HOST TIMEOUT */
64
  div#dup-msg-error {color:maroon; padding:5px;}
134
  </div>
135
 
136
  <div class="dup-msg-success-stats">
 
137
  <b><?php esc_html_e('Process Time', 'duplicator'); ?>:</b> <span id="data-time"></span><br/>
138
  </div><br/>
139
 
140
  <!-- DOWNLOAD FILES -->
141
  <fieldset class="download-area">
142
  <legend>
143
+ &nbsp; <?php esc_html_e("Download Package Files", 'duplicator') ?> <i class="fa fa-download"></i> &nbsp;
144
  </legend>
145
  <button id="dup-btn-installer" class="button button-primary button-large" title="<?php esc_attr_e("Click to download installer file", 'duplicator') ?>">
146
  <i class="fa fa-bolt fa-sm"></i> <?php esc_html_e("Installer", 'duplicator') ?> &nbsp;
164
  </div>
165
  <div style="margin-top:20px; font-size:11px">
166
  <span id="dup-click-to-copy-installer-name" class="link-style no-decoration" data-dup-copy-text="<?php echo esc_attr(DUP_Installer::DEFAULT_INSTALLER_FILE_NAME_WITHOUT_HASH); ?>">
167
+ <?php esc_html_e("[Copy Installer Name to Clipboard]", 'duplicator'); ?>
 
 
168
  <i class="far fa-copy"></i>
169
  </span>
170
  </div>
171
  </fieldset>
172
 
173
+ <?php
174
+ if (is_multisite()) {
175
+ echo '<div class="dup-no-mu">';
176
+ echo '<i class="fa fa-exclamation-triangle" aria-hidden="true"></i>&nbsp;';
177
+ esc_html_e('Notice: Duplicator Lite does not officially support WordPress multisite.', 'duplicator');
178
+ echo "<br/>";
179
+ esc_html_e('We strongly recommend upgrading to ', 'duplicator');
180
+ echo "&nbsp;<i><a href='https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_is_mu_warn6&utm_campaign=duplicator_pro' target='_blank'>[" . esc_html__('Duplicator Pro', 'duplicator') . "]</a></i>.";
181
+ echo '</div>';
182
+ }
183
+ ?>
184
+
185
+ <div class="dup-howto-exe">
186
+ <div class="dup-howto-exe-title"><?php esc_html_e('How Do I Install This Package?', 'duplicator'); ?></div>
187
+ <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=package_built_install_help1&utm_campaign=duplicator_free#quick-040-q" target="_blank"><?php esc_html_e('Classic Install Method', 'duplicator'); ?></a><br/>
188
+ <small><?php esc_html_e("Install to an empty directory on this or a different server.", 'duplicator');?></small>
189
+
190
+ &nbsp; &nbsp;
191
+ <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=package_built_install_help2&utm_campaign=duplicator_free#quick-043-q" target="_blank">
192
+ <?php esc_html_e('Overwrite Install Method', 'duplicator'); ?>
193
+ </a>
194
+ <sup class="dup-new"><?php esc_html_e('new', 'duplicator'); ?></sup>
195
+ <br/>
196
+
197
+ <small><?php esc_html_e("Quickly overwrite an existing WordPress site.", 'duplicator');?></small>
198
+ <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=package_built_install_help3&utm_campaign=duplicator_free#install_site" target="_blank"><?php esc_html_e('View All Methods', 'duplicator'); ?></a><br/>
199
+ <small><?php esc_html_e("Learn about all install types.", 'duplicator');?></small>
200
  </div>
201
 
202
  <p class="get-pro">
309
  <li>
310
  <?php esc_html_e('Complete the package build and follow the ', 'duplicator'); ?>
311
  <?php
312
+ printf('%s "<a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=host_interupt_2partlink2&utm_campaign=build_issues#quick-060-q" target="faq">%s</a>".',
313
  '', esc_html__('Quick Start Two-Part Install Instructions', 'duplicator'));
314
  ?>
315
  </li>
740
  Duplicator.Pack.CreateDupArchive();
741
  <?php endif; ?>
742
  });
743
+ </script>
views/packages/screen.php CHANGED
@@ -1,128 +1,128 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
-
4
- require_once DUPLICATOR_PLUGIN_PATH . '/classes/ui/class.ui.screen.base.php';
5
-
6
- /*
7
- Because the default way is overwriting the option names in the hidden input wp_screen_options[option]
8
- I added all inputs via one option name and saved them with the update_user_meta function.
9
- Also, the set-screen-option is not being triggered inside the class, that's why it's here. -TG
10
- */
11
- add_filter('set-screen-option', 'dup_packages_set_option', 10, 3);
12
- function dup_packages_set_option($status, $option, $value) {
13
- if('package_screen_options' == $option){
14
- $user_id = get_current_user_id();
15
- }
16
- return false;
17
- }
18
-
19
- class DUP_Package_Screen extends DUP_UI_Screen
20
- {
21
-
22
- public function __construct($page)
23
- {
24
- add_action('load-'.$page, array($this, 'Init'));
25
- }
26
-
27
- public function Init()
28
- {
29
- $active_tab = isset($_GET['tab']) ? $_GET['tab'] : 'list';
30
- $active_tab = isset($_GET['action']) && $_GET['action'] == 'detail' ? 'detail' : $active_tab;
31
- $this->screen = get_current_screen();
32
-
33
- switch (strtoupper($active_tab)) {
34
- case 'LIST': $content = $this->get_list_help(); break;
35
- case 'NEW1': $content = $this->get_step1_help(); break;
36
- case 'NEW2': $content = $this->get_step2_help(); break;
37
- case 'NEW3': $content = $this->get_step3_help(); break;
38
- case 'DETAIL': $content = $this->get_details_help(); break;
39
- default:
40
- $content = $this->get_list_help();
41
- break;
42
- }
43
-
44
- $guide = '#guide-packs';
45
- $faq = '#faq-package';
46
- $content .= "<b>References:</b><br/>"
47
- . "<a href='".esc_url("https://snapcreek.com/duplicator/docs/guide/".$guide)."' target='_sc-guide'>User Guide</a> | "
48
- . "<a href='".esc_url("https://snapcreek.com/duplicator/docs/faqs-tech/".$faq)."' target='_sc-guide'>FAQs</a> | "
49
- . "<a href='https://snapcreek.com/duplicator/docs/quick-start/' target='_sc-guide'>Quick Start</a>";
50
-
51
- $this->screen->add_help_tab( array(
52
- 'id' => 'dup_help_package_overview',
53
- 'title' => esc_html__('Overview','duplicator'),
54
- 'content' => "<p>{$content}</p>"
55
- )
56
- );
57
-
58
- $this->getSupportTab($guide, $faq);
59
- $this->getHelpSidbar();
60
- }
61
-
62
- public function get_list_help()
63
- {
64
- return __("<b><i class='fa fa-archive'></i> Packages » All</b><br/> The 'Packages' section is the main interface for managing all the packages that have been created. "
65
- . "A Package consists of two core files, the 'archive.zip' and the 'installer.php' file. The archive file is a zip file containing all your WordPress files and a "
66
- . "copy of your WordPress database. The installer file is a php file that when browsed to via a web browser presents a wizard that redeploys/installs the website "
67
- . "by extracting the archive file and installing the database. To create a package, click the 'Create New' button and follow the prompts. <br/><br/>"
68
-
69
- . "<b><i class='fa fa-download'></i> Downloads</b><br/>"
70
- . "To download the package files click on the Installer and Archive buttons after creating a package. The archive file will have a copy of the installer inside of it named "
71
- . "installer-backup.php in case the original installer file is lost. To see the details of a package click on the <i class='fa fa-archive'></i> details button.<br/><br/>"
72
-
73
- . "<b><i class='far fa-file-archive'></i> Archive Types</b><br/>"
74
- . "An archive file can be saved as either a .zip file or .daf file. A zip file is a common archive format used to compress and group files. The daf file short for "
75
- . "'Duplicator Archive Format' is a custom format used specifically for working with larger packages and scale-ability issues on many shared hosting platforms. Both "
76
- . "formats work very similar. The main difference is that the daf file can only be extracted using the installer.php file or the "
77
- . "<a href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-052-q' target='_blank'>DAF extraction tool</a>. The zip file can be used by the installer.php "
78
- . "or other zip tools like winrar/7zip/winzip or other client-side tools. <br/><br/>"
79
- ,'duplicator');
80
- }
81
-
82
-
83
- public function get_step1_help()
84
- {
85
- return __("<b>Packages New » 1 Setup</b> <br/>"
86
- . "The setup step allows for optional filtered directory paths, files, file extensions and database tables. To filter specific system files, click the 'Enable File Filters' "
87
- . "checkbox and add the full path of the file or directory, followed by a semicolon. For a file extension add the name (i.e. 'zip') followed by a semicolon. <br/><br/>"
88
-
89
- . "To exclude a database table, check the box labeled 'Enable Table Filters' and check the table name to exclude. To include only a copy of your database in the "
90
- . "archive file check the box labeled 'Archive Only the Database'. The installer.php file can optionally be pre-filled with data at install time but is not "
91
- . "required. <br/><br/>",'duplicator');
92
- }
93
-
94
-
95
- public function get_step2_help()
96
- {
97
- return __("<b>Packages » 2 Scan</b> <br/>"
98
- . "The plugin will scan your system files and database to let you know if there are any concerns or issues that may be present. All items in green mean the checks "
99
- . "looked good. All items in red indicate a warning. Warnings will not prevent the build from running, however if you do run into issues with the build then investigating "
100
- . "the warnings should be considered. Click on each section for more details about each scan check. <br/><br/>",'duplicator');
101
- }
102
-
103
- public function get_step3_help()
104
- {
105
- return __("<b>Packages » 3 Build</b> <br/>"
106
- . "The final step in the build process where the installer script and archive of the website can be downloaded. To start the install process follow these steps: "
107
- . "<ol>"
108
- . "<li>Download the installer.php and archive.zip files to your local computer.</li>"
109
- . "<li>For localhost installs be sure you have PHP, Apache & MySQL installed on your local computer with software such as XAMPP, Instant WordPress or MAMP for MAC. "
110
- . "Place the package.zip and installer.php into any empty directory under your webroot then browse to the installer.php via your web browser to launch the install wizard.</li>"
111
- . "<li>For remote installs use FTP or cPanel to upload both the archive.zip and installer.php to your hosting provider. Place the files in a new empty directory under "
112
- . "your host's webroot accessible from a valid URL such as http://your-domain/your-wp-directory/installer.php to launch the install wizard. On some hosts the root directory "
113
- . "will be a something like public_html -or- www. If your're not sure contact your hosting provider. </li>"
114
- . "</ol>"
115
- . "For complete instructions see:<br/>
116
- <a href='https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&amp;utm_medium=wordpress_plugin&amp;utm_content=package_built_install_help&amp;utm_campaign=duplicator_free#quick-040-q' target='_blank'>
117
- How do I install this Package?</a><br/><br/>",'duplicator');
118
- }
119
-
120
- public function get_details_help()
121
- {
122
- return __("<b>Packages » Details</b> <br/>"
123
- . "The details view will give you a full break-down of the package including any errors that may have occured during the install. <br/><br/>",'duplicator');
124
- }
125
-
126
- }
127
-
128
-
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+
4
+ require_once DUPLICATOR_PLUGIN_PATH . '/classes/ui/class.ui.screen.base.php';
5
+
6
+ /*
7
+ Because the default way is overwriting the option names in the hidden input wp_screen_options[option]
8
+ I added all inputs via one option name and saved them with the update_user_meta function.
9
+ Also, the set-screen-option is not being triggered inside the class, that's why it's here. -TG
10
+ */
11
+ add_filter('set-screen-option', 'dup_packages_set_option', 10, 3);
12
+ function dup_packages_set_option($status, $option, $value) {
13
+ if('package_screen_options' == $option){
14
+ $user_id = get_current_user_id();
15
+ }
16
+ return false;
17
+ }
18
+
19
+ class DUP_Package_Screen extends DUP_UI_Screen
20
+ {
21
+
22
+ public function __construct($page)
23
+ {
24
+ add_action('load-'.$page, array($this, 'Init'));
25
+ }
26
+
27
+ public function Init()
28
+ {
29
+ $active_tab = isset($_GET['tab']) ? $_GET['tab'] : 'list';
30
+ $active_tab = isset($_GET['action']) && $_GET['action'] == 'detail' ? 'detail' : $active_tab;
31
+ $this->screen = get_current_screen();
32
+
33
+ switch (strtoupper($active_tab)) {
34
+ case 'LIST': $content = $this->get_list_help(); break;
35
+ case 'NEW1': $content = $this->get_step1_help(); break;
36
+ case 'NEW2': $content = $this->get_step2_help(); break;
37
+ case 'NEW3': $content = $this->get_step3_help(); break;
38
+ case 'DETAIL': $content = $this->get_details_help(); break;
39
+ default:
40
+ $content = $this->get_list_help();
41
+ break;
42
+ }
43
+
44
+ $guide = '#guide-packs';
45
+ $faq = '#faq-package';
46
+ $content .= "<b>References:</b><br/>"
47
+ . "<a href='".esc_url("https://snapcreek.com/duplicator/docs/guide/".$guide)."' target='_sc-guide'>User Guide</a> | "
48
+ . "<a href='".esc_url("https://snapcreek.com/duplicator/docs/faqs-tech/".$faq)."' target='_sc-guide'>FAQs</a> | "
49
+ . "<a href='https://snapcreek.com/duplicator/docs/quick-start/' target='_sc-guide'>Quick Start</a>";
50
+
51
+ $this->screen->add_help_tab( array(
52
+ 'id' => 'dup_help_package_overview',
53
+ 'title' => esc_html__('Overview','duplicator'),
54
+ 'content' => "<p>{$content}</p>"
55
+ )
56
+ );
57
+
58
+ $this->getSupportTab($guide, $faq);
59
+ $this->getHelpSidbar();
60
+ }
61
+
62
+ public function get_list_help()
63
+ {
64
+ return __("<b><i class='fa fa-archive'></i> Packages » All</b><br/> The 'Packages' section is the main interface for managing all the packages that have been created. "
65
+ . "A Package consists of two core files, the 'archive.zip' and the 'installer.php' file. The archive file is a zip file containing all your WordPress files and a "
66
+ . "copy of your WordPress database. The installer file is a php file that when browsed to via a web browser presents a wizard that redeploys/installs the website "
67
+ . "by extracting the archive file and installing the database. To create a package, click the 'Create New' button and follow the prompts. <br/><br/>"
68
+
69
+ . "<b><i class='fa fa-download'></i> Downloads</b><br/>"
70
+ . "To download the package files click on the Installer and Archive buttons after creating a package. The archive file will have a copy of the installer inside of it named "
71
+ . "installer-backup.php in case the original installer file is lost. To see the details of a package click on the <i class='fa fa-archive'></i> details button.<br/><br/>"
72
+
73
+ . "<b><i class='far fa-file-archive'></i> Archive Types</b><br/>"
74
+ . "An archive file can be saved as either a .zip file or .daf file. A zip file is a common archive format used to compress and group files. The daf file short for "
75
+ . "'Duplicator Archive Format' is a custom format used specifically for working with larger packages and scale-ability issues on many shared hosting platforms. Both "
76
+ . "formats work very similar. The main difference is that the daf file can only be extracted using the installer.php file or the "
77
+ . "<a href='https://snapcreek.com/duplicator/docs/faqs-tech/#faq-trouble-052-q' target='_blank'>DAF extraction tool</a>. The zip file can be used by the installer.php "
78
+ . "or other zip tools like winrar/7zip/winzip or other client-side tools. <br/><br/>"
79
+ ,'duplicator');
80
+ }
81
+
82
+
83
+ public function get_step1_help()
84
+ {
85
+ return __("<b>Packages New » 1 Setup</b> <br/>"
86
+ . "The setup step allows for optional filtered directory paths, files, file extensions and database tables. To filter specific system files, click the 'Enable File Filters' "
87
+ . "checkbox and add the full path of the file or directory, followed by a semicolon. For a file extension add the name (i.e. 'zip') followed by a semicolon. <br/><br/>"
88
+
89
+ . "To exclude a database table, check the box labeled 'Enable Table Filters' and check the table name to exclude. To include only a copy of your database in the "
90
+ . "archive file check the box labeled 'Archive Only the Database'. The installer.php file can optionally be pre-filled with data at install time but is not "
91
+ . "required. <br/><br/>",'duplicator');
92
+ }
93
+
94
+
95
+ public function get_step2_help()
96
+ {
97
+ return __("<b>Packages » 2 Scan</b> <br/>"
98
+ . "The plugin will scan your system files and database to let you know if there are any concerns or issues that may be present. All items in green mean the checks "
99
+ . "looked good. All items in red indicate a warning. Warnings will not prevent the build from running, however if you do run into issues with the build then investigating "
100
+ . "the warnings should be considered. Click on each section for more details about each scan check. <br/><br/>",'duplicator');
101
+ }
102
+
103
+ public function get_step3_help()
104
+ {
105
+ return __("<b>Packages » 3 Build</b> <br/>"
106
+ . "The final step in the build process where the installer script and archive of the website can be downloaded. To start the install process follow these steps: "
107
+ . "<ol>"
108
+ . "<li>Download the installer.php and archive.zip files to your local computer.</li>"
109
+ . "<li>For localhost installs be sure you have PHP, Apache & MySQL installed on your local computer with software such as XAMPP, Instant WordPress or MAMP for MAC. "
110
+ . "Place the package.zip and installer.php into any empty directory under your webroot then browse to the installer.php via your web browser to launch the install wizard.</li>"
111
+ . "<li>For remote installs use FTP or cPanel to upload both the archive.zip and installer.php to your hosting provider. Place the files in a new empty directory under "
112
+ . "your host's webroot accessible from a valid URL such as http://your-domain/your-wp-directory/installer.php to launch the install wizard. On some hosts the root directory "
113
+ . "will be a something like public_html -or- www. If your're not sure contact your hosting provider. </li>"
114
+ . "</ol>"
115
+ . "For complete instructions see:<br/>
116
+ <a href='https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&amp;utm_medium=wordpress_plugin&amp;utm_content=package_built_install_help4&amp;utm_campaign=duplicator_free#quick-040-q' target='_blank'>
117
+ How do I install this Package?</a><br/><br/>",'duplicator');
118
+ }
119
+
120
+ public function get_details_help()
121
+ {
122
+ return __("<b>Packages » Details</b> <br/>"
123
+ . "The details view will give you a full break-down of the package including any errors that may have occured during the install. <br/><br/>",'duplicator');
124
+ }
125
+
126
+ }
127
+
128
+
views/settings/controller.php CHANGED
@@ -23,8 +23,9 @@ $current_tab = isset($_REQUEST['tab']) ? sanitize_text_field($_REQUEST['tab']) :
23
  <a href="?page=duplicator-settings&tab=package" class="nav-tab <?php echo ($current_tab == 'package') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Packages', 'duplicator'); ?></a>
24
  <a href="?page=duplicator-settings&tab=schedule" class="nav-tab <?php echo ($current_tab == 'schedule') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Schedules', 'duplicator'); ?></a>
25
  <a href="?page=duplicator-settings&tab=storage" class="nav-tab <?php echo ($current_tab == 'storage') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Storage', 'duplicator'); ?></a>
 
26
  <a href="?page=duplicator-settings&tab=license" class="nav-tab <?php echo ($current_tab == 'license') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('License', 'duplicator'); ?></a>
27
- <a href="?page=duplicator-settings&tab=about" class="nav-tab <?php echo ($current_tab == 'about') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('About', 'duplicator'); ?></a>
28
  </h2>
29
 
30
  <?php
@@ -37,6 +38,8 @@ $current_tab = isset($_REQUEST['tab']) ? sanitize_text_field($_REQUEST['tab']) :
37
  break;
38
  case 'storage': include(DUPLICATOR_PLUGIN_PATH."views/settings/storage.php");
39
  break;
 
 
40
  case 'license': include(DUPLICATOR_PLUGIN_PATH."views/settings/license.php");
41
  break;
42
  case 'about': include(DUPLICATOR_PLUGIN_PATH."views/settings/about-info.php");
23
  <a href="?page=duplicator-settings&tab=package" class="nav-tab <?php echo ($current_tab == 'package') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Packages', 'duplicator'); ?></a>
24
  <a href="?page=duplicator-settings&tab=schedule" class="nav-tab <?php echo ($current_tab == 'schedule') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Schedules', 'duplicator'); ?></a>
25
  <a href="?page=duplicator-settings&tab=storage" class="nav-tab <?php echo ($current_tab == 'storage') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Storage', 'duplicator'); ?></a>
26
+ <a href="?page=duplicator-settings&tab=import" class="nav-tab <?php echo ($current_tab == 'import') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Import', 'duplicator'); ?></a>
27
  <a href="?page=duplicator-settings&tab=license" class="nav-tab <?php echo ($current_tab == 'license') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('License', 'duplicator'); ?></a>
28
+ <a href="?page=duplicator-settings&tab=about" class="nav-tab <?php echo ($current_tab == 'about') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('About', 'duplicator'); ?></a>
29
  </h2>
30
 
31
  <?php
38
  break;
39
  case 'storage': include(DUPLICATOR_PLUGIN_PATH."views/settings/storage.php");
40
  break;
41
+ case 'import': include(DUPLICATOR_PLUGIN_PATH."views/settings/import.php");
42
+ break;
43
  case 'license': include(DUPLICATOR_PLUGIN_PATH."views/settings/license.php");
44
  break;
45
  case 'about': include(DUPLICATOR_PLUGIN_PATH."views/settings/about-info.php");
views/settings/gopro.php CHANGED
@@ -4,56 +4,68 @@ DUP_Util::hasCapability('export');
4
 
5
  require_once(DUPLICATOR_PLUGIN_PATH . '/assets/js/javascript.php');
6
  require_once(DUPLICATOR_PLUGIN_PATH . '/views/inc.header.php');
 
 
 
 
 
 
 
 
 
7
  ?>
8
  <style>
9
  /*================================================
10
  PAGE-SUPPORT:*/
11
  div.dup-pro-area {
12
  padding:10px 70px; max-width:750px; width:90%; margin:auto; text-align:center;
13
- background:#fff; border-radius:20px;
14
- box-shadow:inset 0px 0px 67px 20px rgba(241,241,241,1);
15
  }
 
16
  i.dup-gopro-help {color:#777 !important; margin-left:5px; font-size:14px; }
17
- td.group-header {background-color:#D5D5D5; color: #000; font-size: 20px; padding:7px !important; font-weight: bold; text-align: left}
18
  div.dup-compare-area {width:400px; float:left; border:1px solid #dfdfdf; border-radius:4px; margin:10px; line-height:18px;box-shadow:0 8px 6px -6px #ccc;}
19
  div.feature {background:#fff; padding:15px; margin:2px; text-align:center; min-height:20px}
20
  div.feature a {font-size:18px; font-weight:bold;}
21
  div.dup-compare-area div.feature div.info {display:none; padding:7px 7px 5px 7px; font-style:italic; color:#555; font-size:14px}
22
  div.dup-gopro-header {text-align:center; margin:5px 0 15px 0; font-size:18px; line-height:30px}
23
  div.dup-gopro-header b {font-size:35px}
24
- button.dup-check-it-btn {box-shadow:5px 5px 5px 0px #999 !important; font-size:20px !important; height:45px !important; padding:7px 30px 7px 30px !important; color:white!important; background-color: #3e8f3e!important; font-weight: bold!important;
25
- color: white;
26
- font-weight: bold;}
27
-
28
  #comparison-table { margin-top:25px; border-spacing:0px; width:100%}
29
  #comparison-table th { color:#E21906;}
30
  #comparison-table td, #comparison-table th { font-size:1.2rem; padding:11px; }
31
  #comparison-table .feature-column { text-align:left; width:46%}
32
  #comparison-table .check-column { text-align:center; width:27% }
33
  #comparison-table tr:nth-child(2n+2) { background-color:#f6f6f6; }
34
- .button.button-large.dup-check-it-btn { line-height: 28px; }
35
-
36
  </style>
37
 
38
- <div class="dup-pro-area">
39
  <img src="<?php echo esc_url(DUPLICATOR_PLUGIN_URL."assets/img/logo-dpro-300x50.png"); ?>" />
40
  <div style="font-size:18px; font-style:italic; color:gray; border-bottom: 1px solid silver; padding-bottom:10px; margin-bottom: -30px">
41
- <?php esc_html_e('The simplicity of Duplicator', 'duplicator') ?>
42
- <?php esc_html_e('with power for everyone.', 'duplicator') ?>
43
  </div>
44
 
45
- <table id="comparison-table">
 
 
 
 
 
 
 
 
 
 
 
46
  <tr>
47
  <th class="feature-column"></th>
48
  <th class="check-column"><?php esc_html_e('Free', 'duplicator') ?></th>
49
  <th class="check-column"><?php esc_html_e('Professional', 'duplicator') ?></th>
50
  </tr>
51
-
52
  <!-- =====================
53
  CORE FEATURES-->
54
- <!-- <tr>
55
  <td colspan="3" class="group-header"><?php esc_html_e('Core Features', 'duplicator') ?></td>
56
- </tr>-->
57
  <tr>
58
  <td class="feature-column"><?php esc_html_e('Backup Files & Database', 'duplicator') ?></td>
59
  <td class="check-column"><i class="fa fa-check"></i></td>
@@ -100,12 +112,11 @@ require_once(DUPLICATOR_PLUGIN_PATH . '/views/inc.header.php');
100
  <td class="check-column"></td>
101
  <td class="check-column"><i class="fa fa-check"></i></td>
102
  </tr>
103
-
104
  <!-- =====================
105
  CLOUD STORAGE-->
106
- <!-- <tr>
107
  <td colspan="3" class="group-header"><?php esc_html_e('Cloud Storage', 'duplicator') ?></td>
108
- </tr> -->
109
  <tr>
110
  <td class="feature-column">
111
  <img src="<?php echo esc_url(DUPLICATOR_PLUGIN_URL."assets/img/amazon-64.png") ?>" style='height:16px; width:16px' />
@@ -154,12 +165,11 @@ require_once(DUPLICATOR_PLUGIN_PATH . '/views/inc.header.php');
154
  <td class="check-column"></td>
155
  <td class="check-column"><i class="fa fa-check"></i></td>
156
  </tr>
157
-
158
  <!-- =====================
159
  ENHANCED OPTIONS -->
160
- <!-- <tr>
161
  <td colspan="3" class="group-header"><?php esc_html_e('Enhanced Options', 'duplicator') ?></td>
162
- </tr>-->
163
  <tr>
164
  <td class="feature-column">
165
  <img src="<?php echo DUPLICATOR_PLUGIN_URL ?>assets/img/cpanel-48.png" style="width:16px; height:12px" />
@@ -243,15 +253,14 @@ require_once(DUPLICATOR_PLUGIN_PATH . '/views/inc.header.php');
243
  <td class="check-column"></td>
244
  <td class="check-column"><i class="fa fa-check"></i></td>
245
  </tr>
246
-
247
  <!-- =====================
248
  POWER TOOLS -->
249
- <!-- <tr>
250
  <td colspan="3" class="group-header">
251
  <?php esc_html_e('Power Tools', 'duplicator'); ?>
252
  <span style="font-weight:normal; font-size:11px"><?php esc_html_e('Freelancer+', 'duplicator'); ?></span>
253
  </td>
254
- </tr>-->
255
  <tr>
256
  <td class="feature-column"><?php esc_html_e('Hourly Schedules', 'duplicator') ?></td>
257
  <td class="check-column"></td>
@@ -305,15 +314,13 @@ require_once(DUPLICATOR_PLUGIN_PATH . '/views/inc.header.php');
305
  <td class="check-column"></td>
306
  <td class="check-column"><i class="fa fa-check"></i></td>
307
  </tr>
308
-
309
-
310
  <!-- =====================
311
  MULTI-SITE -->
312
- <!-- <tr>
313
  <td colspan="3" class="group-header">
314
  <?php esc_html_e('MultiSite', 'duplicator'); ?>
315
  </td>
316
- </tr>-->
317
  <tr>
318
  <td class="feature-column"><?php esc_html_e('Multisite Network Migration', 'duplicator') ?></td>
319
  <td class="check-column"></td>
@@ -334,13 +341,5 @@ require_once(DUPLICATOR_PLUGIN_PATH . '/views/inc.header.php');
334
  <td class="check-column"><i class="fa fa-check"></i></td>
335
  </tr>
336
  </table>
337
-
338
- <br style="clear:both" />
339
- <p style="text-align:center">
340
- <button onclick="window.open('https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_go_pro&utm_campaign=duplicator_pro');" class="button button-large dup-check-it-btn" >
341
- <?php esc_html_e('Check It Out!', 'duplicator') ?>
342
- </button>
343
- </p>
344
- <br/><br/>
345
  </div>
346
- <br/><br/>
4
 
5
  require_once(DUPLICATOR_PLUGIN_PATH . '/assets/js/javascript.php');
6
  require_once(DUPLICATOR_PLUGIN_PATH . '/views/inc.header.php');
7
+
8
+ if(mt_rand(0, 1) == 0) {
9
+ $test_text = esc_html__('Check It Out!', 'duplicator');
10
+ $test_url = "https://snapcreek.com/duplicator/comparison/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_go_pro_checkitout&utm_campaign=duplicator_pro";
11
+ } else {
12
+ $test_text = esc_html__('Learn More', 'duplicator');
13
+ $test_url = "https://snapcreek.com/duplicator/comparison/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_go_pro_learnmore&utm_campaign=duplicator_pro";
14
+ }
15
+
16
  ?>
17
  <style>
18
  /*================================================
19
  PAGE-SUPPORT:*/
20
  div.dup-pro-area {
21
  padding:10px 70px; max-width:750px; width:90%; margin:auto; text-align:center;
22
+ background:#fff; border-radius:20px; box-shadow:inset 0px 0px 67px 20px rgba(241,241,241,1);
 
23
  }
24
+ div.dup-pro-area-no-table { padding:10px; max-width:850px; margin:40px auto; text-align:center;}
25
  i.dup-gopro-help {color:#777 !important; margin-left:5px; font-size:14px; }
26
+ td.group-header {background-color:#D5D5D5; color: #000; font-size: 20px; padding:7px !important; font-weight: bold; text-align: left; display:none}
27
  div.dup-compare-area {width:400px; float:left; border:1px solid #dfdfdf; border-radius:4px; margin:10px; line-height:18px;box-shadow:0 8px 6px -6px #ccc;}
28
  div.feature {background:#fff; padding:15px; margin:2px; text-align:center; min-height:20px}
29
  div.feature a {font-size:18px; font-weight:bold;}
30
  div.dup-compare-area div.feature div.info {display:none; padding:7px 7px 5px 7px; font-style:italic; color:#555; font-size:14px}
31
  div.dup-gopro-header {text-align:center; margin:5px 0 15px 0; font-size:18px; line-height:30px}
32
  div.dup-gopro-header b {font-size:35px}
 
 
 
 
33
  #comparison-table { margin-top:25px; border-spacing:0px; width:100%}
34
  #comparison-table th { color:#E21906;}
35
  #comparison-table td, #comparison-table th { font-size:1.2rem; padding:11px; }
36
  #comparison-table .feature-column { text-align:left; width:46%}
37
  #comparison-table .check-column { text-align:center; width:27% }
38
  #comparison-table tr:nth-child(2n+2) { background-color:#f6f6f6; }
 
 
39
  </style>
40
 
41
+ <div class="dup-pro-area-no-table">
42
  <img src="<?php echo esc_url(DUPLICATOR_PLUGIN_URL."assets/img/logo-dpro-300x50.png"); ?>" />
43
  <div style="font-size:18px; font-style:italic; color:gray; border-bottom: 1px solid silver; padding-bottom:10px; margin-bottom: -30px">
44
+ <?php esc_html_e('The simplicity of Duplicator with power for everyone.', 'duplicator') ?>
 
45
  </div>
46
 
47
+ <div style="margin:60px 0 100px 0">
48
+ <div class="txt-call-action-title">
49
+ <?php esc_html_e('Take Duplicator to the next level with features you’ll really appreciate!', 'duplicator') ?><br/>
50
+ <?php esc_html_e("Check out what you're missing with Duplicator Pro...", 'duplicator') ?>
51
+
52
+ </div>
53
+ <br/><br/>
54
+ <a href="<?php echo $test_url ?>" class="dup-btn-call-action" target="_blank"><?php echo $test_text ?></a>
55
+ </div>
56
+
57
+
58
+ <table id="comparison-table" style="display:none">
59
  <tr>
60
  <th class="feature-column"></th>
61
  <th class="check-column"><?php esc_html_e('Free', 'duplicator') ?></th>
62
  <th class="check-column"><?php esc_html_e('Professional', 'duplicator') ?></th>
63
  </tr>
 
64
  <!-- =====================
65
  CORE FEATURES-->
66
+ <tr>
67
  <td colspan="3" class="group-header"><?php esc_html_e('Core Features', 'duplicator') ?></td>
68
+ </tr>
69
  <tr>
70
  <td class="feature-column"><?php esc_html_e('Backup Files & Database', 'duplicator') ?></td>
71
  <td class="check-column"><i class="fa fa-check"></i></td>
112
  <td class="check-column"></td>
113
  <td class="check-column"><i class="fa fa-check"></i></td>
114
  </tr>
 
115
  <!-- =====================
116
  CLOUD STORAGE-->
117
+ <tr>
118
  <td colspan="3" class="group-header"><?php esc_html_e('Cloud Storage', 'duplicator') ?></td>
119
+ </tr>
120
  <tr>
121
  <td class="feature-column">
122
  <img src="<?php echo esc_url(DUPLICATOR_PLUGIN_URL."assets/img/amazon-64.png") ?>" style='height:16px; width:16px' />
165
  <td class="check-column"></td>
166
  <td class="check-column"><i class="fa fa-check"></i></td>
167
  </tr>
 
168
  <!-- =====================
169
  ENHANCED OPTIONS -->
170
+ <tr>
171
  <td colspan="3" class="group-header"><?php esc_html_e('Enhanced Options', 'duplicator') ?></td>
172
+ </tr>
173
  <tr>
174
  <td class="feature-column">
175
  <img src="<?php echo DUPLICATOR_PLUGIN_URL ?>assets/img/cpanel-48.png" style="width:16px; height:12px" />
253
  <td class="check-column"></td>
254
  <td class="check-column"><i class="fa fa-check"></i></td>
255
  </tr>
 
256
  <!-- =====================
257
  POWER TOOLS -->
258
+ <tr>
259
  <td colspan="3" class="group-header">
260
  <?php esc_html_e('Power Tools', 'duplicator'); ?>
261
  <span style="font-weight:normal; font-size:11px"><?php esc_html_e('Freelancer+', 'duplicator'); ?></span>
262
  </td>
263
+ </tr>
264
  <tr>
265
  <td class="feature-column"><?php esc_html_e('Hourly Schedules', 'duplicator') ?></td>
266
  <td class="check-column"></td>
314
  <td class="check-column"></td>
315
  <td class="check-column"><i class="fa fa-check"></i></td>
316
  </tr>
 
 
317
  <!-- =====================
318
  MULTI-SITE -->
319
+ <tr>
320
  <td colspan="3" class="group-header">
321
  <?php esc_html_e('MultiSite', 'duplicator'); ?>
322
  </td>
323
+ </tr>
324
  <tr>
325
  <td class="feature-column"><?php esc_html_e('Multisite Network Migration', 'duplicator') ?></td>
326
  <td class="check-column"></td>
341
  <td class="check-column"><i class="fa fa-check"></i></td>
342
  </tr>
343
  </table>
 
 
 
 
 
 
 
 
344
  </div>
345
+
views/settings/import.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+ ?>
4
+ <style>
5
+ div.panel {padding: 20px 5px 10px 10px; text-align: center; }
6
+ div.sc-note {color:maroon; font-style: italic; line-height:17px; font-size:13px; margin:30px auto 40px auto; max-width: 650px; display:none}
7
+ </style>
8
+
9
+ <div class="panel">
10
+ <img src="<?php echo DUPLICATOR_PLUGIN_URL ?>assets/img/logo-dpro-300x50.png" />
11
+
12
+ <div class="txt-call-action-title">
13
+ <?php echo '<i class="fas fa-arrow-alt-circle-down"></i> ' . esc_html__('Drag and Drop Imports are available in Duplicator Pro.', 'duplicator'); ?>
14
+ </div>
15
+ <div class="txt-call-action-sub">
16
+ <?php
17
+ esc_html_e('The Import feature lets you skip the FTP and database creation steps when installing a site.', 'duplicator');
18
+ echo '<br/>';
19
+ esc_html_e('Just drag and drop a Duplicator Pro archive to quickly replace an existing WordPress installation!', 'duplicator');
20
+ ?>
21
+ </div>
22
+
23
+ <div class="sc-note">
24
+ <?php esc_html_e(' Drag and Drop import functionality works with packages created by Duplicator Pro. In the near future, the Duplicator Pro importer '
25
+ . 'will be enhanced to allow the importing of Duplicator Lite packages. For instructions on how to perform a classic or overwrite install with Duplicator Lite '
26
+ . 'packages visit the ', 'duplicator'); ?>
27
+ <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=package_built_install_help5&utm_campaign=duplicator_free#install_site" target="_blank"><?php esc_html_e('Quick Start Guide', 'duplicator'); ?></a>.
28
+ </div>
29
+
30
+ <a class="dup-btn-call-action" href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_tools_imports_checkitout&utm_campaign=duplicator_pro" target="_blank">
31
+ <?php esc_html_e('Check It Out!', 'duplicator') ?>
32
+ </a>
33
+ </div>
views/settings/schedule.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
- ?>
4
- <style>
5
- div.panel {padding: 20px 5px 10px 10px;}
6
- div.area {font-size:16px; text-align: center; line-height: 30px}
7
- </style>
8
-
9
- <div class="panel">
10
- <br/>
11
- <div class="area">
12
- <img src="<?php echo esc_url(DUPLICATOR_PLUGIN_URL."assets/img/logo-dpro-300x50.png"); ?>" />
13
- <?php
14
- echo '<h2><i class="far fa-clock fa-sm"></i> ' . esc_html__('This option is available in Duplicator Pro.', 'duplicator') . '</h2>';
15
- esc_html_e('Create robust schedules that automatically create packages while you sleep.', 'duplicator');
16
- echo '<br/>';
17
- esc_html_e('Simply choose your storage location and when you want it to run.', 'duplicator');
18
- ?>
19
- </div>
20
- <p style="text-align:center">
21
- <a href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_settings_schedule&utm_campaign=duplicator_pro" target="_blank" class="button button-primary button-large dup-check-it-btn" >
22
- <?php esc_html_e('Learn More', 'duplicator') ?>
23
- </a>
24
- </p>
25
- </div>
26
-
27
-
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+ ?>
4
+ <style>
5
+ div.panel {padding: 20px 5px 10px 10px; text-align: center; }
6
+ </style>
7
+
8
+
9
+ <div class="panel">
10
+ <img src="<?php echo DUPLICATOR_PLUGIN_URL ?>assets/img/logo-dpro-300x50.png" />
11
+
12
+ <div class="txt-call-action-title">
13
+ <i class="far fa-clock fa-sm"></i> <?php echo esc_html__('Schedules are available in Duplicator Pro.', 'duplicator'); ?>
14
+ </div>
15
+
16
+ <div class="txt-call-action-sub">
17
+ <?php
18
+ esc_html_e('Create robust schedules that automatically create packages while you sleep.', 'duplicator');
19
+ echo '<br/>';
20
+ esc_html_e('Simply choose your storage location and when you want it to run.', 'duplicator');
21
+ ?>
22
+ </div>
23
+
24
+ <a class="dup-btn-call-action" href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_settings_schedule_checkitout&utm_campaign=duplicator_pro" target="_blank">
25
+ <?php esc_html_e('Check It Out!', 'duplicator') ?>
26
+ </a>
27
+ </div>
views/settings/storage.php CHANGED
@@ -161,7 +161,7 @@ $storageAlert = new DUP_UI_Dialog();
161
  $storageAlert->title = __('Advanced Storage', 'duplicator');
162
  $storageAlert->height = 525;
163
  $storageAlert->width = 400;
164
- $storageAlert->okText = esc_html__('Close', 'duplicator');
165
  $storageAlert->message = dup_lite_storage_advanced_pro_content();
166
  $storageAlert->initAlert();
167
  ?>
161
  $storageAlert->title = __('Advanced Storage', 'duplicator');
162
  $storageAlert->height = 525;
163
  $storageAlert->width = 400;
164
+ //$storageAlert->okText = esc_html__('Close', 'duplicator');
165
  $storageAlert->message = dup_lite_storage_advanced_pro_content();
166
  $storageAlert->initAlert();
167
  ?>
views/tools/controller.php CHANGED
@@ -19,10 +19,9 @@ if ('d' == $current_tab) {
19
  <?php duplicator_header(__("Tools", 'duplicator')) ?>
20
 
21
  <h2 class="nav-tab-wrapper">
22
- <a href="?page=duplicator-tools&tab=diagnostics" class="nav-tab <?php echo ($current_tab == 'diagnostics') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Diagnostics', 'duplicator'); ?></a>
23
  <a href="?page=duplicator-tools&tab=templates" class="nav-tab <?php echo ($current_tab == 'templates') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Templates', 'duplicator'); ?></a>
24
  <a href="?page=duplicator-tools&tab=recovery" class="nav-tab <?php echo ($current_tab == 'recovery') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Recovery', 'duplicator'); ?></a>
25
- <a href="?page=duplicator-tools&tab=import" class="nav-tab <?php echo ($current_tab == 'import') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Import', 'duplicator'); ?></a>
26
  </h2>
27
 
28
  <?php
@@ -33,8 +32,6 @@ if ('d' == $current_tab) {
33
  break;
34
  case 'recovery': include(DUPLICATOR_PLUGIN_PATH."views/tools/recovery.php");
35
  break;
36
- case 'import': include(DUPLICATOR_PLUGIN_PATH."views/tools/import.php");
37
- break;
38
  }
39
  ?>
40
  </div>
19
  <?php duplicator_header(__("Tools", 'duplicator')) ?>
20
 
21
  <h2 class="nav-tab-wrapper">
22
+ <a href="?page=duplicator-tools&tab=diagnostics" class="nav-tab <?php echo ($current_tab == 'diagnostics') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('General', 'duplicator'); ?></a>
23
  <a href="?page=duplicator-tools&tab=templates" class="nav-tab <?php echo ($current_tab == 'templates') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Templates', 'duplicator'); ?></a>
24
  <a href="?page=duplicator-tools&tab=recovery" class="nav-tab <?php echo ($current_tab == 'recovery') ? 'nav-tab-active' : '' ?>"> <?php esc_html_e('Recovery', 'duplicator'); ?></a>
 
25
  </h2>
26
 
27
  <?php
32
  break;
33
  case 'recovery': include(DUPLICATOR_PLUGIN_PATH."views/tools/recovery.php");
34
  break;
 
 
35
  }
36
  ?>
37
  </div>
views/tools/import.php DELETED
@@ -1,35 +0,0 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
- ?>
4
- <style>
5
- div.panel {padding: 20px 5px 10px 10px;}
6
- div.area {font-size:16px; text-align: center; line-height: 30px; margin:auto; width: 100%;}
7
- div.sc-note {color:maroon; font-style: italic; line-height:17px; font-size: 12px; margin:30px auto 40px auto; max-width: 650px; }
8
- </style>
9
-
10
- <div class="panel">
11
-
12
- <br/>
13
- <div class="area">
14
- <img src="<?php echo DUPLICATOR_PLUGIN_URL ?>assets/img/logo-dpro-300x50.png" />
15
- <?php
16
- echo '<h2><i class="fas fa-arrow-alt-circle-down"></i> ' . esc_html__('Drag and Drop imports are available in Duplicator Pro.', 'duplicator') . '</h2>';
17
- esc_html_e('The Import feature lets you skip the FTP and database creation steps when installing a site.', 'duplicator');
18
- echo '<br/>';
19
- esc_html_e('Just drag and drop a Duplicator Pro archive to quickly replace an existing WordPress installation!', 'duplicator');
20
- ?>
21
- <div class="sc-note">
22
- <?php esc_html_e(' Drag and Drop import functionality works with packages created by Duplicator Pro. In the near future, the Duplicator Pro importer '
23
- . 'will be enhanced to allow the importing of Duplicator Lite packages. For instructions on how to perform a classic install of Duplicator Lite '
24
- . 'packages visit the ', 'duplicator'); ?>
25
- <a href="https://snapcreek.com/duplicator/docs/quick-start/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=package_built_install_help&utm_campaign=duplicator_free#quick-040-q" target="_blank"><?php esc_html_e('Quick Start Guide', 'duplicator'); ?></a>.
26
- </div>
27
- </div>
28
- <p style="text-align:center">
29
- <a href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_tools_imports&utm_campaign=duplicator_pro" target="_blank" class="button button-primary button-large dup-check-it-btn" >
30
- <?php esc_html_e('Check Out Pro', 'duplicator') ?>
31
- </a>
32
- </p>
33
- </div>
34
-
35
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
views/tools/recovery.php CHANGED
@@ -1,28 +1,29 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
- ?>
4
- <style>
5
- div.panel {padding: 20px 5px 10px 10px;}
6
- div.area {font-size:16px; text-align: center; line-height: 30px}
7
- </style>
8
-
9
- <div class="panel">
10
-
11
- <br/>
12
- <div class="area">
13
- <img src="<?php echo DUPLICATOR_PLUGIN_URL ?>assets/img/logo-dpro-300x50.png" />
14
- <?php
15
- echo '<h2><i class="fas fa-undo-alt"></i> ' . esc_html__('Recovery Points are available in Duplicator Pro.', 'duplicator') . '</h2>';
16
- esc_html_e('Recovery Points allow you to quickly revert your website to a specific point in time.', 'duplicator');
17
- echo '<br/>';
18
- esc_html_e('Upgrade plugins or make risky site changes with confidence!', 'duplicator');
19
- ?>
20
- </div>
21
- <p style="text-align:center">
22
- <a href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_tools_recovery&utm_campaign=duplicator_pro" target="_blank" class="button button-primary button-large dup-check-it-btn" >
23
- <?php esc_html_e('Check Out Pro', 'duplicator') ?>
24
- </a>
25
- </p>
26
- </div>
27
-
28
-
 
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+ ?>
4
+
5
+ <style>
6
+ div.panel {padding: 20px 5px 10px 10px; text-align: center; }
7
+ </style>
8
+
9
+
10
+ <div class="panel">
11
+ <img src="<?php echo DUPLICATOR_PLUGIN_URL ?>assets/img/logo-dpro-300x50.png" />
12
+
13
+ <div class="txt-call-action-title">
14
+ <i class="fas fa-undo-alt"></i>
15
+ <?php echo esc_html__('Recovery Points are available in Duplicator Pro.', 'duplicator'); ?>
16
+ </div>
17
+
18
+ <div class="txt-call-action-sub">
19
+ <?php
20
+ esc_html_e('Recovery Points allow you to quickly revert your website to a specific point in time.', 'duplicator');
21
+ echo '<br/>';
22
+ esc_html_e('Upgrade plugins or make risky site changes with confidence!', 'duplicator');
23
+ ?>
24
+ </div>
25
+
26
+ <a class="dup-btn-call-action" href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_tools_recovery_checkitout&utm_campaign=duplicator_pro" target="_blank">
27
+ <?php esc_html_e('Check It Out!', 'duplicator') ?>
28
+ </a>
29
+ </div>
views/tools/templates.php CHANGED
@@ -1,28 +1,28 @@
1
- <?php
2
- defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
- ?>
4
- <style>
5
- div.panel {padding: 20px 5px 10px 10px;}
6
- div.area {font-size:16px; text-align: center; line-height: 30px}
7
- </style>
8
-
9
- <div class="panel">
10
-
11
- <br/>
12
- <div class="area">
13
- <img src="<?php echo DUPLICATOR_PLUGIN_URL ?>assets/img/logo-dpro-300x50.png" />
14
- <?php
15
- echo '<h2><i class="far fa-clone"></i> ' . esc_html__('This option is available in Duplicator Pro.', 'duplicator') . '</h2>';
16
- esc_html_e('Templates allow you to customize what you want to include in your site and store it as a re-usable profile.', 'duplicator');
17
- echo '<br/>';
18
- esc_html_e('Save time and create a template that can be applied to a schedule or a custom package setup.', 'duplicator');
19
- ?>
20
- </div>
21
- <p style="text-align:center">
22
- <a href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_tools_templates&utm_campaign=duplicator_pro" target="_blank" class="button button-primary button-large dup-check-it-btn" >
23
- <?php esc_html_e('Learn More', 'duplicator') ?>
24
- </a>
25
- </p>
26
- </div>
27
-
28
-
1
+ <?php
2
+ defined('ABSPATH') || defined('DUPXABSPATH') || exit;
3
+ ?>
4
+ <style>
5
+ div.panel {padding: 20px 5px 10px 10px; text-align: center; }
6
+ </style>
7
+
8
+ <div class="panel">
9
+ <img src="<?php echo DUPLICATOR_PLUGIN_URL ?>assets/img/logo-dpro-300x50.png" />
10
+
11
+ <div class="txt-call-action-title">
12
+ <i class="far fa-clone"></i>
13
+ <?php echo esc_html__('Templates are available in Duplicator Pro.', 'duplicator'); ?>
14
+ </div>
15
+ <div class="txt-call-action-sub">
16
+ <?php
17
+ esc_html_e('Templates allow you to customize what you want to include in your site and store it as a re-usable profile.', 'duplicator');
18
+ echo '<br/>';
19
+ esc_html_e('Save time and create a template that can be applied to a schedule or a custom package setup.', 'duplicator');
20
+ ?>
21
+ </div>
22
+
23
+ <a class="dup-btn-call-action" href="https://snapcreek.com/duplicator/?utm_source=duplicator_free&utm_medium=wordpress_plugin&utm_content=free_tools_templates_checkitout&utm_campaign=duplicator_pro" target="_blank">
24
+ <?php esc_html_e('Check It Out!', 'duplicator') ?>
25
+ </a>
26
+ </div>
27
+
28
+