PluginProbe
Simple Analytics / 1.104
Simple Analytics v1.104
1.109 1.108 1.107 1.106 1.73 1.74 1.75 1.76 1.77 1.78 1.79 1.8 1.80 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89 1.9 1.90 1.91 All 98 releases
simpleanalytics / simple-analytics.php

simple-analytics.php in Simple Analytics 1.104, at simple-analytics.php

170 lines 8.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 * Plugin Name: Simple Analytics Official
4 * Version: 1.27
5 * Plugin URI: https://docs.simpleanalytics.com/install-simple-analytics-on-wordpress
6 * Description: Embed Simple Analytics script in your WordPress website
7 * Author: Simple Analytics
8 * Author URI: https://simpleanalytics.com/
9 * Requires at least: 5.2.0
10 * Tested up to: 6.7
11 *
12 * Text Domain: simple-analytics
13 * Domain Path: /lang/
14 *
15 * @package WordPress
16 * @author Simple Analytics
17 * @since 1.0.0
18 */
19
20 defined('\\ABSPATH') || exit;
21
22 define('SimpleAnalytics\\PLUGIN_URL', plugin_dir_url(__FILE__));
23 define('SimpleAnalytics\\PLUGIN_PATH', plugin_dir_path(__FILE__));
24 define('SimpleAnalytics\\PLUGIN_BASENAME', plugin_basename(__FILE__));
25 define('SimpleAnalytics\\ENTRYPOINT_FILE', __FILE__);
26
27 /**
28 * @note Manual loading rather than Composer to avoid potential conflict with plugins/themes that ship older autoloader.
29 */
30 require __DIR__ . '/src/Support/SvgIcon.php';
31 require __DIR__ . '/helpers.php';
32 require __DIR__ . '/src/Plugin.php';
33 require __DIR__ . '/src/WordPressHooks.php';
34 require __DIR__ . '/src/WordPressSettings.php';
35 require __DIR__ . '/src/Setting.php';
36 require __DIR__ . '/src/SettingName.php';
37 require __DIR__ . '/src/TrackingRules.php';
38 require __DIR__ . '/src/ScriptRegistry.php';
39 require __DIR__ . '/src/Scripts/Contracts/Script.php';
40 require __DIR__ . '/src/Scripts/Contracts/HideScriptId.php';
41 require __DIR__ . '/src/Scripts/Contracts/HasAttributes.php';
42 require __DIR__ . '/src/Scripts/AnalyticsScript.php';
43 require __DIR__ . '/src/Scripts/AutomatedEventsScript.php';
44 require __DIR__ . '/src/Scripts/InactiveScript.php';
45 require __DIR__ . '/src/Actions/Action.php';
46 require __DIR__ . '/src/Actions/AddInactiveComment.php';
47 require __DIR__ . '/src/Actions/AddNoScriptTag.php';
48 require __DIR__ . '/src/Actions/AddPluginSettingsLink.php';
49 require __DIR__ . '/src/Support/Str.php';
50 require __DIR__ . '/src/Settings/Block.php';
51 require __DIR__ . '/src/Settings/Blocks/CalloutBlock.php';
52 require __DIR__ . '/src/Settings/Concerns/HasDocs.php';
53 require __DIR__ . '/src/Settings/Concerns/HasPlaceholder.php';
54 require __DIR__ . '/src/Settings/Concerns/ManagesBlocks.php';
55 require __DIR__ . '/src/Settings/Concerns/WordPressPageIntegration.php';
56 require __DIR__ . '/src/Settings/AdminPage.php';
57 require __DIR__ . '/src/Settings/Blocks/Fields/Field.php';
58 require __DIR__ . '/src/Settings/Blocks/Fields/Input.php';
59 require __DIR__ . '/src/Settings/Blocks/Fields/Checkboxes.php';
60 require __DIR__ . '/src/Settings/Blocks/Fields/Checkbox.php';
61 require __DIR__ . '/src/Settings/Blocks/Fields/IpList.php';
62 require __DIR__ . '/src/Settings/Tab.php';
63 require __DIR__ . '/src/UI/LabelComponent.php';
64 require __DIR__ . '/src/UI/TabListComponent.php';
65 require __DIR__ . '/src/UI/PageLayoutComponent.php';
66
67 use SimpleAnalytics\SettingName;
68 use SimpleAnalytics\Settings\Tab;
69 use function SimpleAnalytics\get_icon;
70
71 $settings = new SimpleAnalytics\WordPressSettings();
72 $hooks = new SimpleAnalytics\WordPressHooks();
73 $rules = new SimpleAnalytics\TrackingRules($settings);
74 $scripts = new SimpleAnalytics\ScriptRegistry(/*TODO TAKE $hooks WordPressHooks as arg/dependency*/);
75
76 $adminPage = SimpleAnalytics\Settings\AdminPage::title('Simple Analytics')
77 ->slug('simpleanalytics')
78 ->tab('General', function (Tab $tab) {
79 $tab->input(SettingName::CUSTOM_DOMAIN, 'Custom Domain')
80 ->placeholder('Enter your custom domain or leave it empty.')
81 ->description('E.g. api.example.com. Leave empty to use the default domain (most users).')
82 ->docs('https://docs.simpleanalytics.com/bypass-ad-blockers');
83 })
84 ->tab('Ignore Rules', function (Tab $tab) {
85 $tab->icon(get_icon('eye-slash'));
86
87 $tab->input(SettingName::IGNORE_PAGES, 'Ignore Pages')
88 ->description('Comma separated list of pages to ignore. E.g. /contact, /about')
89 ->placeholder('Example: /page1, /page2, /category/*')
90 ->docs('https://docs.simpleanalytics.com/ignore-pages');
91
92 $tab->callout('IP and role exclusion only works when there is no page caching.');
93
94 $tab->multiCheckbox(SettingName::EXCLUDED_ROLES, 'Specific User Roles to Exclude')
95 ->description('When none selected, all authenticated users will be excluded from tracking.')
96 ->options(function () {
97 return wp_roles()->get_names();
98 });
99
100 $tab->ipList(SettingName::EXCLUDED_IP_ADDRESSES, 'Exclude IP Addresses')
101 ->placeholder("127.0.0.1\n192.168.0.1")
102 ->description('IP addresses to exclude from tracking.');
103 })
104 ->tab('Advanced', function (Tab $tab) {
105 $tab->icon(get_icon('cog'));
106
107 $tab->checkbox(SettingName::COLLECT_DNT, 'Collect Do Not Track')
108 ->description('If you want to collect visitors with Do Not Track enabled, turn this on.')
109 ->docs('https://docs.simpleanalytics.com/dnt');
110
111 $tab->checkbox(SettingName::HASH_MODE, 'Hash mode')
112 ->description('If your website uses hash (#) navigation, turn this on. On most WordPress websites this is not relevant.')
113 ->docs('https://docs.simpleanalytics.com/hash-mode');
114
115 $tab->checkbox(SettingName::MANUAL_COLLECT, 'Manually collect page views')
116 ->description('In case you don’t want to auto collect page views, but via `sa_pageview` function in JavaScript.')
117 ->docs('https://docs.simpleanalytics.com/trigger-custom-page-views#use-custom-collection-anyway');
118
119 $tab->checkbox(SettingName::NOSCRIPT, 'Support no JavaScript mode')
120 ->description('Collect analytics from visitors with disabled or no JavaScript.');
121
122 $tab->input(SettingName::ONLOAD_CALLBACK, 'Onload Callback')
123 ->description('JavaScript function to call when the script is loaded.')
124 ->placeholder('Example: sa_event("My event")')
125 ->docs('https://docs.simpleanalytics.com/trigger-custom-page-views#use-custom-collection-anyway');
126
127 $tab->input(SettingName::HOSTNAME, 'Overwrite domain name')
128 ->description('Override the domain that is sent to Simple Analytics. Useful for multi-domain setups.')
129 ->placeholder('Example: example.com')
130 ->docs('https://docs.simpleanalytics.com/overwrite-domain-name');
131
132 $tab->input(SettingName::SA_GLOBAL, 'Global variable name')
133 ->description('Change the global variable name of Simple Analytics. Default is `sa_event`.')
134 ->placeholder('Example: ba_event')
135 ->docs('https://docs.simpleanalytics.com/events#the-variable-sa_event-is-already-used');
136 })
137 ->tab('Events', function (Tab $tab) {
138 $tab->title('Automated events')
139 ->icon(get_icon('events'))
140 ->description("It will track outbound links, email addresses clicks,
141 and amount of downloads for common files (pdf, csv, docx, xIsx).
142 Events will appear on your events page on simpleanalytics.com");
143
144 $tab->checkbox(SettingName::AUTOMATED_EVENTS, 'Collect automated events');
145
146 $tab->input(SettingName::EVENT_COLLECT_DOWNLOADS, 'Auto collect downloads')
147 ->placeholder('Example: outbound,emails,downloads')
148 ->docs('https://docs.simpleanalytics.com/automated-events');
149
150 $tab->input(SettingName::EVENT_EXTENSIONS, 'Download file extensions')
151 ->description('Comma separated list of file extensions to track as downloads. E.g. pdf, zip')
152 ->placeholder('Example: pdf, zip')
153 ->docs('https://docs.simpleanalytics.com/automated-events');
154
155 $tab->checkbox(SettingName::EVENT_USE_TITLE, 'Use titles of page')
156 ->description('Use the title of the page as the event name. Default is the URL.')
157 ->docs('https://docs.simpleanalytics.com/automated-events');
158
159 $tab->checkbox(SettingName::EVENT_FULL_URLS, 'Use full URLs')
160 ->description('Use full URLs instead of the path. Default is the path.')
161 ->docs('https://docs.simpleanalytics.com/automated-events');
162
163 $tab->input(SettingName::EVENT_SA_GLOBAL, 'Override global')
164 ->description('Override the global variable name of Simple Analytics. Default is `sa_event`.')
165 ->placeholder('Example: ba_event')
166 ->docs('https://docs.simpleanalytics.com/events#the-variable-sa_event-is-already-used');
167 });
168
169 (new SimpleAnalytics\Plugin($hooks, $settings, $rules, $scripts, $adminPage))->boot();
170