WP Reset – Fastest WordPress Reset Plugin - Version 1.25

Version Description

Download this release

Release Info

Developer WebFactory
Plugin Icon 128x128 WP Reset – Fastest WordPress Reset Plugin
Version 1.25
Comparing to
See all releases

Code changes from version 1.20 to 1.25

Files changed (4) hide show
  1. css/wp-reset.css +19 -0
  2. js/wp-reset.js +38 -1
  3. readme.txt +20 -6
  4. wp-reset.php +57 -20
css/wp-reset.css CHANGED
@@ -72,6 +72,25 @@
72
  animation:spin 1.5s linear infinite;
73
  }
74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  @-moz-keyframes spin { 100% { -moz-transform: rotate(-360deg); } }
76
  @-webkit-keyframes spin { 100% { -webkit-transform: rotate(-360deg); } }
77
  @keyframes spin { 100% { -webkit-transform: rotate(-360deg); transform:rotate(-360deg); } }
72
  animation:spin 1.5s linear infinite;
73
  }
74
 
75
+ .tools_page_wp-reset .notice-error {
76
+ border-color: #dd3036;
77
+ }
78
+
79
+ .tools_page_wp-reset .toggle-card {
80
+ position: absolute;
81
+ right: 2em;
82
+ top: 2.2em;
83
+ text-decoration: none;
84
+ }
85
+
86
+ .tools_page_wp-reset .card {
87
+ padding: 1em 2em 1em 2em;
88
+ }
89
+
90
+ .tools_page_wp-reset .card.collapsed p, .tools_page_wp-reset .card.collapsed b, .tools_page_wp-reset .card.collapsed ul {
91
+ display: none;
92
+ }
93
+
94
  @-moz-keyframes spin { 100% { -moz-transform: rotate(-360deg); } }
95
  @-webkit-keyframes spin { 100% { -webkit-transform: rotate(-360deg); } }
96
  @keyframes spin { 100% { -webkit-transform: rotate(-360deg); transform:rotate(-360deg); } }
js/wp-reset.js CHANGED
@@ -63,6 +63,44 @@ jQuery(document).ready(function($) {
63
  }); // reset submit
64
 
65
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  // dismiss notice / pointer
67
  $('.wpr-dismiss-notice').on('click', function(e) {
68
  notice_name = $(this).data('notice');
@@ -81,4 +119,3 @@ jQuery(document).ready(function($) {
81
  return false;
82
  }); // dismiss notice
83
  }); // onload
84
-
63
  }); // reset submit
64
 
65
 
66
+ // collapse / expand card
67
+ $('.card').on('click', '.toggle-card', function(e) {
68
+ e.preventDefault();
69
+
70
+ card = $(this).parents('.card').toggleClass('collapsed');
71
+ $('.dashicons', this).toggleClass('dashicons-arrow-up-alt2').toggleClass('dashicons-arrow-down-alt2');
72
+ $(this).blur();
73
+
74
+ cards = localStorage.getItem('wp-reset-cards');
75
+ if (cards == null) {
76
+ cards = new Object();
77
+ } else {
78
+ cards = JSON.parse(cards);
79
+ }
80
+
81
+ if (card.hasClass('collapsed')) {
82
+ cards[card.attr('id')] = 'collapsed';
83
+ } else {
84
+ cards[card.attr('id')] = 'expanded';
85
+ }
86
+ localStorage.setItem('wp-reset-cards', JSON.stringify(cards));
87
+
88
+ return false;
89
+ }); // toggle-card
90
+
91
+
92
+ // init cards; collapse those that need collapsing
93
+ cards = localStorage.getItem('wp-reset-cards');
94
+ if (cards != null) {
95
+ cards = JSON.parse(cards);
96
+ }
97
+ $.each(cards, function(card_name, card_value) {
98
+ if (card_value == 'collapsed') {
99
+ $('a.toggle-card', '#' + card_name).trigger('click');
100
+ }
101
+ });
102
+
103
+
104
  // dismiss notice / pointer
105
  $('.wpr-dismiss-notice').on('click', function(e) {
106
  notice_name = $(this).data('notice');
119
  return false;
120
  }); // dismiss notice
121
  }); // onload
 
