diff --git a/Admin/AdsensePlacement/Infrastructure/FieldMapping/AdsensePlacementFieldMapper.php b/Admin/AdsensePlacement/Infrastructure/FieldMapping/AdsensePlacementFieldMapper.php index baecb3a2..b3c677db 100644 --- a/Admin/AdsensePlacement/Infrastructure/FieldMapping/AdsensePlacementFieldMapper.php +++ b/Admin/AdsensePlacement/Infrastructure/FieldMapping/AdsensePlacementFieldMapper.php @@ -17,10 +17,14 @@ final class AdsensePlacementFieldMapper implements FieldMapperInterface return [ // VISIBILITY 'adsense-placementEnabled' => ['group' => 'visibility', 'attribute' => 'is_enabled'], - 'adsense-placementDisableAutoAds' => ['group' => 'visibility', 'attribute' => 'disable_auto_ads'], 'adsense-placementShowOnMobile' => ['group' => 'visibility', 'attribute' => 'show_on_mobile'], 'adsense-placementShowOnDesktop' => ['group' => 'visibility', 'attribute' => 'show_on_desktop'], + // ANALYTICS (Google Analytics) + 'adsense-placementAnalyticsEnabled' => ['group' => 'analytics', 'attribute' => 'analytics_enabled'], + 'adsense-placementGaTrackingId' => ['group' => 'analytics', 'attribute' => 'ga_tracking_id'], + 'adsense-placementGaAnonymizeIp' => ['group' => 'analytics', 'attribute' => 'ga_anonymize_ip'], + // CONTENT (Credentials) 'adsense-placementPublisherId' => ['group' => 'content', 'attribute' => 'publisher_id'], 'adsense-placementSlotDisplay' => ['group' => 'content', 'attribute' => 'slot_display'], diff --git a/Admin/AdsensePlacement/Infrastructure/Ui/AdsensePlacementFormBuilder.php b/Admin/AdsensePlacement/Infrastructure/Ui/AdsensePlacementFormBuilder.php index 1a13cf6f..a7786657 100644 --- a/Admin/AdsensePlacement/Infrastructure/Ui/AdsensePlacementFormBuilder.php +++ b/Admin/AdsensePlacement/Infrastructure/Ui/AdsensePlacementFormBuilder.php @@ -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 .= '
'; $html .= '

'; $html .= ' '; - $html .= ' Control de Anuncios AdSense'; + $html .= ' AdSense y Analytics'; $html .= '

'; $html .= '

'; - $html .= ' Configura ubicaciones manuales de anuncios para evitar Auto Ads'; + $html .= ' Configura Google AdSense y Google Analytics'; $html .= '

'; $html .= '
'; $html .= ' '; @@ -39,6 +39,7 @@ final class AdsensePlacementFormBuilder // COLUMNA IZQUIERDA $html .= '
'; $html .= $this->buildVisibilityGroup($componentId); + $html .= $this->buildAnalyticsGroup($componentId); $html .= $this->buildCredentialsGroup($componentId); $html .= $this->buildPostLocationsGroup($componentId); $html .= '
'; @@ -61,16 +62,12 @@ final class AdsensePlacementFormBuilder $html .= '
'; $html .= '
'; $html .= ' '; - $html .= ' Activacion y Visibilidad'; + $html .= ' Activacion AdSense'; $html .= '
'; // 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 = '
'; + $html .= '
'; + $html .= '
'; + $html .= ' '; + $html .= ' Google Analytics'; + $html .= '
'; + + // 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 .= '
Formato: G-XXXXXXXXXX o UA-XXXXXXXX-X
'; + + // 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 .= '
'; + $html .= ' '; + $html .= ' Recomendado activar para cumplir con GDPR/RGPD'; + $html .= '
'; + + $html .= '
'; + $html .= '
'; + + return $html; + } + private function buildCredentialsGroup(string $cid): string { $html = '
'; diff --git a/Admin/ThemeSettings/Infrastructure/FieldMapping/ThemeSettingsFieldMapper.php b/Admin/ThemeSettings/Infrastructure/FieldMapping/ThemeSettingsFieldMapper.php index a57312b5..88e56c20 100644 --- a/Admin/ThemeSettings/Infrastructure/FieldMapping/ThemeSettingsFieldMapper.php +++ b/Admin/ThemeSettings/Infrastructure/FieldMapping/ThemeSettingsFieldMapper.php @@ -24,14 +24,6 @@ final class ThemeSettingsFieldMapper implements FieldMapperInterface public function getFieldMapping(): array { return [ - // Analytics - 'themeSettingsGaTrackingId' => ['group' => 'analytics', 'attribute' => 'ga_tracking_id'], - 'themeSettingsGaAnonymizeIp' => ['group' => 'analytics', 'attribute' => 'ga_anonymize_ip'], - - // AdSense - 'themeSettingsAdsensePublisherId' => ['group' => 'adsense', 'attribute' => 'adsense_publisher_id'], - 'themeSettingsAdsenseAutoAds' => ['group' => 'adsense', 'attribute' => 'adsense_auto_ads'], - // Custom Code 'themeSettingsCustomCss' => ['group' => 'custom_code', 'attribute' => 'custom_css'], 'themeSettingsCustomJsHeader' => ['group' => 'custom_code', 'attribute' => 'custom_js_header'], diff --git a/Admin/ThemeSettings/Infrastructure/Ui/ThemeSettingsFormBuilder.php b/Admin/ThemeSettings/Infrastructure/Ui/ThemeSettingsFormBuilder.php index ba0f3238..f468ff91 100644 --- a/Admin/ThemeSettings/Infrastructure/Ui/ThemeSettingsFormBuilder.php +++ b/Admin/ThemeSettings/Infrastructure/Ui/ThemeSettingsFormBuilder.php @@ -9,9 +9,9 @@ use ROITheme\Admin\Infrastructure\Ui\AdminDashboardRenderer; * FormBuilder para Theme Settings * * RESPONSABILIDAD: Generar formulario de configuraciones globales del tema - * (analytics, adsense, codigo personalizado) + * (codigo personalizado - CSS y JavaScript) * - * NOTA: Logo/branding se gestiona desde el componente navbar + * NOTA: Analytics y AdSense se gestionan desde el componente adsense-placement * * @package ROITheme\Admin\ThemeSettings\Infrastructure\Ui */ @@ -29,14 +29,8 @@ final class ThemeSettingsFormBuilder $html .= '
'; - // Columna izquierda - Analytics + AdSense - $html .= '
'; - $html .= $this->buildAnalyticsGroup($componentId); - $html .= $this->buildAdSenseGroup($componentId); - $html .= '
'; - - // Columna derecha - Custom Code - $html .= '
'; + // Columna unica - Custom Code + $html .= '
'; $html .= $this->buildCustomCodeGroup($componentId); $html .= '
'; @@ -56,7 +50,7 @@ final class ThemeSettingsFormBuilder $html .= ' Configuraciones Globales del Tema'; $html .= ' '; $html .= '

'; - $html .= ' Analytics, AdSense y Codigo Personalizado'; + $html .= ' Codigo Personalizado (CSS y JavaScript)'; $html .= '

'; $html .= '
'; $html .= '