preg_match( '#^[A-Za-z0-9+/]+={0,2}$#', $v ) ? $v : '' ); self::put( $clean, $raw, '_mowl_sig', static fn ( string $v ): string => (string) preg_replace( '/[^A-Za-z0-9]/', '', $v ) ); return $clean; } /** A „készleten van" űrlap mezői (a közös mezőkön felül). */ public static function back_in_stock( array $raw ): array { $clean = self::common( $raw ); self::put( $clean, $raw, 'mowl_bis_email', 'sanitize_email' ); self::put( $clean, $raw, 'mowl_bis_newsletter', 'sanitize_text_field' ); self::put( $clean, $raw, 'product_id', 'absint' ); self::put( $clean, $raw, 'variation_id', 'absint' ); return $clean; } /** Spam-mezők, oldal-URL, captcha-token — mindkét űrlapon ugyanazok. */ private static function common( array $raw ): array { $clean = array(); if ( array_key_exists( Spam::HONEYPOT, $raw ) ) { // A honeypot értéke nem érdekes, csak hogy üres-e: a nem skalár vagy a // szűrés után üresre fogyó (csak jelölésből álló) érték is kitöltöttnek számít. $value = $raw[ Spam::HONEYPOT ]; $filled = ! is_scalar( $value ) || '' !== trim( (string) $value ); $text = is_scalar( $value ) ? sanitize_text_field( (string) $value ) : ''; $clean[ Spam::HONEYPOT ] = $filled && '' === $text ? '1' : $text; } self::put( $clean, $raw, Spam::TIMESTAMP, 'absint' ); self::put( $clean, $raw, '_mowl_page', 'esc_url_raw' ); self::put( $clean, $raw, Turnstile::RESPONSE_FIELD, 'sanitize_text_field' ); return $clean; } /** * A mező csak akkor kerül át, ha a kérésben szerepelt és skalár — így a * handler `empty()`/`isset()` döntései (pl. kipipálatlan négyzet) változatlanok. * * @param callable $sanitize string → string|int */ private static function put( array &$clean, array $raw, string $key, callable $sanitize ): void { if ( ! array_key_exists( $key, $raw ) || ! is_scalar( $raw[ $key ] ) ) { return; } $clean[ $key ] = $sanitize( (string) $raw[ $key ] ); } }