diff options
Diffstat (limited to 'perllib')
-rw-r--r-- | perllib/DBIx/Class/FixMyStreet/EncodedColumn.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 6 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/Bexley.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/FixMyStreet.pm | 47 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/IsleOfWight.pm | 16 | ||||
-rw-r--r-- | perllib/FixMyStreet/Cobrand/TfL.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/ResultSet/Contact.pm | 27 | ||||
-rw-r--r-- | perllib/FixMyStreet/Script/CreateSuperuser.pm | 20 |
8 files changed, 56 insertions, 66 deletions
diff --git a/perllib/DBIx/Class/FixMyStreet/EncodedColumn.pm b/perllib/DBIx/Class/FixMyStreet/EncodedColumn.pm index 3be6e4594..82e6e591e 100644 --- a/perllib/DBIx/Class/FixMyStreet/EncodedColumn.pm +++ b/perllib/DBIx/Class/FixMyStreet/EncodedColumn.pm @@ -10,7 +10,7 @@ sub set_column { my $self = shift; if ($_[0] eq 'password') { my $cobrand = $self->result_source->schema->cobrand; - if ($cobrand->moniker eq 'tfl') { + if ($cobrand && $cobrand->moniker eq 'tfl') { if (defined $_[1]) { if (defined $_[2]) { $self->set_extra_metadata(tfl_password => $_[1]); diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index 14aa7b83e..ef1905c98 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -690,11 +690,7 @@ sub setup_categories_and_bodies : Private { $c->cobrand->call_hook(munge_report_new_bodies => \%bodies); - my $contacts # - = $c # - ->model('DB::Contact') # - ->active - ->search( { 'me.body_id' => [ keys %bodies ] }, { prefetch => 'body' } ); + my $contacts = $c->model('DB::Contact')->for_new_reports($c, \%bodies); my @contacts = $c->cobrand->categories_restriction($contacts)->all_sorted; $c->cobrand->call_hook(munge_report_new_contacts => \@contacts); diff --git a/perllib/FixMyStreet/Cobrand/Bexley.pm b/perllib/FixMyStreet/Cobrand/Bexley.pm index 275d7dfaf..0586c18c4 100644 --- a/perllib/FixMyStreet/Cobrand/Bexley.pm +++ b/perllib/FixMyStreet/Cobrand/Bexley.pm @@ -212,7 +212,7 @@ sub dashboard_export_problems_add_columns { my %groups; if ($c->stash->{body}) { - %groups = FixMyStreet::DB->resultset('Contact')->active->search({ + %groups = FixMyStreet::DB->resultset('Contact')->search({ body_id => $c->stash->{body}->id, })->group_lookup; } diff --git a/perllib/FixMyStreet/Cobrand/FixMyStreet.pm b/perllib/FixMyStreet/Cobrand/FixMyStreet.pm index 97a0ab53a..a2dea1df4 100644 --- a/perllib/FixMyStreet/Cobrand/FixMyStreet.pm +++ b/perllib/FixMyStreet/Cobrand/FixMyStreet.pm @@ -131,51 +131,8 @@ sub munge_load_and_group_problems { return unless $where->{category} && $self->{c}->stash->{body}->name eq 'Isle of Wight Council'; - $where->{category} = $self->expand_triage_cat_list($where->{category}); -} - -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; + my $iow = FixMyStreet::Cobrand->get_class_for_moniker( 'isleofwight' )->new({ c => $self->{c} }); + $where->{category} = $iow->expand_triage_cat_list($where->{category}, $self->{c}->stash->{body}); } sub title_list { diff --git a/perllib/FixMyStreet/Cobrand/IsleOfWight.pm b/perllib/FixMyStreet/Cobrand/IsleOfWight.pm index a46b540ad..db0a20b9c 100644 --- a/perllib/FixMyStreet/Cobrand/IsleOfWight.pm +++ b/perllib/FixMyStreet/Cobrand/IsleOfWight.pm @@ -142,7 +142,7 @@ sub munge_load_and_group_problems { return unless $where->{category}; - $where->{category} = $self->expand_triage_cat_list($where->{category}); + $where->{category} = $self->_expand_triage_cat_list($where->{category}); } sub munge_around_filter_category_list { @@ -151,17 +151,21 @@ sub munge_around_filter_category_list { my $c = $self->{c}; return unless $c->stash->{filter_category}; - my $cat_names = $self->expand_triage_cat_list([ keys %{$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 }; } +sub _expand_triage_cat_list { + my ($self, $categories) = @_; + my $b = $self->{c}->model('DB::Body')->for_areas( $self->council_area_id )->first; + return $self->expand_triage_cat_list($categories, $b); +} + # this assumes that each Triage category has the same name as a group # and uses this to generate a list of categories that a triage category # could be triaged to sub expand_triage_cat_list { - my ($self, $categories) = @_; - - my $b = $self->{c}->model('DB::Body')->for_areas( $self->council_area_id )->first; + my ($self, $categories, $b) = @_; my $all_cats = $self->{c}->model('DB::Contact')->not_deleted->search( { @@ -190,7 +194,7 @@ sub expand_triage_cat_list { my @cat_names; while ( my $cat = $cats->next ) { - if ( $cat->send_method eq 'Triage' ) { + 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}; diff --git a/perllib/FixMyStreet/Cobrand/TfL.pm b/perllib/FixMyStreet/Cobrand/TfL.pm index d1cfb8d42..40c2a5257 100644 --- a/perllib/FixMyStreet/Cobrand/TfL.pm +++ b/perllib/FixMyStreet/Cobrand/TfL.pm @@ -244,7 +244,7 @@ sub dashboard_export_problems_add_columns { my %groups; if ($c->stash->{body}) { - %groups = FixMyStreet::DB->resultset('Contact')->active->search({ + %groups = FixMyStreet::DB->resultset('Contact')->search({ body_id => $c->stash->{body}->id, })->group_lookup; } diff --git a/perllib/FixMyStreet/DB/ResultSet/Contact.pm b/perllib/FixMyStreet/DB/ResultSet/Contact.pm index 1643f9931..eb502c190 100644 --- a/perllib/FixMyStreet/DB/ResultSet/Contact.pm +++ b/perllib/FixMyStreet/DB/ResultSet/Contact.pm @@ -17,7 +17,7 @@ Filter down to not deleted contacts (so active or inactive). sub not_deleted { my $rs = shift; - return $rs->search( { $rs->me('state') => { '!=' => 'deleted' } } ); + return $rs->search( { $rs->me('state') => { -not_in => [ 'deleted', 'staff' ] } } ); } sub active { @@ -25,6 +25,31 @@ sub active { $rs->search( { $rs->me('state') => [ 'unconfirmed', 'confirmed' ] } ); } +sub for_new_reports { + my ($rs, $c, $bodies) = @_; + my $params = { + $rs->me('body_id') => [ keys %$bodies ], + }; + + if ($c->user_exists && $c->user->from_body) { + # Everything normal OR staff state in the user body + $params->{'-or'} = [ + $rs->me('state') => [ 'unconfirmed', 'confirmed' ], + { + $rs->me('body_id') => $c->user->from_body->id, + $rs->me('state') => 'staff', + }, + ]; + } elsif ($c->user_exists && $c->user->is_superuser) { + # Everything normal OR any staff states + $params->{$rs->me('state')} = [ 'unconfirmed', 'confirmed', 'staff' ]; + } else { + $params->{$rs->me('state')} = [ 'unconfirmed', 'confirmed' ]; + } + + $rs->search($params, { prefetch => 'body' }); +} + sub translated { my $rs = shift; my $schema = $rs->result_source->schema; diff --git a/perllib/FixMyStreet/Script/CreateSuperuser.pm b/perllib/FixMyStreet/Script/CreateSuperuser.pm index 69d165abb..cbbea577a 100644 --- a/perllib/FixMyStreet/Script/CreateSuperuser.pm +++ b/perllib/FixMyStreet/Script/CreateSuperuser.pm @@ -7,19 +7,27 @@ use FixMyStreet; use FixMyStreet::DB; sub createsuperuser { - die "Specify a single email address and optionally password to create a superuser or grant superuser status to." if (@ARGV < 1 || @ARGV > 2); + my ($email, $password) = @_; - my $user = FixMyStreet::DB->resultset('User')->find_or_new({ email => $ARGV[0] }); + unless ($email) { + warn "Specify a single email address and optionally password to create a superuser or grant superuser status to.\n"; + return 1; + } + + my $user = FixMyStreet::DB->resultset('User')->find_or_new({ email => $email }); if ( !$user->in_storage ) { - die "Specify a password for this new user." if (@ARGV < 2); - $user->password($ARGV[1]); + unless ($password) { + warn "Specify a password for this new user.\n"; + return 1; + } + $user->password($password); $user->is_superuser(1); $user->insert; } else { $user->update({ is_superuser => 1 }); } print $user->email . " is now a superuser.\n"; + return 0; } - -1;
\ No newline at end of file +1; |