/** * Handle activate & cancel actions for both individual items and bulk edit. * * @since 1.0 */ public function process_actions() { $custom_actions = apply_filters('woocommerce_subscriptions_list_table_pre_process_actions', array('custom_action' => false, 'messages' => array(), 'error_messages' => array())); if ($this->current_action() === false && $custom_actions['custom_action'] === false) { return; } $messages = array(); $error_messages = array(); $query_args = array(); // Check if custom actions were taken by the filter - if so, it has handled the action and we only need to set the message/error messages if ($custom_actions['custom_action'] !== false) { $messages = $custom_actions['messages']; $error_messages = $custom_actions['error_messages']; } else { if (isset($_GET['subscription'])) { // Single subscription action if (!wp_verify_nonce($_REQUEST['_wpnonce'], $_GET['subscription'])) { wp_die(__('Action failed. Invalid Nonce.', WC_Subscriptions::$text_domain)); } if (!WC_Subscriptions_Manager::can_subscription_be_changed_to($_GET['new_status'], $_GET['subscription'], $_GET['user'])) { $error_messages[] = sprintf(__('Error: Subscription status can not be changed to "%s".', WC_Subscriptions::$text_domain), esc_html($_GET['new_status'])); } else { switch ($_GET['new_status']) { case 'active': WC_Subscriptions_Manager::reactivate_subscription($_GET['user'], $_GET['subscription']); $messages[] = __('Subscription activated.', WC_Subscriptions::$text_domain); break; case 'on-hold': WC_Subscriptions_Manager::put_subscription_on_hold($_GET['user'], $_GET['subscription']); $messages[] = __('Subscription put on-hold.', WC_Subscriptions::$text_domain); break; case 'cancelled': WC_Subscriptions_Manager::cancel_subscription($_GET['user'], $_GET['subscription']); $messages[] = __('Subscription cancelled.', WC_Subscriptions::$text_domain); break; case 'trash': WC_Subscriptions_Manager::trash_subscription($_GET['user'], $_GET['subscription']); $messages[] = __('Subscription trashed.', WC_Subscriptions::$text_domain); break; case 'deleted': WC_Subscriptions_Manager::delete_subscription($_GET['user'], $_GET['subscription']); $messages[] = __('Subscription deleted.', WC_Subscriptions::$text_domain); break; default: $error_messages[] = __('Error: Unknown subscription status.', WC_Subscriptions::$text_domain); break; } } } else { if (isset($_GET['subscription_keys'])) { // Bulk actions if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'bulk-' . $this->_args['plural'])) { wp_die(__('Bulk edit failed. Invalid Nonce.', WC_Subscriptions::$text_domain)); } $subscriptions = $_GET['subscription_keys']; $subscription_count = 0; $error_count = 0; if (in_array($this->current_action(), array('trash', 'deleted'))) { foreach ($subscriptions as $user_id => $subscription_keys) { foreach ($subscription_keys as $subscription_key) { if (!WC_Subscriptions_Manager::can_subscription_be_changed_to($this->current_action(), $subscription_key, $user_id)) { $error_count++; } else { $subscription_count++; if ('trash' == $this->current_action()) { WC_Subscriptions_Manager::trash_subscription($user_id, $subscription_key); } else { WC_Subscriptions_Manager::delete_subscription($user_id, $subscription_key); } } } } if ($subscription_count > 0) { if ('trash' == $this->current_action()) { $messages[] = sprintf(_n('%d subscription moved to trash.', '%s subscriptions moved to trash.', $subscription_count, WC_Subscriptions::$text_domain), $subscription_count); } else { $messages[] = sprintf(_n('%d subscription deleted.', '%s subscriptions deleted.', $subscription_count, WC_Subscriptions::$text_domain), $subscription_count); } } if ($error_count > 0) { if ('trash' == $this->current_action()) { $error_messages[] = sprintf(_n('%d subscription could not be trashed - is it active or on-hold? Try cancelling it before trashing it.', '%s subscriptions could not be trashed - are they active or on-hold? Try cancelling them before trashing.', $error_count, WC_Subscriptions::$text_domain), $error_count); } else { $error_messages[] = sprintf(_n('%d subscription could not deleted - is it active or on-hold? Try cancelling it before deleting.', '%s subscriptions could not deleted - are they active or on-hold? Try cancelling them before deleting.', $error_count, WC_Subscriptions::$text_domain), $error_count); } } } } } } $message_nonce = wp_create_nonce(__FILE__); set_transient($this->message_transient_prefix . $message_nonce, array('messages' => $messages, 'error_messages' => $error_messages), 60 * 60); // Filter by a given customer or product? if (isset($_GET['_customer_user']) || isset($_GET['_product_id'])) { if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'bulk-subscriptions')) { wp_die(__('Action failed. Invalid Nonce.', WC_Subscriptions::$text_domain)); } if (!empty($_GET['_customer_user'])) { $user_id = intval($_GET['_customer_user']); $user = get_user_by('id', absint($_GET['_customer_user'])); if (false === $user) { wp_die(__('Action failed. Invalid user ID.', WC_Subscriptions::$text_domain)); } $query_args['_customer_user'] = $user_id; } if (!empty($_GET['_product_id'])) { $product_id = intval($_GET['_product_id']); $product = get_product($product_id); if (false === $product) { wp_die(__('Action failed. Invalid product ID.', WC_Subscriptions::$text_domain)); } $query_args['_product_id'] = $product_id; } } $status = isset($_GET['status']) ? $_GET['status'] : 'all'; $query_args = array_merge($query_args, array('status' => $status, 'message' => $message_nonce)); $search_query = _admin_search_query(); if (!empty($search_query)) { $query_args['s'] = $search_query; } $redirect_to = add_query_arg($query_args, admin_url('admin.php?page=subscriptions')); // Redirect to avoid performning actions on a page refresh wp_safe_redirect($redirect_to); exit; }
/** * Handle activate & cancel actions for both individual items and bulk edit. * * @since 1.0 */ public function process_actions() { if ($this->current_action() === false) { return; } $messages = array(); $error_messages = array(); // Single subscription action if (isset($_GET['subscription'])) { if (!wp_verify_nonce($_REQUEST['_wpnonce'], $_GET['subscription'])) { wp_die(__('Action failed. Invalid Nonce.', WC_Subscriptions::$text_domain)); } if (!WC_Subscriptions_Manager::can_subscription_be_changed_to($_GET['new_status'], $_GET['subscription'], $_GET['user'])) { $error_messages[] = sprintf(__('Error: Subscription status can not be changed to "%s".', WC_Subscriptions::$text_domain), esc_html($_GET['new_status'])); } else { switch ($_GET['new_status']) { case 'active': WC_Subscriptions_Manager::reactivate_subscription($_GET['user'], $_GET['subscription']); $messages[] = __('Subscription activated.', WC_Subscriptions::$text_domain); break; case 'suspended': WC_Subscriptions_Manager::suspend_subscription($_GET['user'], $_GET['subscription']); $messages[] = __('Subscription suspended.', WC_Subscriptions::$text_domain); break; case 'cancelled': WC_Subscriptions_Manager::cancel_subscription($_GET['user'], $_GET['subscription']); $messages[] = __('Subscription cancelled.', WC_Subscriptions::$text_domain); break; case 'trash': WC_Subscriptions_Manager::trash_subscription($_GET['user'], $_GET['subscription']); $messages[] = __('Subscription trashed.', WC_Subscriptions::$text_domain); break; default: $error_messages[] = __('Error: Unknown subscription status.', WC_Subscriptions::$text_domain); break; } } } else { if (isset($_GET['subscriptions'])) { // Bulk actions if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'bulk-' . $this->_args['plural'])) { wp_die(__('Bulk edit failed. Invalid Nonce.', WC_Subscriptions::$text_domain)); } $subscriptions = $_GET[$this->_args['plural']]; $subscription_count = 0; $error_count = 0; if ('trash' === $this->current_action()) { foreach ($subscriptions as $user_id => $subscription_keys) { foreach ($subscription_keys as $subscription_key) { if (!WC_Subscriptions_Manager::can_subscription_be_changed_to('trash', $subscription_key, $user_id)) { $error_count++; } else { $subscription_count++; WC_Subscriptions_Manager::trash_subscription($user_id, $subscription_key); } } } if ($subscription_count > 0) { $messages[] = sprintf(_n('%d subscription moved to trash.', '%s subscriptions moved to trash.', $subscription_count), $subscription_count); } if ($error_count > 0) { $error_messages[] = sprintf(_n('%d subscription could not be trashed - is it active or suspended? Try cancelling it before trashing it.', '%s subscriptions could not be trashed - are they active or suspended? Try cancelling them before trashing.', $error_count), $error_count); } } } } $status = isset($_GET['status']) ? $_GET['status'] : 'all'; $message_nonce = wp_create_nonce(__FILE__); set_transient($this->message_transient_prefix . $message_nonce, array('messages' => $messages, 'error_messages' => $error_messages), 60 * 60); $redirect_to = add_query_arg(array('status' => $status, 'message' => $message_nonce), admin_url('admin.php?page=subscriptions')); // Redirect to avoid performning actions on a page refresh wp_safe_redirect($redirect_to); }