• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Yoast / wordpress-seo / 7004843404

27 Nov 2023 11:48AM UTC coverage: 49.206% (-0.03%) from 49.232%
7004843404

push

github

web-flow
Merge pull request #20858 from Yoast/improve-copy-in-the-ftc-57

15305 of 31104 relevant lines covered (49.21%)

4.03 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

27.5
/admin/class-suggested-plugins.php
1
<?php
2
/**
3
 * WPSEO plugin file.
4
 *
5
 * @package WPSEO\Suggested_Plugins
6
 */
7

8
/**
9
 * Class WPSEO_Suggested_Plugins
10
 */
11
class WPSEO_Suggested_Plugins implements WPSEO_WordPress_Integration {
12

13
        /**
14
         * Holds the availability checker.
15
         *
16
         * @var WPSEO_Plugin_Availability
17
         */
18
        protected $availability_checker;
19

20
        /**
21
         * Holds the notification center.
22
         *
23
         * @var Yoast_Notification_Center
24
         */
25
        protected $notification_center;
26

27
        /**
28
         * WPSEO_Suggested_Plugins constructor.
29
         *
30
         * @param WPSEO_Plugin_Availability $availability_checker The availability checker to use.
31
         * @param Yoast_Notification_Center $notification_center  The notification center to add notifications to.
32
         */
33
        public function __construct( WPSEO_Plugin_Availability $availability_checker, Yoast_Notification_Center $notification_center ) {
×
34
                $this->availability_checker = $availability_checker;
×
35
                $this->notification_center  = $notification_center;
×
36
        }
37

38
        /**
39
         * Registers all hooks to WordPress.
40
         *
41
         * @return void
42
         */
43
        public function register_hooks() {
×
44
                add_action( 'admin_init', [ $this->availability_checker, 'register' ] );
×
45
                add_action( 'admin_init', [ $this, 'add_notifications' ] );
×
46
        }
47

48
        /**
49
         * Adds notifications (when necessary).
50
         *
51
         * @return void
52
         */
53
        public function add_notifications() {
8✔
54
                $checker = $this->availability_checker;
8✔
55

56
                // Get all Yoast plugins that have dependencies.
57
                $plugins = $checker->get_plugins_with_dependencies();
8✔
58

59
                foreach ( $plugins as $plugin_name => $plugin ) {
8✔
60
                        if ( ! $checker->dependencies_are_satisfied( $plugin ) ) {
8✔
61
                                continue;
×
62
                        }
63

64
                        $notification = $this->get_yoast_seo_suggested_plugins_notification( $plugin_name, $plugin );
8✔
65

66
                        if ( ! $checker->is_installed( $plugin ) ) {
8✔
67
                                $this->notification_center->add_notification( $notification );
8✔
68

69
                                continue;
8✔
70
                        }
71

72
                        $this->notification_center->remove_notification( $notification );
8✔
73
                }
74
        }
4✔
75

76
        /**
77
         * Build Yoast SEO suggested plugins notification.
78
         *
79
         * @param string $name   The plugin name to use for the unique ID.
80
         * @param array  $plugin The plugin to retrieve the data from.
81
         *
82
         * @return Yoast_Notification The notification containing the suggested plugin.
83
         */
84
        protected function get_yoast_seo_suggested_plugins_notification( $name, $plugin ) {
×
85
                $message = $this->create_install_suggested_plugin_message( $plugin );
×
86

87
                if ( $this->availability_checker->is_installed( $plugin ) && ! $this->availability_checker->is_active( $plugin['slug'] ) ) {
×
88
                        $message = '';
×
89
                }
90

91
                return new Yoast_Notification(
×
92
                        $message,
×
93
                        [
94
                                'id'           => 'wpseo-suggested-plugin-' . $name,
×
95
                                'type'         => Yoast_Notification::WARNING,
96
                                'capabilities' => [ 'install_plugins' ],
97
                        ]
98
                );
99
        }
100

101
        /**
102
         * Creates a message to suggest the installation of a particular plugin.
103
         *
104
         * @param array $suggested_plugin The suggested plugin.
105
         *
106
         * @return string The install suggested plugin message.
107
         */
108
        protected function create_install_suggested_plugin_message( $suggested_plugin ) {
×
109
                /* translators: %1$s expands to an opening strong tag, %2$s expands to the dependency name, %3$s expands to a closing strong tag, %4$s expands to an opening anchor tag, %5$s expands to a closing anchor tag. */
110
                $message      = __( 'It looks like you aren\'t using our %1$s%2$s addon%3$s. %4$sUpgrade today%5$s to unlock more tools and SEO features to make your products stand out in search results.', 'wordpress-seo' );
×
111
                $install_link = WPSEO_Admin_Utils::get_install_link( $suggested_plugin );
×
112

113
                return sprintf(
×
114
                        $message,
×
115
                        '<strong>',
×
116
                        $install_link,
×
117
                        '</strong>',
×
118
                        $this->create_more_information_link( $suggested_plugin['url'], $suggested_plugin['title'] ),
×
119
                        '</a>'
×
120
                );
121
        }
122

123
        /**
124
         * Creates a more information link that directs the user to WordPress.org Plugin repository.
125
         *
126
         * @param string $url  The URL to the plugin's page.
127
         * @param string $name The name of the plugin.
128
         *
129
         * @return string The more information link.
130
         */
131
        protected function create_more_information_link( $url, $name ) {
×
132
                return sprintf(
×
133
                        '<a href="%s" aria-label="%s" target="_blank" rel="noopener noreferrer">',
×
134
                        $url,
×
135
                        /* translators: Hidden accessibility text; %1$s expands to the dependency name */
136
                        sprintf( __( 'More information about %1$s', 'wordpress-seo' ), $name )
×
137
                );
138
        }
139
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc