package FixMyStreet::App::Form::Waste; use HTML::FormHandler::Moose; extends 'FixMyStreet::App::Form::Wizard'; has c => ( is => 'ro' ); has default_page_type => ( is => 'ro', isa => 'Str', default => 'Waste' ); has finished_action => ( is => 'ro' ); before _process_page_array => sub { my ($self, $pages) = @_; foreach my $page (@$pages) { $page->{type} = $self->default_page_type unless $page->{type}; } }; # Add some functions to the form to pass through to the current page has '+current_page' => ( handles => { title => 'title', template => 'template', } ); sub wizard_finished { my ($form, $action) = @_; my $c = $form->c; my $success = $c->forward($action, [ $form ]); if (!$success) { $form->add_form_error('Something went wrong, please try again'); foreach (keys %{$c->stash->{field_errors}}) { $form->add_form_error("$_: " . $c->stash->{field_errors}{$_}); } } return $success; } # Make sure we can have pre-ticked things on the first page before after_build => sub { my $self = shift; my $saved_data = $self->previous_form ? $self->previous_form->saved_data : $self->saved_data; my $c = $self->c; map { $saved_data->{$_} = 1 } grep { /^(service|container)-/ && $c->req->params->{$_} } keys %{$c->req->params}; }; 1;