diff options
-rw-r--r-- | CHANGELOG.md | 3 | ||||
-rw-r--r-- | conf/general.yml-docker | 6 | ||||
-rw-r--r-- | conf/general.yml-example | 4 | ||||
-rw-r--r-- | docs/customising/config.md | 9 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 4 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Reports.pm | 3 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/ResultSet/Problem.pm | 12 | ||||
-rw-r--r-- | templates/web/base/report/new/category_extras_fields.html | 11 |
9 files changed, 40 insertions, 14 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index d2933340d..8f43c9558 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,9 @@ - Fix saving of inspect form data offline. - Add CSRF and time to contact form. - Make sure admin metadata dropdown index numbers are updated too. + - Fix issue with Open311 codes starting with ‘_’. + - Development improvements: + - Make front page cache time configurable. * v2.5 (21st December 2018) - Front end improvements: diff --git a/conf/general.yml-docker b/conf/general.yml-docker index 5a447dbee..fb789daf5 100644 --- a/conf/general.yml-docker +++ b/conf/general.yml-docker @@ -95,7 +95,7 @@ PHOTO_STORAGE_OPTIONS: # it doesn't already exist. Requires the appropriate AWS # permissions. # REGION: 'eu-west-1' # optional, only used if CREATE_BUCKET is set. Controls -# which AWS region the S3 bucket will be created in. + # which AWS region the S3 bucket will be created in. # Location of MapIt, to map points to administrative areas, and what types of # area from it you want to use. If left blank, a default area will be used @@ -225,6 +225,10 @@ GAZE_URL: 'https://gaze.mysociety.org/gaze' # This can be safely left out and will default to '127.0.0.1' even if not present. MEMCACHED_HOST: 'memcached.svc' +# Cache timeout - integer, optional, default 3600s (1 hour) +# Used for cache of front page stats/recent list, and /reports max-age. +CACHE_TIMEOUT: 3600 + # Should problem reports link to the council summary pages? AREA_LINKS_FROM_PROBLEMS: '0' diff --git a/conf/general.yml-example b/conf/general.yml-example index 11902c0b3..8dd4d0a2f 100644 --- a/conf/general.yml-example +++ b/conf/general.yml-example @@ -221,6 +221,10 @@ GAZE_URL: 'https://gaze.mysociety.org/gaze' # This can be safely left out and will default to '127.0.0.1' even if not present. MEMCACHED_HOST: '127.0.0.1' +# Cache timeout - integer, optional, default 3600s (1 hour) +# Used for cache of front page stats/recent list, and /reports max-age. +CACHE_TIMEOUT: 3600 + # Should problem reports link to the council summary pages? AREA_LINKS_FROM_PROBLEMS: '0' diff --git a/docs/customising/config.md b/docs/customising/config.md index f9b2fc213..d83e00472 100644 --- a/docs/customising/config.md +++ b/docs/customising/config.md @@ -50,6 +50,7 @@ The following are all the configuration settings that you can change in `conf/ge * <code><a href="#open311_limit">OPEN311_LIMIT</a></code> * <code><a href="#all_reports_per_page">ALL_REPORTS_PER_PAGE</a></code> * <code><a href="#area_links_from_problems">AREA_LINKS_FROM_PROBLEMS</a></code> +* <code><a href="#cache_timeout">CACHE_TIMEOUT</a></code> ### URLs and directories @@ -1091,6 +1092,14 @@ ALLOWED_COBRANDS: </dd> <dt> + <a name="cache_timeout"><code>CACHE_TIMEOUT</code></a> + </dt> + <dd> + The time, in seconds, that the front page stats/recent list should be cached for. + Also used for the max-age of <code>/reports</code>. Defaults to 3600s (1 hour). + </dd> + + <dt> <a name="gaze_url"><code>GAZE_URL</code></a> </dt> <dd> diff --git a/perllib/FixMyStreet/App/Controller/Report.pm b/perllib/FixMyStreet/App/Controller/Report.pm index a7a3328dc..12f6ec1d1 100644 --- a/perllib/FixMyStreet/App/Controller/Report.pm +++ b/perllib/FixMyStreet/App/Controller/Report.pm @@ -373,7 +373,7 @@ sub inspect : Private { my $permissions = $c->stash->{_permissions}; $c->forward('/admin/categories_for_point'); - $c->stash->{report_meta} = { map { $_->{name} => $_ } @{ $c->stash->{problem}->get_extra_fields() } }; + $c->stash->{report_meta} = { map { 'x' . $_->{name} => $_ } @{ $c->stash->{problem}->get_extra_fields() } }; if ($c->cobrand->can('council_area_id')) { my $priorities_by_category = FixMyStreet::App->model('DB::ResponsePriority')->by_categories($c->cobrand->council_area_id, @{$c->stash->{contacts}}); diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index e6c4fe50d..2de1d8551 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -1078,7 +1078,7 @@ sub set_report_extras : Private { foreach my $field ( @$metas ) { if ( lc( $field->{required} ) eq 'true' && !$c->cobrand->category_extra_hidden($field)) { unless ( $c->get_param($param_prefix . $field->{code}) ) { - $c->stash->{field_errors}->{ $field->{code} } = _('This information is required'); + $c->stash->{field_errors}->{ 'x' . $field->{code} } = _('This information is required'); } } push @extra, { @@ -1093,7 +1093,7 @@ sub set_report_extras : Private { if ( scalar @$contacts ); if ( @extra ) { - $c->stash->{report_meta} = { map { $_->{name} => $_ } @extra }; + $c->stash->{report_meta} = { map { 'x' . $_->{name} => $_ } @extra }; $c->stash->{report}->set_extra_fields( @extra ); } } diff --git a/perllib/FixMyStreet/App/Controller/Reports.pm b/perllib/FixMyStreet/App/Controller/Reports.pm index 42f5ea288..975b2fdd5 100644 --- a/perllib/FixMyStreet/App/Controller/Reports.pm +++ b/perllib/FixMyStreet/App/Controller/Reports.pm @@ -74,7 +74,8 @@ sub index : Path : Args(0) { } # Down here so that error pages aren't cached. - $c->response->header('Cache-Control' => 'max-age=3600'); + my $max_age = FixMyStreet->config('CACHE_TIMEOUT') // 3600; + $c->response->header('Cache-Control' => 'max-age=' . $max_age); } =head2 display_body_stats diff --git a/perllib/FixMyStreet/DB/ResultSet/Problem.pm b/perllib/FixMyStreet/DB/ResultSet/Problem.pm index 676e721c2..37fc34057 100644 --- a/perllib/FixMyStreet/DB/ResultSet/Problem.pm +++ b/perllib/FixMyStreet/DB/ResultSet/Problem.pm @@ -67,6 +67,10 @@ sub to_body { # Front page statistics +sub _cache_timeout { + FixMyStreet->config('CACHE_TIMEOUT') // 3600; +} + sub recent_fixed { my $rs = shift; my $key = "recent_fixed:$site_key"; @@ -76,7 +80,7 @@ sub recent_fixed { state => [ FixMyStreet::DB::Result::Problem->fixed_states() ], lastupdate => { '>', \"current_timestamp-'1 month'::interval" }, } )->count; - Memcached::set($key, $result, 3600); + Memcached::set($key, $result, _cache_timeout()); } return $result; } @@ -90,7 +94,7 @@ sub number_comments { { 'comments.state' => 'confirmed' }, { join => 'comments' } )->count; - Memcached::set($key, $result, 3600); + Memcached::set($key, $result, _cache_timeout()); } return $result; } @@ -105,7 +109,7 @@ sub recent_new { state => [ FixMyStreet::DB::Result::Problem->visible_states() ], confirmed => { '>', \"current_timestamp-'$interval'::interval" }, } )->count; - Memcached::set($key, $result, 3600); + Memcached::set($key, $result, _cache_timeout()); } return $result; } @@ -157,7 +161,7 @@ sub _recent { $probs = [ grep { $_->photo && ! $_->is_hidden } @$probs ]; } else { $probs = [ $rs->search( $query, $attrs )->all ]; - Memcached::set($key, $probs, 3600); + Memcached::set($key, $probs, _cache_timeout()); } } diff --git a/templates/web/base/report/new/category_extras_fields.html b/templates/web/base/report/new/category_extras_fields.html index a634f8f72..df6129672 100644 --- a/templates/web/base/report/new/category_extras_fields.html +++ b/templates/web/base/report/new/category_extras_fields.html @@ -1,27 +1,28 @@ [%- FOR meta IN metas %] [%- meta_name = meta.code -%] + [%- x_meta_name = 'x' _ meta.code # For report_meta and field_erros lookup, as TT hides codes starting "_" -%] [% IF c.cobrand.category_extra_hidden(meta) AND NOT show_hidden %] - <input type="hidden" value="[% report_meta.$meta_name.value | html %]" name="[% cat_prefix %][% meta_name %]" id="[% cat_prefix %]form_[% meta_name %]"> + <input type="hidden" value="[% report_meta.$x_meta_name.value | html %]" name="[% cat_prefix %][% meta_name %]" id="[% cat_prefix %]form_[% meta_name %]"> [% ELSIF meta.variable != 'false' || NOT hide_notices %] <label for="[% cat_prefix %]form_[% meta_name %]">[% meta.description %]</label> [% TRY %][% INCLUDE 'report/new/_category_extra_field_notice.html' %][% CATCH file %][% END %] - [% IF field_errors.$meta_name %] - <p class='form-error'>[% field_errors.$meta_name %]</p> + [% IF field_errors.$x_meta_name %] + <p class='form-error'>[% field_errors.$x_meta_name %]</p> [% END -%] [% IF meta.variable != 'false' %] [% IF meta.exists('values') %] <select class="form-control" name="[% cat_prefix %][% meta_name %]" id="[% cat_prefix %]form_[% meta_name %]"[% meta.required == 'true' ? ' required' : '' %]> <option value="">[% loc('-- Pick an option --') %]</option> [% FOR option IN meta.values %] - <option value="[% option.key %]"[% IF option.key == report_meta.$meta_name.value %] selected[% END %]>[% option.name %]</option> + <option value="[% option.key %]"[% IF option.key == report_meta.$x_meta_name.value %] selected[% END %]>[% option.name %]</option> [% END %] </select> [% ELSE %] - <input class="form-control" type="[% meta.fieldtype OR 'text' %]" value="[% report_meta.$meta_name.value | html %]" name="[% cat_prefix %][% meta_name %]" id="[% cat_prefix %]form_[% meta_name %]"[% meta.required == 'true' ? ' required' : '' %]> + <input class="form-control" type="[% meta.fieldtype OR 'text' %]" value="[% report_meta.$x_meta_name.value | html %]" name="[% cat_prefix %][% meta_name %]" id="[% cat_prefix %]form_[% meta_name %]"[% meta.required == 'true' ? ' required' : '' %]> [% END %] [% END %] |