From eb221dd670883c95106620739bd9214a0d1b2415 Mon Sep 17 00:00:00 2001 From: Erick Hitter <git-contrib@ethitter.com> Date: Sun, 26 May 2019 11:59:09 -0700 Subject: [PATCH] Begin adding bulk actions --- ...lass-wp-revisions-control-bulk-actions.php | 105 ++++++++++++++++++ inc/class-wp-revisions-control.php | 7 +- wp-revisions-control.php | 1 + 3 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 inc/class-wp-revisions-control-bulk-actions.php diff --git a/inc/class-wp-revisions-control-bulk-actions.php b/inc/class-wp-revisions-control-bulk-actions.php new file mode 100644 index 0000000..b8563ba --- /dev/null +++ b/inc/class-wp-revisions-control-bulk-actions.php @@ -0,0 +1,105 @@ +<?php +/** + * Bulk actions. + * + * @package WP_Revisions_Control + */ + +/** + * Class WP_Revisions_Control_Bulk_Actions. + */ +class WP_Revisions_Control_Bulk_Actions { + /** + * Supported post types. + * + * @var array + */ + protected $post_types; + + /** + * Custom bulk actions. + * + * @var array + */ + protected $actions; + + /** + * Constructor. + * + * @param array $post_types Supported post types. + */ + public function __construct( $post_types ) { + if ( empty( $post_types ) || ! is_array( $post_types ) ) { + return; + } + + $this->post_types = $post_types; + $this->register_actions(); + + add_action( 'load-edit.php', array( $this, 'setup' ) ); + } + + /** + * Register custom actions. + */ + protected function register_actions() { + $actions = array(); + $action_base = 'wp_rev_ctl_bulk_'; + + $actions[ $action_base . 'purge_excess' ] = __( 'Purge excess revisions', 'wp_revisions_control' ); + $actions[ $action_base . 'purge_all' ] = __( 'Purge ALL revisions', 'wp_revisions_control' ); + + $this->actions = $actions; + } + + /** + * Register various hooks. + */ + public function setup() { + $screen = get_current_screen(); + + if ( null === $screen ) { + return; + } + + $post_types = array_keys( $this->post_types ); + + if ( ! in_array( $screen->post_type, $post_types, true ) ) { + return; + } + + if ( 'edit' !== $screen->base ) { + return; + } + + add_filter( 'bulk_actions-' . $screen->id, array( $this, 'add_actions' ) ); + add_filter( 'handle_bulk_actions-' . $screen->id, array( $this, 'handle_action' ), 10, 3 ); + } + + /** + * Add our actions. + * + * @param string[] $actions Array of available actions. + * @return array + */ + public function add_actions( $actions ) { + return array_merge( $actions, $this->actions ); + } + + /** + * Handle our bulk actions. + * + * @param string $redirect_to Redirect URL. + * @param string $action Bulk action being taken. + * @param array $ids Object IDs to manipulate. + * @return string + */ + public function handle_action( $redirect_to, $action, $ids ) { + if ( ! array_key_exists( $action, $this->actions ) ) { + return $redirect_to; + } + + // TODO: implement and add a query string to trigger a message. + return $redirect_to; + } +} diff --git a/inc/class-wp-revisions-control.php b/inc/class-wp-revisions-control.php index 7386ff0..2d556ad 100644 --- a/inc/class-wp-revisions-control.php +++ b/inc/class-wp-revisions-control.php @@ -125,12 +125,14 @@ class WP_Revisions_Control { * Plugin title is intentionally not translatable. */ public function action_admin_init() { + $post_types = $this->get_post_types(); + // Plugin setting section. register_setting( $this->settings_page, $this->settings_section, array( $this, 'sanitize_options' ) ); add_settings_section( $this->settings_section, 'WP Revisions Control', array( $this, 'settings_section_intro' ), $this->settings_page ); - foreach ( $this->get_post_types() as $post_type => $name ) { + foreach ( $post_types as $post_type => $name ) { add_settings_field( $this->settings_section . '-' . $post_type, $name, array( $this, 'field_post_type' ), $this->settings_page, $this->settings_section, array( 'post_type' => $post_type ) ); } @@ -138,6 +140,9 @@ class WP_Revisions_Control { add_action( 'add_meta_boxes', array( $this, 'action_add_meta_boxes' ), 10, 2 ); add_action( 'wp_ajax_' . $this->settings_section . '_purge', array( $this, 'ajax_purge' ) ); add_action( 'save_post', array( $this, 'action_save_post' ) ); + + // Bulk actions. + new WP_Revisions_Control_Bulk_Actions( $post_types ); } /** diff --git a/wp-revisions-control.php b/wp-revisions-control.php index 1b09aca..0bf1b26 100644 --- a/wp-revisions-control.php +++ b/wp-revisions-control.php @@ -30,4 +30,5 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +require_once __DIR__ . '/inc/class-wp-revisions-control-bulk-actions.php'; require_once __DIR__ . '/inc/class-wp-revisions-control.php'; -- GitLab