find( (int) $form_id ); return is_object( $form ) && isset( $form->title ) ? (string) $form->title : ''; } catch ( \Throwable $e ) { return ''; } } /** * Stores the submission. * * @param int $entry_id Entry ID. * @param array $form_data Submitted values keyed by field name. * @param object $form Form model. */ public function capture( $entry_id, $form_data, $form ) { $labels = $this->labels( $form ); $fields = array(); foreach ( (array) $form_data as $name => $value ) { if ( 0 === strpos( (string) $name, '_' ) ) { continue; } // Name fields arrive as first_name / last_name sub-values. if ( is_array( $value ) && isset( $value['first_name'] ) ) { foreach ( $value as $sub => $sub_value ) { $fields[] = array( 'label' => $sub, 'name' => $sub, 'type' => '', 'value' => $sub_value, ); } continue; } $fields[] = array( 'label' => $labels[ $name ] ?? $name, 'name' => (string) $name, 'type' => 'email' === $name ? 'email' : '', 'value' => $value, ); } Capture::submission( self::key(), (string) ( $form->id ?? '' ), (string) ( $form->title ?? '' ), $fields ); } /** * Field labels from the form definition. * * @param object $form Form model. * @return array Name => label. */ private function labels( $form ) { $labels = array(); $schema = json_decode( (string) ( $form->form_fields ?? '' ), true ); foreach ( (array) ( $schema['fields'] ?? array() ) as $field ) { $name = $field['attributes']['name'] ?? ''; if ( $name ) { $labels[ $name ] = $field['settings']['label'] ?? $name; } } return $labels; } }