30, 'revision_keep' => 5, ); } public static function get() { $saved = get_option( self::OPTION_KEY, array() ); return self::sanitize( is_array( $saved ) ? $saved : array() ); } /** * Speichert bereinigte Einstellungen. Autoload aus: Das Plugin liest sie * nur auf der eigenen Seite und im Cron, sie sollen nicht bei jedem * Seitenaufruf in den Speicher geladen werden. * * @param array $input Rohe Eingabe, wird hier bereinigt. * @return array Die gespeicherten Einstellungen. */ public static function save( array $input ) { $settings = self::sanitize( array_merge( self::get(), $input ) ); update_option( self::OPTION_KEY, $settings, false ); return $settings; } /** 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['revision_days'] = self::clamp_int( $input['revision_days'] ?? null, $defaults['revision_days'], self::REVISION_DAYS_MIN, self::REVISION_DAYS_MAX ); $out['revision_keep'] = self::clamp_int( $input['revision_keep'] ?? null, $defaults['revision_keep'], self::REVISION_KEEP_MIN, self::REVISION_KEEP_MAX ); return $out; } /** * Ganzzahl innerhalb von [$min, $max]. Alles, was keine Zahl ist (Text, * Array, null), ergibt den Standardwert statt stillschweigend 0. * * @param mixed $value Eingabe. * @param int $default Rueckfallwert. * @param int $min Untergrenze. * @param int $max Obergrenze. * @return int */ private static function clamp_int( $value, $default, $min, $max ) { if ( ! is_int( $value ) && ! ( is_string( $value ) && is_numeric( $value ) ) ) { return $default; } return max( $min, min( $max, (int) $value ) ); } }