google_tag-8.x-1.x-dev/src/Migration/GoogleAnalyticsMigrator.php
src/Migration/GoogleAnalyticsMigrator.php
<?php namespace Drupal\google_tag\Migration; /** * Google Analytics Migration service. */ class GoogleAnalyticsMigrator extends GoogleTagMigrateBase { /** * Migrates google analytics 4.x config object. * * To Google Tag 2.x default container entity. * * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException * @throws \Drupal\Component\Plugin\Exception\PluginException * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException * @throws \Drupal\Core\Entity\EntityStorageException */ public function migrateGaToGoogleTag(): void { $ga_settings = $this->configFactory->get('google_analytics.settings'); $accounts = $ga_settings->get('account'); $metrics_dimensions = $ga_settings->get('custom.parameters') ?: []; if ($accounts === '' && $metrics_dimensions === []) { return; } $accounts = explode(',', $accounts); $default_id = reset($accounts); // Set the ID and Label based on the first Google Tag. $config_id = uniqid($default_id . '.', TRUE); // Conditions. $condition_definitions = $this->conditionManager->getDefinitions(); $conditions = []; // Request paths. $request_paths = $ga_settings->get('visibility.request_path_pages'); $visibility_path_mode = $ga_settings->get('visibility.request_path_mode'); $request_path_plugin = 'request_path'; $request_negate = $visibility_path_mode === 0; if ($request_paths !== '' && isset($condition_definitions[$request_path_plugin])) { $conditions[$request_path_plugin] = static::getRequestPathCondition($request_paths, $request_negate); } // User roles. $visibility_user_role_mode = $ga_settings->get('visibility.user_role_mode'); $roles = $ga_settings->get('visibility.user_role_roles'); $roles_plugin = 'user_role'; $roles_negate = $visibility_user_role_mode === 1; if ($roles !== [] && isset($condition_definitions[$roles_plugin])) { $conditions[$roles_plugin] = static::getUserRoleCondition($roles, $roles_negate); } $tag_container = $this->entityTypeManager->getStorage('google_tag_container')->create([ 'id' => $config_id, 'label' => $default_id, 'tag_container_ids' => $accounts, 'dimensions_metrics' => array_values($metrics_dimensions), 'events' => $this->getDefaultEventData(), 'conditions' => $conditions, ]); $tag_container->save(); $gtag_settings = $this->configFactory->getEditable('google_tag.settings'); $gtag_settings->set('default_google_tag_entity', $tag_container->id())->save(); } }