diff options
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Reports.pm | 5 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/FixMyStreet.pm | 74 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/IsleOfWight.pm | 34 | ||||
-rw-r--r-- | templates/email/isleofwight/confirm_report_sent.html (renamed from templates/email/isleofwight/other-reported.html) | 0 | ||||
-rw-r--r-- | templates/email/isleofwight/confirm_report_sent.txt (renamed from templates/email/isleofwight/other-reported.txt) | 0 |
5 files changed, 105 insertions, 8 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Reports.pm b/perllib/FixMyStreet/App/Controller/Reports.pm index 9b33b42b4..8e167a70d 100644 --- a/perllib/FixMyStreet/App/Controller/Reports.pm +++ b/perllib/FixMyStreet/App/Controller/Reports.pm @@ -165,10 +165,13 @@ sub ward : Path : Args(2) { $c->stash->{stats} = $c->cobrand->get_report_stats(); my @categories = $c->stash->{body}->contacts->not_deleted->search( undef, { - columns => [ 'id', 'category', 'extra' ], + columns => [ 'id', 'category', 'extra', 'body_id', 'send_method' ], distinct => 1, order_by => [ 'category' ], } )->all; + + $c->cobrand->call_hook('munge_reports_category_list', \@categories); + $c->stash->{filter_categories} = \@categories; $c->stash->{filter_category} = { map { $_ => 1 } $c->get_param_list('filter_category', 1) }; diff --git a/perllib/FixMyStreet/Cobrand/FixMyStreet.pm b/perllib/FixMyStreet/Cobrand/FixMyStreet.pm index 377253955..bfa991b09 100644 --- a/perllib/FixMyStreet/Cobrand/FixMyStreet.pm +++ b/perllib/FixMyStreet/Cobrand/FixMyStreet.pm @@ -38,6 +38,24 @@ sub restriction { return {}; } +sub munge_reports_categories_list { + my ($self, $categories) = @_; + + my %bodies = map { $_->body->name => $_->body } @$categories; + if ( $bodies{'Isle of Wight Council'} ) { + my $user = $self->{c}->user; + my $b = $bodies{'Isle of Wight Council'}; + + if ( $user && ( $user->is_superuser || $user->belongs_to_body( $b->id ) ) ) { + @$categories = grep { !$_->send_method || $_->send_method ne 'Triage' } @$categories; + return @$categories; + } + + @$categories = grep { $_->send_method && $_->send_method eq 'Triage' } @$categories; + return @$categories; + } +} + sub munge_category_list { my ($self, $options, $contacts, $extras) = @_; @@ -62,6 +80,62 @@ sub munge_category_list { } } +sub munge_load_and_group_problems { + my ($self, $where, $filter) = @_; + + return unless $where->{category} && $self->{c}->stash->{body}->name eq 'Isle of Wight Council'; + + my $cat_names = $self->expand_triage_cat_list($where->{category}); + + $where->{category} = $cat_names; + my $problems = $self->problems->search($where, $filter); + return $problems; +} + +sub expand_triage_cat_list { + my ($self, $categories) = @_; + + my $b = $self->{c}->stash->{body}; + + my $all_cats = $self->{c}->model('DB::Contact')->not_deleted->search( + { + body_id => $b->id, + send_method => [{ '!=', 'Triage'}, undef] + } + ); + + my %group_to_category; + while ( my $cat = $all_cats->next ) { + next unless $cat->get_extra_metadata('group'); + my $groups = $cat->get_extra_metadata('group'); + $groups = ref $groups eq 'ARRAY' ? $groups : [ $groups ]; + for my $group ( @$groups ) { + $group_to_category{$group} //= []; + push @{ $group_to_category{$group} }, $cat->category; + } + } + + my $cats = $self->{c}->model('DB::Contact')->not_deleted->search( + { + body_id => $b->id, + category => $categories + } + ); + + my @cat_names; + while ( my $cat = $cats->next ) { + if ( $cat->send_method && $cat->send_method eq 'Triage' ) { + # include the category itself + push @cat_names, $cat->category; + push @cat_names, @{ $group_to_category{$cat->category} } if $group_to_category{$cat->category}; + } else { + push @cat_names, $cat->category; + } + } + + return \@cat_names; +} + sub title_list { my $self = shift; my $areas = shift; diff --git a/perllib/FixMyStreet/Cobrand/IsleOfWight.pm b/perllib/FixMyStreet/Cobrand/IsleOfWight.pm index c8fc75eaa..dd4b936d7 100644 --- a/perllib/FixMyStreet/Cobrand/IsleOfWight.pm +++ b/perllib/FixMyStreet/Cobrand/IsleOfWight.pm @@ -88,6 +88,22 @@ sub open311_munge_update_params { } # this handles making sure the user sees the right categories on the new report page +sub munge_reports_category_list { + my ($self, $categories) = @_; + + my $user = $self->{c}->user; + my %bodies = map { $_->body->name => $_->body } @$categories; + my $b = $bodies{'Isle of Wight Council'}; + + if ( $user && ( $user->is_superuser || $user->belongs_to_body( $b->id ) ) ) { + @$categories = grep { !$_->send_method || $_->send_method ne 'Triage' } @$categories; + return @$categories; + } + + @$categories = grep { $_->send_method && $_->send_method eq 'Triage' } @$categories; + return @$categories; +} + sub munge_category_list { my ($self, $options, $contacts, $extras) = @_; @@ -129,9 +145,9 @@ sub munge_load_and_group_problems { return unless $where->{category}; - my @cat_names = $self->expand_triage_cat_list($where->{category}); + my $cat_names = $self->expand_triage_cat_list($where->{category}); - $where->{category} = \@cat_names; + $where->{category} = $cat_names; my $problems = $self->problems->search($where, $filter); return $problems; } @@ -142,8 +158,8 @@ sub munge_filter_category { my $c = $self->{c}; return unless $c->stash->{filter_category}; - my @cat_names = $self->expand_triage_cat_list([ keys %{$c->stash->{filter_category}} ]); - $c->stash->{filter_category} = { map { $_ => 1 } @cat_names }; + my $cat_names = $self->expand_triage_cat_list([ keys %{$c->stash->{filter_category}} ]); + $c->stash->{filter_category} = { map { $_ => 1 } @$cat_names }; } # this assumes that each Triage category has the same name as a group @@ -164,8 +180,12 @@ sub expand_triage_cat_list { my %group_to_category; while ( my $cat = $all_cats->next ) { next unless $cat->get_extra_metadata('group'); - $group_to_category{$cat->get_extra_metadata('group')} //= []; - push @{ $group_to_category{$cat->get_extra_metadata('group')} }, $cat->category; + my $groups = $cat->get_extra_metadata('group'); + $groups = ref $groups eq 'ARRAY' ? $groups : [ $groups ]; + for my $group ( @$groups ) { + $group_to_category{$group} //= []; + push @{ $group_to_category{$group} }, $cat->category; + } } my $cats = $self->{c}->model('DB::Contact')->not_deleted->search( @@ -186,7 +206,7 @@ sub expand_triage_cat_list { } } - return @cat_names; + return \@cat_names; } sub open311_get_update_munging { diff --git a/templates/email/isleofwight/other-reported.html b/templates/email/isleofwight/confirm_report_sent.html index 8e85c5729..8e85c5729 100644 --- a/templates/email/isleofwight/other-reported.html +++ b/templates/email/isleofwight/confirm_report_sent.html diff --git a/templates/email/isleofwight/other-reported.txt b/templates/email/isleofwight/confirm_report_sent.txt index a368bd95e..a368bd95e 100644 --- a/templates/email/isleofwight/other-reported.txt +++ b/templates/email/isleofwight/confirm_report_sent.txt |