setup(); } /** * Setup the module. * * @since 5.5 */ protected function setup() { $this->initialize(); $this->setup_hooks(); } /** * Setup hooks. * * @since 5.5 */ protected function setup_hooks() { add_action( $this->meta_box_hook, array( $this, 'setup_metabox' ), 10, 2 ); add_action( 'bd_' . $this->delete_action, array( $this, 'process' ) ); add_filter( 'bd_javascript_array', array( $this, 'filter_js_array' ) ); } /** * Setup the meta box. * * @since 5.5 * * @param mixed $screen * @param mixed $page_slug */ public function setup_metabox( $screen, $page_slug ) { $this->screen = $screen; $this->page_slug = $page_slug; add_meta_box( $this->meta_box_slug, $this->messages['box_label'], array( $this, 'render_box' ), $this->screen, 'advanced' ); } /** * Render the meta box. * * @since 5.5 */ public function render_box() { if ( $this->is_hidden() ) { printf( __( 'This section just got enabled. Kindly refresh the page to fully enable it.', 'bulk-delete' ), 'admin.php?page=' . $this->page_slug ); return; } $this->render(); } /** * Is the current meta box hidden by user. * * @since 5.5 * * @return bool True, if hidden. False, otherwise. */ protected function is_hidden() { $current_user = wp_get_current_user(); $user_meta_field = $this->get_hidden_box_user_meta_field(); $hidden_boxes = get_user_meta( $current_user->ID, $user_meta_field, true ); return is_array( $hidden_boxes ) && in_array( $this->meta_box_slug, $hidden_boxes ); } /** * Get the user meta field that stores the status of the hidden meta boxes. * * @since 5.5 * * @return string Name of the User Meta field. */ protected function get_hidden_box_user_meta_field() { if ( 'posts' == $this->item_type ) { return 'metaboxhidden_toplevel_page_bulk-delete-posts'; } else { return 'metaboxhidden_bulk-wp_page_' . $this->page_slug; } } /** * Filter the js array. * This function will be overridden by the child classes. * * @since 5.5 * * @param array $js_array JavaScript Array * * @return array Modified JavaScript Array */ public function filter_js_array( $js_array) { return $js_array; } /** * Render filtering table header. * * @since 5.5 */ protected function render_filtering_table_header() { bd_render_filtering_table_header(); } /** * Render restrict settings. * * @since 5.5 */ protected function render_restrict_settings() { bd_render_restrict_settings( $this->field_slug, $this->item_type ); } /** * Render delete settings. * * @since 5.5 */ protected function render_delete_settings() { bd_render_delete_settings( $this->field_slug ); } /** * Render limit settings. * * @since 5.5 */ protected function render_limit_settings() { bd_render_limit_settings( $this->field_slug, $this->item_type ); } /** * Render cron settings. * * @since 5.5 */ protected function render_cron_settings() { bd_render_cron_settings( $this->field_slug, $this->scheduler_url ); } /** * Render submit button. * * @since 5.5 */ protected function render_submit_button() { bd_render_submit_button( $this->delete_action ); } /** * Helper function for processing deletion. * Setups up cron and invokes the actual delete method. * * @since 5.5 * * @param mixed $delete_options */ protected function process_delete( $delete_options ) { if ( bd_array_get_bool( $_POST, 'smbd_' . $this->field_slug . '_cron', false ) ) { $freq = $_POST[ 'smbd_' . $this->field_slug . '_cron_freq' ]; $time = strtotime( $_POST[ 'smbd_' . $this->field_slug . '_cron_start' ] ) - ( get_option( 'gmt_offset' ) * 60 * 60 ); if ( -1 == $freq ) { wp_schedule_single_event( $time, $this->cron_hook, array( $delete_options ) ); } else { wp_schedule_event( $time, $freq , $this->cron_hook, array( $delete_options ) ); } $msg = $this->messages['scheduled'] . ' ' . sprintf( __( 'See the full list of scheduled tasks' , 'bulk-delete' ), get_bloginfo( 'wpurl' ) . '/wp-admin/admin.php?page=' . Bulk_Delete::CRON_PAGE_SLUG ); } else { $deleted_count = $this->delete( $delete_options ); $msg = sprintf( _n( $this->messages['deleted_single'], $this->messages['deleted_plural'] , $deleted_count, 'bulk-delete' ), $deleted_count ); } add_settings_error( $this->page_slug, 'deleted-' . $this->item_type, $msg, 'updated' ); } /** * Getter for cron_hook. * * @since 5.5 * * @return string Cron Hook name. */ public function get_cron_hook() { return $this->cron_hook; } /** * Getter for field slug. * * @since 5.5 * * @return string Field Slug. */ public function get_field_slug() { return $this->field_slug; } }