PluginProbe
Forumax – AI Powered Advanced Community Forum Plugin / 2.4.0
Forumax – AI Powered Advanced Community Forum Plugin v2.4.0
2.4.4 2.4.3 2.4.2 2.4.1 2.4.0 trunk 1.0.8 1.1.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.4.0 1.4.1 2.0.0 2.1.0 All 29 releases
bbp-core / lib / bbpress / includes / admin / tools / reset.php

reset.php in Forumax – AI Powered Advanced Community Forum Plugin 2.4.0, at lib/bbpress/includes/admin/tools/reset.php

273 lines 9.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * bbPress Admin Tools Reset
5 *
6 * @package bbPress
7 * @subpackage Administration
8 */
9
10 // Exit if accessed directly
11 defined( 'ABSPATH' ) || exit;
12
13 /**
14 * Admin reset page
15 *
16 * @since 2.0.0 bbPress (r2613)
17 *
18 */
19 function bbp_admin_reset_page() {
20 ?>
21
22 <div class="wrap">
23 <h1 class="wp-heading-inline"><?php esc_html_e( 'Forum Tools', 'bbpress' ); ?></h1>
24 <hr class="wp-header-end">
25 <h2 class="nav-tab-wrapper"><?php bbp_tools_admin_tabs( 'bbp-reset' ); ?></h2>
26 <p><?php esc_html_e( 'Revert your forums back to a brand new installation, as if bbPress were never installed. This process cannot be undone.', 'bbpress' ); ?></p>
27
28 <form class="settings" method="post" action="">
29 <table class="form-table">
30 <tbody>
31 <tr valign="top">
32 <th scope="row"><?php esc_html_e( 'The following data will be removed:', 'bbpress' ) ?></th>
33 <td>
34 <?php esc_html_e( 'All Forums', 'bbpress' ); ?><br />
35 <?php esc_html_e( 'All Topics', 'bbpress' ); ?><br />
36 <?php esc_html_e( 'All Replies', 'bbpress' ); ?><br />
37 <?php esc_html_e( 'All Topic Tags', 'bbpress' ); ?><br />
38 <?php esc_html_e( 'All Meta Data', 'bbpress' ); ?><br />
39 <?php esc_html_e( 'Forum Settings', 'bbpress' ); ?><br />
40 <?php esc_html_e( 'Forum Activity', 'bbpress' ); ?><br />
41 <?php esc_html_e( 'Forum User Roles', 'bbpress' ); ?><br />
42 <?php esc_html_e( 'Forum Moderators', 'bbpress' ); ?><br />
43 <?php esc_html_e( 'Importer Helper Data', 'bbpress' ); ?><br />
44 </td>
45 </tr>
46 <tr valign="top">
47 <th scope="row"><?php esc_html_e( 'Delete imported users?', 'bbpress' ); ?></th>
48 <td>
49 <fieldset>
50 <legend class="screen-reader-text"><span><?php esc_html_e( "Say it ain't so!", 'bbpress' ); ?></span></legend>
51 <label><input type="checkbox" class="checkbox" name="bbpress-delete-imported-users" id="bbpress-delete-imported-users" value="1" /> <?php esc_html_e( 'This option will delete all previously imported users, and cannot be undone.', 'bbpress' ); ?></label>
52 <p class="description"><?php esc_html_e( 'Proceeding without this checked removes the meta-data necessary to delete these users later.', 'bbpress' ); ?></p>
53 </fieldset>
54 </td>
55 </tr>
56 <tr valign="top">
57 <th scope="row"><?php esc_html_e( 'Do you really want to do this?', 'bbpress' ); ?></th>
58 <td>
59 <fieldset>
60 <legend class="screen-reader-text"><span><?php esc_html_e( "Say it ain't so!", 'bbpress' ); ?></span></legend>
61 <label><input type="checkbox" class="checkbox" name="bbpress-are-you-sure" id="bbpress-are-you-sure" value="1" /> <?php esc_html_e( 'This process cannot be undone.', 'bbpress' ); ?></label>
62 <p class="description"><?php esc_html_e( 'Backup your database before proceeding.', 'bbpress' ); ?></p>
63 </fieldset>
64 </td>
65 </tr>
66 </tbody>
67 </table>
68
69 <fieldset class="submit">
70 <input class="button-primary" type="submit" name="submit" value="<?php esc_attr_e( 'Reset bbPress', 'bbpress' ); ?>" />
71 <?php wp_nonce_field( 'bbpress-reset' ); ?>
72 </fieldset>
73 </form>
74 </div>
75
76 <?php
77 }
78
79 /**
80 * Handle a bbPress admin area reset request.
81 *
82 * @since 2.0.0 bbPress (r2613)
83 */
84 function bbp_admin_reset_handler() {
85
86 // Bail if not resetting.
87 if ( ! bbp_is_post_request() || empty( $_POST['bbpress-are-you-sure'] ) ) {
88 return;
89 }
90
91 // Only keymasters can proceed.
92 if ( ! bbp_is_user_keymaster() ) {
93 return;
94 }
95
96 // Bail if not referred from resetter
97 check_admin_referer( 'bbpress-reset' );
98
99 // Reset all of bbPress
100 bbp_admin_reset_database();
101 }
102
103 /**
104 * Wrapper for determining admin reset query feedback presented to a user.
105 *
106 * @since 2.6.0 bbPress (r6758)
107 *
108 * @param array $args Array of query, message, and possible responses
109 *
110 * @return string
111 */
112 function bbp_admin_reset_query_feedback( $args = array() ) {
113 static $defaults = null;
114
115 // Only set defaults one time to avoid hitting the GetText API repeatedly
116 if ( null === $defaults ) {
117 $defaults = array(
118 'query' => '',
119 'message' => esc_html__( 'Resetting&hellip;', 'bbpress' ),
120 'responses' => array(
121 'success' => esc_html__( 'Success!', 'bbpress' ),
122 'failure' => esc_html__( 'Failed!', 'bbpress' ),
123 'skipped' => esc_html__( 'Skipped.', 'bbpress' )
124 )
125 );
126 }
127
128 // Parse arguments
129 $r = bbp_parse_args( $args, $defaults, 'admin_reset_query_feedback' );
130
131 // Success/Failure based on query error
132 if ( ! empty( $r['query'] ) ) {
133 $query = bbp_db()->query( $r['query'] );
134 $result = ! is_wp_error( $query )
135 ? $r['responses']['success']
136 : $r['responses']['failure'];
137
138 // Skip if empty
139 } else {
140 $result = $r['responses']['skipped'];
141 }
142
143 // Return feedback
144 return sprintf( $r['message'], $result );
145 }
146
147 /**
148 * Perform a bbPress database reset.
149 *
150 * @since 2.6.0 bbPress
151 */
152 function bbp_admin_reset_database() {
153
154 // Define variables.
155 $messages = array();
156 $sql_meta = array();
157 $bbp_db = bbp_db();
158
159 // Flush the whole cache; things are about to get ugly.
160 wp_cache_flush();
161
162 /** Posts *****************************************************************/
163
164 // Post types and status.
165 $fpt = bbp_get_forum_post_type();
166 $tpt = bbp_get_topic_post_type();
167 $rpt = bbp_get_reply_post_type();
168
169 // Get post IDs
170 $sql_posts = $bbp_db->get_results( "SELECT `ID` FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')", OBJECT_K );
171 if ( ! empty( $sql_posts ) ) {
172
173 // Meta data
174 foreach ( $sql_posts as $key => $value ) {
175 $sql_meta[] = $key;
176 }
177 $sql_meta = implode( "', '", $sql_meta );
178
179 // Delete posts
180 $messages[] = bbp_admin_reset_query_feedback( array(
181 'query' => "DELETE FROM `{$bbp_db->posts}` WHERE `post_type` IN ('{$fpt}', '{$tpt}', '{$rpt}')",
182 'message' => esc_html__( 'Removing Forums, Topics, and Replies&hellip; %s', 'bbpress' )
183 ) );
184
185 /** Post Meta *********************************************************/
186
187 if ( ! empty( $sql_posts ) ) {
188 $messages[] = bbp_admin_reset_query_feedback( array(
189 'query' => "DELETE FROM `{$bbp_db->postmeta}` WHERE `post_id` IN ('{$sql_meta}')",
190 'message' => esc_html__( 'Removing Forum, Topic, and Reply Meta Data&hellip; %s', 'bbpress' )
191 ) );
192 }
193
194 /** Post Revisions ****************************************************/
195
196 if ( ! empty( $sql_posts ) ) {
197 $messages[] = bbp_admin_reset_query_feedback( array(
198 'query' => "DELETE FROM `{$bbp_db->posts}` WHERE `post_parent` IN ('{$sql_meta}') AND `post_type` = 'revision'",
199 'message' => esc_html__( 'Removing Revision Data&hellip; %s', 'bbpress' )
200 ) );
201 }
202 }
203
204 /** Topic Tags ************************************************************/
205
206 $messages[] = bbp_admin_reset_query_feedback( array(
207 'query' => "DELETE a,b,c FROM `{$bbp_db->terms}` AS a LEFT JOIN `{$bbp_db->term_taxonomy}` AS c ON a.term_id = c.term_id LEFT JOIN `{$bbp_db->term_relationships}` AS b ON b.term_taxonomy_id = c.term_taxonomy_id WHERE c.taxonomy = 'topic-tag'",
208 'message' => esc_html__( 'Deleting Topic Tags&hellip; %s', 'bbpress' )
209 ) );
210
211 /** User ******************************************************************/
212
213 // First, if we're deleting previously imported users, delete them now
214 if ( ! empty( $_POST['bbpress-delete-imported-users'] ) ) {
215 $sql_users = $bbp_db->get_results( "SELECT `user_id` FROM `{$bbp_db->usermeta}` WHERE `meta_key` = '_bbp_old_user_id'", OBJECT_K );
216
217 if ( ! empty( $sql_users ) ) {
218 $sql_meta = array();
219 foreach ( $sql_users as $key => $value ) {
220 $sql_meta[] = $key;
221 }
222
223 // Users
224 $sql_meta = implode( "', '", $sql_meta );
225 $messages[] = bbp_admin_reset_query_feedback( array(
226 'query' => "DELETE FROM `{$bbp_db->users}` WHERE `ID` IN ('{$sql_meta}')",
227 'message' => esc_html__( 'Deleting Imported Users&hellip; %s', 'bbpress' )
228 ) );
229
230 // User meta
231 $messages[] = bbp_admin_reset_query_feedback( array(
232 'query' => "DELETE FROM `{$bbp_db->usermeta}` WHERE `user_id` IN ('{$sql_meta}')",
233 'message' => esc_html__( 'Deleting Imported User Meta&hellip; %s', 'bbpress' )
234 ) );
235 }
236 }
237
238 // Next, if we still have users that were not imported delete that meta data
239 $messages[] = bbp_admin_reset_query_feedback( array(
240 'query' => "DELETE FROM `{$bbp_db->usermeta}` WHERE `meta_key` LIKE '%%_bbp_%%'",
241 'message' => esc_html__( 'Deleting bbPress Specific User Meta&hellip; %s', 'bbpress' )
242 ) );
243
244 /** Converter *************************************************************/
245
246 $table_name = $bbp_db->prefix . 'bbp_converter_translator';
247 if ( $bbp_db->get_var( "SHOW TABLES LIKE '{$table_name}'" ) === $table_name ) {
248 $messages[] = bbp_admin_reset_query_feedback( array(
249 'query' => "DROP TABLE {$table_name}",
250 'message' => esc_html__( 'Dropping Conversion Table&hellip; %s', 'bbpress' )
251 ) );
252 }
253
254 /** Options ***************************************************************/
255
256 bbp_delete_options();
257 $messages[] = esc_html__( 'Deleting Settings&hellip; Success!', 'bbpress' );
258
259 /** Roles *****************************************************************/
260
261 bbp_remove_roles();
262 bbp_remove_caps();
263 $messages[] = esc_html__( 'Removing Roles and Capabilities&hellip; Success!', 'bbpress' );
264
265 /** Output ****************************************************************/
266
267 if ( count( $messages ) ) {
268 foreach ( $messages as $message ) {
269 bbp_admin_tools_feedback( $message );
270 }
271 }
272 }
273