), '4:5' => esc_html__( '4:5', 'wpforms-lite' ), '2:3' => esc_html__( '2:3', 'wpforms-lite' ), ], ]; // Add class to hide freeform if a format is not a photo. $camera_format = ! empty( $field['camera_format'] ) ? $field['camera_format'] : 'photo'; $aspect_ratio_class = [ 'wpforms-file-upload-camera-aspect-ratio-select' ]; if ( $camera_format !== 'photo' ) { $aspect_ratio_class[] = 'wpforms-file-upload-camera-aspect-ratio-no-freeform'; } $aspect_ratio_select = $this->field_element( 'select', $field, [ 'slug' => 'camera_aspect_ratio', 'value' => ! empty( $field['camera_aspect_ratio'] ) ? $field['camera_aspect_ratio'] : 'original', 'options' => $aspect_ratio_options, 'class' => $aspect_ratio_class, ], false ); // Check if the camera is enabled to determine visibility. $hidden_class = $this->is_camera_enabled_for_field( $field ) ? [] : [ 'wpforms-hidden' ]; $this->field_element( 'row', $field, [ 'slug' => 'camera_aspect_ratio', 'content' => $aspect_ratio_label . $aspect_ratio_select, 'class' => array_merge( [ 'wpforms-file-upload-camera-aspect-ratio' ], $hidden_class ), ] ); } /** * Add camera custom ratio options. * * @since 1.9.8 * * @param array $field Field data and settings. */ private function add_camera_custom_ratio_options( array $field ): void { // Check if an aspect ratio is custom to determine visibility. $camera_aspect_ratio = ! empty( $field['camera_aspect_ratio'] ) ? $field['camera_aspect_ratio'] : 'original'; $custom_ratio_hidden_class = ( $this->is_camera_enabled_for_field( $field ) && $camera_aspect_ratio === 'custom' ) ? [] : [ 'wpforms-hidden' ]; // Ratio Width field. $ratio_width_field = '
' . $this->field_element( 'text', $field, [ 'slug' => 'camera_ratio_width', 'type' => 'number', 'value' => ! empty( $field['camera_ratio_width'] ) && $field['camera_ratio_width'] >= 1 ? $field['camera_ratio_width'] : '4', 'attrs' => [ 'min' => 1, 'step' => 1, ], 'after' => esc_html__( 'Ratio Width', 'wpforms-lite' ), 'class' => 'wpforms-file-upload-camera-ratio-width-input', ], false ) . '
'; // Ratio Height field. $ratio_height_field = '
' . $this->field_element( 'text', $field, [ 'slug' => 'camera_ratio_height', 'type' => 'number', 'value' => ! empty( $field['camera_ratio_height'] ) && $field['camera_ratio_height'] >= 1 ? $field['camera_ratio_height'] : '3', 'attrs' => [ 'min' => 1, 'step' => 1, ], 'after' => esc_html__( 'Ratio Height', 'wpforms-lite' ), 'class' => 'wpforms-file-upload-camera-ratio-height-input', ], false ) . '
'; $this->field_element( 'row', $field, [ 'slug' => 'camera_custom_ratio', 'content' => '
' . $ratio_width_field . $ratio_height_field . '
', 'class' => array_merge( [ 'wpforms-file-upload-camera-custom-ratio' ], $custom_ratio_hidden_class ), ] ); } /** * Add camera time limit options. * * @since 1.9.8 * * @param array $field Field data and settings. */ private function add_camera_time_limit_options( array $field ): void { $time_limit_label = $this->field_element( 'label', $field, [ 'slug' => 'camera_time_limit', 'value' => esc_html__( 'Time Limit', 'wpforms-lite' ), 'tooltip' => esc_html__( 'Set the time limit for camera recording.', 'wpforms-lite' ), 'class' => 'wpforms-file-upload-camera-time-limit-label', ], false ); // Minutes field. $minutes_field = '
' . $this->field_element( 'text', $field, [ 'slug' => 'camera_time_limit_minutes', 'type' => 'number', 'value' => ! empty( $field['camera_time_limit_minutes'] ) && $field['camera_time_limit_minutes'] >= 0 ? $field['camera_time_limit_minutes'] : '1', 'attrs' => [ 'min' => 0, 'step' => 1, ], 'after' => esc_html__( 'Minutes', 'wpforms-lite' ), 'class' => 'wpforms-file-upload-camera-time-limit-minutes-input', ], false ) . '
'; // Seconds field. $seconds_field = '
' . $this->field_element( 'text', $field, [ 'slug' => 'camera_time_limit_seconds', 'type' => 'number', 'value' => ! empty( $field['camera_time_limit_seconds'] ) && $field['camera_time_limit_seconds'] >= 0 && $field['camera_time_limit_seconds'] <= 59 ? $field['camera_time_limit_seconds'] : '30', 'attrs' => [ 'min' => 0, 'max' => 59, 'step' => 1, ], 'after' => esc_html__( 'Seconds', 'wpforms-lite' ), 'class' => 'wpforms-file-upload-camera-time-limit-seconds-input', ], false ) . '
'; // Check if a format is video to determine time limit visibility. $camera_format = ! empty( $field['camera_format'] ) ? $field['camera_format'] : 'photo'; $time_limit_hidden_class = ( $this->is_camera_enabled_for_field( $field ) && $camera_format === 'video' ) ? [] : [ 'wpforms-hidden' ]; $this->field_element( 'row', $field, [ 'slug' => 'camera_time_limit', 'content' => $time_limit_label . '
' . $minutes_field . $seconds_field . '
', 'class' => array_merge( [ 'wpforms-file-upload-camera-time-limit' ], $time_limit_hidden_class ), ] ); } /** * Whether the provided form has a camera field. * * @since 1.9.8 * * @param array|mixed $form Form data. */ protected function is_camera_enabled( $form ): bool { if ( empty( $form['fields'] ) ) { return false; } foreach ( $form['fields'] as $field ) { if ( ! empty( $field['camera_enabled'] ) ) { return true; } } return false; } /** * Whether the field is a camera field or has camera enabled. * * @since 1.9.8 * * @param array $field Field data and settings. */ private function is_camera_enabled_for_field( array $field ): bool { return $this->type === 'camera' || ! empty( $field['camera_enabled'] ); } /** * Get the camera time limit in seconds. * * @since 1.9.8 * * @param array $field Field data. * * @return int Camera time limit in seconds. */ public function get_camera_time_limit( array $field ): int { $field = wp_parse_args( $field, [ 'camera_enabled' => false, 'camera_format' => '', 'camera_time_limit_minutes' => 0, 'camera_time_limit_seconds' => 0, ] ); if ( empty( $field['camera_enabled'] ) || $field['camera_format'] !== 'video' ) { return 0; } return absint( $field['camera_time_limit_minutes'] ) * 60 + absint( $field['camera_time_limit_seconds'] ); } }