wp_back/wp-content/plugins/wordpress-seo/admin/views/class-yoast-integration-toggles.php
2024-05-20 15:37:46 +03:00

140 lines
4.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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 sites 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 );
}
}