PluginProbe
WP Reset / 2.04
WP Reset v2.04
trunk 1.0 1.1 1.11 1.20 1.25 1.30 1.35 1.40 1.45 1.50 1.55 1.60 1.65 1.70 1.75 1.77 1.80 1.81 1.82 1.83 1.84 1.85 1.86 1.90 All 42 releases
wp-reset / wp-reset-cli.php

wp-reset-cli.php in WP Reset 2.04, at wp-reset-cli.php

327 lines 11.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * WP Reset
5 * https://wpreset.com/
6 * (c) WebFactory Ltd, 2017-2023
7 */
8
9
10 // include only file
11 if (!defined('ABSPATH')) {
12 die('Do not open this file directly.');
13 }
14
15
16 /**
17 * Resets the site to the default values without modifying any files.
18 */
19 class WP_Reset_CLI extends WP_CLI_Command
20 {
21
22 /**
23 * Reset the site database to default values. No files are modified.
24 *
25 * ## OPTIONS
26 *
27 * [--reactivate-theme]
28 * : Reactivate currently active theme after reset.
29 *
30 * [--reactivate-plugins]
31 * : Reactivate all currently active plugins after reset.
32 *
33 * [--deactivate-wp-reset]
34 * : Deactivate WP Reset plugin after reset. By default it will stay active after reset.
35 *
36 * [--yes]
37 * : Answer yes to the confirmation message.
38 *
39 * ## EXAMPLES
40 *
41 * $ wp reset reset --yes
42 * Success: Database has been reset.
43 *
44 * @when after_wp_load
45 */
46 function reset($args, $assoc_args)
47 {
48 WP_CLI::confirm('Are you sure you want to reset the site? There is NO UNDO!', $assoc_args);
49
50 global $wp_reset;
51 $params = array();
52
53 if (!empty($assoc_args['reactivate-theme'])) {
54 $params['reactivate_theme'] = true;
55 }
56 if (!empty($assoc_args['disable-wp-reset'])) {
57 $params['reactivate_wpreset'] = false;
58 } else {
59 $params['reactivate_wpreset'] = true;
60 }
61 if (!empty($assoc_args['reactivate-plugins'])) {
62 $params['reactivate_plugins'] = true;
63 }
64
65 $result = $wp_reset->do_reinstall($params);
66 if (is_wp_error($result)) {
67 WP_CLI::error($result->get_error_message);
68 } else {
69 WP_CLI::success('Database has been reset.');
70 }
71 } // reset
72
73
74 /**
75 * Display WP Reset version.
76 *
77 * @when after_wp_load
78 */
79 function version($args, $assoc_args)
80 {
81 global $wp_reset;
82
83 WP_CLI::line('WP Reset v' . $wp_reset->version);
84 } // version
85
86
87 /**
88 * Delete selected WordPress objects.
89 *
90 * ## OPTIONS
91 *
92 * <plugins|themes|transients|uploads|custom-tables|htaccess|theme-options>
93 * : WP objects to delete.
94 *
95 * [--yes]
96 * : Answer yes to the confirmation message.
97 *
98 * [--empty]
99 * : Empty (truncate) custom tables instead of deleting (dropping) them.
100 *
101 * ## EXAMPLES
102 *
103 * $ wp reset delete themes --yes
104 * Success: 3 themes have been deleted.
105 *
106 * $ wp reset delete custom-tables --truncate --yes
107 * Success: 3 custom tables have been emptied.
108 *
109 * $ wp reset delete htaccess --yes
110 * Success: Htaccess file has been deleted.
111 *
112 * @when after_wp_load
113 */
114 function delete($args, $assoc_args)
115 {
116 global $wp_reset, $wpdb;
117
118 if (empty($args[0])) {
119 WP_CLI::error('Please choose a subcommand: plugins, themes, transients, uploads, htaccess or custom-tables.');
120 return;
121 } elseif (false == in_array($args[0], array('themes', 'plugins', 'transients', 'uploads', 'htaccess', 'custom-tables', 'theme-options'))) {
122 WP_CLI::error('Unknown subcommand. Please choose from: plugins, themes, transients, uploads, htaccess, custom tables or theme-options.');
123 } else {
124 $subcommand = $args[0];
125 }
126
127 switch ($subcommand) {
128 case 'themes':
129 WP_CLI::confirm('Are you sure you want to delete all themes?', $assoc_args);
130 $cnt = $wp_reset->do_delete_themes(false);
131 WP_CLI::success($cnt . ' themes have been deleted.');
132 break;
133 case 'plugins':
134 WP_CLI::confirm('Are you sure you want to delete all plugins?', $assoc_args);
135 $cnt = $wp_reset->do_delete_plugins(true, false);
136 WP_CLI::success($cnt . ' plugins have been deleted.');
137 break;
138 case 'transients':
139 WP_CLI::confirm('Are you sure you want to delete all transients?', $assoc_args);
140 $cnt = $wp_reset->do_delete_transients();
141 WP_CLI::success($cnt . ' transient database entries have been deleted.');
142 break;
143 case 'uploads':
144 WP_CLI::confirm('Are you sure you want to delete all files & folders in /uploads/ folder?', $assoc_args);
145 $cnt = $wp_reset->do_delete_uploads();
146 WP_CLI::success($cnt . ' files & folders have been deleted.');
147 break;
148 case 'custom-tables':
149 if (!empty($assoc_args['empty'])) {
150 WP_CLI::confirm('Are you sure you want to empty (truncate) all custom tables (prefix: ' . $wpdb->prefix . ')?', $assoc_args);
151 $cnt = $wp_reset->do_truncate_custom_tables();
152 WP_CLI::success($cnt . ' custom tables have been emptied.');
153 } else {
154 WP_CLI::confirm('Are you sure you want to delete (drop) all custom tables (prefix: ' . $wpdb->prefix . ')?', $assoc_args);
155 $cnt = $wp_reset->do_drop_custom_tables();
156 WP_CLI::success($cnt . ' custom tables have been deleted.');
157 }
158 break;
159 case 'htaccess':
160 WP_CLI::confirm('Are you sure you want to delete the .htaccess file?', $assoc_args);
161 $tmp = $wp_reset->do_delete_htaccess();
162 if (!is_wp_error($tmp)) {
163 WP_CLI::success('Htaccess file has been deleted.');
164 } else {
165 WP_CLI::error('Htaccess file has not been deleted. ' . $tmp->get_error_message());
166 }
167 break;
168 case 'theme-options':
169 WP_CLI::confirm('Are you sure you want to reset all options (mods) for all themes?', $assoc_args);
170 $cnt = $wp_reset->do_reset_theme_options();
171 WP_CLI::success('Options for ' . $cnt . ' themes have been reset.');
172 break;
173 default:
174 // should never come to this but can't hurt
175 WP_CLI::error('Unknown subcommand. Please choose from: plugins, themes, transients, uploads, htaccess, custom-tables or theme-options.');
176 return;
177 }
178 } // delete
179
180
181 /**
182 * List and manipulate DB snapshots.
183 *
184 * ## OPTIONS
185 *
186 * <list|create|restore|export|delete>
187 * : Action to perform with snapshot.
188 *
189 * [--yes]
190 * : Answer yes to the confirmation message.
191 *
192 * [--id=<snapshot-id>]
193 * : Specify snapshot ID when doing restore, export and delete.
194 *
195 * [--name=<snapshot-name>]
196 * : When creating a new snapshot specify an optional name.
197 *
198 * ## EXAMPLES
199 *
200 * wp reset snapshots create --yes
201 * Success: New snapshot with ID 089bea has been created.
202 *
203 * $ wp reset snapshots delete --id=123456
204 * Success: Snapshot has been deleted.
205 *
206 * $ wp reset snapshots export --id=123456
207 * Success: Snapshot has been exported and saved to: https://test.site/wp-content/wp-reset-snapshots-export/wp-reset-snapshot-123456.sql.gz
208 *
209 * @when after_wp_load
210 */
211 function snapshots($args, $assoc_args)
212 {
213 global $wp_reset;
214
215 if (empty($args[0])) {
216 WP_CLI::error('Please choose a subcommand: list, create, restore, export or delete.');
217 return;
218 } elseif (false == in_array($args[0], array('list', 'create', 'restore', 'export', 'delete'))) {
219 WP_CLI::error('Unknown subcommand. Please choose from: list, create, restore, export or delete.');
220 } else {
221 $subcommand = $args[0];
222 }
223
224 switch ($subcommand) {
225 case 'list':
226 if ($snapshots = $wp_reset->get_snapshots()) {
227 $table = array();
228 foreach ($snapshots as $ss) {
229 $tmp = array();
230 $tmp['id'] = $ss['uid'];
231 if (!empty($ss['name'])) {
232 $tmp['name'] = $ss['name'];
233 } else {
234 $tmp['name'] = 'n/a';
235 }
236 $tmp['created'] = gmdate(get_option('date_format'), strtotime($ss['timestamp'])) . ' @ ' . gmdate(get_option('time_format'), strtotime($ss['timestamp']));
237 $tmp['info'] = $ss['tbl_core'] . ' standard & ';
238 if ($ss['tbl_custom']) {
239 $tmp['info'] .= $ss['tbl_custom'] . ' custom table' . ($ss['tbl_custom'] == 1 ? '' : 's');
240 } else {
241 $tmp['info'] .= 'no custom tables';
242 }
243 $tmp['info'] .= ' totaling ' . WP_Reset_Utility::format_size($ss['tbl_size']) . ' in ' . number_format($ss['tbl_rows']) . ' rows';
244
245 $table[] = $tmp;
246 } // foreach
247 WP_CLI\Utils\format_items('table', $table, array('id', 'name', 'created', 'info'));
248 } else {
249 WP_CLI::line('There are no saved snapshots.');
250 }
251 break;
252 case 'create':
253 if (!empty($assoc_args['name'])) {
254 $name = trim($assoc_args['name']);
255 } else {
256 $name = '';
257 }
258
259 WP_CLI::confirm('Are you sure you want to create a new snapshot?', $assoc_args);
260 $new = $wp_reset->do_create_snapshot($name);
261 if (is_wp_error($new)) {
262 WP_CLI::error($new->get_error_message());
263 } else {
264 WP_CLI::success('New snapshot with ID ' . $new['uid'] . ' has been created.');
265 }
266 break;
267 case 'restore':
268 if (empty($assoc_args['id'])) {
269 WP_CLI::error('Please specify the snapshot ID with the "--id=123456" param. Use "wp reset snapshots list" to get a list of all snapshots.');
270 break;
271 } else {
272 WP_CLI::confirm('Are you sure you want to restore the site to the snapshot with ID ' . $assoc_args['id'] . '?', $assoc_args);
273 $restore = $wp_reset->do_restore_snapshot($assoc_args['id']);
274 if (is_wp_error($restore)) {
275 WP_CLI::error($restore->get_error_message());
276 } else {
277 WP_CLI::success('Site has been restored to the selected snapshot.');
278 }
279 }
280 break;
281 case 'export':
282 if (empty($assoc_args['id'])) {
283 WP_CLI::error('Please specify the snapshot ID with the "--id=123456" param. Use "wp reset snapshots list" to get a list of all snapshots.');
284 break;
285 } else {
286 $export = $wp_reset->do_export_snapshot($assoc_args['id']);
287 if (is_wp_error($export)) {
288 WP_CLI::error($export->get_error_message());
289 } else {
290 $url = content_url() . '/' . $wp_reset->snapshots_folder . '/' . $export;
291 WP_CLI::success('Snapshot has been exported and saved to: ' . $url);
292 }
293 }
294 break;
295 case 'delete':
296 if (empty($assoc_args['id'])) {
297 WP_CLI::error('Please specify the snapshot ID with the "--id=123456" param. Use "wp reset snapshots list" to get a list of all snapshots.');
298 break;
299 } else {
300 WP_CLI::confirm('Are you sure you want to delete the snapshot with ID ' . $assoc_args['id'] . '?', $assoc_args);
301 $del = $wp_reset->do_delete_snapshot($assoc_args['id']);
302 if (is_wp_error($del)) {
303 WP_CLI::error($del->get_error_message());
304 } else {
305 WP_CLI::success('Snapshot has been deleted.');
306 }
307 }
308 break;
309 default:
310 // it should never come to this but can't hurt
311 WP_CLI::error('Unknown subcommand. Please choose from: list, create, restore, export or delete.');
312 return;
313 }
314 } // snapshots
315
316
317 /**
318 * This command is no longer available. Please use "wp reset snapshots create" instead.
319 */
320 function backups($args, $assoc_args)
321 {
322 WP_CLI::error('This command is no longer available. Please use: wp reset snapshots create');
323 } // backups
324 } // WP_Reset_CLI
325
326 WP_CLI::add_command('reset', 'WP_Reset_CLI');
327