Passed
Push — 217-feature/delete-posts-by-po... ( d7bccc...aea384 )
by Sudar
04:38
created

DeletePagesByStatusMetabox::delete()   C

Complexity

Conditions 7
Paths 64

Size

Total Lines 49
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 17
CRAP Score 7.3387

Importance

Changes 0
Metric Value
cc 7
eloc 21
nc 64
nop 1
dl 0
loc 49
ccs 17
cts 21
cp 0.8095
crap 7.3387
rs 6.7272
c 0
b 0
f 0
1
<?php
2
3
namespace BulkWP\BulkDelete\Core\Pages\Metabox;
4
5
use BulkWP\BulkDelete\Core\Pages\PagesMetabox;
6
7 1
defined( 'ABSPATH' ) || exit; // Exit if accessed directly.
8
9
/**
10
 * Delete Pages by Status Metabox.
11
 *
12
 * @since 6.0.0
13
 */
14
class DeletePagesByStatusMetabox extends PagesMetabox {
15 2
	protected function initialize() {
16 2
		$this->item_type     = 'pages';
17 2
		$this->field_slug    = 'pages';
18 2
		$this->meta_box_slug = 'bd_pages_by_status';
19 2
		$this->action        = 'delete_pages_by_status';
20 2
		$this->cron_hook     = 'do-bulk-delete-pages-by-status';
21 2
		$this->scheduler_url = 'http://bulkwp.com/addons/scheduler-for-deleting-pages-by-status/?utm_source=wpadmin&utm_campaign=BulkDelete&utm_medium=buynow&utm_content=bd-sp';
22 2
		$this->messages      = array(
23 2
			'box_label' => __( 'By Page Status', 'bulk-delete' ),
24 2
			'scheduled' => __( 'The selected pages are scheduled for deletion', 'bulk-delete' ),
25
		);
26 2
	}
27
28
	public function render() {
29
		$pages_count  = wp_count_posts( 'page' );
30
		$pages        = $pages_count->publish;
31
		$page_drafts  = $pages_count->draft;
32
		$page_future  = $pages_count->future;
33
		$page_pending = $pages_count->pending;
34
		$page_private = $pages_count->private;
35
		?>
36
		<!-- Pages start-->
37
		<h4><?php _e( 'Select the status from which you want to delete pages', 'bulk-delete' ); ?></h4>
38
39
		<fieldset class="options">
40
			<table class="optiontable">
41
				<tr>
42
					<td>
43
						<input name="smbd_published_pages" value="published_pages" type="checkbox">
44
						<label for="smbd_published_pages"><?php _e( 'All Published Pages', 'bulk-delete' ); ?> (<?php echo $pages . ' '; _e( 'Pages', 'bulk-delete' ); ?>)</label>
45
					</td>
46
				</tr>
47
48
				<tr>
49
					<td>
50
						<input name="smbd_draft_pages" value="draft_pages" type="checkbox">
51
						<label for="smbd_draft_pages"><?php _e( 'All Draft Pages', 'bulk-delete' ); ?> (<?php echo $page_drafts . ' '; _e( 'Pages', 'bulk-delete' ); ?>)</label>
52
					</td>
53
				</tr>
54
55
				<tr>
56
					<td>
57
						<input name="smbd_future_pages" value="scheduled_pages" type="checkbox">
58
						<label for="smbd_future_pages"><?php _e( 'All Scheduled Pages', 'bulk-delete' ); ?> (<?php echo $page_future . ' '; _e( 'Pages', 'bulk-delete' ); ?>)</label>
59
					</td>
60
				</tr>
61
62
				<tr>
63
					<td>
64
						<input name="smbd_pending_pages" value="pending_pages" type="checkbox">
65
						<label for="smbd_pending_pages"><?php _e( 'All Pending Pages', 'bulk-delete' ); ?> (<?php echo $page_pending . ' '; _e( 'Pages', 'bulk-delete' ); ?>)</label>
66
					</td>
67
				</tr>
68
69
				<tr>
70
					<td>
71
						<input name="smbd_private_pages" value="private_pages" type="checkbox">
72
						<label for="smbd_private_pages"><?php _e( 'All Private Pages', 'bulk-delete' ); ?> (<?php echo $page_private . ' '; _e( 'Pages', 'bulk-delete' ); ?>)</label>
73
					</td>
74
				</tr>
75
			</table>
76
77
			<table class="optiontable">
78
				<?php
79
				$this->render_filtering_table_header();
80
				$this->render_restrict_settings();
81
				$this->render_delete_settings();
82
				$this->render_limit_settings();
83
				$this->render_cron_settings();
84
				?>
85
			</table>
86
		</fieldset>
87
		<?php
88
		$this->render_submit_button();
89
	}
90
91
	protected function convert_user_input_to_options( $request, $options ) {
92
		$options['publish'] = bd_array_get( $request, 'smbd_published_pages' );
93
		$options['drafts']  = bd_array_get( $request, 'smbd_draft_pages' );
94
		$options['pending'] = bd_array_get( $request, 'smbd_pending_pages' );
95
		$options['future']  = bd_array_get( $request, 'smbd_future_pages' );
96
		$options['private'] = bd_array_get( $request, 'smbd_private_pages' );
97
98
		return $options;
99
	}
100
101 2
	public function delete( $delete_options ) {
102 2
		global $wp_query;
103
104
		/**
105
		 * Filter Delete options.
106
		 *
107
		 * @param array $delete_options Delete options.
108
		 */
109 2
		$delete_options = apply_filters( 'bd_delete_options', $delete_options );
110
111 2
		$post_status = array();
112
113
		// published pages
114 2
		if ( 'published_pages' == $delete_options['publish'] ) {
115 2
			$post_status[] = 'publish';
116
		}
117
118
		// Drafts
119 2
		if ( 'draft_pages' == $delete_options['drafts'] ) {
120
			$post_status[] = 'draft';
121
		}
122
123
		// Pending pages
124 2
		if ( 'pending_pages' == $delete_options['pending'] ) {
125
			$post_status[] = 'pending';
126
		}
127
128
		// Future pages
129 2
		if ( 'future_pages' == $delete_options['future'] ) {
130
			$post_status[] = 'future';
131
		}
132
133
		// Private pages
134 2
		if ( 'private_pages' == $delete_options['private'] ) {
135
			$post_status[] = 'private';
136
		}
137
138
		$options = array(
139 2
			'post_type'   => 'page',
140 2
			'post_status' => $post_status,
141
		);
142
143 2
		$options = bd_build_query_options( $delete_options, $options );
144 2
		$pages   = $wp_query->query( $options );
145 2
		foreach ( $pages as $page ) {
146 2
			wp_delete_post( $page->ID, $delete_options['force_delete'] );
147
		}
148
149 2
		return count( $pages );
150
	}
151
152
	protected function get_success_message( $items_deleted ) {
153
		/* translators: 1 Number of pages deleted */
154
		return _n( 'Deleted %d page with the selected page status', 'Deleted %d pages with the selected page status', $items_deleted, 'bulk-delete' );
155
	}
156
}
157