Commit realizado el 12:13:52 08-04-2024
This commit is contained in:
@@ -0,0 +1,274 @@
|
||||
<?php
|
||||
/**
|
||||
* Class Site_Kit
|
||||
*
|
||||
* @link https://github.com/googleforcreators/web-stories-wp
|
||||
*
|
||||
* @copyright 2020 Google LLC
|
||||
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copyright 2020 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace Google\Web_Stories\Integrations;
|
||||
|
||||
use Google\Web_Stories\Analytics;
|
||||
use Google\Web_Stories\Context;
|
||||
use Google\Web_Stories\Service_Base;
|
||||
|
||||
/**
|
||||
* Class Site_Kit.
|
||||
*
|
||||
* @phpstan-type GtagOpt array{
|
||||
* vars: array{
|
||||
* gtag_id?: string
|
||||
* },
|
||||
* triggers?: array<string, mixed>
|
||||
* }
|
||||
*/
|
||||
class Site_Kit extends Service_Base {
|
||||
/**
|
||||
* Analytics instance.
|
||||
*
|
||||
* @var Analytics Analytics instance.
|
||||
*/
|
||||
protected Analytics $analytics;
|
||||
|
||||
/**
|
||||
* Context instance.
|
||||
*
|
||||
* @var Context Context instance.
|
||||
*/
|
||||
private Context $context;
|
||||
|
||||
/**
|
||||
* Plugin_Status instance.
|
||||
*
|
||||
* @var Plugin_Status Plugin_Status instance.
|
||||
*/
|
||||
private Plugin_Status $plugin_status;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param Analytics $analytics Analytics instance.
|
||||
* @param Context $context Context instance.
|
||||
* @param Plugin_Status $plugin_status Plugin_Status instance.
|
||||
*/
|
||||
public function __construct( Analytics $analytics, Context $context, Plugin_Status $plugin_status ) {
|
||||
$this->analytics = $analytics;
|
||||
$this->context = $context;
|
||||
$this->plugin_status = $plugin_status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes all hooks.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*/
|
||||
public function register(): void {
|
||||
add_filter( 'googlesitekit_amp_gtag_opt', [ $this, 'filter_site_kit_gtag_opt' ] );
|
||||
|
||||
if ( $this->is_analytics_module_active() ) {
|
||||
remove_action( 'web_stories_print_analytics', [ $this->analytics, 'print_analytics_tag' ] );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Filters Site Kit's Google Analytics configuration.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @param array|mixed $gtag_opt Array of gtag configuration options.
|
||||
* @return array|mixed Modified configuration options.
|
||||
*
|
||||
* @phpstan-param GtagOpt $gtag_opt
|
||||
*/
|
||||
public function filter_site_kit_gtag_opt( $gtag_opt ) {
|
||||
if (
|
||||
! \is_array( $gtag_opt ) ||
|
||||
! isset( $gtag_opt['vars']['gtag_id'] ) ||
|
||||
! $this->context->is_web_story()
|
||||
) {
|
||||
return $gtag_opt;
|
||||
}
|
||||
|
||||
$default_config = $this->analytics->get_default_configuration( $gtag_opt['vars']['gtag_id'] );
|
||||
$default_config['triggers'] = $default_config['triggers'] ?? [];
|
||||
|
||||
$gtag_opt['triggers'] ??= [];
|
||||
$gtag_opt['triggers'] = array_merge( $default_config['triggers'], $gtag_opt['triggers'] );
|
||||
|
||||
return $gtag_opt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Site Kit plugin status.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return array{installed: bool, active: bool, analyticsActive: bool, adsenseActive: bool, analyticsLink: string, adsenseLink: string} Plugin status.
|
||||
*/
|
||||
public function get_plugin_status(): array {
|
||||
$is_installed = \array_key_exists( 'google-site-kit/google-site-kit.php', $this->plugin_status->get_plugins() );
|
||||
$is_active = $this->is_plugin_active();
|
||||
$is_analytics_active = $this->is_analytics_module_active();
|
||||
$is_adsense_active = $this->is_adsense_module_active();
|
||||
|
||||
$analytics_link = __( 'https://wordpress.org/plugins/google-site-kit/', 'web-stories' );
|
||||
$adsense_link = __( 'https://wordpress.org/plugins/google-site-kit/', 'web-stories' );
|
||||
$dashboard = admin_url( 'admin.php?page=googlesitekit-dashboard' );
|
||||
$settings = admin_url( 'admin.php?page=googlesitekit-settings' );
|
||||
|
||||
if ( $is_active ) {
|
||||
$dashboard_capability = current_user_can( 'googlesitekit_view_dashboard' ); // phpcs:ignore WordPress.WP.Capabilities.Unknown
|
||||
$settings_capability = current_user_can( 'googlesitekit_manage_options' ); // phpcs:ignore WordPress.WP.Capabilities.Unknown
|
||||
|
||||
// If analytics is active and current user can view dashboard.
|
||||
if ( $is_analytics_active && $dashboard_capability ) {
|
||||
$analytics_link = $dashboard;
|
||||
} elseif ( $settings_capability ) {
|
||||
$analytics_link = $settings;
|
||||
} elseif ( $dashboard_capability ) {
|
||||
$analytics_link = $dashboard;
|
||||
}
|
||||
|
||||
// If adsense is active and current user can view dashboard.
|
||||
if ( $is_adsense_active && $dashboard_capability ) {
|
||||
$adsense_link = $dashboard;
|
||||
} elseif ( $settings_capability ) {
|
||||
$adsense_link = $settings;
|
||||
} elseif ( $dashboard_capability ) {
|
||||
$adsense_link = $dashboard;
|
||||
}
|
||||
} elseif ( $is_installed ) {
|
||||
if ( current_user_can( 'activate_plugin', 'google-site-kit/google-site-kit.php' ) ) {
|
||||
$analytics_link = admin_url( 'plugins.php' );
|
||||
$adsense_link = $analytics_link;
|
||||
}
|
||||
} elseif ( current_user_can( 'install_plugins' ) ) {
|
||||
$analytics_link = admin_url(
|
||||
add_query_arg(
|
||||
[
|
||||
's' => rawurlencode( __( 'Site Kit by Google', 'web-stories' ) ),
|
||||
'tab' => 'search',
|
||||
],
|
||||
'plugin-install.php'
|
||||
)
|
||||
);
|
||||
$adsense_link = $analytics_link;
|
||||
}
|
||||
|
||||
return [
|
||||
'installed' => $is_active || $is_installed,
|
||||
'active' => $is_active,
|
||||
'analyticsActive' => $is_analytics_active,
|
||||
'adsenseActive' => $is_adsense_active,
|
||||
'analyticsLink' => $analytics_link,
|
||||
'adsenseLink' => $adsense_link,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether Site Kit is active.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return bool Whether Site Kit is active.
|
||||
*/
|
||||
protected function is_plugin_active(): bool {
|
||||
return \defined( 'GOOGLESITEKIT_VERSION' );
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Determines whether the built-in adsense module in Site Kit is active.
|
||||
*
|
||||
* @since 1.8.0
|
||||
*
|
||||
* @return bool Whether Site Kit's analytics module is active.
|
||||
*/
|
||||
protected function is_adsense_module_active(): bool {
|
||||
$adsense_module_active = \in_array( 'adsense', $this->get_site_kit_active_modules_option(), true );
|
||||
$adsense_options = (array) get_option( 'googlesitekit_adsense_settings' );
|
||||
$adsense_options_client_id = ! empty( $adsense_options['clientID'] );
|
||||
$adsense_options_use_snippet = ! empty( $adsense_options['useSnippet'] );
|
||||
$adsense_web_stories_ad_unit = ! empty( $adsense_options['webStoriesAdUnit'] );
|
||||
|
||||
return $adsense_module_active && $adsense_options_use_snippet && $adsense_web_stories_ad_unit && $adsense_options_client_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether the built-in Analytics module in Site Kit is active.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return bool Whether Site Kit's analytics module is active.
|
||||
*/
|
||||
protected function is_analytics_module_active(): bool {
|
||||
$analytics_module_active = \in_array( 'analytics', $this->get_site_kit_active_modules_option(), true );
|
||||
$analytics_options = (array) get_option( 'googlesitekit_analytics_settings' );
|
||||
$analytics_use_snippet = ! empty( $analytics_options['useSnippet'] );
|
||||
|
||||
return $analytics_module_active && $analytics_use_snippet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the option containing the active Site Kit modules.
|
||||
*
|
||||
* Checks two options as it was renamed at some point in Site Kit.
|
||||
*
|
||||
* Bails early if the Site Kit plugin itself is not active.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @see \Google\Site_Kit\Core\Modules\Modules::get_active_modules_option
|
||||
*
|
||||
* @return string[] List of active module slugs.
|
||||
*/
|
||||
protected function get_site_kit_active_modules_option(): array {
|
||||
if ( ! $this->is_plugin_active() ) {
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Option value.
|
||||
*
|
||||
* @var string[]|false $option
|
||||
*/
|
||||
$option = get_option( 'googlesitekit_active_modules' );
|
||||
|
||||
if ( \is_array( $option ) ) {
|
||||
return $option;
|
||||
}
|
||||
|
||||
/**
|
||||
* Legacy option value.
|
||||
*
|
||||
* @var string[]|false $legacy_option
|
||||
*/
|
||||
$legacy_option = get_option( 'googlesitekit-active-modules' );
|
||||
|
||||
if ( \is_array( $legacy_option ) ) {
|
||||
return $legacy_option;
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user