form()->eligible_location_count() <= 1; } /** * Build the step descriptor. * * @param BookingSession $session Session. */ public function descriptor( BookingSession $session ): StepDescriptor { return $this->build_descriptor( $session, [ 'eligible_count' => $session->form()->eligible_location_count() ], [ [ 'key' => 'location_id', 'type' => 'integer', 'required' => true, ], ] ); } /** * Validate submitted input. * * @param BookingSession $session Session. * @param array $input Payload. */ public function validate( BookingSession $session, array $input ): ValidationResult { if ( $this->should_skip( $session ) ) { return ValidationResult::ok(); } if ( null === $this->positive_int( $input, 'location_id' ) ) { return ValidationResult::invalid( [ 'location_id' => 'Please choose a location.' ] ); } return ValidationResult::ok(); } /** * Apply validated input. * * @param BookingSession $session Session. * @param array $input Payload. */ public function apply( BookingSession $session, array $input ): BookingSession { $location_id = $this->positive_int( $input, 'location_id' ); return $session->with_draft( $session->draft()->with_location( $location_id ) ); } }