Completed
Pull Request — master (#142)
by Sudar
03:06 queued 01:33
created

...s-bulk-delete-jetpack-contact-form-messages.php (2 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * Utility class for deleting Jetpack Contact Form Messages.
4
 *
5
 * @since      5.3
6
 *
7
 * @author     Sudar
8
 *
9
 * @package    BulkDelete\Misc
10
 */
11
class Bulk_Delete_Jetpack_Contact_Form_Message {
12
	// box slugs
13
	const BOX_JETPACK_MESSAGES = 'bd-jetpack-feedback';
14
15
	const FEEDBACK_POST_TYPE   = 'feedback';
16
	const CRON_HOOK            = 'do-bulk-delete-feedback';
17
18
	/**
19
	 * Register Jetpack Feedback meta box for delete misc page.
20
	 *
21
	 * @static
22
	 *
23
	 * @since 5.3
24
	 */
25
	public static function add_delete_jetpack_messages_meta_box() {
26
		$bd = BULK_DELETE();
0 ignored issues
show
Comprehensibility introduced by
Avoid variables with short names like $bd. Configured minimum length is 3.

Short variable names may make your code harder to understand. Variable names should be self-descriptive. This check looks for variable names who are shorter than a configured minimum.

Loading history...
27
28
		add_meta_box(
29
			self::BOX_JETPACK_MESSAGES,
30
			__( 'Bulk Delete Jetpack Contact Form Messages', 'bulk-delete' ),
31
			array( __CLASS__, 'render_delete_jetpack_messages_box' ),
32
			$bd->misc_page,
33
			'advanced'
34
		);
35
	}
36
37
	/**
38
	 * Render Jetpack Feedback meta box for delete misc page.
39
	 *
40
	 * @static
41
	 *
42
	 * @since 5.3
43
	 */
44
	public static function render_delete_jetpack_messages_box() {
45
		if ( Bulk_Delete_Misc::is_misc_box_hidden( self::BOX_JETPACK_MESSAGES ) ) {
46
			printf( __( 'This section just got enabled. Kindly <a href = "%1$s">refresh</a> the page to fully enable it.', 'bulk-delete' ), 'admin.php?page=' . Bulk_Delete_Misc::MISC_PAGE_SLUG );
47
48
			return;
49
		}
50
51
		if ( ! self::is_jetpack_contact_active() ) {
52
?>
53
            <!-- Delete Jetpack Feedback box start-->
54
            <p>
55
                <span style="color:red">
56
                    <?php _e( 'Jetpack contact form is not enabled.', 'bulk-delete' ); ?>
57
                </span>
58
            </p>
59
            <!-- Delete Jetpack Feedback box end-->
60
<?php
61
		} else {
62
			$feedback_count = wp_count_posts( self::FEEDBACK_POST_TYPE );
63
?>
64
            <!-- Delete Jetpack Feedback box start-->
65
            <fieldset class="options">
66
            <table class="optiontable">
67
                <tr>
68
                    <td scope="row" >
69
                        <input name="smbd_feedback_use_filter" value = "false" type = "radio" checked>
70
                    </td>
71
                    <td>
72
                    <label for="smbd_feedback"><?php echo __( 'Delete all Contact Form Messages', 'bulk-delete' ), ' ( ', $feedback_count->publish, ' ', __( 'in total', 'bulk-delete' ), ' )'; ?></label>
73
                    </td>
74
                </tr>
75
76
                <tr>
77
                    <td scope="row" >
78
                        <input name="smbd_feedback_use_filter" id="smbd_feedback_use_filter" value = "true" type = "radio" disabled>
79
                    </td>
80
                    <td>
81
                        <label for="smbd_feedback"><?php _e( 'Delete Messages based on filters', 'bulk-delete' ); ?></label>
82
                        <span class = "bd-feedback-pro" style = "color:red; vertical-align: middle;"><?php _e( 'Only available in Pro Addon', 'bulk-delete' ); ?> <a href = "http://bulkwp.com/addons/bulk-delete-jetpack-contact-form-messages/?utm_source=wpadmin&utm_campaign=BulkDelete&utm_medium=buynow&utm_content=bd-jcm" target="_blank">Buy now</a></span>
83
                    </td>
84
                </tr>
85
            </table>
86
<?php
87
			/**
88
			 * Add more fields to the delete jetpack messages form
89
			 * This hook can be used to add more fields to the delete jetpack messages form.
90
			 *
91
			 * @since 5.3
92
			 */
93
			do_action( 'bd_delete_jetpack_messages_form' );
94
?>
95
            <table class="optiontable">
96
                <tr>
97
                    <td colspan="2">
98
                        <h4><?php _e( 'Choose your date options', 'bulk-delete' ); ?></h4>
99
                    </td>
100
                </tr>
101
102
                <tr>
103
                    <td scope="row">
104
                        <input name="smbd_feedback_restrict" id ="smbd_feedback_restrict" value = "true" type = "checkbox">
105
                    </td>
106
                    <td>
107
                        <?php _e( 'Only restrict to posts which are ', 'bulk-delete' );?>
108
                        <select name="smbd_feedback_op" id="smbd_feedback_op" disabled>
109
                            <option value ="<"><?php _e( 'older than', 'bulk-delete' );?></option>
110
                            <option value =">"><?php _e( 'posted within last', 'bulk-delete' );?></option>
111
                        </select>
112
                        <input type ="textbox" name="smbd_feedback_days" id ="smbd_feedback_days" value ="0"  maxlength="4" size="4" disabled><?php _e( 'days', 'bulk-delete' );?>
113
                    </td>
114
                </tr>
115
116
                <tr>
117
                    <td scope="row">
118
                        <input name="smbd_feedback_limit" id="smbd_feedback_limit" value = "true" type = "checkbox">
119
                    </td>
120
                    <td>
121
                        <?php _e( 'Only delete first ', 'bulk-delete' );?>
122
                        <input type ="textbox" name="smbd_feedback_limit_to" id="smbd_feedback_limit_to" disabled value ="0" maxlength="4" size="4"><?php _e( 'posts.', 'bulk-delete' );?>
123
                        <?php _e( 'Use this option if there are more than 1000 posts and the script timesout.', 'bulk-delete' ) ?>
124
                    </td>
125
                </tr>
126
127
                <tr>
128
                    <td colspan="2">
129
                        <h4><?php _e( 'Choose your deletion options', 'bulk-delete' ); ?></h4>
130
                    </td>
131
                </tr>
132
133
                <tr>
134
                    <td scope="row" colspan="2">
135
                        <input name="smbd_feedback_force_delete" value = "false" type = "radio" checked="checked"> <?php _e( 'Move to Trash', 'bulk-delete' ); ?>
136
                        <input name="smbd_feedback_force_delete" value = "true" type = "radio"> <?php _e( 'Delete permanently', 'bulk-delete' ); ?>
137
                    </td>
138
                </tr>
139
140
            <tr>
141
                <td scope="row" colspan="2">
142
                    <input name="smbd_feedback_cron" value = "false" type = "radio" checked="checked" > <?php _e( 'Delete now', 'bulk-delete' ); ?>
143
                    <input name="smbd_feedback_cron" value = "true" type = "radio" id = "smbd_feedback_cron" disabled > <?php _e( 'Schedule', 'bulk-delete' ); ?>
144
                    <input name="smbd_feedback_cron_start" id = "smbd_feedback_cron_start" value = "now" type = "text" disabled><?php _e( 'repeat ', 'bulk-delete' );?>
145
                    <select name = "smbd_feedback_cron_freq" id = "smbd_feedback_cron_freq" disabled>
146
                        <option value = "-1"><?php _e( "Don't repeat", 'bulk-delete' ); ?></option>
147
<?php
148
			$schedules = wp_get_schedules();
149
			foreach ( $schedules as $key => $value ) {
150
?>
151
                        <option value = "<?php echo $key; ?>"><?php echo $value['display']; ?></option>
152
<?php
153
			}
154
?>
155
                    </select>
156
                    <span class = "bd-feedback-pro" style = "color:red"><?php _e( 'Only available in Pro Addon', 'bulk-delete' ); ?> <a href = "http://bulkwp.com/addons/bulk-delete-jetpack-contact-form-messages/?utm_source=wpadmin&utm_campaign=BulkDelete&utm_medium=buynow&utm_content=bd-jcm" target="_blank">Buy now</a></span>
157
                </td>
158
            </tr>
159
160
            </table>
161
            </fieldset>
162
            <p class="submit">
163
                <button type='submit' name='bd_action' value='delete_jetpack_messages' class='button-primary'><?php _e( 'Bulk Delete ', 'bulk-delete' ) ?>&raquo;</button>
164
            </p>
165
            <!-- Delete Jetpack Feedback box end-->
166
<?php
167
		}
168
	}
169
170
	/**
171
	 * Filter JS Array and add validation hooks.
172
	 *
173
	 * @since 5.4
174
	 * @static
175
	 *
176
	 * @param array $js_array JavaScript Array
177
	 *
178
	 * @return array Modified JavaScript Array
179
	 */
180
	public static function filter_js_array( $js_array ) {
181
		$js_array['dt_iterators'][]                        = '_feedback';
182
		$js_array['validators']['delete_jetpack_messages'] = 'noValidation';
183
184
		$js_array['pre_action_msg']['delete_jetpack_messages'] = 'deleteJetpackWarning';
185
		$js_array['msg']['deleteJetpackWarning']               = __( 'Are you sure you want to delete all the Jetpack contact form messages based on the selected filters?', 'bulk-delete' );
186
187
		return $js_array;
188
	}
189
190
	/**
191
	 * Controller for deleting Jetpack contact form messages.
192
	 *
193
	 * @static
194
	 *
195
	 * @since  5.3
196
	 */
197
	public static function do_delete_jetpack_messages() {
198
		$delete_options                  = array();
199
200
		$delete_options['use_filter']    = array_get( $_POST, 'smbd_feedback_use_filter', 'false' );
201
202
		$delete_options['restrict']      = array_get( $_POST, 'smbd_feedback_restrict', false );
203
		$delete_options['limit_to']      = absint( array_get( $_POST, 'smbd_feedback_limit_to', 0 ) );
204
		$delete_options['force_delete']  = array_get( $_POST, 'smbd_feedback_force_delete', 'false' );
205
206
		$delete_options['feedback_op']   = array_get( $_POST, 'smbd_feedback_op' );
207
		$delete_options['feedback_days'] = array_get( $_POST, 'smbd_feedback_days' );
208
209
		/**
210
		 * Delete jetpack feedback delete options filter
211
		 * This filter is for processing filtering options for deleting jetpack message.
212
		 *
213
		 * @since 5.3
214
		 */
215
		$delete_options = apply_filters( 'bd_delete_jetpack_messages_delete_options', $delete_options, $_POST );
216
217
		if ( 'true' == array_get( $_POST, 'smbd_feedback_cron', 'false' ) ) {
218
			$freq = $_POST['smbd_feedback_cron_freq'];
219
			$time = strtotime( $_POST['smbd_feedback_cron_start'] ) - ( get_option( 'gmt_offset' ) * 60 * 60 );
220
221
			if ( $freq == -1 ) {
222
				wp_schedule_single_event( $time, self::CRON_HOOK, array( $delete_options ) );
223
			} else {
224
				wp_schedule_event( $time, $freq, self::CRON_HOOK, array( $delete_options ) );
225
			}
226
			$msg = __( 'Jetpack contact form messages with the selected criteria are scheduled for deletion.', 'bulk-delete' ) . ' ' .
227
				sprintf( __( 'See the full list of <a href = "%s">scheduled tasks</a>' , 'bulk-delete' ), get_bloginfo( 'wpurl' ) . '/wp-admin/admin.php?page=' . Bulk_Delete::CRON_PAGE_SLUG );
228
		} else {
229
			$deleted_count = self::delete_jetpack_messages( $delete_options );
230
			$msg           = sprintf( _n( 'Deleted %d Jetpack contact form message', 'Deleted %d Jetpack contact form messages' , $deleted_count, 'bulk-delete' ), $deleted_count );
231
		}
232
233
		add_settings_error(
234
			Bulk_Delete_Misc::MISC_PAGE_SLUG,
235
			'deleted-posts',
236
			$msg,
237
			'updated'
238
		);
239
	}
240
241
	/**
242
	 * Delete Jetpack contact form messages.
243
	 *
244
	 * @static
245
	 *
246
	 * @since  5.3
247
	 *
248
	 * @param array $delete_options Options for deleting
249
	 *
250
	 * @return int Number of posts that were deleted
251
	 */
252
	public static function delete_jetpack_messages( $delete_options ) {
253
		$count      = 0;
254
		$use_filter = $delete_options['use_filter'];
255
256
		$options = array(
257
			'post_status' => 'publish',
258
			'post_type'   => self::FEEDBACK_POST_TYPE,
259
		);
260
261
		$limit_to = $delete_options['limit_to'];
262
263
		if ( $limit_to > 0 ) {
264
			$options['showposts'] = $limit_to;
265
		} else {
266
			$options['nopaging'] = 'true';
267
		}
268
269
		$force_delete = $delete_options['force_delete'];
270
271
		if ( 'true' == $force_delete ) {
272
			$force_delete = true;
273
		} else {
274
			$force_delete = false;
275
		}
276
277
		if ( 'true' == $delete_options['restrict'] ) {
278
			$options['op']   = $delete_options['feedback_op'];
279
			$options['days'] = $delete_options['feedback_days'];
280
281
			if ( ! class_exists( 'Bulk_Delete_By_Days' ) ) {
282
				require_once Bulk_Delete::$PLUGIN_DIR . '/include/util/class-bulk-delete-by-days.php';
283
			}
284
			new Bulk_Delete_By_Days;
285
		}
286
287
		$post_ids = bd_query( $options );
288
		foreach ( $post_ids as $post_id ) {
289
			if ( 'true' == $use_filter ) {
290
				/**
291
				 * Process additional filters for deleting jetpack messages.
292
				 *
293
				 * @since 5.3
294
				 */
295
				$can_delete = apply_filters( 'bd_delete_jetpack_messages_can_delete', $delete_options, $post_id );
296
				if ( ! $can_delete ) {
297
					continue;
298
				}
299
			}
300
301
			// $force delete parameter to custom post types doesn't work
302
			if ( $force_delete ) {
303
				wp_delete_post( $post_id, true );
304
			} else {
305
				wp_trash_post( $post_id );
306
			}
307
			$count++;
308
		}
309
310
		return $count;
311
	}
312
313
	/**
314
	 * Check whether Jetpack Contact Form is active.
315
	 *
316
	 * @static
317
	 *
318
	 * @since  5.3
319
	 *
320
	 * @return bool True if active, False otherwise
321
	 */
322
	public static function is_jetpack_contact_active() {
323
		$jetpack_active_modules = get_option( 'jetpack_active_modules' );
0 ignored issues
show
Comprehensibility Naming introduced by
The variable name $jetpack_active_modules exceeds the maximum configured length of 20.

Very long variable names usually make code harder to read. It is therefore recommended not to make variable names too verbose.

Loading history...
324
		if ( class_exists( 'Jetpack', false ) && $jetpack_active_modules && in_array( 'contact-form', $jetpack_active_modules ) ) {
325
			return true;
326
		}
327
328
		return false;
329
	}
330
}
331
332
// hooks
333
add_action( 'bd_add_meta_box_for_misc'  , array( 'Bulk_Delete_Jetpack_Contact_Form_Message', 'add_delete_jetpack_messages_meta_box' ) );
334
add_action( 'bd_delete_jetpack_messages', array( 'Bulk_Delete_Jetpack_Contact_Form_Message', 'do_delete_jetpack_messages' ) );
335
336
add_filter( 'bd_javascript_array'       , array( 'Bulk_Delete_Jetpack_Contact_Form_Message', 'filter_js_array' ) );
337
?>
338