Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
CRAP
100.00% covered (success)
100.00%
1 / 1
WPCOM_Feature_Upgrades
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
1 / 1
 filter_feature_upgrade
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2/**
3 * Sends Jetpack's upgrade and manage links for a feature on WoA to WordPress.com.
4 *
5 * @package automattic/jetpack-mu-wpcom
6 */
7
8namespace Automattic\Jetpack\Jetpack_Mu_Wpcom;
9
10/**
11 * Answers the `jetpack_feature_upgrade` filter for the features a WordPress.com plan includes.
12 */
13class WPCOM_Feature_Upgrades {
14
15    /**
16     * The hosting feature page behind each My Jetpack feature slug.
17     *
18     * @var array<string, class-string<WPCOM_Hosting_Feature_Page>>
19     */
20    const PAGES = array(
21        'backup'            => WPCOM_Backup::class,
22        'protect-dashboard' => WPCOM_Scan::class,
23    );
24
25    /**
26     * Send a feature's upgrade to the WordPress.com plans, and its manage link to where WordPress.com serves it.
27     *
28     * @param array  $upgrade          Where the upgrade goes: `path`, `name`, `back_url`, and optionally `url` and `manage_url`.
29     * @param string $slug             The My Jetpack feature slug.
30     * @param bool   $site_has_feature Whether the site already has the feature.
31     * @return array
32     */
33    public static function filter_feature_upgrade( $upgrade, $slug, $site_has_feature ) {
34        if ( ! isset( self::PAGES[ $slug ] ) ) {
35            return $upgrade;
36        }
37
38        $page = self::PAGES[ $slug ];
39
40        if ( $site_has_feature ) {
41            return array_merge( (array) $upgrade, array( 'manage_url' => $page::get_live_feature_url() ) );
42        }
43
44        return array(
45            'path' => '',
46            'name' => 'WordPress.com Business', // Product name, do not translate.
47            'url'  => $page::get_plan_upgrade_url( (string) ( $upgrade['back_url'] ?? '' ) ),
48        );
49    }
50}