aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet')
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm6
-rw-r--r--perllib/FixMyStreet/Cobrand/Bexley.pm2
-rw-r--r--perllib/FixMyStreet/Cobrand/FixMyStreet.pm47
-rw-r--r--perllib/FixMyStreet/Cobrand/IsleOfWight.pm16
-rw-r--r--perllib/FixMyStreet/Cobrand/TfL.pm2
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/Contact.pm27
-rw-r--r--perllib/FixMyStreet/Script/CreateSuperuser.pm20
7 files changed, 55 insertions, 65 deletions
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;