Version Description
Download this release
Release Info
| Developer | WebFactory |
| Plugin | |
| Version | 1.50 |
| Comparing to | |
| See all releases | |
Code changes from version 1.45 to 1.50
- css/wp-reset.css +4 -1
- js/wp-reset-pointers.js +1 -1
- js/wp-reset.js +11 -1
- readme.txt +8 -1
- wp-reset-cli.php +18 -6
- wp-reset.php +105 -20
css/wp-reset.css
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
/**
|
| 2 |
* WP Reset
|
| 3 |
* https://wpreset.com/
|
| 4 |
-
* (c) WebFactory Ltd, 2017-
|
| 5 |
*/
|
| 6 |
|
| 7 |
.tools_page_wp-reset #wp_reset_form input {
|
|
@@ -65,6 +65,7 @@
|
|
| 65 |
.tools_page_wp-reset .button {
|
| 66 |
box-shadow: none;
|
| 67 |
text-shadow: none;
|
|
|
|
| 68 |
}
|
| 69 |
|
| 70 |
.tools_page_wp-reset .swal2-container {
|
|
@@ -127,6 +128,8 @@
|
|
| 127 |
position: absolute;
|
| 128 |
top: 2em;
|
| 129 |
right: 2em;
|
|
|
|
|
|
|
| 130 |
}
|
| 131 |
|
| 132 |
.tools_page_wp-reset table {
|
| 1 |
/**
|
| 2 |
* WP Reset
|
| 3 |
* https://wpreset.com/
|
| 4 |
+
* (c) WebFactory Ltd, 2017-2019
|
| 5 |
*/
|
| 6 |
|
| 7 |
.tools_page_wp-reset #wp_reset_form input {
|
| 65 |
.tools_page_wp-reset .button {
|
| 66 |
box-shadow: none;
|
| 67 |
text-shadow: none;
|
| 68 |
+
margin-top: 1em;
|
| 69 |
}
|
| 70 |
|
| 71 |
.tools_page_wp-reset .swal2-container {
|
| 128 |
position: absolute;
|
| 129 |
top: 2em;
|
| 130 |
right: 2em;
|
| 131 |
+
margin: 0;
|
| 132 |
+
box-shadow: none;
|
| 133 |
}
|
| 134 |
|
| 135 |
.tools_page_wp-reset table {
|
js/wp-reset-pointers.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
/*
|
| 2 |
* WP Reset
|
| 3 |
* Backend GUI pointers
|
| 4 |
-
* (c) Web factory Ltd, 2017 -
|
| 5 |
*/
|
| 6 |
|
| 7 |
jQuery(document).ready(function($){
|
| 1 |
/*
|
| 2 |
* WP Reset
|
| 3 |
* Backend GUI pointers
|
| 4 |
+
* (c) Web factory Ltd, 2017 - 2019
|
| 5 |
*/
|
| 6 |
|
| 7 |
jQuery(document).ready(function($){
|
js/wp-reset.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
| 1 |
/**
|
| 2 |
* WP Reset
|
| 3 |
* https://wpreset.com/
|
| 4 |
-
* (c) WebFactory Ltd, 2017-
|
| 5 |
*/
|
| 6 |
|
| 7 |
|
|
@@ -75,6 +75,16 @@ jQuery(document).ready(function($) {
|
|
| 75 |
}); // truncate custom tables
|
| 76 |
|
| 77 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
// compare snapshot
|
| 79 |
$('#wpr-snapshots').on('click', '.compare-snapshot', 'click', function(e) {
|
| 80 |
e.preventDefault();
|
| 1 |
/**
|
| 2 |
* WP Reset
|
| 3 |
* https://wpreset.com/
|
| 4 |
+
* (c) WebFactory Ltd, 2017-2019
|
| 5 |
*/
|
| 6 |
|
| 7 |
|
| 75 |
}); // truncate custom tables
|
| 76 |
|
| 77 |
|
| 78 |
+
// delete htaccess file
|
| 79 |
+
$('.tools_page_wp-reset').on('click', '#delete-htaccess', 'click', function(e) {
|
| 80 |
+
e.preventDefault();
|
| 81 |
+
|
| 82 |
+
run_tool(this, 'delete_htaccess');
|
| 83 |
+
|
| 84 |
+
return false;
|
| 85 |
+
}); // delete htaccess file
|
| 86 |
+
|
| 87 |
+
|
| 88 |
// compare snapshot
|
| 89 |
$('#wpr-snapshots').on('click', '.compare-snapshot', 'click', function(e) {
|
| 90 |
e.preventDefault();
|
readme.txt
CHANGED
|
@@ -4,7 +4,7 @@ Contributors: WebFactory, wpreset, googlemapswidget, securityninja, underconstru
|
|
| 4 |
Requires at least: 4.0
|
| 5 |
Requires PHP: 5.2
|
| 6 |
Tested up to: 5.0
|
| 7 |
-
Stable tag: 1.
|
| 8 |
License: GPLv2 or later
|
| 9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 10 |
|
|
@@ -69,6 +69,7 @@ WP Reset has yet to be completely tested with multisite! Please be careful when
|
|
| 69 |
* Delete plugins - deletes all plugins except WP Reset which remains active.
|
| 70 |
* Delete themes - deletes all themes.
|
| 71 |
* Empty or delete custom tables - empties (truncates) or deletes (drops) all custom database tables.
|
|
|
|
| 72 |
|
| 73 |
|
| 74 |
== Installation ==
|
|
@@ -96,6 +97,12 @@ Or if needed, upload manually;
|
|
| 96 |
|
| 97 |
== Changelog ==
|
| 98 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
= v1.45 =
|
| 100 |
* 2018/11/27
|
| 101 |
* new tool: truncate or drop custom DB tables
|
| 4 |
Requires at least: 4.0
|
| 5 |
Requires PHP: 5.2
|
| 6 |
Tested up to: 5.0
|
| 7 |
+
Stable tag: 1.50
|
| 8 |
License: GPLv2 or later
|
| 9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 10 |
|
| 69 |
* Delete plugins - deletes all plugins except WP Reset which remains active.
|
| 70 |
* Delete themes - deletes all themes.
|
| 71 |
* Empty or delete custom tables - empties (truncates) or deletes (drops) all custom database tables.
|
| 72 |
+
* Delete .htaccess file - deletes the .htaccess file. If you need to edit .htaccess without FTP use our free <a href="https://wordpress.org/plugins/wp-htaccess-editor/">WP Htaccess Editor</a> plugin.
|
| 73 |
|
| 74 |
|
| 75 |
== Installation ==
|
| 97 |
|
| 98 |
== Changelog ==
|
| 99 |
|
| 100 |
+
= v1.50 =
|
| 101 |
+
* 2019/01/08
|
| 102 |
+
* new tool: delete .htaccess file
|
| 103 |
+
* new WP-CLI command: wp reset delete htaccess
|
| 104 |
+
* 90k users hit on 2018/12/12 with 489,100 downloads; 27 days for +10k & 58k downloads
|
| 105 |
+
|
| 106 |
= v1.45 =
|
| 107 |
* 2018/11/27
|
| 108 |
* new tool: truncate or drop custom DB tables
|
wp-reset-cli.php
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
/**
|
| 3 |
* WP Reset
|
| 4 |
* https://wpreset.com/
|
| 5 |
-
* (c) WebFactory Ltd, 2017-
|
| 6 |
*/
|
| 7 |
|
| 8 |
|
|
@@ -85,7 +85,7 @@ class WP_Reset_CLI extends WP_CLI_Command {
|
|
| 85 |
*
|
| 86 |
* ## OPTIONS
|
| 87 |
*
|
| 88 |
-
* <plugins|themes|transients|uploads|custom-tables>
|
| 89 |
* : WP objects to delete.
|
| 90 |
*
|
| 91 |
* [--yes]
|
|
@@ -102,16 +102,19 @@ class WP_Reset_CLI extends WP_CLI_Command {
|
|
| 102 |
* $ wp reset delete custom-tables --truncate --yes
|
| 103 |
* Success: 3 custom tables have been emptied.
|
| 104 |
*
|
|
|
|
|
|
|
|
|
|
| 105 |
* @when after_wp_load
|
| 106 |
*/
|
| 107 |
function delete( $args, $assoc_args ) {
|
| 108 |
global $wp_reset, $wpdb;
|
| 109 |
|
| 110 |
if ( empty( $args[0] ) ) {
|
| 111 |
-
WP_CLI::error( 'Please choose a subcommand: plugins, themes, transients, uploads or custom-tables.' );
|
| 112 |
return;
|
| 113 |
-
} elseif ( false == in_array( $args[0], array( 'themes', 'plugins', 'transients', 'uploads', 'custom-tables' ) ) ) {
|
| 114 |
-
WP_CLI::error( 'Unknown subcommand. Please choose from: plugins, themes, transients, uploads or custom tables.' );
|
| 115 |
} else {
|
| 116 |
$subcommand = $args[0];
|
| 117 |
}
|
|
@@ -148,9 +151,18 @@ class WP_Reset_CLI extends WP_CLI_Command {
|
|
| 148 |
WP_CLI::success( $cnt . ' custom tables have been deleted.' );
|
| 149 |
}
|
| 150 |
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 151 |
default:
|
| 152 |
// should never come to this but can't hurt
|
| 153 |
-
WP_CLI::error( 'Unknown subcommand. Please choose from: plugins, themes, transients, uploads or custom-tables.' );
|
| 154 |
return;
|
| 155 |
}
|
| 156 |
} // delete
|
| 2 |
/**
|
| 3 |
* WP Reset
|
| 4 |
* https://wpreset.com/
|
| 5 |
+
* (c) WebFactory Ltd, 2017-2019
|
| 6 |
*/
|
| 7 |
|
| 8 |
|
| 85 |
*
|
| 86 |
* ## OPTIONS
|
| 87 |
*
|
| 88 |
+
* <plugins|themes|transients|uploads|custom-tables|htaccess>
|
| 89 |
* : WP objects to delete.
|
| 90 |
*
|
| 91 |
* [--yes]
|
| 102 |
* $ wp reset delete custom-tables --truncate --yes
|
| 103 |
* Success: 3 custom tables have been emptied.
|
| 104 |
*
|
| 105 |
+
* $ wp reset delete htaccess --yes
|
| 106 |
+
* Success: Htaccess file has been deleted.
|
| 107 |
+
*
|
| 108 |
* @when after_wp_load
|
| 109 |
*/
|
| 110 |
function delete( $args, $assoc_args ) {
|
| 111 |
global $wp_reset, $wpdb;
|
| 112 |
|
| 113 |
if ( empty( $args[0] ) ) {
|
| 114 |
+
WP_CLI::error( 'Please choose a subcommand: plugins, themes, transients, uploads, htaccess or custom-tables.' );
|
| 115 |
return;
|
| 116 |
+
} elseif ( false == in_array( $args[0], array( 'themes', 'plugins', 'transients', 'uploads', 'htaccess', 'custom-tables' ) ) ) {
|
| 117 |
+
WP_CLI::error( 'Unknown subcommand. Please choose from: plugins, themes, transients, uploads, htaccess or custom tables.' );
|
| 118 |
} else {
|
| 119 |
$subcommand = $args[0];
|
| 120 |
}
|
| 151 |
WP_CLI::success( $cnt . ' custom tables have been deleted.' );
|
| 152 |
}
|
| 153 |
break;
|
| 154 |
+
case 'htaccess':
|
| 155 |
+
WP_CLI::confirm( 'Are you sure you want to delete the .htaccess file?', $assoc_args );
|
| 156 |
+
$tmp = $wp_reset->do_delete_htaccess();
|
| 157 |
+
if ( !is_wp_error( $tmp ) ) {
|
| 158 |
+
WP_CLI::success( 'Htaccess file has been deleted.' );
|
| 159 |
+
} else {
|
| 160 |
+
WP_CLI::error( 'Htaccess file has not been deleted. ' . $tmp->get_error_message() );
|
| 161 |
+
}
|
| 162 |
+
break;
|
| 163 |
default:
|
| 164 |
// should never come to this but can't hurt
|
| 165 |
+
WP_CLI::error( 'Unknown subcommand. Please choose from: plugins, themes, transients, uploads, htaccess or custom-tables.' );
|
| 166 |
return;
|
| 167 |
}
|
| 168 |
} // delete
|
wp-reset.php
CHANGED
|
@@ -3,12 +3,12 @@
|
|
| 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.
|
| 7 |
Author: WebFactory Ltd
|
| 8 |
Author URI: https://www.webfactoryltd.com/
|
| 9 |
Text Domain: wp-reset
|
| 10 |
|
| 11 |
-
Copyright 2015 -
|
| 12 |
|
| 13 |
This program is free software; you can redistribute it and/or modify
|
| 14 |
it under the terms of the GNU General Public License, version 2, as
|
|
@@ -26,7 +26,7 @@
|
|
| 26 |
|
| 27 |
// include only file
|
| 28 |
if (!defined('ABSPATH')) {
|
| 29 |
-
wp_die(__('Do not open this file directly.', 'wp-
|
| 30 |
}
|
| 31 |
|
| 32 |
|
|
@@ -216,9 +216,13 @@ class WP_Reset {
|
|
| 216 |
function ajax_dismiss_notice() {
|
| 217 |
check_ajax_referer('wp-reset_dismiss_notice');
|
| 218 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 219 |
$notice_name = trim(@$_GET['notice_name']);
|
| 220 |
if (!$this->dismiss_notice($notice_name)) {
|
| 221 |
-
wp_send_json_error('Notice is already dismissed.');
|
| 222 |
} else {
|
| 223 |
wp_send_json_success();
|
| 224 |
}
|
|
@@ -264,7 +268,7 @@ class WP_Reset {
|
|
| 264 |
* @return null
|
| 265 |
*/
|
| 266 |
function admin_enqueue_scripts($hook) {
|
| 267 |
-
// welcome pointer is shown on all pages except WPR,
|
| 268 |
$pointers = $this->get_pointers();
|
| 269 |
$dismissed_notices = $this->get_dismissed_notices();
|
| 270 |
|
|
@@ -274,7 +278,7 @@ class WP_Reset {
|
|
| 274 |
}
|
| 275 |
} // foreach
|
| 276 |
|
| 277 |
-
if (!empty($pointers) && '
|
| 278 |
$pointers['_nonce_dismiss_pointer'] = wp_create_nonce('wp-reset_dismiss_notice');
|
| 279 |
|
| 280 |
wp_enqueue_style('wp-pointer');
|
|
@@ -285,14 +289,14 @@ class WP_Reset {
|
|
| 285 |
}
|
| 286 |
|
| 287 |
// exit early if not on WP Reset page
|
| 288 |
-
if (
|
| 289 |
return;
|
| 290 |
}
|
| 291 |
|
| 292 |
$options = $this->get_options();
|
| 293 |
|
| 294 |
-
$js_localize = array('undocumented_error' => __('An undocumented error has
|
| 295 |
-
'documented_error' => __('An error has
|
| 296 |
'plugin_name' => __('WP Reset', 'wp-reset'),
|
| 297 |
'settings_url' => admin_url('tools.php?page=wp-reset'),
|
| 298 |
'icon_url' => $this->plugin_url . 'img/wp-reset-icon.png',
|
|
@@ -338,7 +342,7 @@ class WP_Reset {
|
|
| 338 |
*
|
| 339 |
* @return bool
|
| 340 |
*/
|
| 341 |
-
function is_cli_running() {
|
| 342 |
if (defined('WP_CLI') && WP_CLI) {
|
| 343 |
return true;
|
| 344 |
} else {
|
|
@@ -449,7 +453,14 @@ class WP_Reset {
|
|
| 449 |
* @return int Number of deleted themes.
|
| 450 |
*/
|
| 451 |
function do_delete_themes($keep_default_theme = true) {
|
| 452 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 453 |
$all_themes = wp_get_themes(array('errors' => null));
|
| 454 |
|
| 455 |
if (true == $keep_default_theme) {
|
|
@@ -503,6 +514,58 @@ class WP_Reset {
|
|
| 503 |
} // do_drop_custom_tables
|
| 504 |
|
| 505 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 506 |
/**
|
| 507 |
* Run one tool via AJAX call
|
| 508 |
*
|
|
@@ -511,6 +574,10 @@ class WP_Reset {
|
|
| 511 |
function ajax_run_tool() {
|
| 512 |
check_ajax_referer('wp-reset_run_tool');
|
| 513 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 514 |
$tool = trim(@$_GET['tool']);
|
| 515 |
$extra_data = trim(@$_GET['extra_data']);
|
| 516 |
|
|
@@ -526,6 +593,13 @@ class WP_Reset {
|
|
| 526 |
} elseif ($tool == 'delete_uploads') {
|
| 527 |
$cnt = $this->do_delete_uploads();
|
| 528 |
wp_send_json_success($cnt);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 529 |
} elseif ($tool == 'drop_custom_tables') {
|
| 530 |
$cnt = $this->do_drop_custom_tables();
|
| 531 |
wp_send_json_success($cnt);
|
|
@@ -612,7 +686,7 @@ class WP_Reset {
|
|
| 612 |
if (!$current_user->ID) {
|
| 613 |
$tmp = get_users(array('role' => 'administrator', 'order' => 'ASC', 'order_by' => 'ID'));
|
| 614 |
if (empty($tmp[0]->user_login)) {
|
| 615 |
-
return new WP_Error(
|
| 616 |
}
|
| 617 |
$current_user = $tmp[0];
|
| 618 |
}
|
|
@@ -1033,6 +1107,16 @@ class WP_Reset {
|
|
| 1033 |
echo '<a data-btn-confirm="Delete custom tables" data-text-wait="Deleting custom tables. Please wait." data-text-confirm="All custom tables with prefix <code>' . $wpdb->prefix . '</code> will be deleted. There is NO UNDO. WP Reset will not make any backups." data-text-done="%n custom tables have been deleted." class="button button-delete' . $custom_tables_btns . '" href="#" id="drop-custom-tables">Delete (drop) custom tables</a></p>';
|
| 1034 |
|
| 1035 |
echo '</div>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1036 |
} // tab_tools
|
| 1037 |
|
| 1038 |
|
|
@@ -1767,7 +1851,7 @@ class WP_Reset {
|
|
| 1767 |
*/
|
| 1768 |
function add_plugin_featured($plugin_slug, $res) {
|
| 1769 |
// check if plugin is alredy on the list
|
| 1770 |
-
if (is_array($res->plugins)) {
|
| 1771 |
foreach ($res->plugins as $plugin) {
|
| 1772 |
if ($plugin->slug == $plugin_slug) {
|
| 1773 |
return $res;
|
|
@@ -1776,9 +1860,7 @@ class WP_Reset {
|
|
| 1776 |
}
|
| 1777 |
|
| 1778 |
if ($plugin_info = get_transient('wf-plugin-info-' . $plugin_slug)) {
|
| 1779 |
-
|
| 1780 |
-
$tmp2 = array_slice($res->plugins, 2, sizeof($res->plugins) - 2, false);
|
| 1781 |
-
$res->plugins = array_merge($tmp1, array($plugin_info), $tmp2);
|
| 1782 |
} else {
|
| 1783 |
$plugin_info = plugins_api('plugin_information', array(
|
| 1784 |
'slug' => $plugin_slug,
|
|
@@ -1855,7 +1937,10 @@ class WP_Reset {
|
|
| 1855 |
|
| 1856 |
|
| 1857 |
// Create plugin instance and hook things up
|
| 1858 |
-
|
| 1859 |
-
|
| 1860 |
-
|
| 1861 |
-
|
|
|
|
|
|
|
|
|
| 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.50
|
| 7 |
Author: WebFactory Ltd
|
| 8 |
Author URI: https://www.webfactoryltd.com/
|
| 9 |
Text Domain: wp-reset
|
| 10 |
|
| 11 |
+
Copyright 2015 - 2019 Web factory Ltd (email: wpreset@webfactoryltd.com)
|
| 12 |
|
| 13 |
This program is free software; you can redistribute it and/or modify
|
| 14 |
it under the terms of the GNU General Public License, version 2, as
|
| 26 |
|
| 27 |
// include only file
|
| 28 |
if (!defined('ABSPATH')) {
|
| 29 |
+
wp_die(__('Do not open this file directly.', 'wp-reset'));
|
| 30 |
}
|
| 31 |
|
| 32 |
|
| 216 |
function ajax_dismiss_notice() {
|
| 217 |
check_ajax_referer('wp-reset_dismiss_notice');
|
| 218 |
|
| 219 |
+
if (!current_user_can('administrator')) {
|
| 220 |
+
wp_send_json_error(__('You are not allowed to run this action.', 'wp-reset'));
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
$notice_name = trim(@$_GET['notice_name']);
|
| 224 |
if (!$this->dismiss_notice($notice_name)) {
|
| 225 |
+
wp_send_json_error(__('Notice is already dismissed.', 'wp-reset'));
|
| 226 |
} else {
|
| 227 |
wp_send_json_success();
|
| 228 |
}
|
| 268 |
* @return null
|
| 269 |
*/
|
| 270 |
function admin_enqueue_scripts($hook) {
|
| 271 |
+
// welcome pointer is shown on all pages except WPR to admins, until dismissed
|
| 272 |
$pointers = $this->get_pointers();
|
| 273 |
$dismissed_notices = $this->get_dismissed_notices();
|
| 274 |
|
| 278 |
}
|
| 279 |
} // foreach
|
| 280 |
|
| 281 |
+
if (!empty($pointers) && !$this->is_plugin_page() && current_user_can('administrator')) {
|
| 282 |
$pointers['_nonce_dismiss_pointer'] = wp_create_nonce('wp-reset_dismiss_notice');
|
| 283 |
|
| 284 |
wp_enqueue_style('wp-pointer');
|
| 289 |
}
|
| 290 |
|
| 291 |
// exit early if not on WP Reset page
|
| 292 |
+
if (!$this->is_plugin_page()) {
|
| 293 |
return;
|
| 294 |
}
|
| 295 |
|
| 296 |
$options = $this->get_options();
|
| 297 |
|
| 298 |
+
$js_localize = array('undocumented_error' => __('An undocumented error has occurred. Please refresh the page and try again.', 'wp-reset'),
|
| 299 |
+
'documented_error' => __('An error has occurred.', 'wp-reset'),
|
| 300 |
'plugin_name' => __('WP Reset', 'wp-reset'),
|
| 301 |
'settings_url' => admin_url('tools.php?page=wp-reset'),
|
| 302 |
'icon_url' => $this->plugin_url . 'img/wp-reset-icon.png',
|
| 342 |
*
|
| 343 |
* @return bool
|
| 344 |
*/
|
| 345 |
+
static function is_cli_running() {
|
| 346 |
if (defined('WP_CLI') && WP_CLI) {
|
| 347 |
return true;
|
| 348 |
} else {
|
| 453 |
* @return int Number of deleted themes.
|
| 454 |
*/
|
| 455 |
function do_delete_themes($keep_default_theme = true) {
|
| 456 |
+
global $wp_version;
|
| 457 |
+
|
| 458 |
+
if (version_compare($wp_version, '5.0', '<') === true) {
|
| 459 |
+
$default_theme = 'twentyseventeen';
|
| 460 |
+
} else {
|
| 461 |
+
$default_theme = 'twentynineteen';
|
| 462 |
+
}
|
| 463 |
+
|
| 464 |
$all_themes = wp_get_themes(array('errors' => null));
|
| 465 |
|
| 466 |
if (true == $keep_default_theme) {
|
| 514 |
} // do_drop_custom_tables
|
| 515 |
|
| 516 |
|
| 517 |
+
/**
|
| 518 |
+
* Delete .htaccess file
|
| 519 |
+
*
|
| 520 |
+
* @return bool|WP_Error Action status.
|
| 521 |
+
*/
|
| 522 |
+
function do_delete_htaccess() {
|
| 523 |
+
global $wp_filesystem;
|
| 524 |
+
|
| 525 |
+
if (empty($wp_filesystem)) {
|
| 526 |
+
require_once ABSPATH . '/wp-admin/includes/file.php';
|
| 527 |
+
WP_Filesystem();
|
| 528 |
+
}
|
| 529 |
+
|
| 530 |
+
$htaccess_path = $this->get_htaccess_path();
|
| 531 |
+
clearstatcache();
|
| 532 |
+
|
| 533 |
+
if (!$wp_filesystem->is_readable($htaccess_path)) {
|
| 534 |
+
return new WP_Error(1, 'Htaccess file does not exist; there\'s nothing to delete.');
|
| 535 |
+
}
|
| 536 |
+
|
| 537 |
+
if (!$wp_filesystem->is_writable($htaccess_path)) {
|
| 538 |
+
return new WP_Error(1, 'Htaccess file is not writable.');
|
| 539 |
+
}
|
| 540 |
+
|
| 541 |
+
if ($wp_filesystem->delete($htaccess_path, false, 'f')) {
|
| 542 |
+
return true;
|
| 543 |
+
} else {
|
| 544 |
+
return new WP_Error(1, 'Unknown error. Unable to delete htaccess file.');
|
| 545 |
+
}
|
| 546 |
+
} // do_delete_htaccess
|
| 547 |
+
|
| 548 |
+
|
| 549 |
+
/**
|
| 550 |
+
* Get .htaccess file path.
|
| 551 |
+
*
|
| 552 |
+
* @return string
|
| 553 |
+
*/
|
| 554 |
+
function get_htaccess_path() {
|
| 555 |
+
if (!function_exists('get_home_path')) {
|
| 556 |
+
require_once ABSPATH . 'wp-admin/includes/file.php';
|
| 557 |
+
}
|
| 558 |
+
|
| 559 |
+
if ($this->is_cli_running()) {
|
| 560 |
+
$_SERVER['SCRIPT_FILENAME'] = ABSPATH;
|
| 561 |
+
}
|
| 562 |
+
|
| 563 |
+
$filepath = get_home_path() . '.htaccess';
|
| 564 |
+
|
| 565 |
+
return $filepath;
|
| 566 |
+
} // get_htaccess_path
|
| 567 |
+
|
| 568 |
+
|
| 569 |
/**
|
| 570 |
* Run one tool via AJAX call
|
| 571 |
*
|
| 574 |
function ajax_run_tool() {
|
| 575 |
check_ajax_referer('wp-reset_run_tool');
|
| 576 |
|
| 577 |
+
if (!current_user_can('administrator')) {
|
| 578 |
+
wp_send_json_error(__('You are not allowed to run this action.', 'wp-reset'));
|
| 579 |
+
}
|
| 580 |
+
|
| 581 |
$tool = trim(@$_GET['tool']);
|
| 582 |
$extra_data = trim(@$_GET['extra_data']);
|
| 583 |
|
| 593 |
} elseif ($tool == 'delete_uploads') {
|
| 594 |
$cnt = $this->do_delete_uploads();
|
| 595 |
wp_send_json_success($cnt);
|
| 596 |
+
} elseif ($tool == 'delete_htaccess') {
|
| 597 |
+
$tmp = $this->do_delete_htaccess();
|
| 598 |
+
if (is_wp_error($tmp)) {
|
| 599 |
+
wp_send_json_error($tmp->get_error_message());
|
| 600 |
+
} else {
|
| 601 |
+
wp_send_json_success($tmp);
|
| 602 |
+
}
|
| 603 |
} elseif ($tool == 'drop_custom_tables') {
|
| 604 |
$cnt = $this->do_drop_custom_tables();
|
| 605 |
wp_send_json_success($cnt);
|
| 686 |
if (!$current_user->ID) {
|
| 687 |
$tmp = get_users(array('role' => 'administrator', 'order' => 'ASC', 'order_by' => 'ID'));
|
| 688 |
if (empty($tmp[0]->user_login)) {
|
| 689 |
+
return new WP_Error(1, 'Reset failed. Unable to find any admin users in database.');
|
| 690 |
}
|
| 691 |
$current_user = $tmp[0];
|
| 692 |
}
|
| 1107 |
echo '<a data-btn-confirm="Delete custom tables" data-text-wait="Deleting custom tables. Please wait." data-text-confirm="All custom tables with prefix <code>' . $wpdb->prefix . '</code> will be deleted. There is NO UNDO. WP Reset will not make any backups." data-text-done="%n custom tables have been deleted." class="button button-delete' . $custom_tables_btns . '" href="#" id="drop-custom-tables">Delete (drop) custom tables</a></p>';
|
| 1108 |
|
| 1109 |
echo '</div>';
|
| 1110 |
+
|
| 1111 |
+
echo '<div class="card">';
|
| 1112 |
+
echo '<h2>' . __('Delete .htaccess File', 'wp-reset') . '</h2>';
|
| 1113 |
+
echo '<p>' . __('This action deletes the .htaccess file located in <code>' . $this->get_htaccess_path() . '</code><br><b>There is NO UNDO. WP Reset does not make any backups.</b></p>', 'wp-reset');
|
| 1114 |
+
|
| 1115 |
+
echo '<p>If you need to edit .htaccess, install our free <a href="' . admin_url('plugin-install.php?s=htaccess+editor&tab=search&type=term') . '" target="_blank">WP Htaccess Editor</a> plugin. It automatically creates backups when you edit .htaccess. To create the default .htaccess file open <a href="' . admin_url('options-permalink.php') . '">Settings - Permalinks</a> and re-save settings. WordPress will recreate the file.</p>';
|
| 1116 |
+
|
| 1117 |
+
echo '<a data-btn-confirm="Delete .htaccess file" data-text-wait="Deleting .htaccess file. Please wait." data-text-confirm="Htaccess file will be deleted. There is NO UNDO. WP Reset will not make any backups." data-text-done="Htaccess file has been deleted." class="button button-delete" href="#" id="delete-htaccess">Delete .htaccess file</a></p>';
|
| 1118 |
+
|
| 1119 |
+
echo '</div>';
|
| 1120 |
} // tab_tools
|
| 1121 |
|
| 1122 |
|
| 1851 |
*/
|
| 1852 |
function add_plugin_featured($plugin_slug, $res) {
|
| 1853 |
// check if plugin is alredy on the list
|
| 1854 |
+
if (!empty($res->plugins) && is_array($res->plugins)) {
|
| 1855 |
foreach ($res->plugins as $plugin) {
|
| 1856 |
if ($plugin->slug == $plugin_slug) {
|
| 1857 |
return $res;
|
| 1860 |
}
|
| 1861 |
|
| 1862 |
if ($plugin_info = get_transient('wf-plugin-info-' . $plugin_slug)) {
|
| 1863 |
+
array_unshift($res->plugins, $plugin_info);
|
|
|
|
|
|
|
| 1864 |
} else {
|
| 1865 |
$plugin_info = plugins_api('plugin_information', array(
|
| 1866 |
'slug' => $plugin_slug,
|
| 1937 |
|
| 1938 |
|
| 1939 |
// Create plugin instance and hook things up
|
| 1940 |
+
// Only if in admin - plugin has no frontend functionality
|
| 1941 |
+
if (is_admin() || WP_Reset::is_cli_running()) {
|
| 1942 |
+
global $wp_reset;
|
| 1943 |
+
$wp_reset = WP_Reset::getInstance();
|
| 1944 |
+
add_action('plugins_loaded', array($wp_reset, 'load_textdomain'));
|
| 1945 |
+
register_uninstall_hook(__FILE__, array('WP_Reset', 'uninstall'));
|
| 1946 |
+
}
|
