refactor: move Analytics from ThemeSettings to AdsensePlacement

- Remove Analytics and AdSense tabs from theme-settings component
- Add Analytics group to adsense-placement component
- Add roi_enqueue_analytics_script() for GA4/UA support
- Clean up ThemeSettings to only handle custom code (CSS/JS)
- Update FormBuilders and FieldMappers accordingly

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
FrankZamora
2025-11-27 18:43:39 -06:00
parent 3279b7df2b
commit b70e11be62
8 changed files with 193 additions and 357 deletions

View File

@@ -6,7 +6,7 @@ namespace ROITheme\Admin\AdsensePlacement\Infrastructure\Ui;
use ROITheme\Admin\Infrastructure\Ui\AdminDashboardRenderer;
/**
* FormBuilder para AdSense Placement
* FormBuilder para AdSense Placement y Google Analytics
*/
final class AdsensePlacementFormBuilder
{
@@ -24,10 +24,10 @@ final class AdsensePlacementFormBuilder
$html .= ' <div>';
$html .= ' <h3 class="h4 mb-1 fw-bold">';
$html .= ' <i class="bi bi-megaphone me-2" style="color: #FF8600;"></i>';
$html .= ' Control de Anuncios AdSense';
$html .= ' AdSense y Analytics';
$html .= ' </h3>';
$html .= ' <p class="mb-0 small" style="opacity: 0.85;">';
$html .= ' Configura ubicaciones manuales de anuncios para evitar Auto Ads';
$html .= ' Configura Google AdSense y Google Analytics';
$html .= ' </p>';
$html .= ' </div>';
$html .= ' </div>';
@@ -39,6 +39,7 @@ final class AdsensePlacementFormBuilder
// COLUMNA IZQUIERDA
$html .= ' <div class="col-lg-6">';
$html .= $this->buildVisibilityGroup($componentId);
$html .= $this->buildAnalyticsGroup($componentId);
$html .= $this->buildCredentialsGroup($componentId);
$html .= $this->buildPostLocationsGroup($componentId);
$html .= ' </div>';
@@ -61,16 +62,12 @@ final class AdsensePlacementFormBuilder
$html .= ' <div class="card-body">';
$html .= ' <h5 class="fw-bold mb-3" style="color: #1e3a5f;">';
$html .= ' <i class="bi bi-toggle-on me-2" style="color: #FF8600;"></i>';
$html .= ' Activacion y Visibilidad';
$html .= ' Activacion AdSense';
$html .= ' </h5>';
// Switch: Enabled
$enabled = $this->renderer->getFieldValue($cid, 'visibility', 'is_enabled', false);
$html .= $this->buildSwitch($cid . 'Enabled', 'Activar Placement Manual', $enabled, 'bi-power');
// Switch: Disable Auto Ads
$disableAuto = $this->renderer->getFieldValue($cid, 'visibility', 'disable_auto_ads', true);
$html .= $this->buildSwitch($cid . 'DisableAutoAds', 'Deshabilitar Auto Ads de Google', $disableAuto, 'bi-shield-x');
$html .= $this->buildSwitch($cid . 'Enabled', 'Activar AdSense', $enabled, 'bi-power');
// Switch: Show on Mobile
$showMobile = $this->renderer->getFieldValue($cid, 'visibility', 'show_on_mobile', true);
@@ -86,6 +83,39 @@ final class AdsensePlacementFormBuilder
return $html;
}
private function buildAnalyticsGroup(string $cid): string
{
$html = '<div class="card shadow-sm mb-3" style="border-left: 4px solid #1e3a5f;">';
$html .= ' <div class="card-body">';
$html .= ' <h5 class="fw-bold mb-3" style="color: #1e3a5f;">';
$html .= ' <i class="bi bi-graph-up me-2" style="color: #FF8600;"></i>';
$html .= ' Google Analytics';
$html .= ' </h5>';
// Switch: Analytics Enabled
$analyticsEnabled = $this->renderer->getFieldValue($cid, 'analytics', 'analytics_enabled', false);
$html .= $this->buildSwitch($cid . 'AnalyticsEnabled', 'Activar Analytics', $analyticsEnabled, 'bi-power');
// Tracking ID
$gaTrackingId = $this->renderer->getFieldValue($cid, 'analytics', 'ga_tracking_id', '');
$html .= $this->buildTextInput($cid . 'GaTrackingId', 'Google Analytics ID', $gaTrackingId, 'G-XXXXXXXXXX');
$html .= '<div class="form-text small mb-2">Formato: G-XXXXXXXXXX o UA-XXXXXXXX-X</div>';
// Anonymize IP
$gaAnonymizeIp = $this->renderer->getFieldValue($cid, 'analytics', 'ga_anonymize_ip', true);
$html .= $this->buildSwitch($cid . 'GaAnonymizeIp', 'Anonimizar IP (GDPR)', $gaAnonymizeIp, 'bi-shield-check');
$html .= ' <div class="alert alert-warning small mb-0 mt-2">';
$html .= ' <i class="bi bi-exclamation-triangle me-1"></i>';
$html .= ' Recomendado activar para cumplir con GDPR/RGPD';
$html .= ' </div>';
$html .= ' </div>';
$html .= '</div>';
return $html;
}
private function buildCredentialsGroup(string $cid): string
{
$html = '<div class="card shadow-sm mb-3" style="border-left: 4px solid #1e3a5f;">';