get_option( 'admin_email' ), 'frequency' => 'weekly', 'day' => 1, // ISO-Wochentag: 1 = Montag ... 7 = Sonntag, nur bei frequency=weekly. 'day_of_month' => 1, // 1-28, nur bei frequency=monthly (auf 28 gedeckelt, damit jeder Monat den Tag hat). 'hour' => 8, 'digest_language' => '', // '' = folgt der WordPress-Backend-Sprache. ); } public static function get() { $saved = get_option( self::OPTION_KEY, array() ); return self::sanitize( is_array( $saved ) ? $saved : array() ); } /** Nimmt beliebig geformte Eingaben entgegen und liefert garantiert vollstaendige, typsichere Settings zurueck -- unbekannte Schluessel werden verworfen. */ public static function sanitize( array $input ) { $defaults = self::defaults(); $out = $defaults; $out['recipient'] = self::sanitize_email( $input['recipient'] ?? $defaults['recipient'], $defaults['recipient'] ); $out['frequency'] = in_array( $input['frequency'] ?? '', self::FREQUENCIES, true ) ? $input['frequency'] : $defaults['frequency']; $out['day'] = self::clamp_int( $input['day'] ?? $defaults['day'], 1, 7, $defaults['day'] ); $out['day_of_month'] = self::clamp_int( $input['day_of_month'] ?? $defaults['day_of_month'], 1, 28, $defaults['day_of_month'] ); $out['hour'] = self::clamp_int( $input['hour'] ?? $defaults['hour'], 0, 23, $defaults['hour'] ); $out['digest_language'] = in_array( $input['digest_language'] ?? '', self::DIGEST_LANGUAGES, true ) ? ( $input['digest_language'] ?? '' ) : $defaults['digest_language']; return $out; } /** * Gespeicherte Schluessel, die diese Variante nicht kennt (die * PRO-Einstellungen, wenn gerade FREE laeuft), bleiben beim Speichern * unangetastet -- sonst gingen sie bei einem Wechsel von PRO auf FREE mit * dem ersten Speichern verloren. */ public static function save( array $input ) { $settings = self::sanitize( $input ); $stored = get_option( self::OPTION_KEY, array() ); $unknown = is_array( $stored ) ? array_diff_key( $stored, $settings ) : array(); update_option( self::OPTION_KEY, array_merge( $unknown, $settings ) ); Wp360_Security_Digest_Digest::reschedule( $settings ); return $settings; } /** Liefert die Empfaenger-Adresse(n) des Digests. */ public static function recipients( array $settings ) { return array( $settings['recipient'] ?: get_option( 'admin_email' ) ); } private static function clamp_int( $value, $min, $max, $fallback ) { if ( ! is_numeric( $value ) ) { return $fallback; } return max( $min, min( $max, (int) $value ) ); } private static function sanitize_email( $value, $fallback ) { $value = sanitize_email( (string) $value ); return is_email( $value ) ? $value : $fallback; } }