getAudits(); $defaultOptions = []; /** @var ResolvableAudit $audit */ foreach ($audits as $audit) { // Only resolvable audits state needs to be stored in options if (!is_subclass_of($audit, ResolvableAudit::class)) continue; // By default, all audits should be action_required $defaultOptions[$audit::$optionKey] = 'action_required'; } foreach ($defaultOptions as $key => $value) { Option::addOptionGroup($key, $value, 'privacy_status'); } } /** * Add menu item * * @param array $items * @return array */ public function addMenuItem($items) { $items['privacy_audit'] = [ 'sub' => 'overview', 'title' => esc_html__('Privacy Audit', 'wp-statistics'), 'page_url' => 'privacy-audit', 'callback' => PrivacyAuditPage::class, 'cap' => User::ExistCapability(Option::get('manage_capability', 'manage_options')), 'priority' => 91, ]; return $items; } /** * Add ajax actions * * @param array $list * @return array */ public function registerAjaxCallbacks($list) { $privacyAuditController = new PrivacyAuditController(); $list[] = [ 'class' => $privacyAuditController, 'action' => 'getPrivacyStatus' ]; $list[] = [ 'class' => $privacyAuditController, 'action' => 'updatePrivacyStatus' ]; return $list; } /** * Register privacy compliance test for WordPress site health. * * @return array $tests */ public function registerHealthStatusTests($tests) { $tests['direct']['wp_statistics_privacy_compliance_status'] = [ 'label' => esc_html__('Are your WP Statistics settings privacy-compliant?', 'wp-statistics'), 'test' => [new PrivacyAuditController, 'privacyComplianceTest'], ]; return $tests; } }