aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md3
-rw-r--r--conf/general.yml-docker6
-rw-r--r--conf/general.yml-example4
-rw-r--r--docs/customising/config.md9
-rw-r--r--perllib/FixMyStreet/App/Controller/Report.pm2
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm4
-rw-r--r--perllib/FixMyStreet/App/Controller/Reports.pm3
-rw-r--r--perllib/FixMyStreet/DB/ResultSet/Problem.pm12
-rw-r--r--templates/web/base/report/new/category_extras_fields.html11
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 %]