Try your search with a different keyword or use * as a wildcard.
using Microsoft.AspNetCore.Mvc;
using Nop.Core;
using Nop.Core.Domain.Logging;
using Nop.Services.Customers;
using Nop.Services.Logging;
using Nop.Web.Framework.Components;
namespace Nop.Plugin.Widgets.GoogleAnalytics.Components;
public class WidgetsGoogleAnalyticsViewComponent : NopViewComponent
{
#region Fields
protected readonly GoogleAnalyticsSettings _googleAnalyticsSettings;
protected readonly ICustomerService _customerService;
protected readonly ILogger _logger;
protected readonly IWorkContext _workContext;
#endregion
#region Ctor
public WidgetsGoogleAnalyticsViewComponent(
GoogleAnalyticsSettings googleAnalyticsSettings,
ICustomerService customerService,
ILogger logger,
IWorkContext workContext)
{
_googleAnalyticsSettings = googleAnalyticsSettings;
_customerService = customerService;
_logger = logger;
_workContext = workContext;
}
#endregion
#region Utilities
/// A task that represents the asynchronous operation
protected async Task GetScriptAsync()
{
try
{
var analyticsTrackingScript = _googleAnalyticsSettings.TrackingScript + "\n";
analyticsTrackingScript = analyticsTrackingScript.Replace("{GOOGLEID}", _googleAnalyticsSettings.GoogleId);
//remove {ECOMMERCE} (used in previous versions of the plugin)
analyticsTrackingScript = analyticsTrackingScript.Replace("{ECOMMERCE}", "");
//remove {CustomerID} (used in previous versions of the plugin)
analyticsTrackingScript = analyticsTrackingScript.Replace("{CustomerID}", "");
//whether to include customer identifier
var customerIdCode = string.Empty;
var customer = await _workContext.GetCurrentCustomerAsync();
if (_googleAnalyticsSettings.IncludeCustomerId && !await _customerService.IsGuestAsync(customer))
customerIdCode = $"gtag('set', {{'user_id': '{customer.Id}'}});{Environment.NewLine}";
analyticsTrackingScript = analyticsTrackingScript.Replace("{CUSTOMER_TRACKING}", customerIdCode);
analyticsTrackingScript = analyticsTrackingScript.Replace("{ECOMMERCE_TRACKING}", "");
return analyticsTrackingScript;
}
catch (Exception ex)
{
await _logger.InsertLogAsync(LogLevel.Error, "Error creating scripts for Google eCommerce tracking", ex.ToString());
}
return "";
}
#endregion
#region Methods
/// A task that represents the asynchronous operation
public async Task InvokeAsync(string widgetZone, object additionalData)
{
var script = await GetScriptAsync();
return View("~/Plugins/Widgets.GoogleAnalytics/Views/PublicInfo.cshtml", script);
}
#endregion
}