Tidemark Analytics. */ class Settings { const OPTION = 'tidemark_analytics_settings'; const PAGE = 'tidemark-analytics'; const GROUP = 'tidemark_analytics'; public function get(): array { return Options::merge(get_option(self::OPTION)); } public function register(): void { add_action('admin_menu', [$this, 'addPage']); add_action('admin_init', [$this, 'registerSettings']); add_filter('plugin_action_links_'.plugin_basename(TIDEMARK_ANALYTICS_FILE), [$this, 'addActionLink']); add_action('admin_init', [$this, 'addPrivacyPolicyContent']); } public function addPage(): void { add_options_page( __('Tidemark Analytics', 'tidemark-analytics'), __('Tidemark Analytics', 'tidemark-analytics'), 'manage_options', self::PAGE, [$this, 'renderPage'] ); } public function addActionLink(array $links): array { $url = esc_url(admin_url('options-general.php?page='.self::PAGE)); array_unshift($links, ''.esc_html__('Settings', 'tidemark-analytics').''); return $links; } public function registerSettings(): void { register_setting(self::GROUP, self::OPTION, [ 'type' => 'array', 'sanitize_callback' => [$this, 'sanitize'], 'default' => Options::defaults(), ]); add_settings_section('connection', __('Connection', 'tidemark-analytics'), [$this, 'renderConnectionIntro'], self::PAGE); add_settings_field('address', __('Tidemark address', 'tidemark-analytics'), [$this, 'renderAddress'], self::PAGE, 'connection', ['label_for' => 'tidemark-address']); add_settings_field('domain', __('Site name', 'tidemark-analytics'), [$this, 'renderDomain'], self::PAGE, 'connection', ['label_for' => 'tidemark-domain']); add_settings_section('tracking', __('Tracking', 'tidemark-analytics'), '__return_false', self::PAGE); add_settings_field('variants', __('Also record', 'tidemark-analytics'), [$this, 'renderVariants'], self::PAGE, 'tracking'); add_settings_field('script_file', __('Script file', 'tidemark-analytics'), [$this, 'renderScriptFile'], self::PAGE, 'tracking', ['label_for' => 'tidemark-script-file']); add_settings_field('excluded_roles', __('Do not track', 'tidemark-analytics'), [$this, 'renderExcludedRoles'], self::PAGE, 'tracking'); } public function sanitize($input): array { return Options::sanitize($input, array_keys(wp_roles()->get_names())); } public function addPrivacyPolicyContent(): void { if (! function_exists('wp_add_privacy_policy_content')) { return; } wp_add_privacy_policy_content( __('Tidemark Analytics', 'tidemark-analytics'), wp_kses_post( '
'.__('Tidemark Analytics loads a script from your Tidemark server on every public page. The script sends the page address, the referrer and the screen width to that server. It sets no cookies, and Tidemark stores no IP address and nothing that follows a visitor from one day to the next. The plugin itself stores only its settings in your WordPress database.', 'tidemark-analytics').'
' ) ); } public function renderPage(): void { if (! current_user_can('manage_options')) { return; } $options = $this->get(); ?>'.esc_html__('Each one also needs a matching goal in Tidemark to show up under Behaviors.', 'tidemark-analytics').'
'; } public function renderScriptFile(): void { $options = $this->get(); ?> get(); echo ''; echo ''.esc_html__('Visits by signed-in people with these roles are not counted. Page previews are never counted.', 'tidemark-analytics').'
'; } }