__( 'You do not have permission to do this.', '360-orbit-security-digest' ) ), 403 ); } } /** * Speichert eingesendete Felder -- diese werden mit dem bestehenden * Settings-Stand zusammengefuehrt statt ihn zu ersetzen, weil jeder Tab * nur seinen eigenen Teil der Felder ins DOM rendert und sendet. */ public static function save_settings() { check_ajax_referer( 'wp360_sd_nonce', 'nonce' ); self::check_capability(); // Roh-JSON als Text bereinigen, dann dekodieren; die einzelnen Werte // prueft anschliessend Settings::sanitize() feldweise. $json = isset( $_POST['settings'] ) ? sanitize_text_field( wp_unslash( $_POST['settings'] ) ) : ''; $raw = '' !== $json ? json_decode( $json, true ) : null; if ( ! is_array( $raw ) ) { wp_send_json_error( array( 'message' => __( 'Invalid data.', '360-orbit-security-digest' ) ), 400 ); } // Unbekannte Felder verwirft Settings::sanitize(); bereits gespeicherte // Werte, die diese Variante nicht kennt, behaelt Settings::save(). $current = Wp360_Security_Digest_Settings::get(); $merged = array_replace_recursive( $current, $raw ); $settings = Wp360_Security_Digest_Settings::save( $merged ); wp_send_json_success( array( 'settings' => $settings ) ); } public static function send_now() { self::check_request(); $result = Wp360_Security_Digest_Digest::send_digest( true ); wp_send_json_success( $result ); } /** #5: baut den naechsten Digest zusammen, ohne zu verschicken. */ public static function preview() { self::check_request(); wp_send_json_success( Wp360_Security_Digest_Digest::preview() ); } /** #6: schaltet ein Plugin fuer die uebergebene Anzahl Tage im Sammel-Digest stumm. */ public static function mute_plugin() { check_ajax_referer( 'wp360_sd_nonce', 'nonce' ); self::check_capability(); $plugin_file = isset( $_POST['plugin_file'] ) ? sanitize_text_field( wp_unslash( $_POST['plugin_file'] ) ) : ''; $days = isset( $_POST['days'] ) ? (int) sanitize_text_field( wp_unslash( $_POST['days'] ) ) : 30; if ( '' === $plugin_file ) { wp_send_json_error( array( 'message' => __( 'Invalid data.', '360-orbit-security-digest' ) ), 400 ); } Wp360_Security_Digest_Mutes::mute( $plugin_file, $days ); wp_send_json_success(); } public static function unmute_plugin() { check_ajax_referer( 'wp360_sd_nonce', 'nonce' ); self::check_capability(); $plugin_file = isset( $_POST['plugin_file'] ) ? sanitize_text_field( wp_unslash( $_POST['plugin_file'] ) ) : ''; if ( '' === $plugin_file ) { wp_send_json_error( array( 'message' => __( 'Invalid data.', '360-orbit-security-digest' ) ), 400 ); } Wp360_Security_Digest_Mutes::unmute( $plugin_file ); wp_send_json_success(); } }