bibhamrokhanpin/wp-content/__plugins/google-site-kit/includes/Modules/Analytics/Settings.php
2024-04-10 17:46:06 +05:45

223 lines
6.4 KiB
PHP

<?php
/**
* Class Google\Site_Kit\Modules\Analytics\Settings
*
* @package Google\Site_Kit\Modules\Analytics
* @copyright 2021 Google LLC
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
* @link https://sitekit.withgoogle.com
*/
namespace Google\Site_Kit\Modules\Analytics;
use Google\Site_Kit\Core\Modules\Module_Settings;
use Google\Site_Kit\Core\Storage\Setting_With_Legacy_Keys_Trait;
use Google\Site_Kit\Core\Storage\Setting_With_Owned_Keys_Interface;
use Google\Site_Kit\Core\Storage\Setting_With_Owned_Keys_Trait;
/**
* Class for Analytics settings.
*
* @since 1.2.0
* @access private
* @ignore
*/
class Settings extends Module_Settings implements Setting_With_Owned_Keys_Interface {
use Setting_With_Legacy_Keys_Trait, Setting_With_Owned_Keys_Trait;
const OPTION = 'googlesitekit_analytics_settings';
/**
* Registers the setting in WordPress.
*
* @since 1.2.0
*/
public function register() {
parent::register();
$this->register_legacy_keys_migration(
array(
'accountId' => 'accountID',
'profileId' => 'profileID',
'propertyId' => 'propertyID',
'internalWebPropertyId' => 'internalWebPropertyID',
)
);
$this->register_owned_keys();
// Backwards compatibility with previous dedicated option.
add_filter(
'default_option_' . self::OPTION,
function ( $default ) {
// Only fallback to the legacy option if the linked state is not filtered.
// This filter is documented below.
if ( is_null( apply_filters( 'googlesitekit_analytics_adsense_linked', null ) ) ) {
$default['adsenseLinked'] = (bool) $this->options->get( 'googlesitekit_analytics_adsense_linked' );
}
// `canUseSnippet` is a computed setting, so this sets the value if settings have not been saved yet.
// This filter is documented below.
$can_use_snippet = apply_filters( 'googlesitekit_analytics_can_use_snippet', true );
if ( is_bool( $can_use_snippet ) ) {
$default['canUseSnippet'] = $can_use_snippet;
}
return $default;
}
);
add_filter(
'option_' . self::OPTION,
function ( $option ) {
/**
* Filters the Google Analytics account ID to use.
*
* @since 1.0.0
*
* @param string $account_id Empty by default, will fall back to the option value if not set.
*/
$account_id = apply_filters( 'googlesitekit_analytics_account_id', '' );
if ( ! empty( $account_id ) ) {
$option['accountID'] = $account_id;
}
/**
* Filters the Google Analytics property ID to use.
*
* @since 1.0.0
*
* @param string $property_id Empty by default, will fall back to the option value if not set.
*/
$property_id = apply_filters( 'googlesitekit_analytics_property_id', '' );
if ( ! empty( $property_id ) ) {
$option['propertyID'] = $property_id;
}
/**
* Filters the Google Analytics internal web property ID to use.
*
* @since 1.0.0
*
* @param string $internal_web_property_id Empty by default, will fall back to the option value if not set.
*/
$internal_web_property_id = apply_filters( 'googlesitekit_analytics_internal_web_property_id', '' );
if ( ! empty( $internal_web_property_id ) ) {
$option['internalWebPropertyID'] = $internal_web_property_id;
}
/**
* Filters the Google Analytics profile / view ID to use.
*
* @since 1.0.0
*
* @param string $profile_id Empty by default, will fall back to the option value if not set.
*/
$profile_id = apply_filters( 'googlesitekit_analytics_view_id', '' );
if ( ! empty( $profile_id ) ) {
$option['profileID'] = $profile_id;
}
/**
* Filters the linked state of AdSense with Analytics.
*
* This filter exists so that adsenseLinked can only be truthy if the AdSense module is active,
* regardless of the saved setting.
*
* @since 1.3.0
* @param bool $adsense_linked Null by default, will fallback to the option value if not set.
*/
$adsense_linked = apply_filters( 'googlesitekit_analytics_adsense_linked', null );
if ( is_bool( $adsense_linked ) ) {
$option['adsenseLinked'] = $adsense_linked;
}
/**
* Filters the state of the can use snipped setting.
*
* This filter exists so that useSnippet can be restored to true when the Tag Manager module
* is disconnected, ensuring the Analytics snippet is always included.
*
* @since 1.28.0
* @param bool $can_use_snippet Whether or not `useSnippet` can control snippet output. Default: `true`.
*/
$can_use_snippet = apply_filters( 'googlesitekit_analytics_can_use_snippet', true );
if ( is_bool( $can_use_snippet ) ) {
$option['canUseSnippet'] = $can_use_snippet;
}
return $option;
}
);
}
/**
* Returns keys for owned settings.
*
* @since 1.16.0
*
* @return array An array of keys for owned settings.
*/
public function get_owned_keys() {
return array(
'accountID',
'internalWebPropertyID',
'profileID',
'propertyID',
);
}
/**
* Gets the default value.
*
* @since 1.2.0
*
* @return array
*/
protected function get_default() {
return array(
'ownerID' => 0,
'accountID' => '',
'adsenseLinked' => false,
'adsConversionID' => '',
'anonymizeIP' => true,
'internalWebPropertyID' => '',
'profileID' => '',
'propertyID' => '',
'trackingDisabled' => array( 'loggedinUsers' ),
'useSnippet' => true,
'canUseSnippet' => true,
);
}
/**
* Gets the callback for sanitizing the setting's value before saving.
*
* @since 1.6.0
*
* @return callable|null
*/
protected function get_sanitize_callback() {
return function( $option ) {
if ( is_array( $option ) ) {
if ( isset( $option['useSnippet'] ) ) {
$option['useSnippet'] = (bool) $option['useSnippet'];
}
if ( isset( $option['canUseSnippet'] ) ) {
$option['canUseSnippet'] = (bool) $option['canUseSnippet'];
}
if ( isset( $option['anonymizeIP'] ) ) {
$option['anonymizeIP'] = (bool) $option['anonymizeIP'];
}
if ( isset( $option['trackingDisabled'] ) ) {
$option['trackingDisabled'] = (array) $option['trackingDisabled'];
}
if ( isset( $option['adsenseLinked'] ) ) {
$option['adsenseLinked'] = (bool) $option['adsenseLinked'];
}
}
return $option;
};
}
}