Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
97.67% covered (success)
97.67%
42 / 43
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
Dependencies_Notice
97.67% covered (success)
97.67%
42 / 43
50.00% covered (danger)
50.00%
1 / 2
4
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 print_dependencies_notice
97.56% covered (success)
97.56%
40 / 41
0.00% covered (danger)
0.00%
0 / 1
3
1<?php
2/**
3 * Print an admin notice if the required GMP PHP extension is not present.
4 *
5 * @package brianhenryie/bh-wp-bitcoin-gateway
6 */
7
8namespace BrianHenryIE\WP_Bitcoin_Gateway\Admin;
9
10use BrianHenryIE\WP_Bitcoin_Gateway\API_Interface;
11use BrianHenryIE\WP_Bitcoin_Gateway\Settings_Interface;
12
13/**
14 * Hooks into wp-admin's admin_notice action and prints a warning if the plugin's dependencies are not present.
15 *
16 * @see wp-admin/admin-header.php
17 */
18class Dependencies_Notice {
19
20    /**
21     * Used to get the plugin basename for generating the deactivate link.
22     *
23     * @var Settings_Interface
24     */
25    protected Settings_Interface $settings;
26
27    /**
28     * Used to find is the dependency present or not.
29     *
30     * @var API_Interface
31     */
32    protected API_Interface $api;
33
34    /**
35     * Constructor
36     *
37     * @param API_Interface      $api The main plugin functions.
38     * @param Settings_Interface $settings The plugin settings.
39     */
40    public function __construct( API_Interface $api, Settings_Interface $settings ) {
41        $this->api      = $api;
42        $this->settings = $settings;
43    }
44
45    /**
46     * Print the admin notice, if the dependency is missing and it is an admin logged in.
47     * The notice links to the PHP.net GMP page, and contains a deactivate link for the plugin.
48     *
49     * @hooked admin_notices
50     */
51    public function print_dependencies_notice(): void {
52
53        if ( $this->api->is_server_has_dependencies() ) {
54            return;
55        }
56
57        if ( ! current_user_can( 'administrator' ) ) {
58            return;
59        }
60
61        echo '<div class="notice notice-warning is-dismissible">';
62        echo '<p>';
63        echo '<b>Bitcoin Gateway</b>.';
64        echo ' ';
65
66        $gmp_link = '<a target="_blank" href="https://www.php.net/manual/en/book.gmp.php">GMP (GNU Multiple Precision Arithmetic Library)</a>';
67
68        printf(
69            /* translators: %s is replaced with a link to the PHP.net page for the missing GMP extension. */
70            esc_html( __( 'Required PHP extension %s is not installed on this server. This is required for the calculations to derive Bitcoin payment addresses.', 'bh-wp-bitcoin-gateway' ) ),
71            wp_kses(
72                $gmp_link,
73                array(
74                    'a' => array(
75                        'target' => array(),
76                        'href'   => array(),
77                    ),
78                )
79            )
80        );
81        echo ' ';
82
83        echo wp_kses( __( 'Please <b>contact your hosting provider for support</b>.', 'bh-wp-bitcoin-gateway' ), array( 'b' => array() ) );
84        echo ' ';
85
86        $deactivate_link = wp_nonce_url(
87            add_query_arg(
88                array(
89                    'action' => 'deactivate',
90                    'plugin' => $this->settings->get_plugin_basename(),
91                ),
92                admin_url(
93                    'plugins.php'
94                )
95            ),
96            "deactivate-plugin_{$this->settings->get_plugin_basename()}"
97        );
98
99        echo ' <a href="' . esc_url( $deactivate_link ) . '">';
100        echo esc_html( __( 'Deactivate Bitcoin Gateway plugin', 'bh-wp-bitcoin-gateway' ) );
101        echo '</a>.';
102
103        echo '</p>';
104        echo '</div>';
105    }
106}