readme.txt CHANGED
@@ -4,7 +4,7 @@ Contributors: WebFactory, wpreset
4
  Requires at least: 4.0
5
  Requires PHP: 5.2
6
  Tested up to: 4.9
7
- Stable tag: 1.20
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -39,11 +39,16 @@ Access WP Reset admin page via the "Tools" menu.
39
  * everything will be reset; see bullets above for details
40
  * site title, WordPress address, site address, site language, search engine visibility settings as well as the current user will be restored
41
  * you will be logged out, automatically logged in and taken to the admin dashboard
42
- * WP Reset plugin will be reactivated
43
 
44
  #### WP-CLI support
45
 
46
- WP Reset comes with full WP-CLI support. Help on our WP-CLI commands is available via _wp help reset_. By default the commands have to be confirmed but you can use the `--yes` option to skip confirmation. Instead of the active user, the first user with admin privileges found in the database will be restored after reset. Please be careful when using WP Reset with WP-CLI - as with using the GUI there is no undo.
 
 
 
 
 
47
 
48
  == Installation ==
49
 
@@ -70,7 +75,16 @@ Or if needed, upload manually;
70
 
71
  == Changelog ==
72
 
73
- = 1.2 =
 
 
 
 
 
 
 
 
 
74
  * 2018/07/09
75
  * we hit 40k installations on 2018/06/26
76
  * WP-CLI support via "wp reset" command
@@ -80,13 +94,13 @@ Or if needed, upload manually;
80
  * code clean up
81
  * preparations for further development and new features
82
 
83
- = 1.1 =
84
  * 2018/05/09
85
  * WebFactory took over development
86
  * numerous bug fixes and improvements
87
  * 30,000 installations; 199,000 downloads
88
 
89
- = 1.0 =
90
  * 2016/05/16
91
  * Initial release
92
 
4
  Requires at least: 4.0
5
  Requires PHP: 5.2
6
  Tested up to: 4.9
7
+ Stable tag: 1.25
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
39
  * everything will be reset; see bullets above for details
40
  * site title, WordPress address, site address, site language, search engine visibility settings as well as the current user will be restored
41
  * you will be logged out, automatically logged in and taken to the admin dashboard
42
+ * WP Reset plugin will be reactivated if that option is chosen in the post-reset options
43
 
44
  #### WP-CLI support
45
 
46
+ WP Reset comes with full WP-CLI support. Help on our WP-CLI commands is available via _wp help reset_. By default the commands have to be confirmed but you can use the `--yes` option to skip confirmation. Instead of the active user, the first user with admin privileges found in the database will be restored after reset. Please be careful when using WP Reset with WP-CLI - as with using the GUI there is no undo.
47
+
48
+ #### Multisite (WP-MU) Support
49
+
50
+ WP Reset has yet to be completely tested with multisite! Please be careful when using it with multisite enabled. We don't recommend to resetting the main site. Sub-sites should be OK. We're working on making WP Reset fully compatible with WP-MU. Till then please be careful. Thank you for understanding.
51
+
52
 
53
  == Installation ==
54
 
75
 
76
  == Changelog ==
77
 
78
+ = v1.25 =
79
+ * 2018/07/31
80
+ * code clean-up
81
+ * post-reset options - reactivate plugin, themes & WP Reset
82
+ * added WP-MU warning till we make WP Reset fully compatible with it
83
+ * Tidy Repo notice
84
+ * added option to collapse boxes
85
+ * modified rating notice
86
+
87
+ = v1.20 =
88
  * 2018/07/09
89
  * we hit 40k installations on 2018/06/26
90
  * WP-CLI support via "wp reset" command
94
  * code clean up
95
  * preparations for further development and new features
96
 
97
+ = v1.10 =
98
  * 2018/05/09
99
  * WebFactory took over development
100
  * numerous bug fixes and improvements
101
  * 30,000 installations; 199,000 downloads
102
 
103
+ = v1.0 =
104
  * 2016/05/16
105
  * Initial release
106
 
wp-reset.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: WP Reset
4
  Plugin URI: https://wpreset.com/
5
  Description: Reset the site to default installation values without modifying any files. Deletes all customizations and content.
6
- Version: 1.20
7
  Author: WebFactory Ltd
8
  Author URI: https://www.webfactoryltd.com/
9
  Text Domain: wp-reset
