Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,91 +20,48 @@
* WordPress dependencies
*/
import { __, _x } from '@wordpress/i18n';
import { Fragment } from '@wordpress/element';

/**
* Internal dependencies
*/
import { useSelect } from 'googlesitekit-data';
import { MODULES_ANALYTICS_4 } from '@/js/modules/analytics-4/datastore/constants';
import DisplaySetting from '@/js/components/DisplaySetting';
import { trackingExclusionLabels } from '@/js/modules/analytics-4/components/common/TrackingExclusionSwitches';
import Typography from '@/js/components/Typography';

export default function OptionalSettingsView() {
const useSnippet = useSelect( ( select ) =>
select( MODULES_ANALYTICS_4 ).getUseSnippet()
);
const adsConversionIDMigratedAtMs = useSelect( ( select ) =>
select( MODULES_ANALYTICS_4 ).getAdsConversionIDMigratedAtMs()
);
const trackingDisabled = useSelect(
( select ) => select( MODULES_ANALYTICS_4 ).getTrackingDisabled() || []
);
const adsConversionID = useSelect( ( select ) =>
select( MODULES_ANALYTICS_4 ).getAdsConversionID()
);

return (
<Fragment>
<div className="googlesitekit-settings-module__meta-items">
<div className="googlesitekit-settings-module__meta-item">
<Typography
as="h5"
size="medium"
type="label"
className="googlesitekit-settings-module__meta-item-type"
>
{ __( 'Excluded from Analytics', 'google-site-kit' ) }
</Typography>
<p className="googlesitekit-settings-module__meta-item-data">
{ !! trackingDisabled.length &&
trackingDisabled
.map(
( exclusion ) =>
trackingExclusionLabels[ exclusion ]
)
.join(
_x(
', ',
'list separator',
'google-site-kit'
)
) }
{ ! trackingDisabled.length &&
__(
'Analytics is currently enabled for all visitors',
'google-site-kit'
<div className="googlesitekit-settings-module__meta-items">
<div className="googlesitekit-settings-module__meta-item">
<Typography
as="h5"
size="medium"
type="label"
className="googlesitekit-settings-module__meta-item-type"
>
{ __( 'Excluded from Analytics', 'google-site-kit' ) }
</Typography>
<p className="googlesitekit-settings-module__meta-item-data">
{ !! trackingDisabled.length &&
trackingDisabled
.map(
( exclusion ) =>
trackingExclusionLabels[ exclusion ]
)
.join(
_x( ', ', 'list separator', 'google-site-kit' )
) }
</p>
</div>
{ ! trackingDisabled.length &&
__(
'Analytics is currently enabled for all visitors',
'google-site-kit'
) }
</p>
</div>

{ /* Prevent the Ads Conversion ID setting displaying after this field has been
migrated to the Ads module, even after resetting the Analytics module. */ }
{ useSnippet &&
! adsConversionIDMigratedAtMs &&
!! adsConversionID && (
<div className="googlesitekit-settings-module__meta-items">
<div className="googlesitekit-settings-module__meta-item">
<Typography
as="h5"
size="medium"
type="label"
className="googlesitekit-settings-module__meta-item-type"
>
{ __( 'Ads Conversion ID', 'google-site-kit' ) }
</Typography>
<p className="googlesitekit-settings-module__meta-item-data">
{ !! adsConversionID && (
<DisplaySetting value={ adsConversionID } />
) }
{ ! adsConversionID &&
__( 'None', 'google-site-kit' ) }
</p>
</div>
</div>
) }
</Fragment>
</div>
);
}
133 changes: 133 additions & 0 deletions includes/Core/Util/Migration_n_e_x_t.php
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know this has been added to IB, but we don't need this migration. There is nothing to migrate here. Let's remove this class.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We've previously removed unneeded/unused keys from settings with other migrations; wouldn't it make sense to remove it now that it's no longer in use? It's not strictly needed but seems like good housekeeping 🤔

Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
<?php
/**
* Migration for Analytics Ads Conversion ID.
*
* @package Google\Site_Kit\Core\Util
* @copyright 2026 Google LLC
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
* @link https://sitekit.withgoogle.com
*/

namespace Google\Site_Kit\Core\Util;

use Google\Site_Kit\Context;
use Google\Site_Kit\Core\Storage\Options;
use Google\Site_Kit\Modules\Analytics_4\Settings as Analytics_Settings;

/**
* Class Migration_n_e_x_t
*
* @since n.e.x.t
* @access private
* @ignore
*/
class Migration_N_E_X_T {
/**
* Target DB version.
*/
const DB_VERSION = 'n.e.x.t';

/**
* DB version option name.
*/
const DB_VERSION_OPTION = 'googlesitekit_db_version';

/**
* Context instance.
*
* @since n.e.x.t
* @var Context
*/
protected $context;

/**
* Options instance.
*
* @since n.e.x.t
* @var Options
*/
protected $options;

/**
* Analytics_Settings instance.
*
* @since n.e.x.t
* @var Analytics_Settings
*/
protected $analytics_settings;

/**
* Constructor.
*
* @since n.e.x.t
*
* @param Context $context Plugin context instance.
* @param Options $options Optional. Options instance.
*/
public function __construct(
Context $context,
?Options $options = null
) {
$this->context = $context;
$this->options = $options ?: new Options( $context );
$this->analytics_settings = new Analytics_Settings( $this->options );
}

/**
* Registers hooks.
*
* @since n.e.x.t
*/
public function register() {
add_action( 'admin_init', array( $this, 'migrate' ) );
}

/**
* Migrates the DB.
*
* @since n.e.x.t
*/
public function migrate() {
$db_version = $this->options->get( self::DB_VERSION_OPTION );

if ( ! $db_version || version_compare( $db_version, self::DB_VERSION, '<' ) ) {
$this->migrate_remove_analytics_conversion_id_setting();

$this->options->set( self::DB_VERSION_OPTION, self::DB_VERSION );
}
}

/**
* Removes the `adsConversionIDMigratedAtMs` setting that is no longer used,
* if present.
*
* @since n.e.x.t
*/
protected function migrate_remove_analytics_conversion_id_setting() {
if ( ! $this->analytics_settings->has() ) {
return;
}

$analytics_settings = $this->analytics_settings->get();

if ( ! is_array( $analytics_settings ) || empty( $analytics_settings ) ) {
return;
}

// If the `adsConversionIDMigratedAtMs` setting does not exist,
// there is nothing to remove and we can return early.
if (
! array_key_exists(
'adsConversionIDMigratedAtMs',
$analytics_settings
)
) {
return;
}

unset( $analytics_settings['adsConversionIDMigratedAtMs'] );

// Save the updated settings.
$this->analytics_settings->set( $analytics_settings );
}
}
7 changes: 0 additions & 7 deletions includes/Modules/Analytics_4/Settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,6 @@ protected function get_default() {
'propertyCreateTime' => 0,
'adSenseLinked' => false,
'adSenseLinkedLastSyncedAt' => 0,
'adsConversionIDMigratedAtMs' => 0,
'adsLinked' => false,
'adsLinkedLastSyncedAt' => 0,
'detectedEvents' => array(),
Expand Down Expand Up @@ -181,12 +180,6 @@ function ( $dimension ) {
}
}

if ( isset( $option['adsConversionIDMigratedAtMs'] ) ) {
if ( ! is_int( $option['adsConversionIDMigratedAtMs'] ) ) {
$option['adsConversionIDMigratedAtMs'] = 0;
}
}

if ( isset( $option['adsLinked'] ) ) {
$option['adsLinked'] = (bool) $option['adsLinked'];
}
Expand Down
117 changes: 117 additions & 0 deletions tests/phpunit/integration/Core/Util/Migration_n_e_x_tTest.php
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here, not needed.

Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
<?php
/**
* \Google\Site_Kit\Tests\Core\Util\Migration_n_e_x_tTest
*
* @package Google\Site_Kit\Tests\Core\Util
* @copyright 2026 Google LLC
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
* @link https://sitekit.withgoogle.com
*/

namespace Google\Site_Kit\Tests\Core\Util;

use Google\Site_Kit\Context;
use Google\Site_Kit\Core\Storage\Options;
use Google\Site_Kit\Core\Util\Migration_N_E_X_T;
use Google\Site_Kit\Modules\Analytics_4\Settings as Analytics_Settings;
use Google\Site_Kit\Tests\TestCase;

class Migration_N_E_X_TTest extends TestCase {

/**
* @var Context
*/
protected $context;

/**
* @var Options
*/
protected $options;

/**
* @var Analytics_Settings
*/
protected $analytics_settings;

public function set_up() {
parent::set_up();

$this->context = new Context( GOOGLESITEKIT_PLUGIN_MAIN_FILE );
$this->options = new Options( $this->context );
$this->analytics_settings = new Analytics_Settings( $this->options );

$this->analytics_settings->register();
$this->delete_db_version();
}

public function get_new_migration_instance() {
return new Migration_n_e_x_t(
$this->context,
$this->options
);
}

public function test_register() {
$migration = $this->get_new_migration_instance();
remove_all_actions( 'admin_init' );

$migration->register();

$this->assertTrue( has_action( 'admin_init' ), 'Migration should register admin_init action.' );
}

public function test_migrate_when_setting_present() {
$migration = $this->get_new_migration_instance();

$analytics_data = array(
'availableAudiences' => array( 'audience1', 'audience2' ),
'availableAudiencesLastSyncedAt' => 1678886400,
'audienceSegmentationSetupCompletedBy' => 123,
'adsConversionIDMigratedAtMs' => 1678886400,
'other_analytics_setting' => 'value',
);

$this->analytics_settings->set( $analytics_data );

$pre_migration_settings = $this->analytics_settings->get();

$this->assertArrayHasKey( 'adsConversionIDMigratedAtMs', $pre_migration_settings, 'adsConversionIDMigratedAtMs setting should exist in Analytics settings before migration.' );

$migration->migrate();

$post_migration_settings = $this->analytics_settings->get();

$this->assertArrayNotHasKey( 'adsConversionIDMigratedAtMs', $post_migration_settings, 'adsConversionIDMigratedAtMs setting should be removed from Analytics settings.' );
}

public function test_migrate_when_setting_not_present() {
$migration = $this->get_new_migration_instance();

$analytics_data = array(
'availableAudiences' => array( 'audience1', 'audience2' ),
'availableAudiencesLastSyncedAt' => 1678886400,
'audienceSegmentationSetupCompletedBy' => 123,
'other_analytics_setting' => 'value',
);

$this->analytics_settings->set( $analytics_data );

$pre_migration_settings = $this->analytics_settings->get();

$this->assertArrayNotHasKey( 'adsConversionIDMigratedAtMs', $pre_migration_settings, 'adsConversionIDMigratedAtMs setting should not exist in Analytics settings before migration.' );

$migration->migrate();

$post_migration_settings = $this->analytics_settings->get();

$this->assertArrayNotHasKey( 'adsConversionIDMigratedAtMs', $post_migration_settings, 'adsConversionIDMigratedAtMs setting should not be present in Analytics settings after migration.' );
}

protected function get_db_version() {
return $this->options->get( Migration_n_e_x_t::DB_VERSION_OPTION );
}

protected function delete_db_version() {
$this->options->delete( Migration_n_e_x_t::DB_VERSION_OPTION );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ public function test_get_default() {
'propertyCreateTime' => 0,
'adSenseLinked' => false,
'adSenseLinkedLastSyncedAt' => 0,
'adsConversionIDMigratedAtMs' => 0,
'adsLinked' => false,
'adsLinkedLastSyncedAt' => 0,
'detectedEvents' => array(),
Expand Down
Loading
Loading