# simpleanalytics/1.110/src/Plugin.php

Simple Analytics, version 1.110. 84 lines.

- Page: https://pluginprobe.com/plugins/simpleanalytics/1.110/code/src/Plugin.php
- Raw: https://pluginprobe.com/plugins/simpleanalytics/1.110/raw/src/Plugin.php
- Modified: 2026-09-16T13:31:38+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/simpleanalytics/1.110/code/src/Plugin.php#L10-L20`.

```php
<?php

namespace SimpleAnalytics;

use SimpleAnalytics\Actions\AddInactiveComment;
use SimpleAnalytics\Actions\AddNoScriptTag;
use SimpleAnalytics\Actions\AddPluginSettingsLink;
use SimpleAnalytics\Scripts\AnalyticsScript;
use SimpleAnalytics\Scripts\AutomatedEventsScript;
use SimpleAnalytics\Scripts\InactiveScript;
use SimpleAnalytics\Settings\AdminPage;

final class Plugin
{
    protected $hooks;
    protected $settings;
    protected $trackingRules;
    protected $scripts;
    protected $adminPage;

    public function __construct(
        WordPressHooks    $hooks,
        WordPressSettings $settings,
        TrackingRules     $trackingRules,
        ScriptRegistry    $scripts,
        AdminPage         $adminPage
    ) {
        $this->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']));

        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);
    }

}

```
