* @license GPL-2.0-or-later */ defined( 'ABSPATH' ) || exit; /** * Class Studiou_WCMQ_Admin */ class Studiou_WCMQ_Admin { const PAGE = 'studiou-wcmq'; const CAP = 'manage_woocommerce'; const NONCE = 'studiou-wcmq-nonce'; const PER_PAGE = 50; /** * Constructor. */ public function __construct() { add_action( 'admin_menu', array( $this, 'add_menu' ), 99 ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_assets' ) ); add_action( 'admin_notices', array( $this, 'maybe_warn_deferred_emails' ) ); add_action( 'admin_notices', array( $this, 'maybe_warn_pluggable_wp_mail' ) ); add_action( 'admin_post_studiou_wcmq_save_settings', array( $this, 'handle_save_settings' ) ); add_action( 'admin_post_studiou_wcmq_toggle_state', array( $this, 'handle_toggle_state' ) ); add_action( 'admin_post_studiou_wcmq_clear_log', array( $this, 'handle_clear_log' ) ); add_action( 'admin_post_studiou_wcmq_queue_action', array( $this, 'handle_queue_action' ) ); } /** * Register the submenu under WooCommerce. */ public function add_menu() { add_submenu_page( 'woocommerce', __( 'Mail Queue', 'studiou-wc-mail-queue' ), __( 'Mail Queue', 'studiou-wc-mail-queue' ), self::CAP, self::PAGE, array( $this, 'render_page' ) ); } /** * Enqueue admin assets on our page only. * * @param string $hook Current admin page hook. */ public function enqueue_assets( $hook ) { if ( 'woocommerce_page_' . self::PAGE !== $hook ) { return; } wp_enqueue_style( 'studiou-wcmq-admin', STUDIOU_WCMQ_URL . 'assets/css/admin.css', array(), STUDIOU_WCMQ_VERSION ); wp_enqueue_script( 'studiou-wcmq-admin', STUDIOU_WCMQ_URL . 'assets/js/admin.js', array( 'jquery' ), STUDIOU_WCMQ_VERSION, true ); wp_localize_script( 'studiou-wcmq-admin', 'studiouWcmq', array( 'confirmDelete' => __( 'Delete the selected rows? This cannot be undone.', 'studiou-wc-mail-queue' ), 'confirmRetry' => __( 'Re-queue the selected rows? Already-sent rows are skipped, but anything still pending or failed will be sent again.', 'studiou-wc-mail-queue' ), 'confirmClearLog' => __( 'Clear the entire log? This cannot be undone.', 'studiou-wc-mail-queue' ), ) ); } /** * Warn when WooCommerce's own "Deferred emails" feature is on. * * It moves mail off the request but applies no rate cap, and chained with * this plugin it produces two queues in series. Never flip it silently. */ public function maybe_warn_deferred_emails() { if ( ! current_user_can( self::CAP ) ) { return; } if ( ! Studiou_WCMQ_State::is_queueing() ) { return; } $default = false; if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) { $default = (bool) \Automattic\WooCommerce\Utilities\FeaturesUtil::feature_is_enabled( 'deferred_transactional_emails' ); } /** This filter is documented in woocommerce/includes/class-wc-emails.php */ $deferred = (bool) apply_filters( 'woocommerce_defer_transactional_emails', $default ); if ( ! $deferred ) { return; } ?>
:
: ' . esc_html( $defined_in ) . '' ); ?>