class-yoast-integration-toggles.php
4.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
/**
* WPSEO plugin file.
*
* @package WPSEO\Admin
*/
/**
* Class for managing integration toggles.
*/
class Yoast_Integration_Toggles {
/**
* Available integration toggles.
*
* @var array
*/
protected $toggles;
/**
* Instance holder.
*
* @var self|null
*/
protected static $instance = null;
/**
* Gets the main integration toggles manager instance used.
*
* This essentially works like a Singleton, but for its drawbacks does not restrict
* instantiation otherwise.
*
* @return self Main instance.
*/
public static function instance() {
if ( self::$instance === null ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Gets all available integration toggles.
*
* @return array List of sorted Yoast_Feature_Toggle instances.
*/
public function get_all() {
if ( $this->toggles === null ) {
$this->toggles = $this->load_toggles();
}
return $this->toggles;
}
/**
* Loads the available integration toggles.
*
* Also ensures that the toggles are all Yoast_Feature_Toggle instances and sorted by their order value.
*
* @return array List of sorted Yoast_Feature_Toggle instances.
*/
protected function load_toggles() {
$integration_toggles = [
(object) [
/* translators: %s: 'Semrush' */
'name' => sprintf( __( '%s integration', 'wordpress-seo' ), 'Semrush' ),
'setting' => 'semrush_integration_active',
'label' => sprintf(
/* translators: %s: 'Semrush' */
__( 'The %s integration offers suggestions and insights for keywords related to the entered focus keyphrase.', 'wordpress-seo' ),
'Semrush'
),
'order' => 10,
],
(object) [
/* translators: %s: Algolia. */
'name' => \sprintf( \esc_html__( '%s integration', 'wordpress-seo' ), 'Algolia' ),
'premium' => true,
'setting' => 'algolia_integration_active',
'label' => __( 'Improve the quality of your site search! Automatically helps your users find your cornerstone and most important content in your internal search results. It also removes noindexed posts & pages from your site’s search results.', 'wordpress-seo' ),
/* translators: %s: Algolia. */
'read_more_label' => \sprintf( \__( 'Find out more about our %s integration.', 'wordpress-seo' ), 'Algolia' ),
'read_more_url' => 'https://yoa.st/4eu',
'premium_url' => 'https://yoa.st/4ex',
'premium_upsell_url' => 'https://yoa.st/get-algolia-integration',
'order' => 25,
],
];
/**
* Filter to add integration toggles from add-ons.
*
* @param array $integration_toggles Array with integration toggle objects where each object
* should have a `name`, `setting` and `label` property.
*/
$integration_toggles = apply_filters( 'wpseo_integration_toggles', $integration_toggles );
$integration_toggles = array_map( [ $this, 'ensure_toggle' ], $integration_toggles );
usort( $integration_toggles, [ $this, 'sort_toggles_callback' ] );
return $integration_toggles;
}
/**
* Ensures that the passed value is a Yoast_Feature_Toggle.
*
* @param Yoast_Feature_Toggle|object|array $toggle_data Feature toggle instance, or raw object or array
* containing integration toggle data.
* @return Yoast_Feature_Toggle Feature toggle instance based on $toggle_data.
*/
protected function ensure_toggle( $toggle_data ) {
if ( $toggle_data instanceof Yoast_Feature_Toggle ) {
return $toggle_data;
}
if ( is_object( $toggle_data ) ) {
$toggle_data = get_object_vars( $toggle_data );
}
return new Yoast_Feature_Toggle( $toggle_data );
}
/**
* Callback for sorting integration toggles by their order.
*
* {@internal Once the minimum PHP version goes up to PHP 7.0, the logic in the function
* can be replaced with the spaceship operator `<=>`.}
*
* @param Yoast_Feature_Toggle $feature_a Feature A.
* @param Yoast_Feature_Toggle $feature_b Feature B.
*
* @return int An integer less than, equal to, or greater than zero indicating respectively
* that feature A is considered to be less than, equal to, or greater than feature B.
*/
protected function sort_toggles_callback( Yoast_Feature_Toggle $feature_a, Yoast_Feature_Toggle $feature_b ) {
return ( $feature_a->order - $feature_b->order );
}
}