diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Admin.pm | 49 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Admin/Stats.pm | 46 | ||||
-rwxr-xr-x | perllib/FixMyStreet/App/Controller/Status.pm | 2 | ||||
-rw-r--r-- | t/app/controller/admin.t | 10 | ||||
-rw-r--r-- | templates/web/base/admin/index.html | 9 | ||||
-rw-r--r-- | templates/web/base/admin/stats/index.html | 8 |
7 files changed, 68 insertions, 57 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 71fef3855..e2451c9d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ * Unreleased - Admin improvements: - order unsent reports by confirmed date + - Move stats from main admin index to stats index. - Bugfixes - Application user in Docker container can't install packages. #2914 - Look at all categories when sending reports. diff --git a/perllib/FixMyStreet/App/Controller/Admin.pm b/perllib/FixMyStreet/App/Controller/Admin.pm index f3d1b2e63..038cba9e5 100644 --- a/perllib/FixMyStreet/App/Controller/Admin.pm +++ b/perllib/FixMyStreet/App/Controller/Admin.pm @@ -61,12 +61,15 @@ Displays some summary information for the requests. sub index : Path : Args(0) { my ( $self, $c ) = @_; - if ($c->cobrand->moniker eq 'zurich' && $c->stash->{admin_type} ne 'super') { - return $c->cobrand->admin(); + if ($c->cobrand->moniker eq 'zurich') { + if ($c->stash->{admin_type} eq 'super') { + $c->forward('/admin/stats/gather'); + return 1; + } else { + return $c->cobrand->admin(); + } } - $c->forward('/admin/stats/state'); - my @unsent = $c->cobrand->problems->search( { state => [ FixMyStreet::DB::Result::Problem::open_states() ], whensent => undef, @@ -79,44 +82,6 @@ sub index : Path : Args(0) { } )->all; $c->stash->{unsent_reports} = \@unsent; - my $alerts = $c->model('DB::Alert')->summary_report_alerts( $c->cobrand->restriction ); - - my %alert_counts = - map { $_->confirmed => $_->get_column('confirmed_count') } $alerts->all; - - $alert_counts{0} ||= 0; - $alert_counts{1} ||= 0; - - $c->stash->{alerts} = \%alert_counts; - - my $contacts = $c->model('DB::Contact')->summary_count(); - - my %contact_counts = - map { $_->state => $_->get_column('state_count') } $contacts->all; - - $contact_counts{confirmed} ||= 0; - $contact_counts{unconfirmed} ||= 0; - $contact_counts{total} = $contact_counts{confirmed} + $contact_counts{unconfirmed}; - - $c->stash->{contacts} = \%contact_counts; - - my $questionnaires = $c->model('DB::Questionnaire')->summary_count( $c->cobrand->restriction ); - - my %questionnaire_counts = map { - $_->get_column('answered') => $_->get_column('questionnaire_count') - } $questionnaires->all; - $questionnaire_counts{1} ||= 0; - $questionnaire_counts{0} ||= 0; - - $questionnaire_counts{total} = - $questionnaire_counts{0} + $questionnaire_counts{1}; - $c->stash->{questionnaires_pc} = - $questionnaire_counts{total} - ? sprintf( '%.1f', - $questionnaire_counts{1} / $questionnaire_counts{total} * 100 ) - : _('n/a'); - $c->stash->{questionnaires} = \%questionnaire_counts; - $c->forward('fetch_all_bodies'); return 1; diff --git a/perllib/FixMyStreet/App/Controller/Admin/Stats.pm b/perllib/FixMyStreet/App/Controller/Admin/Stats.pm index 5f82094d6..03b529a55 100644 --- a/perllib/FixMyStreet/App/Controller/Admin/Stats.pm +++ b/perllib/FixMyStreet/App/Controller/Admin/Stats.pm @@ -7,6 +7,52 @@ BEGIN { extends 'Catalyst::Controller'; } sub index : Path : Args(0) { my ( $self, $c ) = @_; return $c->cobrand->admin_stats() if $c->cobrand->moniker eq 'zurich'; + $c->forward('gather'); +} + +sub gather : Private { + my ($self, $c) = @_; + + $c->forward('state'); # Problem/update stats used on that page + $c->forward('/admin/fetch_all_bodies'); # For body stat + + my $alerts = $c->model('DB::Alert')->summary_report_alerts( $c->cobrand->restriction ); + + my %alert_counts = + map { $_->confirmed => $_->get_column('confirmed_count') } $alerts->all; + + $alert_counts{0} ||= 0; + $alert_counts{1} ||= 0; + + $c->stash->{alerts} = \%alert_counts; + + my $contacts = $c->model('DB::Contact')->summary_count(); + + my %contact_counts = + map { $_->state => $_->get_column('state_count') } $contacts->all; + + $contact_counts{confirmed} ||= 0; + $contact_counts{unconfirmed} ||= 0; + $contact_counts{total} = $contact_counts{confirmed} + $contact_counts{unconfirmed}; + + $c->stash->{contacts} = \%contact_counts; + + my $questionnaires = $c->model('DB::Questionnaire')->summary_count( $c->cobrand->restriction ); + + my %questionnaire_counts = map { + $_->get_column('answered') => $_->get_column('questionnaire_count') + } $questionnaires->all; + $questionnaire_counts{1} ||= 0; + $questionnaire_counts{0} ||= 0; + + $questionnaire_counts{total} = + $questionnaire_counts{0} + $questionnaire_counts{1}; + $c->stash->{questionnaires_pc} = + $questionnaire_counts{total} + ? sprintf( '%.1f', + $questionnaire_counts{1} / $questionnaire_counts{total} * 100 ) + : _('n/a'); + $c->stash->{questionnaires} = \%questionnaire_counts; } sub state : Local : Args(0) { diff --git a/perllib/FixMyStreet/App/Controller/Status.pm b/perllib/FixMyStreet/App/Controller/Status.pm index 57c8f362e..e56a7930a 100755 --- a/perllib/FixMyStreet/App/Controller/Status.pm +++ b/perllib/FixMyStreet/App/Controller/Status.pm @@ -31,7 +31,7 @@ sub index : Path : Args(0) { # superusers. It doesn't have anything sensitive $c->stash->{admin_type} = 'super'; # Fetch summary stats from admin front page - $c->forward('/admin/index'); + $c->forward('/admin/stats/gather'); # Fetch git version $c->forward('/admin/config_page'); diff --git a/t/app/controller/admin.t b/t/app/controller/admin.t index b170633fc..5607f2dc3 100644 --- a/t/app/controller/admin.t +++ b/t/app/controller/admin.t @@ -84,10 +84,10 @@ subtest 'check summary counts' => sub { FixMyStreet::override_config { ALLOWED_COBRANDS => [ 'fixmystreet' ], }, sub { - $mech->get_ok('/admin'); + $mech->get_ok('/admin/stats'); }; - $mech->title_like(qr/Summary/); + $mech->title_like(qr/Stats/); $mech->content_contains( "$problem_count</strong> live problems" ); $mech->content_contains( "$a_count confirmed alerts" ); @@ -102,8 +102,8 @@ subtest 'check summary counts' => sub { }, sub { ok $mech->host('oxfordshire.fixmystreet.com'); - $mech->get_ok('/admin'); - $mech->title_like(qr/Summary/); + $mech->get_ok('/admin/stats'); + $mech->title_like(qr/Stats/); my ($num_live) = $mech->content =~ /(\d+)<\/strong> live problems/; my ($num_alerts) = $mech->content =~ /(\d+) confirmed alerts/; @@ -116,7 +116,7 @@ subtest 'check summary counts' => sub { $alert->cobrand('oxfordshire'); $alert->update; - $mech->get_ok('/admin'); + $mech->get_ok('/admin/stats'); $mech->content_contains( ($num_live+1) . "</strong> live problems" ); $mech->content_contains( ($num_alerts+1) . " confirmed alerts" ); diff --git a/templates/web/base/admin/index.html b/templates/web/base/admin/index.html index 5a469b08e..88c7ff959 100644 --- a/templates/web/base/admin/index.html +++ b/templates/web/base/admin/index.html @@ -74,13 +74,4 @@ and to receive notices of updates. </table> [% END %] -<h2>[% loc('Stats') %]</h2> -[% INCLUDE 'status/stats.html' admin_include_users=1 %] - -[% IF c.cobrand.admin_show_creation_graph -%] - <p> - <a href="[% c.config.BASE_URL %]/fms-live-creation.png" class="admin-offsite-link">[% loc('Graph of problem creation by status over time') %]</a> - </p> -[% END -%] - [% INCLUDE 'admin/footer.html' %] diff --git a/templates/web/base/admin/stats/index.html b/templates/web/base/admin/stats/index.html index 452af001e..e6ba5e054 100644 --- a/templates/web/base/admin/stats/index.html +++ b/templates/web/base/admin/stats/index.html @@ -1,5 +1,13 @@ [% INCLUDE 'admin/header.html' title=loc('Stats') %] +[% INCLUDE 'status/stats.html' admin_include_users=1 %] + +[% IF c.cobrand.admin_show_creation_graph -%] + <p> + <a href="[% c.config.BASE_URL %]/fms-live-creation.png" class="admin-offsite-link">[% loc('Graph of problem creation by status over time') %]</a> + </p> +[% END -%] + <ul> <li><a href="[% c.uri_for_action('admin/stats/questionnaire') %]">[% loc('Survey Results') %]</a></li> <li><a href="[% c.uri_for_action('admin/stats/state') %]">[% loc('Problem breakdown by state') %]</a></li> |