$posted_data Posted form data. * @param string $rate_limit_identifier Identifier used only for hashing. * @param int|null $timestamp Current timestamp. */ public function build_from_registration_data( string $username, string $email, array $posted_data, string $rate_limit_identifier = '', ?int $timestamp = null ): SubmissionContext { return $this->build_from_submitted_data( $this->normalize_registration_data( $username, $email, $posted_data ), self::DEFAULT_FORM_ID, $rate_limit_identifier, $timestamp ); } /** * Normalize native registration fields and root protection fields. * * @param string $username Submitted username. * @param string $email Submitted email. * @param array $posted_data Posted data. * * @return array */ private function normalize_registration_data( string $username, string $email, array $posted_data ): array { $submitted_data = $this->extract_internal_fields( $posted_data ); if ( '' !== $username ) { $submitted_data['user_login'] = $username; } if ( '' !== $email ) { $submitted_data['user_email'] = $email; } return $submitted_data; } /** * Extract internal 2o2code Spamless Forms fields from posted data. * * @param array $posted_data Posted data. * * @return array */ private function extract_internal_fields( array $posted_data ): array { $internal_fields = array(); foreach ( $this->get_internal_field_names() as $field_name ) { if ( array_key_exists( $field_name, $posted_data ) ) { $internal_fields[ $field_name ] = $posted_data[ $field_name ]; } } return $internal_fields; } /** * Get internal field names. * * @return array */ private function get_internal_field_names(): array { return array( ProtectionFieldRenderer::HONEYPOT_FIELD, ProtectionFieldRenderer::TOKEN_FIELD, ProtectionFieldRenderer::STARTED_AT_FIELD, ); } }