0, 'website_key' => '', 'display_mode' => 'all', 'url_patterns' => [], 'admin_mode' => 'skip_admins', ]; } function ageverif_activate(): void { $settings = get_option('ageverif_settings'); if ( ! is_array($settings)) { add_option('ageverif_settings', ageverif_default_settings()); return; } $merged = array_merge(ageverif_default_settings(), $settings); update_option('ageverif_settings', $merged); } register_activation_hook(__FILE__, 'ageverif_activate'); function ageverif_action_links(array $links): array { $settings_link = '' . esc_html__('Settings', 'ageverif') . ''; array_unshift($links, $settings_link); return $links; } add_filter('plugin_action_links_' . plugin_basename(__FILE__), 'ageverif_action_links'); require_once AGEVERIF_PATH . 'includes/ageverif_admin_area.php'; function ageverif_init(): void { if (is_admin()) new AgeVerif_Admin(); } add_action('plugins_loaded', 'ageverif_init'); // Check if the current URL matches the defined patterns function ageverif_url_matches_pattern(string $url, string $pattern): bool { $pattern = untrailingslashit(trim($pattern)); if ($pattern === '') return false; $normalized_url = (string) preg_replace('/[?#].*$/', '', $url); $normalized_url = untrailingslashit($normalized_url); $path = wp_parse_url($normalized_url, PHP_URL_PATH); $patterns_to_test = [$pattern]; if (substr($pattern, -2) === '/*') $patterns_to_test[] = untrailingslashit(substr($pattern, 0, -2)); foreach ($patterns_to_test as $test_pattern) { $regex = '/^' . str_replace('\\*', '.*', preg_quote($test_pattern, '/')) . '$/i'; if (preg_match($regex, $normalized_url)) return true; if (is_string($path) && preg_match($regex, untrailingslashit($path))) return true; } return false; } // Return plugin settings function ageverif_get_settings(): array { return array_merge(ageverif_default_settings(), (array) get_option('ageverif_settings', [])); } function ageverif_inject_checker(array $settings): bool { if (is_admin()) return false; // Check if plugin is enabled if (empty($settings['enabled'])) return false; // Check for website public live key $key = trim((string) ($settings['website_key'] ?? '')); if ($key === '') return false; // Handle admin mode $admin_mode = $settings['admin_mode'] ?? 'skip_admins'; $is_wp_admin = is_user_logged_in() && current_user_can('manage_options'); if ($admin_mode === 'admins_only' && ! $is_wp_admin) return false; if ($admin_mode === 'skip_admins' && $is_wp_admin) return false; // 'everyone' falls through // For display mode "all", always inject checker script $mode = $settings['display_mode'] ?? 'all'; if ($mode === 'all') return true; $patterns = is_array($settings['url_patterns'] ?? null) ? $settings['url_patterns'] : []; if ($mode === 'include' && empty($patterns)) return false; // Match current URL against defined patterns $request_uri = isset($_SERVER['REQUEST_URI']) ? (string) wp_unslash($_SERVER['REQUEST_URI']) : '/'; $current_url = untrailingslashit(home_url($request_uri)); $matched = false; foreach ($patterns as $pattern) { if (ageverif_url_matches_pattern($current_url, (string) $pattern)) { $matched = true; break; } } // Inject only if a pattern matches if ($mode === 'include') return $matched; // Do not inject if a pattern matches if ($mode === 'exclude') return ! $matched; return true; } function ageverif_enqueue_checker_script(): void { $settings = ageverif_get_settings(); if ( ! ageverif_inject_checker($settings)) return; $key = trim((string) ($settings['website_key'] ?? '')); if ($key === '') return; $src = esc_url('https://www.ageverif.com/checker.js?key=' . rawurlencode($key) . '&onsuccess=agvsuccess&onerror=agverror'); wp_register_script('ageverif-checker', $src, [], AGEVERIF_VERSION, false); wp_script_add_data('ageverif-checker', 'data-cfasync', 'false'); wp_enqueue_script('ageverif-checker'); } add_action('wp_enqueue_scripts', 'ageverif_enqueue_checker_script', 1);