hooks = $hooks; $this->settings = $settings; $this->trackingRules = $trackingRules; $this->scripts = $scripts; $this->adminPage = $adminPage; } public function boot(): void { $this->hooks->addAction('init', \Closure::fromCallable([$this, 'onInit'])); $this->hooks->onActivation(\Closure::fromCallable([$this, 'onActivation'])); $this->hooks->onDeactivation(\Closure::fromCallable([$this, 'onUninstall'])); if ($this->hooks->isAdmin()) { $this->adminPage->register(); AddPluginSettingsLink::register(); } } public function onInit(): void { $hasExcludedIp = $this->trackingRules->hasExcludedIp(); $hasExcludedUserRole = $this->trackingRules->hasExcludedUserRole(); $tracking = ! $hasExcludedIp && ! $hasExcludedUserRole; if ($tracking) { $this->scripts->push(new AnalyticsScript); } else { $this->scripts->push(new InactiveScript); $reason = $hasExcludedIp ? 'Exclude IP Address' : 'Exclude User Role'; AddInactiveComment::register($reason); } if ($tracking && $this->settings->get(SettingName::NOSCRIPT)) { AddNoScriptTag::register(); } if ($this->settings->boolean(SettingName::AUTOMATED_EVENTS)) { $this->scripts->push(new AutomatedEventsScript); } $this->scripts->register(); } public function onActivation(): void { $this->settings->register(SettingName::ENABLED, true); foreach (array_diff(SettingName::cases(), [SettingName::ENABLED]) as $name) { $this->settings->register($name); } // Legacy. Update the option introduced in a previous release to use autoloading. $this->settings->update(SettingName::CUSTOM_DOMAIN, $this->settings->get(SettingName::CUSTOM_DOMAIN), true); } public function onUninstall(): void { foreach (SettingName::cases() as $key) $this->settings->delete($key); } }