Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
6 / 6
CRAP
100.00% covered (success)
100.00%
1 / 1
BH_WC_Checkout_Rate_Limiter
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
6 / 6
6
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 set_locale
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 define_woocommerce_ajax_hooks
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 define_woocommerce_settings_hooks
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 define_admin_hooks
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 define_plugins_page_hooks
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2/**
3 * The file that defines the core plugin class
4 *
5 * A class definition that WP_Includes attributes and functions used across both the
6 * frontend-facing side of the site and the admin area.
7 *
8 * @link       https://BrianHenryIE.com
9 * @since      1.0.0
10 *
11 * @package brianhenryie/bh-wc-checkout-rate-limiter
12 */
13
14namespace BrianHenryIE\Checkout_Rate_Limiter;
15
16use BrianHenryIE\Checkout_Rate_Limiter\Admin\Admin;
17use BrianHenryIE\Checkout_Rate_Limiter\Admin\Plugins_Page;
18use BrianHenryIE\Checkout_Rate_Limiter\WooCommerce\Ajax;
19use BrianHenryIE\Checkout_Rate_Limiter\WooCommerce\Settings_Payments;
20use BrianHenryIE\Checkout_Rate_Limiter\WP_Includes\I18n;
21use Psr\Log\LoggerAwareTrait;
22use Psr\Log\LoggerInterface;
23
24/**
25 * The core plugin class.
26 *
27 * This is used to define internationalization, admin-specific hooks, and
28 * frontend-facing site hooks.
29 *
30 * Also maintains the unique identifier of this plugin as well as the current
31 * version of the plugin.
32 *
33 * @since      1.0.0
34 * @package brianhenryie/bh-wc-checkout-rate-limiter
35 *
36 * @author     BrianHenryIE <BrianHenryIE@gmail.com>
37 */
38class BH_WC_Checkout_Rate_Limiter {
39
40    use LoggerAwareTrait;
41
42    /**
43     * The plugin settings.
44     *
45     * @var Settings_Interface
46     */
47    protected Settings_Interface $settings;
48
49    /**
50     * Define the core functionality of the plugin.
51     *
52     * Set the plugin name and the plugin version that can be used throughout the plugin.
53     * Load the dependencies, define the locale, and set the hooks for the admin area and
54     * the frontend-facing side of the site.
55     *
56     * @param Settings_Interface $settings The plugin's settings.
57     * @param LoggerInterface    $logger PSR logger.
58     *
59     * @since    1.0.0
60     */
61    public function __construct( Settings_Interface $settings, LoggerInterface $logger ) {
62
63        $this->settings = $settings;
64        $this->setLogger( $logger );
65
66        $this->set_locale();
67        $this->define_woocommerce_ajax_hooks();
68        $this->define_woocommerce_settings_hooks();
69        $this->define_admin_hooks();
70        $this->define_plugins_page_hooks();
71    }
72
73    /**
74     * Define the locale for this plugin for internationalization.
75     *
76     * Uses the i18n class in order to set the domain and to register the hook
77     * with WordPress.
78     *
79     * @since    1.0.0
80     */
81    protected function set_locale(): void {
82
83        $plugin_i18n = new I18n();
84
85        add_action( 'plugins_loaded', array( $plugin_i18n, 'load_plugin_textdomain' ) );
86    }
87
88    /**
89     * Registers the hooks related to WooCommerce ajax actions. i.e. the main hook.
90     *
91     * @since    1.0.0
92     */
93    protected function define_woocommerce_ajax_hooks(): void {
94
95        $ajax = new Ajax( $this->settings, $this->logger );
96
97        add_action( 'wc_ajax_checkout', array( $ajax, 'rate_limit_checkout' ), 0 );
98    }
99
100    /**
101     * Registers the hooks related to adding the settings page to WooCommerce.
102     *
103     * @since    1.0.0
104     */
105    protected function define_woocommerce_settings_hooks(): void {
106
107        $settings_advanced = new Settings_Payments( $this->settings, $this->logger );
108
109        add_action( 'current_screen', array( $settings_advanced, 'record_page_visit_time' ) );
110
111        add_filter( 'woocommerce_get_sections_checkout', array( $settings_advanced, 'add_section' ) );
112        add_filter( 'woocommerce_get_settings_checkout', array( $settings_advanced, 'settings' ), 10, 2 );
113
114        add_action( 'woocommerce_admin_field_attempts_per_interval', array( $settings_advanced, 'print_attempts_per_interval_settings_field' ) );
115    }
116
117    /**
118     * Register hooks for displaying and dismissing the "plugin is not yet configured" notice.
119     */
120    protected function define_admin_hooks(): void {
121
122        $admin = new Admin( $this->settings, $this->logger );
123
124        add_action( 'plugins_loaded', array( $admin, 'init_notices' ) );
125        add_action( 'admin_init', array( $admin, 'add_setup_notice' ) );
126    }
127
128    /**
129     * Register hook to add a settings link on plugins.php.
130     */
131    protected function define_plugins_page_hooks(): void {
132
133        $plugins_page = new Plugins_Page( $this->settings, $this->logger );
134
135        add_filter( "plugin_action_links_{$this->settings->get_plugin_basename()}", array( $plugins_page, 'action_links' ), 10, 4 );
136    }
137}