diff options
Diffstat (limited to 'perllib/FixMyStreet/App/Controller')
| -rw-r--r-- | perllib/FixMyStreet/App/Controller/Admin.pm | 32 | ||||
| -rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 32 | 
2 files changed, 62 insertions, 2 deletions
| diff --git a/perllib/FixMyStreet/App/Controller/Admin.pm b/perllib/FixMyStreet/App/Controller/Admin.pm index e5c0133cf..f7942c45a 100644 --- a/perllib/FixMyStreet/App/Controller/Admin.pm +++ b/perllib/FixMyStreet/App/Controller/Admin.pm @@ -325,6 +325,32 @@ sub update_contacts : Private {          );          $c->stash->{updated} = _('Values updated'); +    } elsif ( $posted eq 'open311' ) { +        $c->forward('check_token'); + +        my %params = map { $_ => $c->req->param($_) } qw/open311_id endpoint jurisdiction api_key area_id/; + +        if ( $params{open311_id} ) { +            my $conf = $c->model('DB::Open311Conf')->find( { id => $params{open311_id} } ); + +            $conf->endpoint( $params{endpoint} ); +            $conf->jurisdiction( $params{jurisdiction} ); +            $conf->api_key( $params{api_key} ); + +            $conf->update(); + +            $c->stash->{updated} = _('Configuration updated'); +        } else { +            my $conf = $c->model('DB::Open311Conf')->find_or_new( { area_id => $params{area_id} } ); + +            $conf->endpoint( $params{endpoint} ); +            $conf->jurisdiction( $params{jurisdiction} ); +            $conf->api_key( $params{api_key} ); + +            $conf->insert(); + +            $c->stash->{updated} = _('Configuration updated - contacts will be generated automatically later'); +        }      }  } @@ -342,6 +368,12 @@ sub display_contacts : Private {      $c->stash->{contacts} = $contacts; +    my $open311 = $c->model('DB::Open311Conf')->search( +        { area_id => $area_id } +    ); + +    $c->stash->{open311} = $open311; +      if ( $c->req->param('text') && $c->req->param('text') == 1 ) {          $c->stash->{template} = 'admin/council_contacts.txt';          $c->res->content_type('text/plain; charset=utf-8'); diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index ffbb5a161..3c63d5c07 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -15,6 +15,7 @@ use Path::Class;  use Utils;  use mySociety::EmailUtil;  use mySociety::TempFiles; +use JSON;  =head1 NAME @@ -476,6 +477,7 @@ sub setup_categories_and_councils : Private {      my %area_ids_to_list = ();       # Areas with categories assigned      my @category_options = ();       # categories to show      my $category_label   = undef;    # what to call them +    my %category_extras  = ();       # extra fields to fill in for open311      # FIXME - implement in cobrand      if ( $c->cobrand->moniker eq 'emptyhomes' ) { @@ -522,8 +524,12 @@ sub setup_categories_and_councils : Private {              next if $contact->category eq _('Other'); -            push @category_options, $contact->category -                unless $seen{$contact->category}; +            unless ( $seen{$contact->category} ) { +                push @category_options, $contact->category; + +                $category_extras{ $contact->category } = $contact->extra +                    if $contact->extra; +            }              $seen{$contact->category} = 1;          } @@ -538,6 +544,8 @@ sub setup_categories_and_councils : Private {      $c->stash->{area_ids_to_list} = [ keys %area_ids_to_list ];      $c->stash->{category_label}   = $category_label;      $c->stash->{category_options} = \@category_options; +    $c->stash->{category_extras}  = \%category_extras; +    $c->stash->{category_extras_json}  = encode_json \%category_extras;      my @missing_details_councils =        grep { !$area_ids_to_list{$_} }    # @@ -716,6 +724,26 @@ sub process_report : Private {              if $council_string && @{ $c->stash->{missing_details_councils} };          $report->council($council_string); +        my @extra = (); +        my $metas = $contacts[0]->extra; + +        foreach my $field ( @$metas ) { +            if ( lc( $field->{required} ) eq 'true' ) { +                unless ( $c->request->param( $field->{code} ) ) { +                    $c->stash->{field_errors}->{ $field->{code} } = _('This information is required'); +                } +            } +            push @extra, { +                name => $field->{code}, +                description => $field->{description}, +                value => $c->request->param( $field->{code} ) || '', +            }; +        } + +        if ( @extra ) { +            $c->stash->{report_meta} = \@extra; +            $report->extra( \@extra ); +        }      } elsif ( @{ $c->stash->{area_ids_to_list} } ) {          # There was an area with categories, but we've not been given one. Bail. | 
