PluginProbe
WP Reset / 1.55
WP Reset v1.55
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 1.55, at wp-reset-cli.php

318 lines 11.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * WP Reset
4 * https://wpreset.com/
5 * (c) WebFactory Ltd, 2017-2019
6 */
7
8
9 // include only file
10 if (!defined('ABSPATH')) {
11 wp_die(__('Do not open this file directly.', 'wp-error'));
12 }
13
14
15 /**
16 * Resets the site to the default values without modifying any files.
17 */
18 class WP_Reset_CLI extends WP_CLI_Command
19 {
20
21 /**
22 * Reset the site database to default values. No files are modified.
23 *
24 * ## OPTIONS
25 *
26 * [--reactivate-theme]
27 * : Reactivate currently active theme after reset.
28 *
29 * [--reactivate-plugins]
30 * : Reactivate all currently active plugins after reset.
31 *
32 * [--reactivate-webhooks]
33 * : Reactivate WP Webhooks plugin after reset.
34 *
35 * [--deactivate-wp-reset]
36 * : Deactivate WP Reset plugin after reset. By default it will stay active after reset.
37 *
38 * [--yes]
39 * : Answer yes to the confirmation message.
40 *
41 * ## EXAMPLES
42 *
43 * $ wp reset reset --yes
44 * Success: Database has been reset.
45 *
46 * @when after_wp_load
47 */
48 function reset($args, $assoc_args)
49 {
50 WP_CLI::confirm('Are you sure you want to reset the site? There is NO UNDO!', $assoc_args);
51
52 global $wp_reset;
53 $params = array();
54
55 if (!empty($assoc_args['reactivate-theme'])) {
56 $params['reactivate_theme'] = true;
57 }
58 if (!empty($assoc_args['disable-wp-reset'])) {
59 $params['reactivate_wpreset'] = false;
60 } else {
61 $params['reactivate_wpreset'] = true;
62 }
63 if (!empty($assoc_args['reactivate-plugins'])) {
64 $params['reactivate_plugins'] = true;
65 }
66 if (!empty($assoc_args['reactivate-webhooks'])) {
67 $params['reactivate_webhooks'] = true;
68 }
69
70 $result = $wp_reset->do_reinstall($params);
71 if (is_wp_error($result)) {
72 WP_CLI::error($result->get_error_message);
73 } else {
74 WP_CLI::success('Database has been reset.');
75 }
76 } // reset
77
78
79 /**
80 * Display WP Reset version.
81 *
82 * @when after_wp_load
83 */
84 function version($args, $assoc_args)
85 {
86 global $wp_reset;
87
88 WP_CLI::line('WP Reset v' . $wp_reset->version);
89 } // version
90
91
92 /**
93 * Delete selected WordPress objects.
94 *
95 * ## OPTIONS
96 *
97 * <plugins|themes|transients|uploads|custom-tables|htaccess>
98 * : WP objects to delete.
99 *
100 * [--yes]
101 * : Answer yes to the confirmation message.
102 *
103 * [--empty]
104 * : Empty (truncate) custom tables instead of deleting (dropping) them.
105 *
106 * ## EXAMPLES
107 *
108 * $ wp reset delete themes --yes
109 * Success: 3 themes have been deleted.
110 *
111 * $ wp reset delete custom-tables --truncate --yes
112 * Success: 3 custom tables have been emptied.
113 *
114 * $ wp reset delete htaccess --yes
115 * Success: Htaccess file has been deleted.
116 *
117 * @when after_wp_load
118 */
119 function delete($args, $assoc_args)
120 {
121 global $wp_reset, $wpdb;
122
123 if (empty($args[0])) {
124 WP_CLI::error('Please choose a subcommand: plugins, themes, transients, uploads, htaccess or custom-tables.');
125 return;
126 } elseif (false == in_array($args[0], array('themes', 'plugins', 'transients', 'uploads', 'htaccess', 'custom-tables'))) {
127 WP_CLI::error('Unknown subcommand. Please choose from: plugins, themes, transients, uploads, htaccess or custom tables.');
128 } else {
129 $subcommand = $args[0];
130 }
131
132 switch ($subcommand) {
133 case 'themes':
134 WP_CLI::confirm('Are you sure you want to delete all themes?', $assoc_args);
135 $cnt = $wp_reset->do_delete_themes(false);
136 WP_CLI::success($cnt . ' themes have been deleted.');
137 break;
138 case 'plugins':
139 WP_CLI::confirm('Are you sure you want to delete all plugins?', $assoc_args);
140 $cnt = $wp_reset->do_delete_plugins(true, false);
141 WP_CLI::success($cnt . ' plugins have been deleted.');
142 break;
143 case 'transients':
144 WP_CLI::confirm('Are you sure you want to delete all transients?', $assoc_args);
145 $cnt = $wp_reset->do_delete_transients();
146 WP_CLI::success($cnt . ' transient database entries have been deleted.');
147 break;
148 case 'uploads':
149 WP_CLI::confirm('Are you sure you want to delete all files & folders in /uploads/ folder?', $assoc_args);
150 $cnt = $wp_reset->do_delete_uploads();
151 WP_CLI::success($cnt . ' files & folders have been deleted.');
152 break;
153 case 'custom-tables':
154 if (!empty($assoc_args['empty'])) {
155 WP_CLI::confirm('Are you sure you want to empty (truncate) all custom tables (prefix: ' . $wpdb->prefix . ')?', $assoc_args);
156 $cnt = $wp_reset->do_truncate_custom_tables();
157 WP_CLI::success($cnt . ' custom tables have been emptied.');
158 } else {
159 WP_CLI::confirm('Are you sure you want to delete (drop) all custom tables (prefix: ' . $wpdb->prefix . ')?', $assoc_args);
160 $cnt = $wp_reset->do_drop_custom_tables();
161 WP_CLI::success($cnt . ' custom tables have been deleted.');
162 }
163 break;
164 case 'htaccess':
165 WP_CLI::confirm('Are you sure you want to delete the .htaccess file?', $assoc_args);
166 $tmp = $wp_reset->do_delete_htaccess();
167 if (!is_wp_error($tmp)) {
168 WP_CLI::success('Htaccess file has been deleted.');
169 } else {
170 WP_CLI::error('Htaccess file has not been deleted. ' . $tmp->get_error_message());
171 }
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 or custom-tables.');
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'] = date(get_option('date_format'), strtotime($ss['timestamp'])) . ' @ ' . date(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->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 } // WP_Reset_CLI
316
317 WP_CLI::add_command('reset', 'WP_Reset_CLI');
318