oont-contents/plugins/jetpack-boost/app/data-sync/class-cornerstone-pages-entry.php
2025-04-06 08:34:48 +02:00

74 lines
1.9 KiB
PHP

<?php
namespace Automattic\Jetpack_Boost\Data_Sync;
use Automattic\Jetpack\WP_JS_Data_Sync\Contracts\Entry_Can_Get;
use Automattic\Jetpack\WP_JS_Data_Sync\Contracts\Entry_Can_Set;
use Automattic\Jetpack_Boost\Lib\Environment_Change_Detector;
class Cornerstone_Pages_Entry implements Entry_Can_Get, Entry_Can_Set {
private $option_key;
public function __construct( $option_key ) {
$this->option_key = 'jetpack_boost_ds_' . $option_key;
}
public function get( $fallback_value = array() ) {
$urls = get_option( $this->option_key, array() );
if ( empty( $urls ) && ! empty( $fallback_value ) ) {
$urls = $fallback_value;
$this->set( $urls );
}
/**
* Filters the list of cornerstone pages.
*
* @since 3.7.0
*
* @param array $urls An array of absolute URLs.
*/
return apply_filters( 'jetpack_boost_cornerstone_pages_list', array_map( array( $this, 'transform_to_absolute' ), $urls ) );
}
public function set( $value ) {
$value = $this->sanitize_value( $value );
$updated = update_option( $this->option_key, $value );
if ( $updated ) {
( new Environment_Change_Detector() )->handle_cornerstone_pages_list_update();
}
}
private function sanitize_value( $value ) {
if ( is_array( $value ) ) {
$value = array_values( array_unique( array_map( 'untrailingslashit', array_map( array( $this, 'transform_to_relative' ), $value ) ) ) );
} else {
$value = array();
}
return $value;
}
private function transform_to_relative( $url ) {
$url = trim( $url );
// Remove the home_url from the beginning of the URL if it exists.
if ( strpos( $url, home_url() ) === 0 ) {
$url = substr( $url, strlen( home_url() ) );
}
// Ensure the URL starts with a slash.
if ( $url !== '' ) {
$url = ltrim( $url, '/' );
$url = '/' . $url;
}
return $url;
}
private function transform_to_absolute( $url ) {
return home_url( $url );
}
}