getConstants(); $items = []; foreach ($constants as $name => $value) { if (strpos($name, 'ITEM_') === 0) { $name = strtolower(substr($name, 5)); $items[$name] = static::supportURL($value); } } return $items; } public static function esc_supportURL($item = self::ITEM_INDEX) { return esc_url(self::supportURL($item)); } public static function supportURL($item = self::ITEM_INDEX) { $base = 'https://www.wordfence.com/help/'; switch ($item) { case self::ITEM_INDEX: return 'https://www.wordfence.com/help/'; case self::ITEM_FREE: return 'https://wordpress.org/support/plugin/wordfence/'; case self::ITEM_PREMIUM: return 'https://support.wordfence.com/'; //These are a suffix on the base help URL case self::ITEM_SCAN_OPTION_ALERT_THRESHOLD: return $base . self::ITEM_SCAN_OPTION_ALERT_THRESHOLD; //These all fall through to the query format case self::ITEM_NOTICE_WAF_INACCESSIBLE_CONFIG: case self::ITEM_NOTICE_WAF_MOD_PHP_FIX: case self::ITEM_NOTICE_WAF_READ_ONLY_WARNING: case self::ITEM_NOTICE_MISCONFIGURED_HOW_GET_IPS: case self::ITEM_NOTICE_SWITCH_LIVE_TRAFFIC: case self::ITEM_LOCKED_OUT: case self::ITEM_AJAX_BLOCKED: case self::ITEM_USING_BREACH_PASSWORD: case self::ITEM_WIDGET_LOCAL_ATTACKS: case self::ITEM_VERSION_WORDPRESS: case self::ITEM_VERSION_PHP: case self::ITEM_VERSION_OPENSSL: case self::ITEM_GDPR: case self::ITEM_GDPR_DPA: case self::ITEM_GENERAL_REMOTE_IP_LOOKUP: case self::ITEM_DASHBOARD: case self::ITEM_DASHBOARD_STATUS_FIREWALL: case self::ITEM_DASHBOARD_STATUS_SCAN: case self::ITEM_DASHBOARD_OPTIONS: case self::ITEM_DASHBOARD_OPTION_API_KEY: case self::ITEM_DASHBOARD_OPTION_HOW_GET_IPS: case self::ITEM_DASHBOARD_OPTION_AUTOMATIC_UPDATE: case self::ITEM_DASHBOARD_OPTION_ALERT_EMAILS: case self::ITEM_DASHBOARD_OPTION_HIDE_VERSION: case self::ITEM_DASHBOARD_OPTION_DISABLE_UPLOADS_EXECUTION: case self::ITEM_DASHBOARD_OPTION_DISABLE_COOKIES: case self::ITEM_DASHBOARD_OPTION_PAUSE_LIVE_UPDATES: case self::ITEM_DASHBOARD_OPTION_UPDATE_INTERVAL: case self::ITEM_DASHBOARD_OPTION_LITESPEED_WARNING: case self::ITEM_DASHBOARD_OPTION_BYPASS_LITESPEED_CHECK: case self::ITEM_DASHBOARD_OPTION_DELETE_DEACTIVATION: case self::ITEM_DASHBOARD_OPTION_EXPORT: case self::ITEM_DASHBOARD_OPTION_IMPORT: case self::ITEM_FIREWALL_WAF: case self::ITEM_FIREWALL_WAF_STATUS_OVERALL: case self::ITEM_FIREWALL_WAF_STATUS_RULES: case self::ITEM_FIREWALL_WAF_STATUS_BLACKLIST: case self::ITEM_FIREWALL_WAF_STATUS_BRUTE_FORCE: case self::ITEM_FIREWALL_WAF_INSTALL_MANUALLY: case self::ITEM_FIREWALL_WAF_INSTALL_NGINX: case self::ITEM_FIREWALL_WAF_REMOVE_MANUALLY: case self::ITEM_FIREWALL_WAF_LEARNING_MODE: case self::ITEM_FIREWALL_WAF_RULES: case self::ITEM_FIREWALL_WAF_WHITELIST: case self::ITEM_FIREWALL_WAF_OPTION_DELAY_BLOCKING: case self::ITEM_FIREWALL_WAF_OPTION_WHITELISTED_IPS: case self::ITEM_FIREWALL_WAF_OPTION_WHITELISTED_SERVICES: case self::ITEM_FIREWALL_WAF_IGNORED_ALERT_IPS: case self::ITEM_FIREWALL_WAF_OPTION_IMMEDIATELY_BLOCK_URLS: case self::ITEM_FIREWALL_WAF_OPTION_ENABLE_LOGIN_SECURITY: case self::ITEM_FIREWALL_WAF_OPTION_LOCK_OUT_FAILURE_COUNT: case self::ITEM_FIREWALL_WAF_OPTION_LOCK_OUT_FORGOT_PASSWORD_COUNT: case self::ITEM_FIREWALL_WAF_OPTION_COUNT_TIME_PERIOD: case self::ITEM_FIREWALL_WAF_OPTION_LOCKOUT_DURATION: case self::ITEM_FIREWALL_WAF_OPTION_IMMEDIATELY_LOCK_OUT_INVALID_USERS: case self::ITEM_FIREWALL_WAF_OPTION_IMMEDIATELY_BLOCK_USERS: case self::ITEM_FIREWALL_WAF_OPTION_ENFORCE_STRONG_PASSWORDS: case self::ITEM_FIREWALL_WAF_OPTION_PREVENT_BREACH_PASSWORDS: case self::ITEM_FIREWALL_WAF_OPTION_MASK_LOGIN_ERRORS: case self::ITEM_FIREWALL_WAF_OPTION_PREVENT_ADMIN_REGISTRATION: case self::ITEM_FIREWALL_WAF_OPTION_PREVENT_AUTHOR_SCAN: case self::ITEM_FIREWALL_WAF_OPTION_DISABLE_APPLICATION_PASSWORDS: case self::ITEM_FIREWALL_WAF_OPTION_BLOCK_BAD_POST: case self::ITEM_FIREWALL_WAF_OPTION_CUSTOM_BLOCK_TEXT: case self::ITEM_FIREWALL_WAF_OPTION_CHECK_PASSWORD: case self::ITEM_FIREWALL_WAF_OPTION_PARTICIPATE_WFSN: case self::ITEM_FIREWALL_WAF_OPTION_ENABLE_ADVANCED_BLOCKING: case self::ITEM_FIREWALL_WAF_OPTION_IMMEDIATELY_BLOCK_FAKE_GOOGLE: case self::ITEM_FIREWALL_WAF_OPTION_GOOGLE_ACTION: case self::ITEM_FIREWALL_WAF_OPTION_RATE_LIMIT_ANY: case self::ITEM_FIREWALL_WAF_OPTION_RATE_LIMIT_CRAWLER: case self::ITEM_FIREWALL_WAF_OPTION_RATE_LIMIT_CRAWLER_404: case self::ITEM_FIREWALL_WAF_OPTION_RATE_LIMIT_HUMAN: case self::ITEM_FIREWALL_WAF_OPTION_RATE_LIMIT_HUMAN_404: case self::ITEM_FIREWALL_WAF_OPTION_RATE_LIMIT_ANY_404: case self::ITEM_FIREWALL_WAF_OPTION_AUTOMATIC_BLOCK_DURATION: case self::ITEM_FIREWALL_WAF_OPTION_WHITELISTED_404: case self::ITEM_FIREWALL_WAF_OPTION_MONITOR_AJAX: case self::ITEM_FIREWALL_BLOCKING: case self::ITEM_FIREWALL_BLOCKING_FILTER: case self::ITEM_FIREWALL_BLOCKING_OPTION_WHAT_TO_DO: case self::ITEM_FIREWALL_BLOCKING_OPTION_REDIRECT: case self::ITEM_FIREWALL_BLOCKING_OPTION_BLOCK_LOGGED_IN: case self::ITEM_FIREWALL_BLOCKING_BYPASS_COOKIE: case self::ITEM_FIREWALL_BLOCKING_BYPASS_REDIRECT: case self::ITEM_FIREWALL_BLOCKING_FULL_SITE: case self::ITEM_FIREWALL_REMOVE_OPTIMIZATION: case self::ITEM_SCAN: case self::ITEM_SCAN_STATUS_OVERALL: case self::ITEM_SCAN_STATUS_MALWARE: case self::ITEM_SCAN_STATUS_REPUTATION: case self::ITEM_SCAN_TIME_LIMIT: case self::ITEM_SCAN_FAILS: case self::ITEM_SCAN_FAILED_START: case self::ITEM_SCAN_BULK_DELETE_WARNING: case self::ITEM_SCAN_SCHEDULING: case self::ITEM_SCAN_OPTION_CHECK_SITE_BLACKLISTED: case self::ITEM_SCAN_OPTION_CHECK_SITE_SPAMVERTIZED: case self::ITEM_SCAN_OPTION_CHECK_IP_SPAMMING: case self::ITEM_SCAN_OPTION_CHECK_MISCONFIGURED_HOW_GET_IPS: case self::ITEM_SCAN_OPTION_PUBLIC_CONFIG: case self::ITEM_SCAN_OPTION_PUBLIC_QUARANTINED: case self::ITEM_SCAN_OPTION_CORE_CHANGES: case self::ITEM_SCAN_OPTION_THEME_CHANGES: case self::ITEM_SCAN_OPTION_PLUGIN_CHANGES: case self::ITEM_SCAN_OPTION_UNKNOWN_CORE: case self::ITEM_SCAN_OPTION_MALWARE_HASHES: case self::ITEM_SCAN_OPTION_MALWARE_SIGNATURES: case self::ITEM_SCAN_OPTION_MALWARE_URLS: case self::ITEM_SCAN_OPTION_POST_URLS: case self::ITEM_SCAN_OPTION_COMMENT_URLS: case self::ITEM_SCAN_OPTION_MALWARE_OPTIONS: case self::ITEM_SCAN_OPTION_UPDATES: case self::ITEM_SCAN_OPTION_UNKNOWN_ADMINS: case self::ITEM_SCAN_OPTION_PASSWORD_STRENGTH: case self::ITEM_SCAN_OPTION_DISK_SPACE: case self::ITEM_SCAN_OPTION_WAF_STATUS: case self::ITEM_SCAN_OPTION_OUTSIDE_WORDPRESS: case self::ITEM_SCAN_OPTION_IMAGES_EXECUTABLE: case self::ITEM_SCAN_OPTION_HIGH_SENSITIVITY: case self::ITEM_SCAN_OPTION_LOW_RESOURCE: case self::ITEM_SCAN_OPTION_LIMIT_ISSUES: case self::ITEM_SCAN_OPTION_OVERALL_TIME_LIMIT: case self::ITEM_SCAN_OPTION_MEMORY_LIMIT: case self::ITEM_SCAN_OPTION_STAGE_TIME_LIMIT: case self::ITEM_SCAN_OPTION_EXCLUDE_PATTERNS: case self::ITEM_SCAN_OPTION_CUSTOM_MALWARE_SIGNATURES: case self::ITEM_SCAN_OPTION_MAX_RESUME_ATTEMPTS: case self::ITEM_SCAN_OPTION_USE_ONLY_IPV4: case self::ITEM_SCAN_RESULT_PUBLIC_CONFIG: case self::ITEM_SCAN_RESULT_PLUGIN_ABANDONED: case self::ITEM_SCAN_RESULT_PLUGIN_REMOVED: case self::ITEM_SCAN_RESULT_UPDATE_CHECK_FAILED: case self::ITEM_SCAN_RESULT_OPTION_MALWARE_URL: case self::ITEM_SCAN_RESULT_GEOIP_UPDATE: case self::ITEM_SCAN_RESULT_WAF_DISABLED: case self::ITEM_SCAN_RESULT_UNKNOWN_FILE_CORE: case self::ITEM_SCAN_RESULT_SKIPPED_PATHS: case self::ITEM_SCAN_RESULT_REPAIR_MODIFIED_FILES: case self::ITEM_SCAN_RESULT_MODIFIED_PLUGIN: case self::ITEM_SCAN_RESULT_MODIFIED_THEME: case self::ITEM_SCAN_RESULT_PLUGIN_VULNERABLE: case self::ITEM_SCAN_RESULT_CORE_UPGRADE: case self::ITEM_TOOLS_TWO_FACTOR: case self::ITEM_TOOLS_LIVE_TRAFFIC: case self::ITEM_TOOLS_LIVE_TRAFFIC_OPTION_ENABLE: case self::ITEM_TOOLS_AUDIT_LOG: case self::ITEM_TOOLS_AUDIT_LOG_OPTION_MODE: case self::ITEM_TOOLS_WHOIS_LOOKUP: case self::ITEM_TOOLS_IMPORT_EXPORT: case self::ITEM_DIAGNOSTICS: case self::ITEM_DIAGNOSTICS_SYSTEM_CONFIGURATION: case self::ITEM_DIAGNOSTICS_TEST_MEMORY: case self::ITEM_DIAGNOSTICS_TEST_EMAIL: case self::ITEM_DIAGNOSTICS_TEST_ACTIVITY_REPORT: case self::ITEM_DIAGNOSTICS_REMOVE_CENTRAL_DATA: case self::ITEM_DIAGNOSTICS_OPTION_DEBUGGING_MODE: case self::ITEM_DIAGNOSTICS_OPTION_REMOTE_SCANS: case self::ITEM_DIAGNOSTICS_OPTION_SSL_VERIFICATION: case self::ITEM_DIAGNOSTICS_OPTION_DISABLE_PHP_INPUT: case self::ITEM_DIAGNOSTICS_OPTION_BETA_TDF: case self::ITEM_DIAGNOSTICS_OPTION_WORDFENCE_TRANSLATIONS: case self::ITEM_DIAGNOSTICS_IPV6: case self::ITEM_DIAGNOSTICS_CLOUDFLARE_BLOCK: case self::ITEM_MODULE_LOGIN_SECURITY: case self::ITEM_MODULE_LOGIN_SECURITY_2FA: case self::ITEM_MODULE_LOGIN_SECURITY_CAPTCHA: return $base . '?query=' . $item; } return ''; } public static function shouldShowSatisfactionPrompt() { //Don't show if overridden if (!wfConfig::getBool('satisfactionPromptOverride')) { return false; } //Only show on our pages if (!isset($_GET['page']) || !is_string($_GET['page'])) { return false; } if (!preg_match('/^Wordfence/', $_GET['page'])) { return false; } //Only show until dismissed if (wfConfig::get('satisfactionPromptDismissed') > 0) { return false; } //Only show to users installing after the release date of the version this was introduced if (WORDFENCE_FEEDBACK_EPOCH > wfConfig::get('satisfactionPromptInstallDate')) { return false; } //Don't show for at least 7 days post-install if ((time() - wfConfig::get('satisfactionPromptInstallDate')) < 86400 * 7) { return false; } return true; } public static function satisfactionPromptNotice() { ?>