public function boot(GoogleTagManager $plugin)
{
$dataLayer = $plugin->get('DataLayer');
$dataCollectors = apply_filters(
'inpsyde.google-tag-manager.datalayer-data-collectors',
[
$plugin->get('DataLayer.User.UserDataCollector'),
$plugin->get('DataLayer.Site.SiteInfoDataCollector')
]
);
foreach ($dataCollectors as $dataCollector) {
$dataLayer->addData($dataCollector);
}
if (! is_admin()) {
return;
}
$factory = $plugin->get('ChriCo.Fields.ElementFactory');
$settings = apply_filters(
'inpsyde.google-tag-manager.datalayer-data-collector-settings-specs',
[
$plugin->get('DataLayer')->settingsSpec(),
$plugin->get('DataLayer.User.UserDataCollector')->settingsSpec(),
$plugin->get('DataLayer.Site.SiteInfoDataCollector')->settingsSpec(),
]
);
$settingsPage = $plugin->get('Settings.Page');
foreach ($settings as $spec) {
$settingsPage->addElement(
$factory->create($spec),
$spec['filters'] ?? [],
$spec['validators'] ?? []
);
}
}
This way, a plugin that wants to add a compatible dataCollector can do so and optionally can add their own settings to the GTM settings panel.