$comment_data Native comment data. * @param array $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_comment_data( array $comment_data, array $posted_data, string $rate_limit_identifier = '', ?int $timestamp = null ): SubmissionContext { return $this->build_from_submitted_data( $this->normalize_comment_data( $comment_data, $posted_data ), self::DEFAULT_FORM_ID, $rate_limit_identifier, $timestamp ); } /** * Normalize native comment fields and root protection fields. * * @param array $comment_data Native comment data. * @param array $posted_data Posted form data. * * @return array */ private function normalize_comment_data( array $comment_data, array $posted_data ): array { $submitted_data = $this->extract_internal_fields( $posted_data ); foreach ( array( 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content' ) as $field_name ) { if ( isset( $comment_data[ $field_name ] ) && is_scalar( $comment_data[ $field_name ] ) ) { $submitted_data[ $field_name ] = $comment_data[ $field_name ]; } } 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, ); } }