@@ -264,7 +264,7 @@ class WP_Reset {
264
  wp_enqueue_script('wp-reset', $this->plugin_url . 'js/wp-reset.js', array('jquery'), $this->version, true);
265
  wp_localize_script('wp-reset', 'wp_reset', $js_localize);
266
 
267
- // fix for agressive plugins that include their CSS on all pages
268
  wp_dequeue_style('uiStyleSheet');
269
  wp_dequeue_style('wpcufpnAdmin' );
270
  wp_dequeue_style('unifStyleSheet' );
@@ -316,6 +316,9 @@ class WP_Reset {
316
  $wplang = get_option('wplang');
317
  $siteurl = get_option('siteurl');
318
  $home = get_option('home');
 
 
 
319
 
320
  // for WP-CLI
321
  if (!$current_user->ID) {
@@ -359,12 +362,23 @@ class WP_Reset {
359
  $meta['reset_count']++;
360
  $this->update_options('meta', $meta);
361
 
 
 
 
 
 
362
  // reactivate WP Reset
363
- // todo: legacy constant - if nobody complains the constant will be replaced by options
364
- if (!defined('REACTIVATE_THE_WP_RESET') || REACTIVATE_THE_WP_RESET !== false) {
365
  activate_plugin(plugin_basename( __FILE__ ));
366
  }
367
 
 
 
 
 
 
 
 
368
  if (!$this->is_cli_running()) {
369
  // log out and log in the old/new user
370
  // since the password doesn't change this is potentially unnecessary
@@ -404,9 +418,13 @@ class WP_Reset {
404
  }
405
 
406
  // only one action at the moment
407
- // todo: check action name
408
  if (true === isset($_POST['wp_reset_confirm']) && 'reset' === $_POST['wp_reset_confirm']) {
409
- $this->do_reinstall();
 
 
 
 
 
410
  }
411
  } // do_reset
412
 
@@ -517,27 +535,36 @@ class WP_Reset {
517
  settings_errors();
518
  echo '<div class="wrap">';
519
  echo '<h1><img id="logo-icon" src="' . $this->plugin_url . 'img/wp-reset-logo.png" title="' . __('WP Reset', 'wp-reset') . '" alt="' . __('WP Reset', 'wp-reset') . '"></h1>';
 
 
 
 
 
 
 
 
 
520
 
521
  if (!empty($meta['reset_count']) && false === $notice_shown && false == $this->get_dismissed_notices('rate')) {
522
  echo '<div class="card notice-wrapper">';
523
- echo '<h2>' . __('Please help us keep the plugin maintained, free &amp; supported', 'wp-reset') . '</h2>';
524
  echo '<p>' . __('If you use &amp; enjoy WP Reset, <b>please rate it on WordPress.org</b>. It only takes a second and helps us keep the plugin free and maintained. Thank you!', 'wp-reset') . '</p>';
525
  echo '<p><a class="button-primary button" title="' . __('Rate WP Reset', 'wp-reset') . '" target="_blank" href="https://wordpress.org/support/plugin/wp-reset/reviews/#new-post">' . __('Help keep the plugin free - rate it!', 'wp-reset') . '</a> <a href="#" class="wpr-dismiss-notice dismiss-notice-rate" data-notice="rate">' . __('I\'ve already rated it', 'wp-reset') . '</a></p>';
526
  echo '</div>';
527
  $notice_shown = true;
528
  }
529
-
530
- // todo: finish up
531
- if (false && false === $notice_shown && false == $this->get_dismissed_notices('tidy')) {
532
  echo '<div class="card notice-wrapper">';
533
- echo '<h2>' . __('Are you a plugin author? Get your plugin reviewed on Tiny Repo', 'wp-reset') . '</h2>';
534
- echo '<p>' . __('If you use &amp; enjoy WP Reset, <b>please rate it on WordPress.org</b>. It only takes a second and helps us keep the plugin free and maintained. Thank you!', 'wp-reset') . '</p>';
535
- echo '<p><a class="button-primary button" title="' . __('Rate WP Reset', 'wp-reset') . '" target="_blank" href="https://tidyrepo.com/suggest-plugin/?utm-campaing=wp-reset&utm-medium=banner">' . __('Let Tidy Repo know you have a great plugin', 'wp-reset') . '</a> <a href="#" class="wpr-dismiss-notice dismiss-notice-rate" data-notice="tidy">' . __('Thanks, I\'m not interested', 'wp-reset') . '</a></p>';
536
  echo '</div>';
537
  $notice_shown = true;
538
  }
539
 
540
- echo '<div class="card">';
 
541
  echo '<h2>' . __('Please read carefully before proceeding. There is NO UNDO!', 'wp-reset') . '</h2>';
542
  echo '<b class="red">' . __('Resetting will delete:', 'wp-reset') . '</b>';
543
  echo '<ul class="plain-list">';
@@ -560,7 +587,7 @@ class WP_Reset {
560
  echo '<li>' . __('everything will be reset; see bullets above for details', 'wp-reset') . '</li>';
561
  echo '<li>' . __('site title, WordPress address, site address, site language, search engine visibility and current user will be restored', 'wp-reset') . '</li>';
562
  echo '<li>' . __('you will be logged out, automatically logged in and taken to the admin dashboard', 'wp-reset') . '</li>';
563
- echo '<li>' . __('WP Reset plugin will be reactivated', 'wp-reset') . '</li>';
564
  echo '</ul>';
565
 
566
  echo '<b>' . __('WP-CLI Support', 'wp-reset') . '</b>';
@@ -568,17 +595,27 @@ class WP_Reset {
568
  echo sprintf(__('All actions have to be confirmed. If you want to skip confirmation use the standard %s option. Please be carefull - there is NO UNDO.', 'wp-reset'), '<code>--yes</code>') . '</p>';
569
  echo '</div>';
570
 
 
 
 
 
 
 
 
 
 
 
571
  echo '<div class="card">';
572
  echo '<h2>' . __('Reset', 'wp-reset') . '</h2>';
573
  echo '<p>' . __('Type <b>reset</b> in the confirmation field to confirm the reset and then click the "Reset WordPress" button. <b>There is NO UNDO. No backups are made by this plugin.</b>', 'wp-reset') . '</p>';
574
- echo '<p>' . sprintf(__('While doing work on your site we recommend installing the free <a href="%s" target="_blank">UnderConstructionPage</a> plugin. It helps with SEO and builds trust with visitors.', 'wp-reset'), 'https://wordpress.org/plugins/under-construction-page/') . '</p>';
575
- echo '<form id="wp_reset_form" action="' . admin_url('tools.php?page=wp-reset') . '" method="post" autocomplete="off">';
576
  wp_nonce_field('wp-reset');
577
- echo '<input id="wp_reset_confirm" type="text" name="wp_reset_confirm" placeholder="' . esc_attr__('Type in "reset"', 'wp-reset'). '" value="" autocomplete="off"> &nbsp;';
578
- echo '<input id="wp_reset_submit" type="button" class="button-primary" value="' . __('Reset WordPress', 'wp-reset') . '">';
579
- echo '</form>';
580
  echo '</div>';
581
 
 
 
582
  echo '</div>'; // wrap
583
  } // plugin_page
584
 
3
  Plugin Name: WP Reset
4
  Plugin URI: https://wpreset.com/
5
  Description: Reset the site to default installation values without modifying any files. Deletes all customizations and content.
6
+ Version: 1.25
7
  Author: WebFactory Ltd
8
  Author URI: https://www.webfactoryltd.com/
9
  Text Domain: wp-reset
264
  wp_enqueue_script('wp-reset', $this->plugin_url . 'js/wp-reset.js', array('jquery'), $this->version, true);
265
  wp_localize_script('wp-reset', 'wp_reset', $js_localize);
266
 
267
+ // fix for aggressive plugins that include their CSS on all pages
268
  wp_dequeue_style('uiStyleSheet');
269
  wp_dequeue_style('wpcufpnAdmin' );
270
  wp_dequeue_style('unifStyleSheet' );
316
  $wplang = get_option('wplang');
317
  $siteurl = get_option('siteurl');
318
  $home = get_option('home');
319
+
320
+ $active_plugins = get_option('active_plugins');
321
+ $active_theme = wp_get_theme();
322
 
323
  // for WP-CLI
324
  if (!$current_user->ID) {
362
  $meta['reset_count']++;
363
  $this->update_options('meta', $meta);
364
 
365
+ // reactivate theme
366
+ if (!empty($params['reactivate_theme'])) {
367
+ switch_theme($active_theme->get_stylesheet());
368
+ }
369
+
370
  // reactivate WP Reset
371
+ if (!empty($params['reactivate_wpreset'])) {
 
372
  activate_plugin(plugin_basename( __FILE__ ));
373
  }
374
 
375
+ // reactivate all plugins
376
+ if (!empty($params['reactivate_plugins'])) {
377
+ foreach ($active_plugins as $plugin_file) {
378
+ activate_plugin($plugin_file);
379
+ }
380
+ }
381
+
382
  if (!$this->is_cli_running()) {
383
  // log out and log in the old/new user
384
  // since the password doesn't change this is potentially unnecessary
418
  }
419
 
420
  // only one action at the moment
 
421
  if (true === isset($_POST['wp_reset_confirm']) && 'reset' === $_POST['wp_reset_confirm']) {
422
+ $defaults = array('reactivate_theme' => '0',
423
+ 'reactivate_plugins' => '0',
424
+ 'reactivate_wpreset' => '0');
425
+ $params = shortcode_atts($defaults, (array) @$_POST['wpr-post-reset']);
426
+
427
+ $this->do_reinstall($params);
428
  }
429
  } // do_reset
430
 
535
  settings_errors();
536
  echo '<div class="wrap">';
537
  echo '<h1><img id="logo-icon" src="' . $this->plugin_url . 'img/wp-reset-logo.png" title="' . __('WP Reset', 'wp-reset') . '" alt="' . __('WP Reset', 'wp-reset') . '"></h1>';
538
+ echo '<form id="wp_reset_form" action="' . admin_url('tools.php?page=wp-reset') . '" method="post" autocomplete="off">';
539
+
540
+ if (false === $notice_shown && is_multisite()) {
541
+ echo '<div class="card notice-wrapper notice-error">';
542
+ echo '<h2>' . __('WP Reset has not been fully tested with multisite', 'wp-reset') . '</h2>';
543
+ echo '<p>' . __('Please be careful when using WP Reset with multisite enabled. It\'s not recommended to reset the main site. Sub-sites should be OK. We\'re working on making it fully compatible with WP-MU. <b>Till then please be careful.</b> Thank you for understanding.', 'wp-reset') . '</p>';
544
+ echo '</div>';
545
+ $notice_shown = true;
546
+ }
547
 
548
  if (!empty($meta['reset_count']) && false === $notice_shown && false == $this->get_dismissed_notices('rate')) {
549
  echo '<div class="card notice-wrapper">';
550
+ echo '<h2>' . __('Please help us keep the plugin free &amp; up-to-date', 'wp-reset') . '</h2>';
551
  echo '<p>' . __('If you use &amp; enjoy WP Reset, <b>please rate it on WordPress.org</b>. It only takes a second and helps us keep the plugin free and maintained. Thank you!', 'wp-reset') . '</p>';
552
  echo '<p><a class="button-primary button" title="' . __('Rate WP Reset', 'wp-reset') . '" target="_blank" href="https://wordpress.org/support/plugin/wp-reset/reviews/#new-post">' . __('Help keep the plugin free - rate it!', 'wp-reset') . '</a> <a href="#" class="wpr-dismiss-notice dismiss-notice-rate" data-notice="rate">' . __('I\'ve already rated it', 'wp-reset') . '</a></p>';
553
  echo '</div>';
554
  $notice_shown = true;
555
  }
556
+
557
+ if (false === $notice_shown && $meta['reset_count'] >= 2 && false == $this->get_dismissed_notices('tidy')) {
 
558
  echo '<div class="card notice-wrapper">';
559
+ echo '<h2>' . __('Are you a plugin author? Get your plugin reviewed on Tidy Repo', 'wp-reset') . '</h2>';
560
+ echo '<p>' . __('Since 2013 Tidy Repo has been reviewing the best and most reliable WordPress plugins. <b>Submitting a plugin is free</b>, so you have nothing to lose and a lot of exposure to gain when it gets reviewed.', 'wp-reset') . '</p>';
561
+ echo '<p><a class="button-primary button" title="' . __('Rate WP Reset', 'wp-reset') . '" target="_blank" href="https://tidyrepo.com/?utm_source=wp-reset-free&utm_medium=plugin&utm_content=notification&utm_campaign=wp-reset-free-v' . $this->version . '">' . __('Let Tidy Repo know you have a great plugin', 'wp-reset') . '</a> <a href="#" class="wpr-dismiss-notice dismiss-notice-rate" data-notice="tidy">' . __('Thanks, I\'m not interested', 'wp-reset') . '</a></p>';
562
  echo '</div>';
563
  $notice_shown = true;
564
  }
565
 
566
+ echo '<div class="card" id="card-description">';
567
+ echo '<a class="toggle-card" href="#" title="' . __('Collapse / expand box', 'wp-reset') . '"><span class="dashicons dashicons-arrow-up-alt2"></span></a>';
568
  echo '<h2>' . __('Please read carefully before proceeding. There is NO UNDO!', 'wp-reset') . '</h2>';
569
  echo '<b class="red">' . __('Resetting will delete:', 'wp-reset') . '</b>';
570
  echo '<ul class="plain-list">';
587
  echo '<li>' . __('everything will be reset; see bullets above for details', 'wp-reset') . '</li>';
588
  echo '<li>' . __('site title, WordPress address, site address, site language, search engine visibility and current user will be restored', 'wp-reset') . '</li>';
589
  echo '<li>' . __('you will be logged out, automatically logged in and taken to the admin dashboard', 'wp-reset') . '</li>';
590
+ echo '<li>' . __('WP Reset plugin will be reactivated if that option is chosen in the <a href="#card-post-reset">post-reset options</a>', 'wp-reset') . '</li>';
591
  echo '</ul>';
592
 
593
  echo '<b>' . __('WP-CLI Support', 'wp-reset') . '</b>';
595
  echo sprintf(__('All actions have to be confirmed. If you want to skip confirmation use the standard %s option. Please be carefull - there is NO UNDO.', 'wp-reset'), '<code>--yes</code>') . '</p>';
596
  echo '</div>';
597
 
598
+ $theme = wp_get_theme();
599
+
600
+ echo '<div class="card" id="card-post-reset">';
601
+ echo '<a class="toggle-card" href="#" title="' . __('Collapse / expand box', 'wp-reset') . '"><span class="dashicons dashicons-arrow-up-alt2"></span></a>';
602
+ echo '<h2>' . __('Post-reset actions', 'wp-reset') . '</h2>';
603
+ echo '<p><label for="reactivate-theme"><input name="wpr-post-reset[reactivate_theme]" type="checkbox" id="reactivate-theme" value="1"> ' . __('Reactivate current theme', 'wp-reset') . ' - ' . $theme->get('Name') . '</label></p>';
604
+ echo '<p><label for="reactivate-wpreset"><input name="wpr-post-reset[reactivate_wpreset]" type="checkbox" id="reactivate-wpreset" value="1" checked> ' . __('Reactivate WP Reset plugin', 'wp-reset') . '</label></p>';
605
+ echo '<p><label for="reactivate-plugins"><input name="wpr-post-reset[reactivate_plugins]" type="checkbox" id="reactivate-plugins" value="1"> ' . __('Reactivate all currently active plugins', 'wp-reset') . '</label></p>';
606
+ echo '</div>';
607
+
608
  echo '<div class="card">';
609
  echo '<h2>' . __('Reset', 'wp-reset') . '</h2>';
610
  echo '<p>' . __('Type <b>reset</b> in the confirmation field to confirm the reset and then click the "Reset WordPress" button. <b>There is NO UNDO. No backups are made by this plugin.</b>', 'wp-reset') . '</p>';
611
+
 
612
  wp_nonce_field('wp-reset');
613
+ echo '<p><input id="wp_reset_confirm" type="text" name="wp_reset_confirm" placeholder="' . esc_attr__('Type in "reset"', 'wp-reset'). '" value="" autocomplete="off"> &nbsp;';
614
+ echo '<input id="wp_reset_submit" type="button" class="button-primary" value="' . __('Reset WordPress', 'wp-reset') . '"></p>';
 
615
  echo '</div>';
616
 
617
+ echo '<br><br>';
618
+ echo '</form>';
619
  echo '</div>'; // wrap
620
  } // plugin_page
621