aboutsummaryrefslogtreecommitdiffstats
path: root/templates
diff options
context:
space:
mode:
Diffstat (limited to 'templates')
-rw-r--r--templates/email/bromley/confirm_report_sent.html1
-rw-r--r--templates/email/bromley/confirm_report_sent.txt1
-rw-r--r--templates/email/default/_email_comment_list.html2
-rw-r--r--templates/email/default/_email_comment_list.txt2
-rw-r--r--templates/email/default/submit-example.txt2
-rw-r--r--templates/email/default/submit.html8
-rw-r--r--templates/email/default/submit.txt5
-rw-r--r--templates/email/fixamingata/_email_comment_list.html2
-rw-r--r--templates/email/fixmystreet.com/_submit_footer.html12
-rw-r--r--templates/email/fixmystreet.com/bathnes/submit-street-light-fault.html2
-rw-r--r--templates/email/fixmystreet.com/bathnes/submit-street-light-fault.txt2
-rw-r--r--templates/email/fixmystreet.com/submit.html11
-rw-r--r--templates/email/fixmystreet.com/submit.txt5
-rw-r--r--templates/email/hackney/_email_bottom.html28
-rw-r--r--templates/email/hackney/_email_color_overrides.html25
-rw-r--r--templates/email/hackney/_email_setting_overrides.html7
-rw-r--r--templates/email/hackney/signature.txt2
-rw-r--r--templates/email/hackney/site-name.txt1
-rw-r--r--templates/email/hounslow/submit.html3
-rw-r--r--templates/email/hounslow/submit.txt2
-rw-r--r--templates/email/oxfordshire/submit.html74
-rw-r--r--templates/email/oxfordshire/submit.txt50
-rw-r--r--templates/email/tfl/submit.html3
-rw-r--r--templates/email/tfl/submit.txt2
-rw-r--r--templates/email/zurich/problem-confirm.txt4
-rw-r--r--templates/web/base/admin/bodies/_category_field.html5
-rw-r--r--templates/web/base/admin/bodies/contact-form.html35
-rw-r--r--templates/web/base/admin/extra-metadata-item.html1
-rw-r--r--templates/web/base/admin/report-category.html8
-rw-r--r--templates/web/base/admin/reports/edit.html15
-rw-r--r--templates/web/base/admin/templates/_external.html12
-rw-r--r--templates/web/base/admin/templates/edit.html13
-rw-r--r--templates/web/base/admin/triage/_inspect.html1
-rw-r--r--templates/web/base/admin/triage/_list-filters.html5
-rw-r--r--templates/web/base/admin/users/_form_details.html33
-rw-r--r--templates/web/base/admin/users/form.html55
-rw-r--r--templates/web/base/admin/users/index.html6
-rw-r--r--templates/web/base/admin/users/log.html2
-rw-r--r--templates/web/base/alert/_list.html1
-rw-r--r--templates/web/base/alert/updates.html2
-rw-r--r--templates/web/base/around/postcode_form.html2
-rw-r--r--templates/web/base/auth/form_extra.html0
-rw-r--r--templates/web/base/auth/generate_token.html13
-rw-r--r--templates/web/base/common_scripts.html2
-rw-r--r--templates/web/base/contact/enquiry/index.html7
-rw-r--r--templates/web/base/contact/index.html2
-rw-r--r--templates/web/base/dashboard/heatmap-list.html8
-rwxr-xr-xtemplates/web/base/dashboard/heatmap.html10
-rw-r--r--templates/web/base/dashboard/index.html4
-rw-r--r--templates/web/base/dashboard/status.html68
-rw-r--r--templates/web/base/js/translation_strings.html2
-rw-r--r--templates/web/base/maps/fms.html12
-rw-r--r--templates/web/base/maps/google-ol.html9
-rw-r--r--templates/web/base/maps/openlayers.html6
-rw-r--r--templates/web/base/maps/osm.html8
-rw-r--r--templates/web/base/my/anonymize.html2
-rw-r--r--templates/web/base/my/my.html2
-rw-r--r--templates/web/base/offline/service_worker.html27
-rw-r--r--templates/web/base/questionnaire/index.html29
-rw-r--r--templates/web/base/report/_council_sent_info.html2
-rw-r--r--templates/web/base/report/_inspect.html11
-rw-r--r--templates/web/base/report/_item.html25
-rw-r--r--templates/web/base/report/_item_expandable.html4
-rw-r--r--templates/web/base/report/_report_meta_info.html2
-rw-r--r--templates/web/base/report/_update_state.html8
-rw-r--r--templates/web/base/report/display.html3
-rw-r--r--templates/web/base/report/display_tools.html5
-rw-r--r--templates/web/base/report/form/photo_upload.html24
-rw-r--r--templates/web/base/report/form/submit.html2
-rw-r--r--templates/web/base/report/form/user_loggedout_by_email.html67
-rw-r--r--templates/web/base/report/form/user_loggedout_email.html11
-rw-r--r--templates/web/base/report/inspect/extra_details.html12
-rw-r--r--templates/web/base/report/inspect/information.html11
-rw-r--r--templates/web/base/report/inspect/public_update.html3
-rw-r--r--templates/web/base/report/new/_category_select.html1
-rw-r--r--templates/web/base/report/new/category.html2
-rw-r--r--templates/web/base/report/new/category_extras_fields.html2
-rw-r--r--templates/web/base/report/new/form_report.html1
-rw-r--r--templates/web/base/report/new/form_user_loggedin.html10
-rw-r--r--templates/web/base/report/new/login_success_form.html2
-rw-r--r--templates/web/base/report/new/oauth_email_form.html2
-rw-r--r--templates/web/base/report/update.html4
-rw-r--r--templates/web/base/report/update/form_state_checkbox.html2
-rw-r--r--templates/web/base/report/update/form_update.html29
-rw-r--r--templates/web/base/report/update/form_user_loggedin.html13
-rw-r--r--templates/web/base/report/updates.html2
-rw-r--r--templates/web/base/reports/_body_name.html1
-rw-r--r--templates/web/base/reports/_list-filters.html4
-rwxr-xr-xtemplates/web/base/reports/body.html7
-rw-r--r--templates/web/base/waste/bin_days.html105
-rw-r--r--templates/web/base/waste/confirmation.html34
-rw-r--r--templates/web/base/waste/enquiry.html33
-rw-r--r--templates/web/base/waste/govuk/fields.html250
-rw-r--r--templates/web/base/waste/index.html19
-rw-r--r--templates/web/base/waste/missing.html22
-rw-r--r--templates/web/base/waste/summary.html70
-rw-r--r--templates/web/base/waste/summary_enquiry.html19
-rw-r--r--templates/web/base/waste/summary_report.html19
-rw-r--r--templates/web/base/waste/summary_request.html20
-rw-r--r--templates/web/bathnes/contact/index.html2
-rw-r--r--templates/web/bathnes/footer_extra.html2
-rw-r--r--templates/web/bathnes/footer_extra_js.html9
-rw-r--r--templates/web/bathnes/header_site.html2
-rw-r--r--templates/web/bathnes/report/_council_sent_info.html2
-rw-r--r--templates/web/bexley/footer_extra_js.html2
-rw-r--r--templates/web/borsetshire/auth/_general_top.html34
-rw-r--r--templates/web/borsetshire/footer_extra_js.html6
-rw-r--r--templates/web/bristol/footer_extra_js.html2
-rwxr-xr-xtemplates/web/bromley/about/faq-en-gb.html13
-rw-r--r--templates/web/bromley/admin/category-checkboxes.html22
-rw-r--r--templates/web/bromley/admin/templates/_external.html24
-rw-r--r--templates/web/bromley/footer.html7
-rw-r--r--templates/web/bromley/footer_extra_js.html2
-rw-r--r--templates/web/bromley/front/pre-steps.html2
-rw-r--r--templates/web/bromley/header_extra.html1
-rw-r--r--templates/web/bromley/header_logo.html68
-rw-r--r--templates/web/bromley/report/_updates_disallowed_message.html21
-rw-r--r--templates/web/bromley/report/form/user_loggedout_email.html11
-rw-r--r--templates/web/bromley/waste/enquiry-problem.html29
-rw-r--r--templates/web/bromley/waste/services.html39
-rw-r--r--templates/web/bromley/waste/services_extra.html15
-rw-r--r--templates/web/buckinghamshire/footer_extra_js.html2
-rw-r--r--templates/web/buckinghamshire/front/pre-steps.html2
-rw-r--r--templates/web/cheshireeast/about/privacy.html362
-rw-r--r--templates/web/cheshireeast/footer_extra_js.html2
-rw-r--r--templates/web/cheshireeast/report/_council_sent_info.html2
-rw-r--r--templates/web/eastherts/about/faq-en-gb.html5
-rw-r--r--templates/web/fixamingata/about/_sidebar.html0
-rw-r--r--templates/web/fixamingata/about/accessibility.html11
-rwxr-xr-xtemplates/web/fixamingata/about/council.html7
-rwxr-xr-xtemplates/web/fixamingata/about/faq-sv.html9
-rwxr-xr-xtemplates/web/fixamingata/about/privacy.html14
-rw-r--r--templates/web/fixamingata/footer_extra.html6
-rwxr-xr-xtemplates/web/fixmystreet-uk-councils/about/faq-en-gb.html251
-rw-r--r--templates/web/fixmystreet-uk-councils/about/privacy.html378
-rw-r--r--templates/web/fixmystreet-uk-councils/admin/bodies/_updates_disallowed_hint.html9
l---------templates/web/fixmystreet-uk-councils/around/location_error.html1
-rw-r--r--templates/web/fixmystreet-uk-councils/auth/form_extra.html4
-rw-r--r--templates/web/fixmystreet-uk-councils/footer_extra_js_base.html5
-rwxr-xr-xtemplates/web/fixmystreet.com/about/privacy.html8
-rw-r--r--templates/web/fixmystreet.com/around/location_error.html31
-rw-r--r--templates/web/fixmystreet.com/auth/form_extra.html4
-rw-r--r--templates/web/fixmystreet.com/contact/address.html4
-rw-r--r--templates/web/fixmystreet.com/footer_extra.html7
-rw-r--r--templates/web/fixmystreet.com/footer_extra_js.html1
-rw-r--r--templates/web/fixmystreet.com/report/_report_meta_info.html2
-rw-r--r--templates/web/fixmystreet.com/report/_updates_disallowed_message.html2
-rw-r--r--templates/web/fixmystreet.com/report/update/form_state_checkbox.html2
-rw-r--r--templates/web/greenwich/about/faq-en-gb.html5
-rw-r--r--templates/web/hackney/around/intro.html5
-rw-r--r--templates/web/hackney/auth/general.html88
-rw-r--r--templates/web/hackney/footer_extra.html10
-rw-r--r--templates/web/hackney/footer_extra_js.html7
-rw-r--r--templates/web/hackney/header_extra.html2
-rw-r--r--templates/web/hackney/report/form/user.html29
-rw-r--r--templates/web/hackney/site-name.html1
-rw-r--r--templates/web/hackney/tracking_code.html11
-rwxr-xr-xtemplates/web/hart/about/faq-en-gb.html5
-rw-r--r--templates/web/hart/around/intro.html2
-rw-r--r--templates/web/highwaysengland/report/new/inline-tips.html8
-rw-r--r--templates/web/highwaysengland/report/new/roads_message.html7
-rw-r--r--templates/web/highwaysengland/report/new/top_message.html6
-rw-r--r--templates/web/hounslow/about/mapterms.html2
-rw-r--r--templates/web/hounslow/footer_extra_js.html2
-rw-r--r--templates/web/hounslow/front/stats.html40
-rw-r--r--templates/web/hounslow/report/_council_sent_info.html2
-rw-r--r--templates/web/hounslow/reports/_body_name.html1
-rw-r--r--templates/web/isleofwight/about/mapterms.html2
-rw-r--r--templates/web/isleofwight/footer_extra_js.html2
-rw-r--r--templates/web/isleofwight/report/_council_sent_info.html2
-rw-r--r--templates/web/isleofwight/report/_item_heading.html2
-rw-r--r--templates/web/isleofwight/reports/_body_name.html1
-rw-r--r--templates/web/lincolnshire/footer_extra_js.html2
-rw-r--r--templates/web/northamptonshire/footer_extra_js.html2
-rw-r--r--templates/web/northamptonshire/report/_council_sent_info.html2
-rw-r--r--templates/web/oxfordshire/footer_extra_js.html2
-rw-r--r--templates/web/oxfordshire/report/_council_sent_info.html27
-rw-r--r--templates/web/oxfordshire/report/_main_sent_info.html2
-rw-r--r--templates/web/oxfordshire/report/inspect/_extra_details_field.html35
-rw-r--r--templates/web/oxfordshire/report/inspect/_raise_defect.html107
-rw-r--r--templates/web/oxfordshire/report/new/roads_message.html13
-rw-r--r--templates/web/peterborough/admin/bodies/_category_field.html21
-rw-r--r--templates/web/peterborough/footer_extra_js.html2
-rw-r--r--templates/web/peterborough/report/_council_sent_info.html2
-rw-r--r--templates/web/rutland/about/faq-en-gb.html2
-rw-r--r--templates/web/stevenage/about/faq-en-gb.html5
-rw-r--r--templates/web/tfl/front/pre-steps.html13
-rw-r--r--templates/web/tfl/report/_council_sent_info.html2
-rw-r--r--templates/web/westminster/footer_extra_js.html2
-rw-r--r--templates/web/zurich/admin/_index_table.html17
-rw-r--r--templates/web/zurich/admin/index-dm.html27
-rw-r--r--templates/web/zurich/admin/index-sdm.html26
-rw-r--r--templates/web/zurich/admin/problem_row.html7
-rw-r--r--templates/web/zurich/admin/report_edit-sdm.html14
-rw-r--r--templates/web/zurich/admin/reports/edit.html6
-rw-r--r--templates/web/zurich/admin/reports/index.html19
-rw-r--r--templates/web/zurich/admin/users/form.html43
-rw-r--r--templates/web/zurich/header.html13
-rw-r--r--templates/web/zurich/maps/zurich.html5
-rw-r--r--templates/web/zurich/report/banner.html2
-rw-r--r--templates/web/zurich/report/new/fill_in_details_form.html11
201 files changed, 2581 insertions, 1064 deletions
diff --git a/templates/email/bromley/confirm_report_sent.html b/templates/email/bromley/confirm_report_sent.html
new file mode 100644
index 000000000..5a0c19f0d
--- /dev/null
+++ b/templates/email/bromley/confirm_report_sent.html
@@ -0,0 +1 @@
+[% INCLUDE 'other-reported.html' %] \ No newline at end of file
diff --git a/templates/email/bromley/confirm_report_sent.txt b/templates/email/bromley/confirm_report_sent.txt
new file mode 100644
index 000000000..72fe01f6d
--- /dev/null
+++ b/templates/email/bromley/confirm_report_sent.txt
@@ -0,0 +1 @@
+[% INCLUDE 'other-reported.txt' %] \ No newline at end of file
diff --git a/templates/email/default/_email_comment_list.html b/templates/email/default/_email_comment_list.html
index 346efadfb..fe6cd5c4c 100644
--- a/templates/email/default/_email_comment_list.html
+++ b/templates/email/default/_email_comment_list.html
@@ -5,7 +5,7 @@
<img style="[% list_item_photo_style %]" src="[% inline_image(update.get_first_image_fp) %]" alt="">
</a>
[%~ END %]
- [% update.item_text | html_para | replace('<p>', '<p style="' _ list_item_p_style _ '">') %]
+ [% email_sanitize_html(update) | html_para | replace('<p>', '<p style="' _ list_item_p_style _ '">') %]
<p style="[% list_item_date_style %]">
[%~ update.item_name | html IF update.item_name AND NOT update.item_anonymous -%]
[% '(' _ cobrand.prettify_dt(update.confirmed) _ ') ' IF cobrand.include_time_in_update_alerts -%]
diff --git a/templates/email/default/_email_comment_list.txt b/templates/email/default/_email_comment_list.txt
index dbf00640f..3e01580c3 100644
--- a/templates/email/default/_email_comment_list.txt
+++ b/templates/email/default/_email_comment_list.txt
@@ -1,7 +1,7 @@
[% FOR row IN data -%]
[% row.item_name _ ' : ' IF row.item_name AND NOT row.item_anonymous -%]
[% '(' _ cobrand.prettify_dt(row.confirmed) _ ') ' IF cobrand.include_time_in_update_alerts -%]
-[% row.item_text %]
+[% email_sanitize_text(row) %]
------
diff --git a/templates/email/default/submit-example.txt b/templates/email/default/submit-example.txt
index 1d9db23d3..8927914d5 100644
--- a/templates/email/default/submit-example.txt
+++ b/templates/email/default/submit-example.txt
@@ -46,7 +46,7 @@ Replies to this email will go to the user who submitted the problem.
Yours,
The FixMyStreet team
-This message was sent via FixMyStreet, a project of UKCOD,
+This message was sent via FixMyStreet, a project of mySociety,
registered charity number 1076346. If there is a more appropriate
email address for messages about 'Potholes', please let us know by
visiting <https://www.fixmystreet.com/contact>. This will help
diff --git a/templates/email/default/submit.html b/templates/email/default/submit.html
index 0fed5770f..e08a31b5a 100644
--- a/templates/email/default/submit.html
+++ b/templates/email/default/submit.html
@@ -49,6 +49,14 @@ of a local problem that they believe might require your attention.</p>
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
<p style="[% secondary_p_style %]">[% report.category | html %]</p>
<p style="[% secondary_p_style %]">[% report.detail | html %]</p>
+ [% IF report.get_extra_fields %]
+ <p style="[% secondary_p_style %]">
+ [%~ FOR field IN report.get_extra_fields %][% IF field.value %]
+ [% field.description %]: [% field.value %]
+ [% IF NOT loop.last %]<br>[% END %]
+ [%~ END %][% END %]
+ </p>
+ [% END %]
<p style="[% secondary_p_style %]">
<strong>Location:</strong>
<a href="[% osm_url %]" title="View OpenStreetMap of this location">
diff --git a/templates/email/default/submit.txt b/templates/email/default/submit.txt
index f08e723a8..b380825e4 100644
--- a/templates/email/default/submit.txt
+++ b/templates/email/default/submit.txt
@@ -25,6 +25,11 @@ Subject: [% report.title %]
Details: [% report.detail %]
+[% FOR field IN report.get_extra_fields %][% IF field.value ~%]
+[% field.description %]: [% field.value %]
+
+[% END %][% END ~%]
+
Latitude: [% report.latitude %]
Longitude: [% report.longitude %]
diff --git a/templates/email/fixamingata/_email_comment_list.html b/templates/email/fixamingata/_email_comment_list.html
index 346efadfb..fe6cd5c4c 100644
--- a/templates/email/fixamingata/_email_comment_list.html
+++ b/templates/email/fixamingata/_email_comment_list.html
@@ -5,7 +5,7 @@
<img style="[% list_item_photo_style %]" src="[% inline_image(update.get_first_image_fp) %]" alt="">
</a>
[%~ END %]
- [% update.item_text | html_para | replace('<p>', '<p style="' _ list_item_p_style _ '">') %]
+ [% email_sanitize_html(update) | html_para | replace('<p>', '<p style="' _ list_item_p_style _ '">') %]
<p style="[% list_item_date_style %]">
[%~ update.item_name | html IF update.item_name AND NOT update.item_anonymous -%]
[% '(' _ cobrand.prettify_dt(update.confirmed) _ ') ' IF cobrand.include_time_in_update_alerts -%]
diff --git a/templates/email/fixmystreet.com/_submit_footer.html b/templates/email/fixmystreet.com/_submit_footer.html
index 0da75a3b7..9a53c942d 100644
--- a/templates/email/fixmystreet.com/_submit_footer.html
+++ b/templates/email/fixmystreet.com/_submit_footer.html
@@ -2,13 +2,15 @@
<tr>
<th style="[% td_style %] padding: [% column_padding %]px; background-color: [% color_yellow %]; color: [% color_black %];">
<h2 style="[% h2_style %] margin-bottom: 15px;">
- In-depth stats from our new, exclusive dashboard
+ FixMyStreet Pro is making savings for authorities across the UK
</h2>
<p style="margin: 0;">
- What do people report most in your area?
- How’s your response rate?
- And how do you compare to other UK councils?
- <a href="https://www.fixmystreet.com/about/council-dashboard/?utm_source=council_submit_email&amp;utm_content=[% "View FixMyStreet stats for your area" | uri %]&amp;utm_medium=email&amp;utm_campaign=fms_stats_dashboard_promo">View FixMyStreet stats for your area.</a>
+ <a href="https://www.fixmystreet.com/pro/take-a-tour/webinar-schedule/?utm_source=council_submit_email&amp;utm_content=[% "Join one of our regular informal webinars" | uri %]&amp;utm_medium=email&amp;utm_campaign=fms_webinars_promo">
+ Join one of our regular informal webinars
+ </a> to discover how FixMyStreet Pro
+ integrates with your existing systems,
+ drives channel shift,
+ and saves you money from day one.
</p>
</th>
</tr>
diff --git a/templates/email/fixmystreet.com/bathnes/submit-street-light-fault.html b/templates/email/fixmystreet.com/bathnes/submit-street-light-fault.html
index 8af8ea1b0..61aa9af34 100644
--- a/templates/email/fixmystreet.com/bathnes/submit-street-light-fault.html
+++ b/templates/email/fixmystreet.com/bathnes/submit-street-light-fault.html
@@ -48,8 +48,6 @@
<td>[% url %]</td>
</tr>
</table>
-[% additional_information %]
-
<h2>Location Details</h2>
diff --git a/templates/email/fixmystreet.com/bathnes/submit-street-light-fault.txt b/templates/email/fixmystreet.com/bathnes/submit-street-light-fault.txt
index a860c0a34..20a2aeb4f 100644
--- a/templates/email/fixmystreet.com/bathnes/submit-street-light-fault.txt
+++ b/templates/email/fixmystreet.com/bathnes/submit-street-light-fault.txt
@@ -24,8 +24,6 @@ Title: [% title %]
Description: [% detail %]
-[% additional_information %]
-
[% url %]
Location Details
diff --git a/templates/email/fixmystreet.com/submit.html b/templates/email/fixmystreet.com/submit.html
index f8b2db0dc..1d40f1eb6 100644
--- a/templates/email/fixmystreet.com/submit.html
+++ b/templates/email/fixmystreet.com/submit.html
@@ -49,9 +49,14 @@ of a local problem that they believe might require your attention.</p>
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
<p style="[% secondary_p_style %]"><strong>Category:</strong> [% report.category | html %]</p>
<p style="[% secondary_p_style %]">[% report.detail | html %]</p>
- [%~ IF additional_information %]
- <p style="[% secondary_p_style %]">[% additional_information %]</p>
- [%~ END %]
+ [% IF report.get_extra_fields %]
+ <p style="[% secondary_p_style %]">
+ [%~ FOR field IN report.get_extra_fields %][% IF field.value %]
+ [% field.description %]: [% field.value %]
+ [% IF NOT loop.last %]<br>[% END %]
+ [%~ END %][% END %]
+ </p>
+ [% END %]
<p style="[% secondary_p_style %]">
<strong>Location:</strong>
<br>Easting/Northing
diff --git a/templates/email/fixmystreet.com/submit.txt b/templates/email/fixmystreet.com/submit.txt
index c22d83713..3b3c0980f 100644
--- a/templates/email/fixmystreet.com/submit.txt
+++ b/templates/email/fixmystreet.com/submit.txt
@@ -25,7 +25,10 @@ Subject: [% report.title %]
Details: [% report.detail %]
-[% additional_information %]
+[% FOR field IN report.get_extra_fields %][% IF field.value ~%]
+[% field.description %]: [% field.value %]
+
+[% END %][% END ~%]
Easting/Northing
[%- " (IE)" IF coordsyst == "I" -%]
diff --git a/templates/email/hackney/_email_bottom.html b/templates/email/hackney/_email_bottom.html
new file mode 100644
index 000000000..64936c470
--- /dev/null
+++ b/templates/email/hackney/_email_bottom.html
@@ -0,0 +1,28 @@
+ </tr>
+ </table>
+ </th>
+ <th class="spacer-cell"></th>
+ </tr>
+ </table>
+ <table [% wrapper_table | safe %] style="[% wrapper_style %]">
+ <tr>
+ <th class="spacer-cell"></th>
+ <th width="[% wrapper_max_width %]" style="[% td_style %][% hint_style %]" class="hint">
+ [%~ IF email_footer %]
+ [% email_footer | safe %]
+ [%~ ELSE %]
+ This email was sent automatically, from an unmonitored email account. Please do not reply to it.
+ [%~ END %]
+ </th>
+ <th class="spacer-cell"></th>
+ </tr>
+ <tr>
+ <th class="spacer-cell"></th>
+ <th width="[% wrapper_max_width %]" style="[% td_style %][% hint_style %]">
+ Powered by <a href="http://www.fixmystreet.com">FixMyStreet</a>
+ </th>
+ <th class="spacer-cell"></th>
+ </tr>
+ </table>
+</body>
+</html>
diff --git a/templates/email/hackney/_email_color_overrides.html b/templates/email/hackney/_email_color_overrides.html
new file mode 100644
index 000000000..1af818eca
--- /dev/null
+++ b/templates/email/hackney/_email_color_overrides.html
@@ -0,0 +1,25 @@
+[%
+
+color_green = '#00b341'
+color_black = '#000000'
+color_white = '#FFFFFF'
+color_hackney_pale_green = '#f2f7f0'
+color_hackney_dark_green = '#00664f'
+
+body_background_color = color_hackney_pale_green
+body_text_color = color_black
+
+header_background_color = color_black
+header_text_color = color_white
+
+secondary_column_background_color = color_white
+
+button_background_color = color_hackney_dark_green
+button_text_color = color_white
+
+logo_file = 'hackney-logo-white.png'
+logo_width = "200" # pixel measurement, but without 'px' suffix
+logo_height = "36" # pixel measurement, but without 'px' suffix
+header_padding = "20px 30px"
+
+%]
diff --git a/templates/email/hackney/_email_setting_overrides.html b/templates/email/hackney/_email_setting_overrides.html
new file mode 100644
index 000000000..00eeed9cc
--- /dev/null
+++ b/templates/email/hackney/_email_setting_overrides.html
@@ -0,0 +1,7 @@
+[%
+
+only_column_style = "$only_column_style border: 1px solid $column_divider_color; border-top: none;"
+primary_column_style = "$primary_column_style border: 1px solid $column_divider_color; border-top: none;"
+secondary_column_style = "vertical-align: top; width: 50%; background-color: $secondary_column_background_color; color: $secondary_column_text_color; border: 1px solid $column_divider_color; border-top: none; border-left: none;"
+
+%]
diff --git a/templates/email/hackney/signature.txt b/templates/email/hackney/signature.txt
new file mode 100644
index 000000000..78a02659f
--- /dev/null
+++ b/templates/email/hackney/signature.txt
@@ -0,0 +1,2 @@
+
+Hackney Council
diff --git a/templates/email/hackney/site-name.txt b/templates/email/hackney/site-name.txt
new file mode 100644
index 000000000..29d7f1480
--- /dev/null
+++ b/templates/email/hackney/site-name.txt
@@ -0,0 +1 @@
+Report A Problem
diff --git a/templates/email/hounslow/submit.html b/templates/email/hounslow/submit.html
index 5b9f2e255..a22f15243 100644
--- a/templates/email/hounslow/submit.html
+++ b/templates/email/hounslow/submit.html
@@ -52,9 +52,6 @@ of a local problem that they believe might require your attention.</p>
[% END %]
<p style="[% secondary_p_style %]"><strong>Category:</strong> [% report.category | html %]</p>
<p style="[% secondary_p_style %]">[% report.detail | html %]</p>
- [%~ IF additional_information %]
- <p style="[% secondary_p_style %]">[% additional_information %]</p>
- [%~ END %]
<p style="[% secondary_p_style %]">
<strong>Location:</strong>
<br>Easting/Northing
diff --git a/templates/email/hounslow/submit.txt b/templates/email/hounslow/submit.txt
index 3d9518e53..bbf23326b 100644
--- a/templates/email/hounslow/submit.txt
+++ b/templates/email/hounslow/submit.txt
@@ -25,8 +25,6 @@ Subject: [% report.title %]
Details: [% report.detail %]
-[% additional_information %]
-
Easting/Northing
[%- " (IE)" IF coordsyst == "I" -%]
: [% easting %]/[% northing %]
diff --git a/templates/email/oxfordshire/submit.html b/templates/email/oxfordshire/submit.html
new file mode 100644
index 000000000..428436523
--- /dev/null
+++ b/templates/email/oxfordshire/submit.html
@@ -0,0 +1,74 @@
+[%
+
+PROCESS '_email_settings.html';
+
+email_summary = "A new problem in your area has been reported by a " _ site_name _ " user.";
+email_footer = PROCESS '_submit_footer.html';
+email_columns = 2;
+
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% primary_column_style %]" id="primary_column">
+ [% start_padded_box | safe %]
+ <h1 style="[% h1_style %]">New problem in your&nbsp;area</h1>
+ <p style="[% p_style %]">[% missing %][% multiple %]A user of [% site_name %] has submitted the following report
+of a local problem that they believe might require your attention.</p>
+
+ <p style="margin: 20px auto; text-align: center">
+ <a style="[% button_style %]" href="[% url %]">Show full report</a>
+ </p>
+ <h2 style="[% h2_style %] margin: 30px 0 10px 0">Reported by:</h2>
+ <table [% table_reset | safe %]>
+ <tr>
+ <th style="[% contact_th_style %]">Name</th>
+ <td style="[% contact_td_style %]">[% report.name | html %]</td>
+ </tr>
+ <tr>
+ <th style="[% contact_th_style %]">Email</th>
+ <td style="[% contact_td_style %]">
+ [%~ IF report.user.email ~%]
+ <a href="mailto:[% report.user.email | html %]">[% report.user.email | html %]</a>
+ [%~ ELSE ~%]
+ <strong>No email address provided, only phone number</strong>
+ [%~ END ~%]
+ </td>
+ </tr>
+ [%~ IF report.user.phone %]
+ <tr>
+ <th style="[% contact_th_style %]">Phone</th>
+ <td style="[% contact_td_style %]"><a href="tel:[% report.user.phone | html %]">[% report.user.phone | html %]</a></td>
+ </tr>
+ [%~ END %]
+ </table>
+ <p style="[% p_style %] margin-top: 0.5em;">Replies to this message will go directly to [% report.name | html %], the user who reported the problem.</p>
+ [% end_padded_box | safe %]
+</th>
+[% WRAPPER '_email_sidebar.html' object = report %]
+ <h2 style="[% h2_style %]">[% report.title | html %]</h2>
+ <p style="[% secondary_p_style %]"><strong>Category:</strong> [% report.category | html %]</p>
+ <p style="[% secondary_p_style %]">[% report.detail | html %]</p>
+ <p style="[% secondary_p_style %]">
+ <strong>Location:</strong>
+ <br>Easting/Northing
+ [%~ " (IE)" IF coordsyst == "I" ~%]
+ : [% easting %]/[% northing %]
+ (<a href="[% osm_url %]" title="View OpenStreetMap of this location">
+ [%~ report.latitude %], [% report.longitude ~%]
+ </a>)
+ [% IF closest_address %]<br>[% closest_address | trim | replace("\n\n", "<br>") %][% END %]
+ </p>
+ [% IF report.get_extra_field_value('feature_id') %]
+ <p style="[% secondary_p_style %]">
+ <strong>Asset id:</strong> [% report.get_extra_field_value('feature_id') %]
+ </p>
+ [% END %]
+ [% IF report.get_extra_field_value('column_no') %]
+ <p style="[% secondary_p_style %]">
+ <strong>Column Number:</strong> [% report.get_extra_field_value('column_no') %]
+ </p>
+ [% END %]
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/oxfordshire/submit.txt b/templates/email/oxfordshire/submit.txt
new file mode 100644
index 000000000..faa39e2b4
--- /dev/null
+++ b/templates/email/oxfordshire/submit.txt
@@ -0,0 +1,50 @@
+Subject: Problem Report: [% report.title %]
+
+Dear [% bodies_name %],
+
+[% missing %][% multiple %]A user of
+[% site_name %] has submitted the following report
+of a local problem that they believe might require your attention.
+
+[% fuzzy %], or to provide an update on the problem,
+please visit the following link:
+
+ [% url %]
+
+[% has_photo %]----------
+
+Name: [% report.name %]
+
+Email: [% report.user.email OR 'None provided' %]
+
+Phone: [% report.user.phone OR 'None provided' %]
+
+Category: [% report.category %]
+
+Subject: [% report.title %]
+
+Details: [% report.detail %]
+
+[%- IF report.get_extra_field_value('feature_id') %]
+Asset id: [% report.get_extra_field_value('feature_id') %]
+[%- END %]
+
+[%- IF report.get_extra_field_value('column_no') %]
+Column number: [% report.get_extra_field_value('column_no') %]
+[%- END %]
+
+Easting/Northing
+[%- " (IE)" IF coordsyst == "I" -%]
+: [% easting %]/[% northing %]
+
+Latitude: [% report.latitude %]
+
+Longitude: [% report.longitude %]
+
+View OpenStreetMap of this location: [% osm_url %]
+
+[% closest_address %]----------
+
+Replies to this email will go to the user who submitted the problem.
+
+[% signature %]
diff --git a/templates/email/tfl/submit.html b/templates/email/tfl/submit.html
index a1bd8f134..2bce514d0 100644
--- a/templates/email/tfl/submit.html
+++ b/templates/email/tfl/submit.html
@@ -58,9 +58,6 @@ of a local problem that they believe might require your attention.</p>
<p style="[% secondary_p_style %]"><strong>Signal site number:</strong> [% report.get_extra_field_value('site') | html %]</p>
[% END %]
<p style="[% secondary_p_style %]">[% report.detail | html %]</p>
- [%~ IF additional_information %]
- <p style="[% secondary_p_style %]">[% additional_information %]</p>
- [%~ END %]
<p style="[% secondary_p_style %]">
<strong>Location:</strong>
<br>Easting/Northing
diff --git a/templates/email/tfl/submit.txt b/templates/email/tfl/submit.txt
index b6af867ff..6c1f323b0 100644
--- a/templates/email/tfl/submit.txt
+++ b/templates/email/tfl/submit.txt
@@ -31,8 +31,6 @@ Subject: [% report.title %]
Details: [% report.detail %]
-[% additional_information %]
-
Easting/Northing
[%- " (IE)" IF coordsyst == "I" -%]
: [% easting %]/[% northing %]
diff --git a/templates/email/zurich/problem-confirm.txt b/templates/email/zurich/problem-confirm.txt
index f7216ea9c..2a4b29986 100644
--- a/templates/email/zurich/problem-confirm.txt
+++ b/templates/email/zurich/problem-confirm.txt
@@ -1,8 +1,8 @@
-Subject: Züri wie neu: Meldung #[% report.id %]
+Subject: Züri wie neu: Bitte bestätigen Sie Ihre Meldung #[% report.id %]
Grüezi [% report.name %]
-Besten Dank für Ihre Meldung auf <<Züri wie neu>>. Klicken Sie bitte auf diesen Link, um[% UNLESS email_confirmed %] Ihre E-Mail-Adresse zu bestätigen und[% END %] über den Status der Meldung informiert zu bleiben. Falls der Link nicht funktioniert, kopieren Sie ihn in Ihren Browser:
+Besten Dank für Ihre Meldung auf <<Züri wie neu>>. Klicken Sie bitte auf diesen Link, um[% UNLESS email_confirmed %] Ihre Meldung zu bestätigen und[% END %] über den Status ihrer Meldung per E-Mail informiert zu bleiben. Falls der Link nicht funktioniert, kopieren Sie ihn in Ihren Browser:
[% token_url %]
diff --git a/templates/web/base/admin/bodies/_category_field.html b/templates/web/base/admin/bodies/_category_field.html
index 8c5a1c352..c45cc5524 100644
--- a/templates/web/base/admin/bodies/_category_field.html
+++ b/templates/web/base/admin/bodies/_category_field.html
@@ -9,7 +9,10 @@
</div>
<p>
- <strong>[% loc('Category') %] </strong><input type="text" class="form-control" name="category" size="30" value="[% contact.category | html %]" required>
+ <label for="category">[% loc('Category') %]</label>
+ <input type="text" class="form-control" id="category" name="category"
+ size="30" value="[% contact.category %]"
+ [% contact.category_uneditable ? 'readonly' : 'required' %]>
</p>
[% IF contact.in_storage %]
diff --git a/templates/web/base/admin/bodies/contact-form.html b/templates/web/base/admin/bodies/contact-form.html
index 35fab4541..fab485a2f 100644
--- a/templates/web/base/admin/bodies/contact-form.html
+++ b/templates/web/base/admin/bodies/contact-form.html
@@ -63,13 +63,45 @@
<textarea id="disabled-message" name="disable_message" class="form-control">[% contact.disable_form_field.description %]</textarea>
</p>
- [% IF body.send_method == 'Open311' %]
+ <p class="form-check">
+ <input type="checkbox" name="updates_disallowed" value="1" id="updates_disallowed" [% ' checked' IF contact.get_extra_metadata('updates_disallowed') %]>
+ <label for="updates_disallowed">[% loc('Disable updates on reports in this category') %]</label>
+ [% TRY %][% INCLUDE admin/bodies/_updates_disallowed_hint.html %][% CATCH file %][% END %]
+ </p>
+
+ <p class="form-check">
+ <input type="checkbox" name="reopening_disallowed" value="1" id="reopening_disallowed" [% ' checked' IF contact.get_extra_metadata('reopening_disallowed') %]>
+ <label for="reopening_disallowed">[% loc('Disable reopening of reports in this category') %]</label>
+ <span class='form-hint'>[% loc('Use this where you do not want problem reporters to be able to reopen their fixed or closed reports when leaving an update.') %]</span>
+ </p>
+
+ [% IF body.get_cobrand_handler.anonymous_account %]
+ <p class="form-check">
+ <input type="checkbox" name="anonymous_allowed" value="1" id="anonymous_allowed" [% ' checked' IF contact.get_extra_metadata('anonymous_allowed') %]>
+ <label for="anonymous_allowed">[% loc('Allow anonymous reports on this category') %]</label>
+ </p>
+ [% END %]
+
+ [% IF contact.sent_by_open311 %]
<p class="form-check">
<input type="checkbox" name="open311_protect" value="1" id="open311_protect"[% ' checked' IF contact.get_extra_metadata('open311_protect') %]>
<label for="open311_protect">[% loc("Protect this category's name and group(s) from Open311 changes") %]</label>
</p>
[% END %]
+ [% IF c.user.is_superuser %]
+ <p class="form-check">
+ <input type="checkbox" name="hardcoded" value="1" id="hardcoded"[% ' checked' IF contact.get_extra_metadata('hardcoded') %]>
+ <label for="hardcoded">[% loc("Protect this category from being re-named") %]</label>
+ </p>
+ [% END %]
+
+ <p class="form-check">
+ <input type="checkbox" name="assigned_users_only" value="1" id="assigned_users_only" [% ' checked' IF contact.extra.assigned_users_only %]>
+ <label for="assigned_users_only">[% loc('Frontend staff access only to users assigned to this category') %]</label>
+ <span class='form-hint'>[% loc('Use this if you wish only users assigned to this category to see staff-related features (such as the inspector form) in the front end.') %]</span>
+ </p>
+
[% IF body.can_be_devolved %]
<div class="admin-hint">
<p>
@@ -114,6 +146,7 @@
<h2>[% loc('Extra data:') %] </h2>
<dl>
[% FOR pair IN contact.get_extra_metadata %]
+ [% NEXT IF pair.key == 'group' OR pair.key == 'assigned_users_only' %]
<dt>[% pair.key %]</dt> <dd>[% pair.value OR '<em>-</em>' %]</dd>
[% END %]
</dl>
diff --git a/templates/web/base/admin/extra-metadata-item.html b/templates/web/base/admin/extra-metadata-item.html
index 66cb6f79c..aa563e851 100644
--- a/templates/web/base/admin/extra-metadata-item.html
+++ b/templates/web/base/admin/extra-metadata-item.html
@@ -67,6 +67,7 @@ DEFAULT behaviour = 'question';
<label for="metadata-[% i %]-datatype">[% loc('Display as') %]</label>
<select class="form-control" name="metadata[[% i %]].datatype" id="metadata-[% i %]-datatype">
<option value="string" data-hide="#metadata-[% i %]-options-group" [% 'selected' IF meta.datatype == 'string' %]>[% loc('Text field') %]</option>
+ <option value="text" data-hide="#metadata-[% i %]-options-group" [% 'selected' IF meta.datatype == 'text' %]>[% loc('Textarea') %]</option>
<option value="singlevaluelist" data-show="#metadata-[% i %]-options-group" [% 'selected' IF meta.datatype == 'singlevaluelist' %]>[% loc('Drop-down list') %]</option>
</select>
</div>
diff --git a/templates/web/base/admin/report-category.html b/templates/web/base/admin/report-category.html
index e76106f7f..b15f57e71 100644
--- a/templates/web/base/admin/report-category.html
+++ b/templates/web/base/admin/report-category.html
@@ -1,12 +1,10 @@
-[%~ IF NOT select_name %]
- [%~ select_name = 'category' %]
-[%~ END %]
[%~ BLOCK category_option ~%]
<option value="[% cat.category | html %]"[% ' selected' IF problem.category == cat.category %]>[% cat.category_display | html %]</option>
[%~ END ~%]
-<select class="form-control" name="[% select_name %]" id="[% select_name %]">
- [% IF NOT problem.category OR NOT categories_hash.${problem.category} %]
+<select class="form-control" name="category" id="category">
+ [% SET category_safe = mark_safe(problem.category) ~%]
+ [% IF NOT problem.category OR NOT categories_hash.$category_safe %]
<optgroup label="[% loc('Existing category') %]">
<option selected value="[% problem.category | html %]">[% (problem.category_display OR '-') | html %]</option>
</optgroup>
diff --git a/templates/web/base/admin/reports/edit.html b/templates/web/base/admin/reports/edit.html
index d2b866d01..6e7cff4cf 100644
--- a/templates/web/base/admin/reports/edit.html
+++ b/templates/web/base/admin/reports/edit.html
@@ -131,7 +131,20 @@ class="admin-offsite-link">[% problem.latitude %], [% problem.longitude %]</a>
<li><label class="inline-text" for="category">[% loc('Category:') %]</label>
[% INCLUDE 'admin/report-category.html' %]
</li>
-<li>[% loc('Extra data:') %] [% IF extra_fields.size %]<ul>[% FOREACH field IN extra_fields %]<li><strong>[% field.name %]</strong>: [% field.val %]</li>[% END %]</ul>[% ELSE %]No[% END %]</li>
+<li>[% loc('Extra data:') ~%]
+ [%~ IF extra_fields.size ~%]
+ <ul>
+ [%~ FOREACH field IN extra_fields ~%]
+ <li><strong>[%~ field.name ~%]</strong>: [% IF field.val.0.defined ~%]
+ [%~ field.val.list.join(", ") ~%]
+ [%~ ELSE ~%]
+ [%~ field.val ~%]
+ [%~ END ~%]
+ </li>
+ [%~ END ~%]
+ </ul>
+ [%~ ELSE %] No[% END ~%]
+</li>
<li><label class="inline-text" for="anonymous">[% loc('Anonymous:') %]</label>
<select class="form-control" name="anonymous" id="anonymous">
<option [% 'selected ' IF problem.anonymous %]value="1">[% loc('Yes') %]</option>
diff --git a/templates/web/base/admin/templates/_external.html b/templates/web/base/admin/templates/_external.html
new file mode 100644
index 000000000..d25d2b39c
--- /dev/null
+++ b/templates/web/base/admin/templates/_external.html
@@ -0,0 +1,12 @@
+[% IF errors.external_status_code %]
+ <div class="form-error">[% errors.external_status_code %]</div>
+[% END %]
+<div class="admin-hint">
+ <p>
+ [% loc('If you want to use this template to prefill the update field when a report&rsquo;s <strong>external</strong> (e.g. Confirm) status code changes, enter the status code here.') %]
+ </p>
+</div>
+<p>
+ <label for="external_status_code">[% loc('External status code') %]</label>
+ <input type="text" id="external_status_code" name="external_status_code" class="form-control" size="30" value="[% rt.external_status_code | html %]">
+</p>
diff --git a/templates/web/base/admin/templates/edit.html b/templates/web/base/admin/templates/edit.html
index 7ce67f96f..f52c26b49 100644
--- a/templates/web/base/admin/templates/edit.html
+++ b/templates/web/base/admin/templates/edit.html
@@ -51,18 +51,7 @@
[% INCLUDE 'report/inspect/state_groups_select.html' current_state=rt.state include_empty=1 %]
</p>
- [% IF errors.external_status_code %]
- <div class="form-error">[% errors.external_status_code %]</div>
- [% END %]
- <div class="admin-hint">
- <p>
- [% loc('If you want to use this template to prefill the update field when a report&rsquo;s <strong>external</strong> (e.g. Confirm) status code changes, enter the status code here.') %]
- </p>
- </div>
- <p>
- <label for="external_status_code">[% loc('External status code') %]</label>
- <input type="text" name="external_status_code" class="form-control" size="30" value="[% rt.external_status_code | html %]">
- </p>
+ [% PROCESS 'admin/templates/_external.html' %]
[% IF errors.auto_response %]
<div class="form-error">[% errors.auto_response %]</div>
diff --git a/templates/web/base/admin/triage/_inspect.html b/templates/web/base/admin/triage/_inspect.html
index 926197ceb..bd76a47f7 100644
--- a/templates/web/base/admin/triage/_inspect.html
+++ b/templates/web/base/admin/triage/_inspect.html
@@ -24,7 +24,6 @@
</select>
[% END %]
-[% permissions = c.user.permissions(problem) %]
[% second_column = BLOCK -%]
<div id="side-inspect">
diff --git a/templates/web/base/admin/triage/_list-filters.html b/templates/web/base/admin/triage/_list-filters.html
index dd3e17875..29f48f0bb 100644
--- a/templates/web/base/admin/triage/_list-filters.html
+++ b/templates/web/base/admin/triage/_list-filters.html
@@ -2,8 +2,9 @@
[% IF filter_categories.size %]
<select class="form-control js-multiple" name="filter_category" id="filter_categories" multiple data-all="[% loc('Everything') %]">
[% FOR cat IN filter_categories %]
- <option value="[% cat.category | html %]"[% ' selected' IF filter_category.${cat.category} %]>
- [% cat.category_display | html %]
+ [%~ SET cat_safe = mark_safe(cat.category) %]
+ <option value="[% cat.category %]"[% ' selected' IF filter_category.$cat_safe %]>
+ [% cat.category_display %]
[%~ IF cat.get_extra_metadata('help_text') %] ([% cat.get_extra_metadata('help_text') %])[% END ~%]
</option>
[% END %]
diff --git a/templates/web/base/admin/users/_form_details.html b/templates/web/base/admin/users/_form_details.html
new file mode 100644
index 000000000..78debca32
--- /dev/null
+++ b/templates/web/base/admin/users/_form_details.html
@@ -0,0 +1,33 @@
+<li>
+ <div class="admin-hint">
+ <p>
+ [% loc(
+ "The user's <strong>name</strong> is displayed publicly on reports that have not been marked <em>anonymous</em>.
+ Names are not necessarily unique.")
+ %]
+ </p>
+ </div>
+ <label for="name">[% loc('Name:') %]</label>
+ <input type='text' class="form-control" name='name' id='name' value='[% user.name | html %]'>
+</li>
+
+<li><label for="email">[% loc('Email:') %]</label>
+<input type='text' class="form-control" id='email' name='email' value='[% user.email | html %]'>
+[% IF user %]
+ <input class="btn" type="submit" name="send_login_email" value="[% loc('Send login email') %]">
+[% END %]
+</li>
+
+<li><label class="inline-text" for="email_verified">[% loc('Email verified:') %]</label>
+<input type="checkbox" id="email_verified" name="email_verified" value="1" [% user.email_verified ? ' checked' : '' %]>
+
+<li><label for="phone">[% loc('Phone:') %]</label>
+<input type='text' class="form-control" id='phone' name='phone' value='[% user.phone | html %]'></li>
+<li><label class="inline-text" for="phone_verified">[% loc('Phone verified:') %]</label>
+<input type="checkbox" id="phone_verified" name="phone_verified" value="1" [% user.phone_verified ? ' checked' : '' %]>
+
+[% IF username_in_abuse %]
+<li>
+ <p class="error">[% loc('User in abuse table') %] <input name="unban" type="submit" value="[% loc('Unban') %]"></p>
+</li>
+[% END %]
diff --git a/templates/web/base/admin/users/form.html b/templates/web/base/admin/users/form.html
index 495da8648..c782b7172 100644
--- a/templates/web/base/admin/users/form.html
+++ b/templates/web/base/admin/users/form.html
@@ -7,38 +7,9 @@
[% INCLUDE 'errors.html' errors = field_errors.values %]
<ul class="no-bullets">
- <li>
- <div class="admin-hint">
- <p>
- [% loc(
- "The user's <strong>name</strong> is displayed publicly on reports that have not been marked <em>anonymous</em>.
- Names are not necessarily unique.")
- %]
- </p>
- </div>
- <label for="name">[% loc('Name:') %]</label>
- <input type='text' class="form-control" name='name' id='name' value='[% user.name | html %]'>
- </li>
- <li><label for="email">[% loc('Email:') %]</label>
- <input type='text' class="form-control" id='email' name='email' value='[% user.email | html %]'>
- [% IF user %]
- <input class="btn" type="submit" name="send_login_email" value="[% loc('Send login email') %]">
- [% END %]
- </li>
- <li><label class="inline-text" for="email_verified">[% loc('Email verified:') %]</label>
- <input type="checkbox" id="email_verified" name="email_verified" value="1" [% user.email_verified ? ' checked' : '' %]>
- <li><label for="phone">[% loc('Phone:') %]</label>
- <input type='text' class="form-control" id='phone' name='phone' value='[% user.phone | html %]'></li>
- <li><label class="inline-text" for="phone_verified">[% loc('Phone verified:') %]</label>
- <input type="checkbox" id="phone_verified" name="phone_verified" value="1" [% user.phone_verified ? ' checked' : '' %]>
+ [% PROCESS 'admin/users/_form_details.html' %]
- [% IF username_in_abuse %]
- <li>
- <p class="error">[% loc('User in abuse table') %] <input name="unban" type="submit" value="[% loc('Unban') %]"></p>
- </li>
- [% END %]
-
- [% IF c.user.is_superuser || c.cobrand.moniker == 'zurich' %]
+ [% IF c.user.is_superuser %]
<li>
<div class="admin-hint">
<p>
@@ -72,7 +43,7 @@
</li>
[% END %]
- [% IF areas AND c.cobrand.moniker != 'zurich' %]
+ [% IF areas %]
<li>
<div class="admin-hint">
<p>
@@ -94,14 +65,28 @@
</li>
[% END %]
- [% IF contacts AND c.cobrand.moniker != 'zurich'%]
+ [% IF contacts %]
<li class="js-user-categories">
[% INCLUDE 'admin/category-checkboxes.html' hint=loc("Authorised staff users can be associated with the categories in which they operate.") %]
</li>
[% END %]
- [% IF c.cobrand.moniker != 'zurich' %]
+ [% IF user.from_body %]
+ <li>
+ <div class="admin-hint">
+ <p>
+ [% loc("This means the user will only see front end staff features (such as the inspector form) in their assigned categories.") %]
+ </p>
+ </div>
+
+ <label>
+ [% loc('Assigned categories only') %]:
+ <input type="checkbox" id="assigned_categories_only" name="assigned_categories_only"[% user.extra.assigned_categories_only ? ' checked' : '' %]>
+ </label>
+ </li>
+ [% END %]
+
<li>
<div class="admin-hint">
<p>
@@ -182,7 +167,7 @@
</fieldset>
</li>
[% END %]
- [% END %]
+
[% TRY %][% INCLUDE 'admin/users/form-extra-fields.html' %][% CATCH file %][% END %]
</ul>
<p>
diff --git a/templates/web/base/admin/users/index.html b/templates/web/base/admin/users/index.html
index e573c10fe..dbd32f3a1 100644
--- a/templates/web/base/admin/users/index.html
+++ b/templates/web/base/admin/users/index.html
@@ -80,6 +80,12 @@
[% END %]
</select>
[% END %]
+<p>
+ <label for="remove-staff">
+ [% loc("Remove staff permissions") %]
+ <input type="checkbox" id="remove-staff" name="remove-staff" value="remove-staff">
+ </label>
+</p>
<p><input class="btn" type="submit" value="[% loc('Save changes') %]">
</form>
diff --git a/templates/web/base/admin/users/log.html b/templates/web/base/admin/users/log.html
index 4b426e0ba..5c3f36321 100644
--- a/templates/web/base/admin/users/log.html
+++ b/templates/web/base/admin/users/log.html
@@ -49,7 +49,7 @@ action_map = {
[%- tprintf(loc('Problem %s created on behalf of %s'), mark_safe(report_link), item.obj.name) %], ‘[% item.obj.title | html %]’
[%~ CASE 'update' %]
[% tprintf(loc("Update %s created for problem %d"), mark_safe(report_link), item.obj.problem_id) %]
- [% item.obj.text | add_links | markup(item.obj.user) | html_para %]
+ [% item.obj.text | staff_html_markup(item.obj.extra) %]
[%~ CASE 'shortlistAdded' %]
[%- tprintf(loc('Problem %s added to shortlist'), mark_safe(report_link)) %]
[%~ CASE 'shortlistRemoved' %]
diff --git a/templates/web/base/alert/_list.html b/templates/web/base/alert/_list.html
index 782989a5c..e6c5183e4 100644
--- a/templates/web/base/alert/_list.html
+++ b/templates/web/base/alert/_list.html
@@ -62,6 +62,7 @@
</div>
[% END %]
+ [% PROCESS 'auth/form_extra.html' %]
<div class="alerts__cta-box">
<h3>[% loc('Subscribe by email') %]</h3>
diff --git a/templates/web/base/alert/updates.html b/templates/web/base/alert/updates.html
index 0fbed2254..40380849f 100644
--- a/templates/web/base/alert/updates.html
+++ b/templates/web/base/alert/updates.html
@@ -15,6 +15,8 @@
</p>
<form action="/alert/subscribe" method="post">
+ [% PROCESS 'auth/form_extra.html' %]
+
<fieldset>
[% IF c.user_exists %]
[% IF c.user.has_permission_to("contribute_as_another_user", problem.bodies_str_ids) %]
diff --git a/templates/web/base/around/postcode_form.html b/templates/web/base/around/postcode_form.html
index 60fa1a703..d682bbdca 100644
--- a/templates/web/base/around/postcode_form.html
+++ b/templates/web/base/around/postcode_form.html
@@ -35,7 +35,7 @@
%]
<a href="[% c.uri_for('/around', link_params) | html %]" id="geolocate_link">&hellip; [% loc('or use my location') %]</a>
- [% UNLESS possible_location_matches %]
+ [% UNLESS possible_location_matches OR location_error_pc_lookup %]
[% INCLUDE 'around/_postcode_form_post.html' %]
[% END %]
</div>
diff --git a/templates/web/base/auth/form_extra.html b/templates/web/base/auth/form_extra.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/base/auth/form_extra.html
diff --git a/templates/web/base/auth/generate_token.html b/templates/web/base/auth/generate_token.html
index 9152d0cb3..7654e11eb 100644
--- a/templates/web/base/auth/generate_token.html
+++ b/templates/web/base/auth/generate_token.html
@@ -9,7 +9,11 @@ INCLUDE 'header.html', title = loc('Security'), bodyclass = 'fullwidthpage'
<p>
<strong>[% loc('Token') %]:</strong>
- <span>[% existing_token | html %]</span>
+ <span>[% token_generated %]</span>
+ </p>
+
+ <p>
+ [% loc('This will be the only time this token is visible, so please make a note of it now.') %]
</p>
<p><a href="/my">[% loc('Your account') %]</a></p>
@@ -67,13 +71,6 @@ INCLUDE 'header.html', title = loc('Security'), bodyclass = 'fullwidthpage'
<input type="hidden" name="token" value="[% csrf_token %]">
- [% IF existing_token %]
- <p>
- <strong>[% loc('Current token:') %]</strong>
- <span>[% existing_token | html %]</span>
- </p>
- [% END %]
-
<p>
<input name="generate_token" type="submit" class="btn" value="[% existing_token ? loc('Replace token') : loc('Generate token') %]">
</p>
diff --git a/templates/web/base/common_scripts.html b/templates/web/base/common_scripts.html
index b8c4db343..32ec9b00f 100644
--- a/templates/web/base/common_scripts.html
+++ b/templates/web/base/common_scripts.html
@@ -13,6 +13,7 @@ IF bodyclass.match('frontpage');
scripts.push(
version('/js/front.js'),
version('/js/geolocation.js'),
+ version('/js/loading-attribute-polyfill.js'),
);
ELSIF bodyclass.match('alertpage');
scripts.push(
@@ -64,6 +65,7 @@ IF bodyclass.match('mappage');
version('/cobrands/fixmystreet/map.js'),
version('/vendor/dropzone.min.js'),
version('/vendor/fancybox/jquery.fancybox-1.3.4.pack.js'),
+ version('/js/loading-attribute-polyfill.js'),
);
ELSE;
scripts.push(
diff --git a/templates/web/base/contact/enquiry/index.html b/templates/web/base/contact/enquiry/index.html
index c88ca221e..b19c5181b 100644
--- a/templates/web/base/contact/enquiry/index.html
+++ b/templates/web/base/contact/enquiry/index.html
@@ -16,10 +16,10 @@
<input type="text" class="form-control required" name="name" id="form_name" value="[% ( form_name OR c.user.name ) | html %]" size="30">
<label for="form_email">[% loc('Your email') %]</label>
- [% IF field_errors.username %]
- <div class="form-error">[% field_errors.username %]</div>
+ [% IF field_errors.username_register %]
+ <div class="form-error">[% field_errors.username_register %]</div>
[% END %]
- <input type="text" class="form-control required email" name="username" id="form_email" [% "disabled" IF c.user.email %] value="[% ( email OR c.user.email ) | html %]" size="30">
+ <input type="text" class="form-control required email" name="username_register" id="form_email" [% "disabled" IF c.user.email %] value="[% ( email OR c.user.email ) | html %]" size="30">
<div class="form-group">
<label for="form_phone">[% loc('Your phone number') %]</label>
@@ -34,6 +34,7 @@
<select class="form-control required" name="category" id="category">
<option value="">[% loc('-- Please select --') %]</option>
[% FOREACH contact IN contacts %]
+ [% NEXT IF contact.get_extra_field(, 'code', '_fms_disable_').disable_form == 'true' %]
<option value="[% contact.category | html %]" [% "selected" IF report.category == contact.category %]>[% contact.category | html %]</option>
[% END %]
</select>
diff --git a/templates/web/base/contact/index.html b/templates/web/base/contact/index.html
index 05a24160f..4e65ce674 100644
--- a/templates/web/base/contact/index.html
+++ b/templates/web/base/contact/index.html
@@ -63,7 +63,7 @@
[% IF problem.anonymous %]
[% tprintf( loc('Reported anonymously at %s'), prettify_dt( problem.confirmed ) ) %]
[% ELSE %]
- [% tprintf( loc('Reported by %s at %s'), problem.user.name, prettify_dt( problem.confirmed ) ) | html %]
+ [% tprintf( loc('Reported by %s at %s'), problem.name, prettify_dt( problem.confirmed ) ) | html %]
[% END %]
</cite>
diff --git a/templates/web/base/dashboard/heatmap-list.html b/templates/web/base/dashboard/heatmap-list.html
index d736a11f4..53720af35 100644
--- a/templates/web/base/dashboard/heatmap-list.html
+++ b/templates/web/base/dashboard/heatmap-list.html
@@ -1,12 +1,12 @@
-<h3>Five newest reports</h3>
+<h3>[% loc('Five newest reports') %]</h3>
[% INCLUDE column problems = five_newest %]
-<h3>Five most recent commented reports<br>
-<small>Not from yourself/backend</small>
+<h3>[% loc('Five most recent commented reports') %]<br>
+<small>[% loc('Not from yourself/backend') %]</small>
</h3>
[% INCLUDE column problems = five_commented %]
-<h3>Ten least recently updated open reports</h3>
+<h3>[% loc('Ten least recently updated open reports') %]</h3>
[% INCLUDE column problems = ten_oldest %]
[% BLOCK column %]
diff --git a/templates/web/base/dashboard/heatmap.html b/templates/web/base/dashboard/heatmap.html
index ca4d02926..42c601a4c 100755
--- a/templates/web/base/dashboard/heatmap.html
+++ b/templates/web/base/dashboard/heatmap.html
@@ -26,11 +26,11 @@
<input type="hidden" id="body" name="body" value="[% body.id | html %]">
<p class="report-list-filters" style='padding-top:0.25em'>
- From <input type="date" id="start_date" name="start_date" class="form-control" value="[% start_date | html %]">
- To <input type="date" id="end_date" name="end_date" class="form-control" value="[% end_date | html %]">
+ [% loc('From') %] <input type="date" id="start_date" name="start_date" class="form-control" value="[% start_date | html %]">
+ [% loc('To') %] <input type="date" id="end_date" name="end_date" class="form-control" value="[% end_date | html %]">
<p class="report-list-filters">
-In wards <select class="form-control js-multiple" multiple id="wards" name="wards">
+[% loc('In wards') %] <select class="form-control js-multiple" multiple id="wards" name="wards">
[% FOR child IN children.values.sort('name') %]
[% SET aid = child.id %]
<option value="[% child.name | html %]"[% ' selected' IF ward_hash.$aid %]>[% child.name %]</option>
@@ -41,9 +41,9 @@ In wards <select class="form-control js-multiple" multiple id="wards" name="ward
<p class="segmented-control segmented-control--radio">
<input type="radio" name="heatmap" id="heatmap_yes" value="Yes" checked>
- <label class="btn" for="heatmap_yes">Heatmap</label>
+ <label class="btn" for="heatmap_yes">[% loc('Heatmap') %]</label>
<input type="radio" name="heatmap" id="heatmap_no" value="No">
- <label class="btn" for="heatmap_no">Pin map</label>
+ <label class="btn" for="heatmap_no">[% loc('Pin map') %]</label>
</p>
<div id="js-reports-list">
diff --git a/templates/web/base/dashboard/index.html b/templates/web/base/dashboard/index.html
index 5ac414bde..6a3075c61 100644
--- a/templates/web/base/dashboard/index.html
+++ b/templates/web/base/dashboard/index.html
@@ -105,8 +105,8 @@
<li>[% INCLUDE gb new_gb='device+site' text=loc('Device and Site') %]</li>
<li class="pull-right">
<span>[% loc('Export as CSV') %]:</span>
- <a href="[% c.uri_with({ export => 1 }) %]">[% loc('Reports') %]</a>
- <a href="[% c.uri_with({ export => 1, updates => 1 }) %]">[% loc('Updates') %]</a>
+ <a href="[% c.uri_with({ export => 2 }) %]">[% loc('Reports') %]</a>
+ <a href="[% c.uri_with({ export => 2, updates => 1 }) %]">[% loc('Updates') %]</a>
</li>
</ul>
diff --git a/templates/web/base/dashboard/status.html b/templates/web/base/dashboard/status.html
new file mode 100644
index 000000000..734bb9ad3
--- /dev/null
+++ b/templates/web/base/dashboard/status.html
@@ -0,0 +1,68 @@
+[% USE date %]
+[% IF NOT c.get_param('ajax') %]
+[% INCLUDE 'header.html'
+ title = loc('Dashboard')
+ robots = 'noindex, nofollow'
+ bodyclass = 'fullwidthpage';
+%]
+
+[% IF body %]
+<hgroup>
+ [% tprintf(loc('<h2>Reports, Statistics and Actions for</h2> <h1>%s</h1>'), body_name) %]
+</hgroup>
+[% ELSE %]
+<h1>[% loc('Summary statistics') %]</h1>
+[% END %]
+
+<p><a href="[% c.uri_for_action('dashboard/index') %]">[% loc('Back') %]</a></p>
+
+[% END %]
+
+<table id="overview" cellpadding=8 cellspacing=0>
+ <tr>
+ <th scope="col">[% loc('Created') %]</th>
+ <th scope="col">[% loc('CSV File') %]</th>
+ </tr>
+ [% in_progress = 0 %]
+ [% FOR file IN rows %]
+ <tr>
+ <td>[% date.format(file.ctime, format = '%Y-%m-%d %H:%M') %]</td>
+ <td>
+ [% IF file.finished %]
+ <a href="/dashboard/csv/[% file.name %]">[% file.name %]</a>
+ <br>[% file.size div 1024 %]KB
+ [% ELSE %]
+ [% file.name %]
+ <br>[% file.size div 1024 %]KB
+ <i>[% loc('In progress') %]</i>
+ [% in_progress = 1 %]
+ [% END %]
+ </td>
+ </tr>
+ [% END %]
+</table>
+
+[% IF NOT c.get_param('ajax') %]
+
+[% IF in_progress %]
+<script nonce="[% csp_nonce %]">
+(function() {
+ var wait = 1;
+ setTimeout(function refresh() {
+ $('#overview').load('[% c.uri_for_action('dashboard/status') %]?ajax=1', function() {
+ if ($(this).html().indexOf('<i>[% loc('In progress', "JS") %]</i>') === -1) {
+ return;
+ }
+ wait += 1;
+ if (wait > 10) {
+ wait = 10;
+ }
+ setTimeout(refresh, wait * 1000);
+ });
+ }, wait * 1000);
+})();
+</script>
+[% END %]
+
+[% INCLUDE 'footer.html' %]
+[% END %]
diff --git a/templates/web/base/js/translation_strings.html b/templates/web/base/js/translation_strings.html
index 2eb652c1f..4c4902fc5 100644
--- a/templates/web/base/js/translation_strings.html
+++ b/templates/web/base/js/translation_strings.html
@@ -64,6 +64,8 @@ fixmystreet.password_minimum_length = [% c.cobrand.password_minimum_length %];
map_map: '[% loc('Map', "JS") %]',
map_satellite: '[% loc('Satellite', "JS") %]',
+ map_aerial: '[% loc('Aerial', "JS") %]',
+ map_roads: '[% loc('Roads', "JS") %]',
expand_map: '[% loc('Expand map', "JS") %]',
collapse_map: '[% loc('Collapse map', "JS") %]',
diff --git a/templates/web/base/maps/fms.html b/templates/web/base/maps/fms.html
index 286ecc8ff..2df3bd11b 100644
--- a/templates/web/base/maps/fms.html
+++ b/templates/web/base/maps/fms.html
@@ -1,3 +1,9 @@
-[%
-map_html = INCLUDE maps/openlayers.html include_key = 1
-%]
+[% map_sub_links = BLOCK %]
+ [% IF c.req.params.aerial %]
+ <a id="map_layer_toggle" href="[% c.uri_with( { aerial => 0 } ) %]">[% loc('Roads') %]</a>
+ [% ELSE %]
+ <a id="map_layer_toggle" href="[% c.uri_with( { aerial => 1 } ) %]">[% loc('Aerial') %]</a>
+ [% END %]
+[% END %]
+
+[% map_html = INCLUDE maps/openlayers.html include_key = 1 %]
diff --git a/templates/web/base/maps/google-ol.html b/templates/web/base/maps/google-ol.html
index 47c940129..9103ba42b 100644
--- a/templates/web/base/maps/google-ol.html
+++ b/templates/web/base/maps/google-ol.html
@@ -2,11 +2,4 @@
<a class="hidden-nojs" id="map_layer_toggle" href="">[% loc('Satellite') %]</a>
[% END %]
-[% map_html = BLOCK %]
-[% INCLUDE maps/openlayers.html %]
-[% UNLESS around_page %]
-<p class="sub-map-links" id="sub_map_links">
- [% map_sub_links | safe %]
-</p>
-[% END %]
-[% END %]
+[% map_html = INCLUDE maps/openlayers.html %]
diff --git a/templates/web/base/maps/openlayers.html b/templates/web/base/maps/openlayers.html
index f4c78767c..60d7acfde 100644
--- a/templates/web/base/maps/openlayers.html
+++ b/templates/web/base/maps/openlayers.html
@@ -46,3 +46,9 @@
<div class="olControlAttribution" style="position: absolute;">[% map.copyright | safe %]</div>
[% END %]
<img id="loading-indicator" class="hidden" aria-hidden="true" src="/i/loading.svg" alt="Loading...">
+
+[% IF NOT around_page AND map_sub_links %]
+<p class="sub-map-links" id="sub_map_links">
+ [% map_sub_links | safe %]
+</p>
+[% END %]
diff --git a/templates/web/base/maps/osm.html b/templates/web/base/maps/osm.html
index 70d05929f..560055f3b 100644
--- a/templates/web/base/maps/osm.html
+++ b/templates/web/base/maps/osm.html
@@ -1,3 +1,11 @@
+[% map_sub_links = BLOCK %][% IF c.config.BING_MAPS_API_KEY %]
+ [% IF c.req.params.aerial %]
+ <a id="map_layer_toggle" href="[% c.uri_with( { aerial => 0 } ) %]">[% loc('Roads') %]</a>
+ [% ELSE %]
+ <a id="map_layer_toggle" href="[% c.uri_with( { aerial => 1 } ) %]">[% loc('Aerial') %]</a>
+ [% END %]
+[% END %][% END %]
+
[%
map.copyright = ''; # This is handled with OpenLayers.Control.Attribution
map_html = INCLUDE maps/openlayers.html
diff --git a/templates/web/base/my/anonymize.html b/templates/web/base/my/anonymize.html
index e82a03ce0..1159d4ebc 100644
--- a/templates/web/base/my/anonymize.html
+++ b/templates/web/base/my/anonymize.html
@@ -10,7 +10,7 @@
<input class="btn-primary" type="submit" name="hide" value="[% loc('Hide my name in this update') %]">
[% ELSIF problem %]
[% IF problem.bodies_str %]
- <p>[% tprintf(loc('Your name has already been sent to %s, but we can hide it on this page:'), problem.body(c)) %]</p>
+ <p>[% tprintf(loc('Your name has already been sent to %s, but we can hide it on this page:'), problem.body) %]</p>
[% END %]
<input type="hidden" name="problem" value="[% problem.id %]">
<input class="btn-primary" type="submit" name="hide" value="[% loc('Hide my name on this report') %]">
diff --git a/templates/web/base/my/my.html b/templates/web/base/my/my.html
index 04c5b6941..d78461cb5 100644
--- a/templates/web/base/my/my.html
+++ b/templates/web/base/my/my.html
@@ -113,7 +113,7 @@ li .my-account-buttons a {
<div class="item-list__update-wrap">
[% INCLUDE 'report/photo.html' object=u %]
<div class="item-list__update-text">
- [% u.text | add_links | html_para %]
+ [% u.text | staff_html_markup(u.extra) %]
<p class="meta-2">
[% tprintf( loc("Added %s"), prettify_dt( u.confirmed, 'date' ) ) %]
diff --git a/templates/web/base/offline/service_worker.html b/templates/web/base/offline/service_worker.html
index 3c480f9b1..71e5c282a 100644
--- a/templates/web/base/offline/service_worker.html
+++ b/templates/web/base/offline/service_worker.html
@@ -52,15 +52,30 @@ addEventListener('fetch', fetchEvent => {
}
catch {
fetchEvent.waitUntil(async function() {
- var text = await request.text();
- let formData = new URLSearchParams(text);
- formData.set('save', 2);
- formData.set('saved_at', Math.floor(+new Date() / 1000));
- formData = formData.toString();
+ var request_buffer = await request.arrayBuffer();
+ var headers = request.headers;
+ let formData = {};
+ formData.contentType = headers.get('Content-Type');
+ let boundary_re = /.*boundary=(.*)/;
+ let bound = formData.contentType.match(boundary_re);
+
+ let saved = '--' + bound[1] + "\r\nContent-Disposition: form-data; name=\"saved_at\"\r\n\r\n" + Math.floor(+new Date() / 1000) + "\r\n";
+ var savedBuffer = new ArrayBuffer(saved.length);
+ var bufView = new Uint8Array(savedBuffer);
+ for (var i=0; i<saved.length; i++) {
+ bufView[i] = saved.charCodeAt(i);
+ }
+
+ var tmp = new Uint8Array(request_buffer.byteLength + savedBuffer.byteLength);
+ tmp.set(new Uint8Array(request_buffer), 0);
+ tmp.set(bufView, 0);
+ tmp.set(new Uint8Array(request_buffer), savedBuffer.byteLength);
+
+ formData.text = tmp.buffer;
var data = await idbKeyval.get('offlineData') || { cachedReports: {}, forms: [] };
var forms = data.forms;
- if (!forms.length || formData != forms[forms.length - 1][1]) {
+ if (!forms.length || tmp.toString() != new Uint8Array(forms[forms.length - 1][1].text).toString()) {
forms.push([request.url, formData]);
}
return idbKeyval.set('offlineData', data);
diff --git a/templates/web/base/questionnaire/index.html b/templates/web/base/questionnaire/index.html
index 36123013f..416200d25 100644
--- a/templates/web/base/questionnaire/index.html
+++ b/templates/web/base/questionnaire/index.html
@@ -49,13 +49,13 @@
<h3 class="questionnaire-report-reminder__report-title">
<a href="/report/[% problem.id %]">[% problem.title | html %]</a>
</h3>
- <p class="questionnaire-report-reminder__report-meta">[% problem.meta_line(c) | html %]</p>
+ <p class="questionnaire-report-reminder__report-meta">[% problem.meta_line(c.user) | html %]</p>
[% IF updates.size %]
<p class="questionnaire-report-reminder__last-update-header">
<strong>[% loc('Last update') %]</strong>
<a href="/report/[% problem.id %]">[% loc('Show all updates') %]</a>
</p>
- <p class="questionnaire-report-reminder__last-update">&ldquo;[% updates.last.text | add_links %]&rdquo;</p>
+ <p class="questionnaire-report-reminder__last-update">&ldquo;[% updates.last.text | staff_html_markup(updates.last.extra) %]&rdquo;</p>
[% END %]
</div>
@@ -74,30 +74,7 @@
<p><textarea class="form-control" name="update" rows="7" cols="30">[% update | html %]</textarea></p>
-[% IF c.cobrand.allow_photo_upload %]
- <input type="hidden" name="upload_fileid" value="[% upload_fileid %]">
- <label for="form_photo">
- <span data-singular="[% loc('Photo') %]" data-plural="[% loc('Photos') %]">[% loc('Photo') %]</span>
- </label>
-
- [% IF field_errors.photo %]
- <p class='form-error'>[% field_errors.photo %]</p>
- [% END %]
-
- <div id="form_photos">
- [% IF upload_fileid %]
- <p>[% loc('You have already attached photos to this update. Note that you can attach a maximum of 3 to this update (if you try to upload more, the oldest will be removed).') %]</p>
- [% FOREACH id IN upload_fileid.split(',') %]
- <img align="right" src="/photo/temp.[% id %]" alt="">
- [% END %]
- [% END %]
- <input type="file" name="photo1" id="form_photo">
- <label for="form_photo2">[% loc('Photo') %]</label>
- <input type="file" name="photo2" id="form_photo2">
- <label for="form_photo3">[% loc('Photo') %]</label>
- <input type="file" name="photo3" id="form_photo3">
- </div>
-[% END %]
+[% INCLUDE report/form/photo_upload.html %]
<div class="js-another-questionnaire">
<p>4. [% loc('Would you like to receive another questionnaire in 4 weeks, reminding you to check the status?') %]</p>
diff --git a/templates/web/base/report/_council_sent_info.html b/templates/web/base/report/_council_sent_info.html
index dca74f994..ae0f80a2e 100644
--- a/templates/web/base/report/_council_sent_info.html
+++ b/templates/web/base/report/_council_sent_info.html
@@ -1,4 +1,4 @@
-[% SET duration_clause = problem.duration_string(c) %]
+[% SET duration_clause = problem.duration_string %]
[% IF duration_clause || problem.can_display_external_id %]
<p class="council_sent_info">
[%- IF problem.can_display_external_id %]
diff --git a/templates/web/base/report/_inspect.html b/templates/web/base/report/_inspect.html
index 771942b16..1877640b4 100644
--- a/templates/web/base/report/_inspect.html
+++ b/templates/web/base/report/_inspect.html
@@ -1,4 +1,3 @@
-[% permissions = c.user.permissions(problem) %]
[% second_column = BLOCK -%]
<div id="side-inspect">
@@ -6,7 +5,7 @@
[% INCLUDE 'errors.html' %]
- <form name="report_inspect_form" id="report_inspect_form" method="post" action="[% c.uri_for( '/report', problem.id ) %]" class="validate">
+ <form name="report_inspect_form" id="report_inspect_form" method="post" action="[% c.uri_for( '/report', problem.id ) %]" class="validate"[% IF c.cobrand.allow_photo_upload %] enctype="multipart/form-data"[% END %]>
[% INCLUDE 'report/inspect/information.html' %]
@@ -19,13 +18,14 @@
[% FOREACH category IN category_options %]
[% cat_name = category.category;
+ cat_safe = mark_safe(cat_name);
cat_prefix = cat_name | lower | replace('[^a-z]', '');
cat_prefix = "category_" _ cat_prefix _ "_" %]
<p data-category="[% cat_name | html %]"
[%~ IF cat_name != problem.category %] class="hidden"[% END %]
- data-priorities='[% priorities_by_category.$cat_name | html %]'
- data-templates='[% templates_by_category.$cat_name | html %]'>
- [% INCLUDE 'report/new/category_extras_fields.html' metas=category_extras.$cat_name hide_notices=1 show_hidden=1 %]
+ data-priorities='[% priorities_by_category.$cat_safe | html %]'
+ data-templates='[% templates_by_category.$cat_safe | html %]'>
+ [% INCLUDE 'report/new/category_extras_fields.html' metas=category_extras.$cat_safe hide_notices=1 show_hidden=1 %]
</p>
[% END %]
@@ -34,6 +34,7 @@
<label for="state">[% loc('State') %]</label>
[% INCLUDE 'report/inspect/state_groups_select.html' %]
</p>
+ [% TRY %][% INCLUDE 'report/inspect/_raise_defect.html' %][% CATCH file %][% END %]
<div id="js-duplicate-reports" class="[% "hidden" UNLESS problem.duplicate_of %]">
<input type="hidden" name="duplicate_of" value="[% problem.duplicate_of.id %]">
<p class="[% "hidden" UNLESS problem.duplicate_of %]"><strong>[% loc('Duplicate of') %]</strong></p>
diff --git a/templates/web/base/report/_item.html b/templates/web/base/report/_item.html
index 4d74b3be9..f25d5d2a1 100644
--- a/templates/web/base/report/_item.html
+++ b/templates/web/base/report/_item.html
@@ -2,7 +2,18 @@
[% PROCESS 'admin/report_blocks.html' ~%]
[% END ~%]
-[% IF c.user.has_permission_to('planned_reports', problem.bodies_str_ids) OR c.user.is_planned_report(problem) ~%]
+[%
+
+SET relevant_staff = 1;
+SET category_safe = mark_safe(problem.category);
+SET is_user_category = user_categories.$category_safe;
+IF (assigned_users_only.$category_safe OR assigned_categories_only) AND NOT is_user_category;
+ SET relevant_staff = 0;
+END;
+
+~%]
+
+[% IF relevant_staff AND (c.user.has_permission_to('planned_reports', problem.bodies_str_ids) OR c.user.is_planned_report(problem)) ~%]
[% item_extra_class = "item-list__item--indented" ~%]
[% item_action = BLOCK ~%]
<input type="submit" value="1"
@@ -40,7 +51,9 @@
[% PROCESS 'report/_item_photo_title.html' ~%]
[% CATCH file ~%]
[% IF problem.photo %]
- <img class="img" height="60" width="90" src="[% problem.photos.first.url_fp %]" alt="">
+ <noscript class="loading-lazy">
+ <img loading="lazy" class="img" height="60" width="90" src="[% problem.photos.first.url_fp %]" alt="">
+ </noscript>
[% END %]
[% TRY %]
[% PROCESS 'report/_item_heading.html' %]
@@ -49,12 +62,12 @@
[% END %]
[% END ~%]
- [% IF c.user.has_permission_to('report_inspect', problem.bodies_str_ids) %]
+ [% IF relevant_staff AND c.user.has_permission_to('report_inspect', problem.bodies_str_ids) %]
<div class="item-list__description">[% problem.detail | html %]</div>
[% END %]
<small>[% PROCESS 'report/_item_small.html' %]</small>
- [% IF c.user.has_permission_to('report_inspect', problem.bodies_str_ids) %]
+ [% IF relevant_staff AND c.user.has_permission_to('report_inspect', problem.bodies_str_ids) %]
<div class="item-list__item__metadata">
<div>
<h4>[% loc('Report ID:') %]</h4>
@@ -83,10 +96,6 @@
<p>[% problem.response_priority.name OR '-' %]</p>
</div>
<div>
- <h4>[% loc('Traffic management required?') %]</h4>
- <p>[% problem.get_extra_metadata('traffic_information') %]</p>
- </div>
- <div>
<h4>[% loc('Extra details') %]</h4>
<p>[% problem.get_extra_metadata('detailed_information') | html %]</p>
</div>
diff --git a/templates/web/base/report/_item_expandable.html b/templates/web/base/report/_item_expandable.html
index fad935407..ab363482a 100644
--- a/templates/web/base/report/_item_expandable.html
+++ b/templates/web/base/report/_item_expandable.html
@@ -18,7 +18,9 @@
[% IF problem.photo %]
<a href="[% c.cobrand.relative_url_for_report( problem ) %][% problem.url %]" class="item-list__item--expandable__hide-when-expanded">
- <img class="img" height="60" width="90" src="[% problem.photos.first.url_fp %]" alt="">
+ <noscript class="loading-lazy">
+ <img loading="lazy" class="img" height="60" width="90" src="[% problem.photos.first.url_fp %]" alt="">
+ </noscript>
</a>
[% END %]
diff --git a/templates/web/base/report/_report_meta_info.html b/templates/web/base/report/_report_meta_info.html
index e2a6412a3..73e897e34 100644
--- a/templates/web/base/report/_report_meta_info.html
+++ b/templates/web/base/report/_report_meta_info.html
@@ -1,4 +1,4 @@
-[% problem.meta_line(c) | html %]
+[% problem.meta_line(c.user) | html %]
[% IF c.user_exists AND c.user.id == problem.user_id AND !problem.anonymous %]
<small>(<a href="/my/anonymize?problem=[% problem.id | uri %]" class="js-hide-name">[% loc('Hide your name?') %]</a>)</small>
[% END %]
diff --git a/templates/web/base/report/_update_state.html b/templates/web/base/report/_update_state.html
index 0274d7695..d484dcb05 100644
--- a/templates/web/base/report/_update_state.html
+++ b/templates/web/base/report/_update_state.html
@@ -1,10 +1,10 @@
[% # Small chance of duplicates in the case of fixed - user followed by fixed - council %]
-[% SET update_state = update.problem_state %]
-[% IF ( update_state AND update_state != global.last_state AND NOT (global.last_state == "" AND update.problem_state == 'confirmed') )
+[% SET update_state = update.problem_state_processed %]
+[% IF ( update_state AND update_state != global.last_state AND NOT (global.last_state == "" AND update.problem_state_processed == 'confirmed') )
OR update.mark_fixed
OR update.mark_open
%]
- <p class="meta-2">[% loc('State changed to:') %] [% update.problem_state_display(c) %]</p>
+ <p class="meta-2">[% loc('State changed to:') %] [% update.problem_state_display %]</p>
[%- global.last_state = update_state %]
[%- IF update_state == "" AND update.mark_fixed %][% global.last_state = 'fixed - user' %][% END %]
[%- IF update_state == "" AND update.mark_open %][% global.last_state = 'confirmed' %][% END %]
@@ -12,7 +12,7 @@
<p class="meta-2">
[% INCLUDE meta_line %]
- [% IF c.user_exists AND c.user.id == update.user_id AND !update.anonymous %]
+ [% IF c.user_exists AND c.user.id == update.user_id AND !update.anonymous AND NOT (c.user.from_body OR c.user.is_superuser) %]
<small>(<a href="/my/anonymize?update=[% update.id | uri %]" class="js-hide-name">[% loc('Hide your name?') %]</a>)</small>
[% END %]
[% mlog = update.latest_moderation_log_entry(); IF mlog %]
diff --git a/templates/web/base/report/display.html b/templates/web/base/report/display.html
index f08df931d..af2282f66 100644
--- a/templates/web/base/report/display.html
+++ b/templates/web/base/report/display.html
@@ -38,9 +38,6 @@
[% SET shown_form = 1 %]
[% END %]
-[% IF c.user_exists %]
- [% DEFAULT permissions = c.user.permissions(problem) %]
-[%- END %]
[% INCLUDE 'report/_main.html' %]
[% IF problem.duplicate_of %]
diff --git a/templates/web/base/report/display_tools.html b/templates/web/base/report/display_tools.html
index e16ffcb2c..532c78ec8 100644
--- a/templates/web/base/report/display_tools.html
+++ b/templates/web/base/report/display_tools.html
@@ -1,7 +1,7 @@
<div class="shadow-wrap">
<ul id="key-tools">
[% IF c.user_exists OR NOT problem.non_public %]
- [% IF c.user_exists AND c.cobrand.users_can_hide AND c.user.belongs_to_body( problem.bodies_str ) %]
+ [% IF c.cobrand.users_can_hide AND relevant_staff_user %]
<li><form method="post" action="/report/[% problem.id %]/delete" id="remove-from-site-form">
<input type="hidden" name="token" value="[% csrf_token %]">
<button type="submit" id="key-tool-report-abuse" class="abuse" data-confirm="[% loc('Are you sure?') %]" name="remove_from_site">[% loc('Remove from site') %]</button>
@@ -44,9 +44,10 @@
<img src="/i/feed.png" width="16" height="16" title="[% loc('RSS feed') %]" alt="[% loc('RSS feed of updates to this problem' ) %]" border="0">
</a>
[% loc('Receive email when updates are left on this problem.' ) %]</p>
+ [% PROCESS 'auth/form_extra.html' %]
<fieldset>
[% IF c.user_exists %]
- [% IF c.user.has_permission_to("contribute_as_another_user", problem.bodies_str_ids) %]
+ [% IF permissions.contribute_as_another_user %]
<label for="alert_rznvy">[% loc('Email') %]</label>
<div class="form-txt-submit-box">
<input type="email" class="form-control" name="rznvy" id="alert_rznvy" value="[% email | html %]" size="30">
diff --git a/templates/web/base/report/form/photo_upload.html b/templates/web/base/report/form/photo_upload.html
new file mode 100644
index 000000000..960141210
--- /dev/null
+++ b/templates/web/base/report/form/photo_upload.html
@@ -0,0 +1,24 @@
+[% IF c.cobrand.allow_photo_upload %]
+ <input type="hidden" name="upload_fileid" value="[% upload_fileid %]">
+ <label for="form_photo">
+ <span data-singular="[% loc('Photo') %]" data-plural="[% loc('Photos') %]">[% loc('Photo') %]</span>
+ </label>
+
+ [% IF field_errors.photo %]
+ <p class='form-error'>[% field_errors.photo %]</p>
+ [% END %]
+
+ <div id="form_photos">
+ [% IF upload_fileid %]
+ <p>[% loc('You have already attached photos to this update. Note that you can attach a maximum of 3 to this update (if you try to upload more, the oldest will be removed).') %]</p>
+ [% FOREACH id IN upload_fileid.split(',') %]
+ <img align="right" src="/photo/temp.[% id %]" alt="">
+ [% END %]
+ [% END %]
+ <input type="file" name="photo1" id="form_photo">
+ <label for="form_photo2">[% loc('Photo') %]</label>
+ <input type="file" name="photo2" id="form_photo2">
+ <label for="form_photo3">[% loc('Photo') %]</label>
+ <input type="file" name="photo3" id="form_photo3">
+ </div>
+[% END %]
diff --git a/templates/web/base/report/form/submit.html b/templates/web/base/report/form/submit.html
new file mode 100644
index 000000000..950bed965
--- /dev/null
+++ b/templates/web/base/report/form/submit.html
@@ -0,0 +1,2 @@
+<input class="desk-only btn btn--primary btn--block btn--final js-submit_register" type="submit" name="submit_register" value="[% loc('Submit') %]">
+<input class="mob-only btn btn--primary btn--block btn--final js-submit_register" type="submit" name="submit_register_mobile" value="[% loc('Submit') %]">
diff --git a/templates/web/base/report/form/user_loggedout_by_email.html b/templates/web/base/report/form/user_loggedout_by_email.html
index 33526cc46..3446fd767 100644
--- a/templates/web/base/report/form/user_loggedout_by_email.html
+++ b/templates/web/base/report/form/user_loggedout_by_email.html
@@ -7,15 +7,13 @@
[% INCLUDE 'report/form/user_name.html' %]
[% INCLUDE 'report/_show_name_label.html' %]
- [% IF type != 'update' %]
- [% IF NOT c.cobrand.call_hook('disable_phone_number_entry') AND NOT c.config.SMS_AUTHENTICATION %]
- <div id="js-hide-if-username-phone">
- <label for="form_phone">[% loc('Phone number (optional)') %]</label>
- [% IF field_errors.phone %]
- <p class='form-error'>[% field_errors.phone %]</p>
- [% END %]
- <input class="form-control" type="text" value="[% phone | html %]" name="phone" id="form_phone">
- </div>
+ [% IF type != 'update' AND NOT c.config.SMS_AUTHENTICATION %]
+ [% UNLESS c.cobrand.call_hook('disable_phone_number_entry') %]
+ <label for="form_phone">[% loc('Phone number (optional)') %]</label>
+ [% IF field_errors.phone %]
+ <p class='form-error'>[% field_errors.phone %]</p>
+ [% END %]
+ <input class="form-control" type="text" value="[% phone | html %]" name="phone" id="form_phone">
[% END %]
[% END %]
@@ -25,19 +23,44 @@
</div>
[% END %]
- [% PROCESS 'report/form/user_loggedout_email.html' name='username_register' %]
+ [% IF type != 'update' AND c.config.SMS_AUTHENTICATION AND NOT c.cobrand.call_hook('disable_phone_number_entry') %]
- [% IF type != 'update' AND c.config.SMS_AUTHENTICATION %]
- [% UNLESS c.cobrand.call_hook('disable_phone_number_entry') %]
- <div id="js-hide-if-username-phone" class="hidden-js">
- <label for="form_phone">[% loc('Phone number (optional)') %]</label>
- <input class="form-control" type="text" value="[% phone | html %]" name="phone" id="form_phone">
- </div>
+ <fieldset>
+ <legend>How would you like to receive updates?</legend>
+
+ [% IF field_errors.update_method %]
+ <p class='form-error'>[% field_errors.update_method %]</p>
[% END %]
- <div id="js-hide-if-username-email" class="hidden-js">
- <label for="form_email">[% loc('Email address (optional)') %]</label>
- <input class="form-control" type="text" value="[% email | html %]" name="email" id="form_email">
- </div>
+ <p class="segmented-control segmented-control--radio">
+ <input required type="radio" name="update_method" id="update_method_email"
+ data-show="#js-optional-phone" data-hide="#js-optional-email"
+ value="email"[% ' checked' IF update_method == 'email' %]>
+ <label class="btn" for="update_method_email">[% loc('Email') %]</label>
+ <input type="radio" name="update_method" id="update_method_phone"
+ data-show="#js-optional-email" data-hide="#js-optional-phone"
+ value="phone"[% ' checked' IF update_method == 'phone' %]>
+ <label class="btn" for="update_method_phone">[% loc('Phone') %]</label>
+ </p>
+ </fieldset>
+
+ [% IF field_errors.username_register %]
+ <p class='form-error'>[% field_errors.username_register %]</p>
+ [% END %]
+
+ <label for="form_email">[% loc('Your email') %]<span class="hidden-js" id="js-optional-email"> [% loc('(optional)') %]</span></label>
+ [% IF field_errors.email %]
+ <p class='form-error'>[% field_errors.email %]</p>
+ [% END %]
+ <input type="email" name="email" id="form_email" value="[% email %]" class="form-control">
+
+ <label for="form_phone">[% loc('Phone number') %]<span class="hidden-js" id="js-optional-phone"> [% loc('(optional)') %]</span></label>
+ [% IF field_errors.phone %]
+ <p class='form-error'>[% field_errors.phone %]</p>
+ [% END %]
+ <input class="form-control" type="text" value="[% phone %]" name="phone" id="form_phone">
+
+ [% ELSE %]
+ [% PROCESS 'report/form/user_loggedout_email.html' name='username_register' %]
[% END %]
[% IF type == 'update' %]
@@ -62,7 +85,9 @@
<input class="form-control js-password-validate" type="password" name="password_register" id="password_register" aria-describedby="password_register_hint" value="">
- <input class="btn btn--primary btn--block btn--final js-submit_register" type="submit" name="submit_register" value="[% loc('Submit') %]">
+ [% PROCESS 'auth/form_extra.html' %]
+
+ [% PROCESS 'report/form/submit.html' %]
</div>
<!-- /user_loggedout_by_email.html -->
diff --git a/templates/web/base/report/form/user_loggedout_email.html b/templates/web/base/report/form/user_loggedout_email.html
index 9f631987b..db3604d54 100644
--- a/templates/web/base/report/form/user_loggedout_email.html
+++ b/templates/web/base/report/form/user_loggedout_email.html
@@ -2,18 +2,17 @@
[% IF c.config.SMS_AUTHENTICATION %]
[% SET username_label = loc('Your email or mobile') %]
[% SET username_type = 'text' %]
- [% SET username_value = object.user.username %]
[% ELSE %]
[% SET username_label = loc('Your email') %]
[% SET username_type = 'email' %]
- [% SET username_value = object.user.email %]
[% END %]
+[% SET username_field = (name == 'username_sign_in') ? 'username' : name ~%]
<label for="form_[% name %]">[% username_label %]</label>
-[% IF field_errors.username %]
- <p class='form-error'>[% field_errors.username %]</p>
+[% IF field_errors.$name %]
+ <p class='form-error'>[% field_errors.$name %]</p>
[% END %]
-<input type="[% username_type %]" name="username" id="form_[% name %]"
- value="[% username_value | html %]"
+<input type="[% username_type %]" name="[% username_field %]" id="form_[% name %]"
+ value="[% c.get_param(username_field) %]"
class="form-control required">
<!-- /user_loggedout_email.html -->
diff --git a/templates/web/base/report/inspect/extra_details.html b/templates/web/base/report/inspect/extra_details.html
index 7777e9a78..621ae3688 100644
--- a/templates/web/base/report/inspect/extra_details.html
+++ b/templates/web/base/report/inspect/extra_details.html
@@ -3,21 +3,11 @@
<select name="priority" id="problem_priority" class="form-control">
<option value="" [% 'selected' UNLESS problem.response_priority_id OR has_default_priority %]>-</option>
[% FOREACH priority IN problem.response_priorities %]
- <option value="[% priority.id %]" [% 'selected' IF ( problem.response_priority_id == priority.id ) OR priority.is_default %][% 'disabled' IF priority.deleted %]>[% priority.name | html %]</option>
+ <option value="[% priority.id %]" [% 'selected' IF problem.response_priority_id == priority.id OR (NOT problem.response_priority_id AND priority.is_default) %]>[% priority.name | html %]</option>
[% END %]
</select>
</p>
[% IF permissions.report_inspect %]
- <p>
- <label for="traffic_information">[% loc('Traffic management required?') %]</label>
- [% traffic_info = problem.get_extra_metadata('traffic_information') %]
- <select id="traffic_information" name="traffic_information" class="form-control">
- <option value=""[% ' selected' IF NOT traffic_info %]>-</option>
- [% FOREACH option IN problem.traffic_management_options %]
- <option value='[% option %]'[% ' selected' IF traffic_info == option %]>[% option %]</option>
- [% END %]
- </select>
- </p>
[% INCLUDE 'report/inspect/_extra_details_field.html' %]
[% END %]
diff --git a/templates/web/base/report/inspect/information.html b/templates/web/base/report/inspect/information.html
index b81b37543..edebc4a0c 100644
--- a/templates/web/base/report/inspect/information.html
+++ b/templates/web/base/report/inspect/information.html
@@ -6,7 +6,7 @@
<p>
<strong>[% loc('Report ID:') %]</strong>
<span class="js-report-id">[% problem.id %]</span>
- [% IF c.user_exists AND c.cobrand.admin_allow_user(c.user) AND c.user.has_permission_to('report_edit', problem.bodies_str_ids) %]
+ [% IF c.user_exists AND c.cobrand.admin_allow_user(c.user) AND permissions.report_edit %]
(<a href="[% c.uri_for_action( 'admin/reports/edit', [ problem.id ] ) %]">[% loc('admin') %]</a>)
[% END %]
</p>
@@ -53,4 +53,13 @@
</p>
[% END %]
[% END %]
+
+ [% IF permissions.report_edit_category OR permissions.report_inspect %]
+ <!-- These fields are for the asset display code to use -->
+ <input type="hidden" name="inspect_category_group" id="inspect_category_group" value="">
+ <input type="hidden" name="inspect_form_category" id="inspect_form_category" value="">
+ <p>
+ <a href="#" class="btn btn--block btn--change-asset">[% loc('Change asset') %]</a>
+ </p>
+ [% END %]
</div>
diff --git a/templates/web/base/report/inspect/public_update.html b/templates/web/base/report/inspect/public_update.html
index be07d7b89..31940b6ee 100644
--- a/templates/web/base/report/inspect/public_update.html
+++ b/templates/web/base/report/inspect/public_update.html
@@ -7,8 +7,11 @@
[% loc('Save with a public update') %]
</label>
</p>
+ <div id="public_update_form_fields">
+ [% INCLUDE report/form/photo_upload.html %]
<p>
<label for="public_update">[% loc('Public update:') %]</label>
[% INCLUDE 'admin/response_templates_select.html' for='public_update' %]
<textarea rows="2" name="public_update" id="public_update" class="form-control">[% public_update | html %]</textarea>
</p>
+ </div>
diff --git a/templates/web/base/report/new/_category_select.html b/templates/web/base/report/new/_category_select.html
index d5aa9842b..61353647d 100644
--- a/templates/web/base/report/new/_category_select.html
+++ b/templates/web/base/report/new/_category_select.html
@@ -1,3 +1,4 @@
+[% SET filter_group = c.get_param('filter_group') %]
[%~ IF category_groups.size ~%]
[%~ FOREACH group IN category_groups ~%]
[% IF group.name %]<optgroup label="[% group.name %]">[% END %]
diff --git a/templates/web/base/report/new/category.html b/templates/web/base/report/new/category.html
index b5bfd0251..37479e4a5 100644
--- a/templates/web/base/report/new/category.html
+++ b/templates/web/base/report/new/category.html
@@ -10,7 +10,7 @@ END
[% IF category_options.size OR category_groups.size ~%]
[%~ BLOCK category_option ~%]
[% cat_lc = cat.category | lower =%]
- <option value='[% cat.category | html %]'[% ' selected' IF report.category == cat.category || category_lc == cat_lc ~%]
+ <option value='[% cat.category | html %]'[% ' selected' IF ( report.category == cat.category || category_lc == cat_lc ) AND ( NOT filter_group OR filter_group == group.name ) ~%]
>[% IF loop.first %][% cat.category_display %][% ELSE %][% cat.category_display | html %][% END %]
[%~ IF cat.get_extra_metadata('help_text') %] ([% cat.get_extra_metadata('help_text') %])[% END ~%]
</option>
diff --git a/templates/web/base/report/new/category_extras_fields.html b/templates/web/base/report/new/category_extras_fields.html
index 2c728481c..85373a0cf 100644
--- a/templates/web/base/report/new/category_extras_fields.html
+++ b/templates/web/base/report/new/category_extras_fields.html
@@ -21,6 +21,8 @@
<option value="[% option.key %]"[% IF option.key == report_meta.$x_meta_name.value %] selected[% END %]>[% option.name %]</option>
[% END %]
</select>
+ [% ELSIF meta.datatype == 'text' %]
+ <textarea class="form-control" name="[% cat_prefix %][% meta_name %]" id="[% cat_prefix %]form_[% meta_name %]"[% meta.required == 'true' ? ' required' : '' %]>[% report_meta.$x_meta_name.value %]</textarea>
[% ELSE %]
<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 %]
diff --git a/templates/web/base/report/new/form_report.html b/templates/web/base/report/new/form_report.html
index 3b28d4aa7..33dd5769e 100644
--- a/templates/web/base/report/new/form_report.html
+++ b/templates/web/base/report/new/form_report.html
@@ -89,5 +89,6 @@
<input type="hidden" id="single_body_only" name="single_body_only" value="">
<input type="hidden" id="do_not_send" name="do_not_send" value="">
<input type="hidden" name="submit_problem" value="1">
+ <input type="hidden" id="form_service" name="service" value="">
</div>
<!-- /report/new/form_report.html -->
diff --git a/templates/web/base/report/new/form_user_loggedin.html b/templates/web/base/report/new/form_user_loggedin.html
index 0d259e695..9215e7d59 100644
--- a/templates/web/base/report/new/form_user_loggedin.html
+++ b/templates/web/base/report/new/form_user_loggedin.html
@@ -37,6 +37,9 @@
[% IF c.user.email_verified %]
<label for="form_username">[% loc('Email address') %]<span class="hidden"> [% loc('(optional)') %]</span></label>
+ [% IF field_errors.username_register %]
+ <p class='form-error'>[% field_errors.username_register %]</p>
+ [% END %]
<input class="form-control" id="form_username" name="username"
[%- IF NOT can_contribute_as_another_user -%]
disabled
@@ -64,11 +67,12 @@
[% IF c.user.has_permission_to("report_inspect", bodies_ids) OR c.user.has_permission_to("report_mark_private", bodies_ids) %]
<div class="checkbox-group">
<input type="checkbox" name="non_public" id="form_non_public" value="1"
- [%~ ' checked' IF report.non_public OR non_public_categories.$category %]
- [%~ ' disabled' IF non_public_categories.$category %]>
+ [%~ SET category_safe = mark_safe(category) %]
+ [%~ ' checked' IF report.non_public OR non_public_categories.$category_safe %]
+ [%~ ' disabled' IF non_public_categories.$category_safe %]>
<label class="inline" for="form_non_public">[% loc('Private') %] </label>
</div>
[% END %]
-<input class="btn btn--primary btn--block btn--final js-submit_register" type="submit" name="submit_register" value="[% loc('Submit') %]">
+[% PROCESS 'report/form/submit.html' %]
<!-- /report/new/form_user_loggedin.html -->
diff --git a/templates/web/base/report/new/login_success_form.html b/templates/web/base/report/new/login_success_form.html
index 32c414bda..7ef896910 100644
--- a/templates/web/base/report/new/login_success_form.html
+++ b/templates/web/base/report/new/login_success_form.html
@@ -14,6 +14,6 @@
[% PROCESS "report/form/user_loggedout.html" type='report' object=report %]
[% END %]
[% PROCESS 'report/new/form_report.html' %]
- <input class="btn btn--primary btn--block btn--final js-submit_register" type="submit" name="submit_register" value="[% loc('Submit') %]">
+ [% PROCESS 'report/form/submit.html' %]
</div>
</fieldset>
diff --git a/templates/web/base/report/new/oauth_email_form.html b/templates/web/base/report/new/oauth_email_form.html
index a0adbe563..126f93409 100644
--- a/templates/web/base/report/new/oauth_email_form.html
+++ b/templates/web/base/report/new/oauth_email_form.html
@@ -17,6 +17,6 @@
<input type="hidden" name="oauth_need_email" value="1">
[% PROCESS 'report/new/form_report.html' %]
- <input class="btn btn--primary btn--block btn--final js-submit_register" type="submit" name="submit_register" value="[% loc('Submit') %]">
+ [% PROCESS 'report/form/submit.html' %]
</div>
</fieldset>
diff --git a/templates/web/base/report/update.html b/templates/web/base/report/update.html
index ca9397bd4..3b1f092ef 100644
--- a/templates/web/base/report/update.html
+++ b/templates/web/base/report/update.html
@@ -35,7 +35,7 @@
[% INCLUDE 'report/photo.html' object=update %]
<div class="item-list__update-text">
<div class="moderate-display">
- [% update.text | add_links | markup(update.user) | html_para %]
+ [% update.text | staff_html_markup(update.extra) %]
</div>
[% IF can_moderate %]
<div class="moderate-edit">
@@ -43,7 +43,7 @@
<label><input type="checkbox" name="update_revert_text" class="revert-textarea">
[% loc('Revert to original') %]</label>
[% END %]
- <textarea class="form-control" name="update_text">[% update.text | add_links %]</textarea>
+ <textarea class="form-control" name="update_text">[% update.text %]</textarea>
</div>
[% END %]
diff --git a/templates/web/base/report/update/form_state_checkbox.html b/templates/web/base/report/update/form_state_checkbox.html
index 5316affb9..b65df72b7 100644
--- a/templates/web/base/report/update/form_state_checkbox.html
+++ b/templates/web/base/report/update/form_state_checkbox.html
@@ -1,5 +1,7 @@
[% IF (problem.is_fixed OR problem.is_closed) AND ((c.user_exists AND c.user.id == problem.user_id) OR alert_to_reporter) %]
+ [% RETURN IF c.cobrand.reopening_disallowed(problem) ~%]
+
<input type="checkbox" name="reopen" id="form_reopen" value="1"[% ' checked' IF (update.mark_open || c.req.params.reopen) %]>
[% IF problem.is_closed %]
<label class="inline" for="form_reopen">[% loc('This problem is still ongoing') %]</label>
diff --git a/templates/web/base/report/update/form_update.html b/templates/web/base/report/update/form_update.html
index ff4612840..7132331bc 100644
--- a/templates/web/base/report/update/form_update.html
+++ b/templates/web/base/report/update/form_update.html
@@ -1,35 +1,12 @@
<input type="hidden" name="submit_update" value="1">
<input type="hidden" name="id" value="[% problem.id | html %]">
-[% IF c.cobrand.allow_photo_upload %]
- <input type="hidden" name="upload_fileid" value="[% upload_fileid %]">
- <label for="form_photo">
- <span data-singular="[% loc('Photo') %]" data-plural="[% loc('Photos') %]">[% loc('Photo') %]</span>
- </label>
-
- [% IF field_errors.photo %]
- <p class='form-error'>[% field_errors.photo %]</p>
- [% END %]
-
- <div id="form_photos">
- [% IF upload_fileid %]
- <p>[% loc('You have already attached photos to this update. Note that you can attach a maximum of 3 to this update (if you try to upload more, the oldest will be removed).') %]</p>
- [% FOREACH id IN upload_fileid.split(',') %]
- <img align="right" src="/photo/temp.[% id %]" alt="">
- [% END %]
- [% END %]
- <input type="file" name="photo1" id="form_photo">
- <label for="form_photo2">[% loc('Photo') %]</label>
- <input type="file" name="photo2" id="form_photo2">
- <label for="form_photo3">[% loc('Photo') %]</label>
- <input type="file" name="photo3" id="form_photo3">
- </div>
-[% END %]
+[% INCLUDE report/form/photo_upload.html %]
[% TRY %][% PROCESS 'report/update/before_update.html' %][% CATCH file %][% END %]
<label for="form_update">[% loc( 'Update' ) %]</label>
-[% IF c.user AND (c.user.is_superuser OR c.user.belongs_to_body(problem.bodies_str)) %]
+[% IF relevant_staff_user %]
[% INCLUDE 'admin/response_templates_select.html' for='form_update' %]
[% END %]
[% IF field_errors.update %]
@@ -37,7 +14,7 @@
[% END %]
<textarea rows="7" cols="30" name="update" class="form-control" id="form_update" required>[% update.text | html %]</textarea>
-[% IF c.user AND (c.user.is_superuser OR c.user.belongs_to_body(problem.bodies_str)) %]
+[% IF relevant_staff_user %]
<label for="state">[% loc( 'State' ) %]</label>
[% INCLUDE 'report/inspect/state_groups_select.html' %]
[% ELSE %]
diff --git a/templates/web/base/report/update/form_user_loggedin.html b/templates/web/base/report/update/form_user_loggedin.html
index bec783bb4..02e7de51f 100644
--- a/templates/web/base/report/update/form_user_loggedin.html
+++ b/templates/web/base/report/update/form_user_loggedin.html
@@ -4,9 +4,9 @@
[% PROCESS 'user/_anonymity.html' anonymous = update.anonymous %]
- [% can_contribute_as_another_user = c.user.has_permission_to("contribute_as_another_user", problem.bodies_str_ids) %]
- [% can_contribute_as_anonymous_user = c.user.has_permission_to("contribute_as_anonymous_user", problem.bodies_str_ids) %]
- [% can_contribute_as_body = c.user.from_body AND c.user.has_permission_to("contribute_as_body", problem.bodies_str_ids) %]
+ [% can_contribute_as_another_user = permissions.contribute_as_another_user %]
+ [% can_contribute_as_anonymous_user = permissions.contribute_as_anonymous_user %]
+ [% can_contribute_as_body = c.user.from_body AND permissions.contribute_as_body %]
[% IF can_contribute_as_another_user OR can_contribute_as_body OR can_contribute_as_anonymous_user %]
<label for="form_as">[% loc('Provide update as') %]</label>
@@ -23,6 +23,9 @@
[% END %]
</select>
<label for="form_username">[% loc('Email address') %]</label>
+ [% IF field_errors.username_register %]
+ <p class='form-error'>[% field_errors.username_register %]</p>
+ [% END %]
<input class="form-control" name="username" id="form_username" type="text" value="[% c.user.email | html %]">
[% END %]
@@ -35,5 +38,7 @@
<label class="inline" for="form_add_alert">[% loc( 'Alert me to future updates' ) %]</label>
</div>
-<div class="clearfix"><input class="btn btn--primary btn--block btn--final js-submit_register" type="submit" name="submit_register" value="[% loc('Post') %]"></div>
+<div class="clearfix">
+ [% PROCESS 'report/form/submit.html' %]
+</div>
<!-- /report/update/form_user_loggedin.html -->
diff --git a/templates/web/base/report/updates.html b/templates/web/base/report/updates.html
index 93bae4d64..d65f1a287 100644
--- a/templates/web/base/report/updates.html
+++ b/templates/web/base/report/updates.html
@@ -27,6 +27,6 @@
[% RETURN %]
[% END %]
- [% update.meta_line(c) %]
+ [% update.meta_line(c.user) %]
[% END %]
diff --git a/templates/web/base/reports/_body_name.html b/templates/web/base/reports/_body_name.html
new file mode 100644
index 000000000..42392e4cd
--- /dev/null
+++ b/templates/web/base/reports/_body_name.html
@@ -0,0 +1 @@
+[% body.name %]
diff --git a/templates/web/base/reports/_list-filters.html b/templates/web/base/reports/_list-filters.html
index f5d1faa65..9973a0c1f 100644
--- a/templates/web/base/reports/_list-filters.html
+++ b/templates/web/base/reports/_list-filters.html
@@ -1,8 +1,10 @@
[% select_status = PROCESS 'reports/_list-filter-status.html' %]
+[%# We want to only select things that match all filters, if filters are provided ~%]
[% BLOCK category_options %]
[% FOR cat IN categories %]
- <option value="[% cat.category %]"[% ' selected' IF filter_category.${cat.category} OR ( filter_group AND ( cat.get_extra_metadata('group').grep(filter_group).size OR cat.category == filter_group ) ) %]>
+ [% SET cat_safe = mark_safe(cat.category) %]
+ <option value="[% cat.category %]"[% ' selected' IF ( filter_category.size OR filter_group ) AND ( NOT filter_category.size OR filter_category.$cat_safe ) AND ( NOT filter_group OR filter_group == group.name ) %]>
[% cat.category_display %]
[%~ IF cat.get_extra_metadata('help_text') %] ([% cat.get_extra_metadata('help_text') %])[% END ~%]
</option>
diff --git a/templates/web/base/reports/body.html b/templates/web/base/reports/body.html
index d723a7992..d6f9558a3 100755
--- a/templates/web/base/reports/body.html
+++ b/templates/web/base/reports/body.html
@@ -1,9 +1,4 @@
-[% SET body_name = body.name %]
-[% IF c.cobrand.moniker == 'hounslow' %]
- [% SET body_name = 'Hounslow Highways' %]
-[% ELSIF c.cobrand.moniker == 'isleofwight' %]
- [% SET body_name = 'Island Roads' %]
-[% END %]
+[% body_name = PROCESS 'reports/_body_name.html' | trim %]
[% IF ward %]
[% name = "$ward.name, $body_name"
diff --git a/templates/web/base/waste/bin_days.html b/templates/web/base/waste/bin_days.html
new file mode 100644
index 000000000..54c21ae0c
--- /dev/null
+++ b/templates/web/base/waste/bin_days.html
@@ -0,0 +1,105 @@
+[% SET bodyclass = 'waste' %]
+[% USE date(format = '%A, %-d~~~ %B') %]
+
+[% INCLUDE header.html %]
+
+<h1 class="govuk-heading-xl">Your bin days</h1>
+
+<dl class="waste__address">
+ <dt class="waste__address__title">Address</dt>
+ <dd class="waste__address__property">[% property.address %]</dd>
+</dl>
+<div class="waste__collections">
+ <h2 class="govuk-heading-l govuk-!-margin-bottom-2">Your collections</h2>
+ <div class="govuk-grid-row">
+ <div class="govuk-grid-column-two-thirds">
+
+[% SET any_report_allowed = 0 ~%]
+[% SET any_request_allowed = 0 ~%]
+[% FOR unit IN service_data %]
+
+<h3 class="govuk-heading-m waste-service-name">[% unit.service_name %]</h3>
+<div class="govuk-grid-row">
+ [% SET image = c.cobrand.image_for_service(unit.service_id) ~%]
+ [% IF image %]
+ <div class="govuk-grid-column-one-quarter text-centered">
+ <img src="[% image %].png" srcset="[% image %].png 1x, [% image %]@2x.png 2x" alt="" class="waste-service-image">
+ </div>
+ <div class="govuk-grid-column-three-quarters">
+ [% ELSE %]
+ <div class="govuk-grid-column-full">
+ [% END %]
+ <dl class="govuk-summary-list">
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key">Frequency</dt>
+ <dd class="govuk-summary-list__value">[% unit.schedule %]</dd>
+ </div>
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key">Next collection</dt>
+ <dd class="govuk-summary-list__value">
+ [% IF unit.next %]
+ [% date.format(unit.next.date) | replace('~~~', unit.next.ordinal) %]
+ [% IF unit.next.changed %](this collection has been adjusted from its usual time)[% END %]
+ [% IF unit.next.state == 'In progress' %](in progress)[% END %]
+ [% ELSE %]
+ <i>None</i>
+ [% END %]
+ </dd>
+ </div>
+ [% IF unit.last %]
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key">Last collection</dt>
+ <dd class="govuk-summary-list__value">
+ [% date.format(unit.last.date) | replace('~~~', unit.last.ordinal) %]
+ [% IF unit.last.changed %](this collection has been adjusted from its usual time)[% END %]
+ [% IF unit.last.state == 'In progress' %](in progress)[% END %]
+ [% IF unit.last.completed %](completed at [% date.format(unit.last.completed, '%l:%M%p') | lower ~%])[% END ~%]
+ [% IF unit.last.resolution %][% unit.last.resolution | staff_html_markup({ is_body_user => 1 }) %][% END ~%]
+ </dd>
+ </div>
+ [% END %]
+ </dl>
+
+ <div class="waste-services-launch-panel" id="panel-[% unit.service_id %]">
+ [% PROCESS waste/services.html %]
+ </div>
+ </div>
+</div>
+[% END %]
+[% IF NOT service_data.size %]
+ <p>This property has no collections.</p>
+[% END %]
+
+ [% TRY %][% PROCESS waste/services_extra.html %][% CATCH file %][% END %]
+
+ </div>
+
+ [% IF service_data.size %]
+ <div class="govuk-grid-column-one-third">
+ <div class="aside">
+ <div class="aside-download">
+ <h3>Download your collection schedule</h3>
+ <ul>
+ <li><a href="[% c.uri_for_action('waste/calendar', [ property.id ]) %]">Add to your calendar (.ics file)</a></li>
+ </ul>
+ </div>
+ [% IF any_report_allowed OR any_request_allowed %]
+ <div class="aside-services">
+ <h3>More services</h3>
+ <ul>
+ [% IF any_report_allowed %]
+ <li><a href="[% c.uri_for_action('waste/report', [ property.id ]) %]">Report a missed collection</a></li>
+ [% END %]
+ [% IF any_request_allowed %]
+ <li><a href="[% c.uri_for_action('waste/request', [ property.id ]) %]">Request a new container</a></li>
+ [% END %]
+ </ul>
+ </div>
+ [% END %]
+ </div>
+ </div>
+ [% END %]
+ </div>
+</div>
+[% INCLUDE footer.html %]
+
diff --git a/templates/web/base/waste/confirmation.html b/templates/web/base/waste/confirmation.html
new file mode 100644
index 000000000..9bacd9a2b
--- /dev/null
+++ b/templates/web/base/waste/confirmation.html
@@ -0,0 +1,34 @@
+[%
+IF first_page == 'request';
+ title = 'Container request sent';
+ELSIF first_page == 'report';
+ title = 'Missed collection reported';
+ELSE;
+ title = 'Enquiry submitted';
+END ~%]
+[% INCLUDE header.html %]
+
+<div class="govuk-panel govuk-panel--confirmation">
+ <h1 class="govuk-panel__title">
+ [% title %]
+ </h1>
+ <div class="govuk-panel__body">
+ <p>Your [% first_page %] has been sent;
+ [% IF data.email %]
+ a copy has been sent to your email address, [% data.email %].
+ [% END %]
+ </p>
+ <p>
+ [% IF first_page == 'request' %]
+ Containers arrive typically within two weeks, but this may vary due to demand.
+ [% END %]
+ [% IF report_ids.size > 1 %]
+ Your reference numbers are: <strong>[% report_ids.join(', ') %]</strong>.
+ [% ELSE %]
+ Your reference number is <strong>[% report_ids.join(', ') %]</strong>.
+ [% END %]
+ </p>
+ </div>
+</div>
+
+[% INCLUDE footer.html %]
diff --git a/templates/web/base/waste/enquiry.html b/templates/web/base/waste/enquiry.html
new file mode 100644
index 000000000..06c8f7f76
--- /dev/null
+++ b/templates/web/base/waste/enquiry.html
@@ -0,0 +1,33 @@
+[% SET bodyclass = 'waste' %]
+[% INCLUDE header.html %]
+
+[% PROCESS 'waste/govuk/fields.html' %]
+[% PROCESS title %]
+[% SET service_id = c.req.params.service_id %]
+
+<dl class="waste__address">
+ <dt class="waste__address__title">Address</dt>
+ <dd class="waste__address__property">[% property.address %]</dd>
+</dl>
+
+<dl class="waste__address">
+ <dt class="waste__address__title">Service</dt>
+ <dd class="waste__address__property">[% services.$service_id.service_name %]</dd>
+</dl>
+
+<form method="get" action="[% c.uri_for_action('waste/enquiry', [ property.id ]) %]">
+ <div class="govuk-form-group">
+ [% PROCESS radio field = {
+ id = 'category',
+ html_name = 'category',
+ label = 'Category',
+ options = field_options
+ }
+ %]
+ </div>
+ <div class="govuk-form-group"><input type="submit" value="Continue" class="govuk-button"></div>
+
+ <input type="hidden" name="service_id" value="[% service_id %]">
+</form>
+
+[% INCLUDE footer.html %]
diff --git a/templates/web/base/waste/govuk/fields.html b/templates/web/base/waste/govuk/fields.html
new file mode 100644
index 000000000..3be0194b0
--- /dev/null
+++ b/templates/web/base/waste/govuk/fields.html
@@ -0,0 +1,250 @@
+[% BLOCK form %]
+ [% FOR field IN form.sorted_fields %]
+ [% NEXT IF field.name == 'back' %]
+ [% SET error = field.errors.join(' ') ~%]
+ <div class="govuk-form-group[% IF error %] govuk-form-group--error[% END %][% ' hidden-js' IF field.get_tag('initial_hidden') %]" id="form-[% field.id %]-row">
+ [% IF field.widget == 'Submit' %]
+ [% field.render_element | safe %]
+ [% ELSIF field.widget == 'Hidden' %]
+ [% PROCESS hidden %]
+ [% ELSIF field.widget == 'Text' %]
+ [% PROCESS text %]
+ [% ELSIF field.widget == 'Textarea' %]
+ [% PROCESS textarea %]
+ [% ELSIF field.widget == 'RadioGroup' %]
+ [% PROCESS radio %]
+ [% ELSIF field.widget == 'Select' %]
+ [% PROCESS select %]
+ [% ELSIF field.widget == 'CheckboxGroup' %]
+ [% PROCESS checkboxes options=field.options %]
+ [% ELSIF field.widget == 'Checkbox' %]
+ [% PROCESS checkboxes options=[{ value = 1, label = field.option_label }] %]
+ [% ELSIF field.type == 'DateTime' # Date %]
+ [% PROCESS date %]
+ [% ELSE %]
+ [% field.html_name %] [% field.widget %] NOT HANDLED
+ [% END %]
+ </div>
+ [% END %]
+[% END %]
+
+[% BLOCK back %]
+ [% IF form.field('back').is_active %]
+ [% form.field('back').render_element | safe %]
+ [% END %]
+[% END %]
+
+[% BLOCK errors %]
+ [% IF form.errors %]
+ <div class="govuk-error-summary" aria-labelledby="error-summary-title" role="alert" tabindex="-1" data-module="govuk-error-summary">
+ <h2 class="govuk-error-summary__title" id="error-summary-title">
+ There is a problem
+ </h2>
+ <div class="govuk-error-summary__body">
+ <ul class="govuk-list govuk-error-summary__list">
+ [% FOR error IN form.errors %]
+ <li>
+ <a href="#">[% error %]</a>
+ </li>
+ [% END %]
+ </ul>
+ </div>
+ </div>
+ [% END %]
+[% END %]
+
+[% BLOCK title %]
+ <h1 class="govuk-heading-xl">[% title %]</h1>
+[% END %]
+
+[% BLOCK checkboxes %]
+ <fieldset class="govuk-fieldset" aria-describedby="[% IF field.get_tag('hint') %][% field.id %]-hint [% END %][% IF error %][% field.id %]-error[% END %]">
+[% IF field.label %]
+ <legend class="govuk-fieldset__legend govuk-fieldset__legend--l">
+ <h2 class="govuk-fieldset__heading">
+ [% field.label %]
+ </h2>
+ </legend>
+[% END %]
+[% IF field.get_tag('hint') %]
+ <span id="[% field.id %]-hint" class="govuk-hint">[% field.get_tag('hint') %]</span>
+[% END %]
+[% IF error %]
+ <span id="[% field.id %]-error" class="govuk-error-message">
+ <span class="govuk-visually-hidden">Error:</span> [% error %]
+ </span>
+[% END %]
+ <div class="govuk-checkboxes">
+ [% FOR item IN options %]
+ [% hint = item.hint OR item.get_tag('hint') %]
+ <div class="govuk-checkboxes__item">
+ <input type="checkbox" class="govuk-checkboxes__input" id="[% field.id %]-[% loop.index %]"
+ name="[% field.html_name %]" value="[% item.value %]"[% ' aria-describedby="' _ field.id _ '-item-hint"' IF hint %]
+ [% 'data-toggle-visibility="#' _ field.get_tag('toggle') _ '"' IF field.get_tag('toggle') ~%]
+ [% 'checked' IF field.fif.grep(item.value).size %]>
+ <label class="govuk-label govuk-checkboxes__label" for="[% field.id %]-[% loop.index %]">
+ [% item.label %]
+ </label>
+[% IF hint %]
+ <span id="[% field.id %]-item-hint" class="govuk-hint govuk-checkboxes__hint">
+ [% hint %]
+ </span>
+[% END %]
+ </div>
+ [% END %]
+ </div>
+ </fieldset>
+[% END %]
+
+[% BLOCK date %]
+ <fieldset class="govuk-fieldset" role="group"
+ [%~ IF field.get_tag('hint') OR error %]
+ aria-describedby="[% IF field.get_tag('hint') %][% field.id %]-hint [% END %][% IF error %][% id %]-error[% END %]"
+ [%~ END %]>
+ <legend class="govuk-fieldset__legend govuk-fieldset__legend--xl">
+ <h2 class="govuk-fieldset__heading">
+ [% field.label %]
+ </h2>
+ </legend>
+[% IF field.get_tag('hint') %]
+ <span id="[% field.id %]-hint" class="govuk-hint">
+ [% field.get_tag('hint') %]
+ </span>
+[% END %]
+[% IF error %]
+ <span id="[% field.id %]-error" class="govuk-error-message">
+ <span class="govuk-visually-hidden">Error:</span> [% error %]
+ </span>
+[% END %]
+ <div class="govuk-date-input" id="[% field.id %]">
+ <div class="govuk-date-input__item">
+ <div class="govuk-form-group">
+ <label class="govuk-label govuk-date-input__label" for="[% field.id %].day">
+ Day
+ </label>
+ <input class="govuk-input govuk-date-input__input govuk-input--width-2[% IF error %] govuk-input--error[% END %]"
+ id="[% field.id %].day" name="[% field.html_name %].day" type="text" value="[% field.fif.day %]" pattern="[0-9]*" inputmode="numeric">
+ </div>
+ </div>
+ <div class="govuk-date-input__item">
+ <div class="govuk-form-group">
+ <label class="govuk-label govuk-date-input__label" for="[% field.id %].month">
+ Month
+ </label>
+ <input class="govuk-input govuk-date-input__input govuk-input--width-2[% IF error %] govuk-input--error[% END %]"
+ id="[% field.id %].month" name="[% field.html_name %].month" type="text" value="[% field.fif.month %]" pattern="[0-9]*" inputmode="numeric">
+ </div>
+ </div>
+ <div class="govuk-date-input__item">
+ <div class="govuk-form-group">
+ <label class="govuk-label govuk-date-input__label" for="[% field.id %].year">
+ Year
+ </label>
+ <input class="govuk-input govuk-date-input__input govuk-input--width-4[% IF error %] govuk-input--error[% END %]"
+ id="[% field.id %].year" name="[% field.html_name %].year" type="text" value="[% field.fif.year %]" pattern="[0-9]*" inputmode="numeric">
+ </div>
+ </div>
+ </div>
+ </fieldset>
+[% END %]
+
+[% BLOCK radio %]
+ <fieldset class="govuk-fieldset" aria-describedby="[% IF field.get_tag('hint') %][% field.id %]-hint [% END %][% IF error %][% field.id %]-error[% END %]">
+ <legend class="govuk-fieldset__legend govuk-fieldset__legend--l">
+ <h2 class="govuk-fieldset__heading">
+ [% field.label %]
+ </h2>
+ </legend>
+[% IF field.get_tag('hint') %]
+ <span id="[% field.id %]-hint" class="govuk-hint">[% field.get_tag('hint') %]</span>
+[% END %]
+[% IF error %]
+ <span id="[% field.id %]-error" class="govuk-error-message">
+ <span class="govuk-visually-hidden">Error:</span> [% error %]
+ </span>
+[% END %]
+ <div class="govuk-radios[% IF field.get_tag('inline') %] govuk-radios--inline[% END %][% IF field.get_tag('small') %] govuk-radios--small[% END %]">
+ [% FOR item IN field.options %]
+ [% IF loop.last AND field.get_tag('last_differs') %]
+ <div class="govuk-radios__divider">or</div>
+ [% END %]
+ <div class="govuk-radios__item">
+ <input type="radio" class="govuk-radios__input" id="[% field.id %]-[% loop.index %]"
+ name="[% field.html_name %]" value="[% item.value %]"
+ [% 'checked' IF field.fif == item.value %]>
+ <label class="govuk-label govuk-radios__label" for="[% field.id %]-[% loop.index %]">
+ [% item.label %]
+ </label>
+ </div>
+ [% END %]
+ </div>
+ </fieldset>
+[% END %]
+
+[% BLOCK hidden %]
+ <input type="hidden" name="[% field.html_name %]" id="[% field.id %]" value="[% field.fif %]">
+[% END %]
+
+[% BLOCK text %]
+ <label class="govuk-label" for="[% field.id %]">
+ [% field.label %]
+ </label>
+ [% IF field.get_tag('hint') %]
+ <span id="[% field.id %]-hint" class="govuk-hint">
+ [% field.get_tag('hint') %]
+ </span>
+ [% END %]
+ [% IF error %]
+ <span id="[% field.id %]-error" class="govuk-error-message">
+ <span class="govuk-visually-hidden">Error:</span> [% error %]
+ </span>
+ [% END %]
+ <input class="govuk-input[% IF error %] govuk-input--error[% END %]" id="[% field.id %]" name="[% field.html_name %]" type="text"
+ value="[% field.fif %]"
+ [%~ IF field.get_tag('autofocus') %] autofocus[% END ~%]
+ [%~ IF field.get_tag('hint') OR error %]
+ aria-describedby="[% IF field.get_tag('hint') %][% field.id %]-hint [% END %][% IF error %][% id %]-error[% END %]"
+ [%~ END %]>
+[% END %]
+
+[% BLOCK textarea %]
+ <label class="govuk-label" for="[% field.id %]">
+ [% field.label %]
+ </label>
+ [% IF field.get_tag('hint') %]
+ <span id="[% field.id %]-hint" class="govuk-hint">
+ [% field.get_tag('hint') %]
+ </span>
+ [% END %]
+ [% IF error %]
+ <span id="[% field.id %]-error" class="govuk-error-message">
+ <span class="govuk-visually-hidden">Error:</span> [% error %]
+ </span>
+ [% END %]
+ <textarea class="govuk-textarea[% IF error %] govuk-textarea--error[% END %]" id="[% field.id %]"
+ name="[% field.html_name %]" rows="5"
+ [%~ IF field.get_tag('hint') OR error %]
+ aria-describedby="[% IF field.get_tag('hint') %][% field.id %]-hint [% END %][% IF error %][% id %]-error[% END %]"
+ [%~ END %]>[% field.fif %]</textarea>
+[% END %]
+
+[% BLOCK select %]
+ <label class="govuk-label" for="[% field.id %]">
+ [% field.label %]
+ </label>
+ [% IF field.get_tag('hint') %]
+ <span id="[% field.id %]-hint" class="govuk-hint">
+ [% field.get_tag('hint') %]
+ </span>
+ [% END %]
+ [% IF error %]
+ <span id="[% field.id %]-error" class="govuk-error-message">
+ <span class="govuk-visually-hidden">Error:</span> [% error %]
+ </span>
+ [% END %]
+ <select class="govuk-select" id="[% field.id %]" name="[% field.html_name %]">
+ [% FOR item IN field.options %]
+ <option value="[% item.value %]"[% ' selected' IF field.fif == item.value %]>[% item.label %]</option>
+ [% END %]
+ </select>
+[% END %]
diff --git a/templates/web/base/waste/index.html b/templates/web/base/waste/index.html
new file mode 100644
index 000000000..0750ac82a
--- /dev/null
+++ b/templates/web/base/waste/index.html
@@ -0,0 +1,19 @@
+[% SET bodyclass = 'waste' %]
+
+[% INCLUDE header.html %]
+
+ [% PROCESS 'waste/govuk/fields.html' %]
+ [% PROCESS back %]
+ [% PROCESS errors %]
+ [% PROCESS title %]
+ [% IF property %]
+ <dl class="waste__address">
+ <dt class="waste__address__title">Address</dt>
+ <dd class="waste__address__property">[% property.address %]</dd>
+ </dl>
+ [% END %]
+<form method="post">
+ [% PROCESS form %]
+</form>
+
+[% INCLUDE footer.html %]
diff --git a/templates/web/base/waste/missing.html b/templates/web/base/waste/missing.html
new file mode 100644
index 000000000..e80ce87a2
--- /dev/null
+++ b/templates/web/base/waste/missing.html
@@ -0,0 +1,22 @@
+[% INCLUDE header.html %]
+
+<h1 class="govuk-heading-xl">No address on record</h1>
+
+<p class="govuk-body-l">We can’t find your address in our records</p>
+
+<p class="govuk-body">We can’t find your address. This may be because:</p>
+
+<ul class="govuk-list govuk-list--bullet">
+ <li>It’s a commercial or non-residential property and isn’t eligible for kerbside collections
+ <li>It’s a brand new address and hasn’t had collections arranged yet
+ <li>It’s outside of our area, you can find your council who is responsible for your bins on <a href="https://gov.uk/">GOV.UK</a>
+</ul>
+
+<h2 class="govuk-heading-m">What you can do now</h2>
+
+<ul class="govuk-list govuk-list--bullet">
+ <li>Check your address details and <a href="[% c.uri_for_action('waste/index') %]">search again</a>
+ <li>Call our customer service team on 0800 647 7836 who will be pleased to assist you
+</ul>
+
+[% INCLUDE footer.html %]
diff --git a/templates/web/base/waste/summary.html b/templates/web/base/waste/summary.html
new file mode 100644
index 000000000..7fa79b05b
--- /dev/null
+++ b/templates/web/base/waste/summary.html
@@ -0,0 +1,70 @@
+[% SET bodyclass = 'waste' %]
+
+[% USE date(format = '%A, %-d~~~ %B') ~%]
+[% PROCESS 'waste/govuk/fields.html' ~%]
+[% INCLUDE header.html %]
+
+[% PROCESS errors %]
+[% SET data = form.saved_data ~%]
+
+<h1 class="govuk-heading-xl">[% title %]</h1>
+<p>Please review the information you’ve provided before you submit your [% thing %].</p>
+
+<div class="waste__summary">
+<dl class="govuk-summary-list">
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key">
+ [% summary_title %]
+ </dt>
+ <dd class="govuk-summary-list__value">
+ </dd>
+ <dd class="govuk-summary-list__actions">
+ <form method="post">
+ <input type="hidden" name="saved_data" value="[% form.fif.saved_data %]">
+ <input type="hidden" name="goto" value="[% step1 %]">
+ <input type="submit" class="govuk-button govuk-button--secondary govuk-!-margin-bottom-0" value="Change answers">
+ </form>
+ </dd>
+ </div>
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key govuk-summary-list__key--sub">Address</dt>
+ <dd class="govuk-summary-list__value">[% property.address %]</dd>
+ </div>
+ [% INCLUDE answers %]
+
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key">
+ About you
+ </dt>
+ <dd class="govuk-summary-list__value">
+ </dd>
+ <dd class="govuk-summary-list__actions">
+ <form method="post">
+ <input type="hidden" name="saved_data" value="[% form.fif.saved_data %]">
+ <input type="hidden" name="goto" value="about_you">
+ <input type="submit" class="govuk-button govuk-button--secondary govuk-!-margin-bottom-0" value="Change answers">
+ </form>
+ </dd>
+ </div>
+
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key govuk-summary-list__key--sub">Your name</dt>
+ <dd class="govuk-summary-list__value">[% data.name %]</dd>
+ </div>
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key govuk-summary-list__key--sub">Telephone number</dt>
+ <dd class="govuk-summary-list__value">[% data.phone %]</dd>
+ </div>
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key govuk-summary-list__key--sub">Email</dt>
+ <dd class="govuk-summary-list__value">[% data.email %]</dd>
+ </div>
+
+</dl>
+
+<form method="post">
+ [% PROCESS form %]
+</form>
+</div>
+
+[% INCLUDE footer.html %]
diff --git a/templates/web/base/waste/summary_enquiry.html b/templates/web/base/waste/summary_enquiry.html
new file mode 100644
index 000000000..8e5967a3b
--- /dev/null
+++ b/templates/web/base/waste/summary_enquiry.html
@@ -0,0 +1,19 @@
+[%
+title = 'Submit enquiry';
+thing = 'enquiry';
+summary_title = data.category;
+step1 = 'enquiry';
+%]
+
+[% BLOCK answers %]
+ [% FOR extra IN data.keys.grep('^extra_') %]
+ [% NEXT UNLESS data.$extra %]
+ [% SET extra_name = extra.replace('extra_', '') %]
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key govuk-summary-list__key--sub">[% extra_name | title %]</dt>
+ <dd class="govuk-summary-list__value">[% data.$extra %]</dd>
+ </div>
+ [% END %]
+[% END %]
+
+[% PROCESS waste/summary.html %]
diff --git a/templates/web/base/waste/summary_report.html b/templates/web/base/waste/summary_report.html
new file mode 100644
index 000000000..a67090e6e
--- /dev/null
+++ b/templates/web/base/waste/summary_report.html
@@ -0,0 +1,19 @@
+[%
+title = 'Submit missed bin report';
+thing = 'missed bin report';
+summary_title = 'Missed collection';
+step1 = 'report';
+%]
+
+[% BLOCK answers %]
+ [% FOR service IN data.keys.grep('^service-') %]
+ [% NEXT UNLESS data.$service %]
+ [% SET service_id = service.replace('service-', '') %]
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key govuk-summary-list__key--sub">[% services.$service_id.service_name %]</dt>
+ <dd class="govuk-summary-list__value">[% date.format(services.$service_id.last.date) | replace('~~~', services.$service_id.last.ordinal) %]</dd>
+ </div>
+ [% END %]
+[% END %]
+
+[% PROCESS waste/summary.html %]
diff --git a/templates/web/base/waste/summary_request.html b/templates/web/base/waste/summary_request.html
new file mode 100644
index 000000000..83c4091aa
--- /dev/null
+++ b/templates/web/base/waste/summary_request.html
@@ -0,0 +1,20 @@
+[%
+title = 'Submit container request';
+thing = 'container request';
+summary_title = 'Container requests';
+step1 = 'request';
+%]
+
+[% BLOCK answers %]
+ [% FOR container IN data.keys.grep('^container-') %]
+ [% NEXT UNLESS data.$container %]
+ [% SET container_id = container.replace('container-', '') %]
+ [% SET quantity_key = container.replace('container-', 'quantity-') %]
+ <div class="govuk-summary-list__row">
+ <dt class="govuk-summary-list__key govuk-summary-list__key--sub">[% containers.$container_id %]</dt>
+ <dd class="govuk-summary-list__value">[% data.$quantity_key %]</dd>
+ </div>
+ [% END %]
+[% END %]
+
+[% PROCESS waste/summary.html %]
diff --git a/templates/web/bathnes/contact/index.html b/templates/web/bathnes/contact/index.html
index f0589bd9e..aaa0d3c57 100644
--- a/templates/web/bathnes/contact/index.html
+++ b/templates/web/bathnes/contact/index.html
@@ -63,7 +63,7 @@
[% IF problem.anonymous %]
[% tprintf( loc('Reported anonymously at %s'), prettify_dt( problem.confirmed ) ) %]
[% ELSE %]
- [% tprintf( loc('Reported by %s at %s'), problem.user.name, prettify_dt( problem.confirmed ) ) | html %]
+ [% tprintf( loc('Reported by %s at %s'), problem.name, prettify_dt( problem.confirmed ) ) | html %]
[% END %]
</cite>
diff --git a/templates/web/bathnes/footer_extra.html b/templates/web/bathnes/footer_extra.html
index 4651fdaa5..cfc723498 100644
--- a/templates/web/bathnes/footer_extra.html
+++ b/templates/web/bathnes/footer_extra.html
@@ -12,7 +12,7 @@
</div>
<ul class="footer-list">
- <li><a href="http://www.bathnes.gov.uk/contact-us">Contact Us</a></li>
+ <li><a href="https://www.bathnes.gov.uk/contact-us">Contact Us</a></li>
<li><a href="/privacy">Privacy and Cookies</a></li>
</ul>
</div>
diff --git a/templates/web/bathnes/footer_extra_js.html b/templates/web/bathnes/footer_extra_js.html
index e46e103e8..fcbbe6eb4 100644
--- a/templates/web/bathnes/footer_extra_js.html
+++ b/templates/web/bathnes/footer_extra_js.html
@@ -1,4 +1,11 @@
-[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 roadworks=1 %]
+[%
+IF bodyclass.match('mappage');
+ scripts.push(
+ version('/cobrands/bathnes/js.js')
+ );
+END
+%]
[%~
SET council_area_id = c.cobrand.council_area_id;
IF c.user_exists AND ((c.user.from_body AND c.user.from_body.areas.$council_area_id) OR c.user.is_superuser);
diff --git a/templates/web/bathnes/header_site.html b/templates/web/bathnes/header_site.html
index e39882b58..0c56b86e3 100644
--- a/templates/web/bathnes/header_site.html
+++ b/templates/web/bathnes/header_site.html
@@ -18,7 +18,7 @@
<a href="#main-nav" class="navigation-trigger">Menu</a>
<div class="header-search header-search--desktop">
- <form id="search" class="site-search" action="http://www.bathnes.gov.uk/search/site/" method="post">
+ <form id="search" class="site-search" action="https://www.bathnes.gov.uk/search/site/" method="post">
<label class="form-label visuallyhidden" for="search-site">Search across the site</label>
<input class="form-control" id="search-site" type="text" name="search_block_form" placeholder="Search bathnes.gov.uk">
<input type="hidden" name="form_id" value="search_block_form">
diff --git a/templates/web/bathnes/report/_council_sent_info.html b/templates/web/bathnes/report/_council_sent_info.html
index 1963020bc..c7e1eaf1d 100644
--- a/templates/web/bathnes/report/_council_sent_info.html
+++ b/templates/web/bathnes/report/_council_sent_info.html
@@ -1,4 +1,4 @@
-[% SET duration_clause = problem.duration_string(c) %]
+[% SET duration_clause = problem.duration_string %]
[% IF duration_clause || problem.whensent %]
<p class="council_sent_info">
[%- IF problem.whensent %]
diff --git a/templates/web/bexley/footer_extra_js.html b/templates/web/bexley/footer_extra_js.html
index 7369f7147..61a02cdf0 100644
--- a/templates/web/bexley/footer_extra_js.html
+++ b/templates/web/bexley/footer_extra_js.html
@@ -1 +1 @@
-[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 tfl=1 %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 tfl=1 roadworks=1 %]
diff --git a/templates/web/borsetshire/auth/_general_top.html b/templates/web/borsetshire/auth/_general_top.html
index 3ab3c39bc..5067772fe 100644
--- a/templates/web/borsetshire/auth/_general_top.html
+++ b/templates/web/borsetshire/auth/_general_top.html
@@ -1,3 +1,5 @@
+<div class="hidden-nojs">
+
<p>
Click on one of the buttons below to log in as one of the four
different types of user we’ve set up on this demo site:
@@ -21,3 +23,35 @@ different types of user we’ve set up on this demo site:
<p>
Or sign in as normal, with an email address and password:
</p>
+
+</div>
+
+<script nonce="[% csp_nonce %]">
+(function(){
+
+ fixmystreet.borsetshire = fixmystreet.borsetshire || {};
+ fixmystreet.borsetshire.set_redirect = function(form) {
+ var e = form.username.value;
+ if (e == 'inspector@example.org') {
+ form.r.value = 'my/planned';
+ } else if (e == 'cs@example.org') {
+ form.r.value = 'reports';
+ } else if (e == 'super@example.org') {
+ form.r.value = 'admin';
+ }
+ };
+
+ function set_up_button() {
+ var form = document.forms.general_auth;
+ form.username.value = this.getAttribute('data-email');
+ form.password_sign_in.value = 'password';
+ fixmystreet.borsetshire.set_redirect(form);
+ form.submit();
+ }
+
+ [].forEach.call(document.querySelectorAll('#demo-user-list button'), function(b) {
+ b.addEventListener('click', set_up_button);
+ });
+
+})();
+</script>
diff --git a/templates/web/borsetshire/footer_extra_js.html b/templates/web/borsetshire/footer_extra_js.html
index 3e443af71..e0dfe4995 100644
--- a/templates/web/borsetshire/footer_extra_js.html
+++ b/templates/web/borsetshire/footer_extra_js.html
@@ -2,4 +2,8 @@
version('/cobrands/fixmystreet-uk-councils/js.js'),
version('/cobrands/borsetshire/google_maps_style.js'),
version('/cobrands/borsetshire/js.js'),
-) %]
+);
+IF bodyclass.match('mappage');
+ scripts.push( version('/cobrands/fixmystreet/assets.js') );
+END;
+%]
diff --git a/templates/web/bristol/footer_extra_js.html b/templates/web/bristol/footer_extra_js.html
index 3965c9d1e..60fe6822c 100644
--- a/templates/web/bristol/footer_extra_js.html
+++ b/templates/web/bristol/footer_extra_js.html
@@ -1 +1 @@
-[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 ~%]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 roadworks=1 ~%]
diff --git a/templates/web/bromley/about/faq-en-gb.html b/templates/web/bromley/about/faq-en-gb.html
index 615069150..a4d60c75d 100755
--- a/templates/web/bromley/about/faq-en-gb.html
+++ b/templates/web/bromley/about/faq-en-gb.html
@@ -15,7 +15,7 @@
<dl>
<dt>What issues can&rsquo;t be reported here?</dt>
<dd><p>The following problems should be reported via
- <a href="http://www.bromley.gov.uk/report">http://www.bromley.gov.uk/report</a>:</p>
+ <a href="https://www.bromley.gov.uk/report">https://www.bromley.gov.uk/report</a>:</p>
<ul>
<li>missed rubbish or recycling collections
<li>anti-social behaviour
@@ -26,7 +26,9 @@
<li>complaining or commenting about the council
</ul>
- <p>Note, the council does not maintain responsibility for problems on private land or TFL roads (A21 and part of the A232, West Wickham to Locksbottom). TFL road enquiries should be directed to <a href="http://reportit.tfl.gov.uk/">http://reportit.tfl.gov.uk/</a>.
+ <p>Note, the council does not maintain responsibility for problems on
+ private land or TfL roads (A21 and part of the A232, West Wickham to
+ Locksbottom). Reports on TfL roads will be automatically routed to TfL.</p>
</dd>
@@ -39,7 +41,7 @@
<dt><a name="emergencies"></a>Reporting emergencies (out of hours)</dt>
<dd>
<p>Please do not report problems which present an immediate risk to life, for example missing manhole covers or a fallen lamp column.</p>
- <p>Please direct your enquiry to our <a href="http://www.bromley.gov.uk/info/200039/emergencies/460/emergency_contacts">Out of Hours service</a></p>
+ <p>Please direct your enquiry to our <a href="https://www.bromley.gov.uk/info/200039/emergencies/460/emergency_contacts">Out of Hours service</a></p>
</dd>
@@ -70,11 +72,10 @@ the problem.</dd>
<dt>The site is powered by FixMyStreet, who are they?</dt>
<dd>FixMyStreet was built by <a href="http://www.mysociety.org/">mySociety</a>, in conjunction with the <a href="http://www.youngfoundation.org.uk/">Young Foundation</a>.
-mySociety is the project of a registered charity which has grown out of the community of
+mySociety is a registered charity, number 1076346, which has grown out of the community of
volunteers who built sites like <a href="http://www.theyworkforyou.com/">TheyWorkForYou</a>.
mySociety&rsquo;s primary mission is to build Internet projects which give people simple, tangible
-benefits in the civic and community aspects of their lives.
-The charity is called UK Citizens Online Democracy and is charity number 1076346. mySociety
+benefits in the civic and community aspects of their lives. mySociety
can be contacted by email at <a href="mailto:hello&#64;mysociety.org">hello&#64;mysociety.org</a>,
or by post at mySociety, 483 Green Lanes, London, N13 4BS.</dd>
diff --git a/templates/web/bromley/admin/category-checkboxes.html b/templates/web/bromley/admin/category-checkboxes.html
index 756f2d1ff..68e8e0c26 100644
--- a/templates/web/bromley/admin/category-checkboxes.html
+++ b/templates/web/bromley/admin/category-checkboxes.html
@@ -1,12 +1,4 @@
-<fieldset>
- <legend>
- [% IF hint %]
- <div class="admin-hint">
- <p>[% hint %]</p>
- </div>
- [% END %]
- [% loc('Categories:') %]
- </legend>
+[% BLOCK checkboxes %]
<ul class="no-bullets no-margin">
<li>
[% loc('Select:') %]
@@ -22,4 +14,16 @@
</li>
[% END %]
</ul>
+[% END %]
+<fieldset>
+ <legend>
+ [% IF hint %]
+ <div class="admin-hint">
+ <p>[% hint %]</p>
+ </div>
+ [% END %]
+ [% loc('Categories:') %]
+ </legend>
+
+ [% INCLUDE checkboxes %]
</fieldset>
diff --git a/templates/web/bromley/admin/templates/_external.html b/templates/web/bromley/admin/templates/_external.html
new file mode 100644
index 000000000..6015950de
--- /dev/null
+++ b/templates/web/bromley/admin/templates/_external.html
@@ -0,0 +1,24 @@
+[% parts = rt.external_status_code.split(',') ~%]
+
+[% IF errors.external_status_code %]
+ <div class="form-error">[% errors.external_status_code %]</div>
+[% END %]
+<p>
+ <label for="resolution_code">External status code / Resolution Code ID</label>
+ <input type="text" id="resolution_code" name="resolution_code" class="form-control" size="30" value="[% parts.0 %]">
+</p>
+
+<p>
+ <label for="task_type">Task type ID</label>
+ <input type="text" id="task_type" name="task_type" class="form-control" size="30" value="[% parts.1 %]">
+</p>
+
+<p>
+ <label for="task_state">Task state</label>
+ <select class="form-control" name="task_state" id="task_state">
+ <option value="">---</option>
+ [% FOR opt IN ['Completed', 'Not Completed'] %]
+ <option value="[% opt %]"[% ' selected' IF parts.2 == opt %]>[% opt %]</option>
+ [% END %]
+ </select>
+</p>
diff --git a/templates/web/bromley/footer.html b/templates/web/bromley/footer.html
index 914ba3ace..5aac635b3 100644
--- a/templates/web/bromley/footer.html
+++ b/templates/web/bromley/footer.html
@@ -2,6 +2,13 @@
<footer role="contentinfo">
[% INCLUDE 'front/footer-marketing.html' %]
</footer>
+ [% ELSIF bodyclass == 'waste' %]
+ <div class="bromley-waste-credits">
+ <p>Powered by</p>
+ <p>
+ <a href="https://www.societyworks.org/services/waste/">SocietyWorks</a>
+ </p>
+ </div>
[% END %]
</div><!-- .content role=main -->
</div><!-- .container -->
diff --git a/templates/web/bromley/footer_extra_js.html b/templates/web/bromley/footer_extra_js.html
index c3bad670c..3a58505ef 100644
--- a/templates/web/bromley/footer_extra_js.html
+++ b/templates/web/bromley/footer_extra_js.html
@@ -2,7 +2,7 @@
version('/jslib/jquery-1.7.2.min.js'),
version('/cobrands/bromley/a-z-nav.js'),
) %]
-[% PROCESS 'footer_extra_js_base.html' cobrand_js=1 validation=1 tfl=1 %]
+[% PROCESS 'footer_extra_js_base.html' cobrand_js=1 validation=1 tfl=1 roadworks=1 %]
[% IF bodyclass.match('mappage');
scripts.push(
version('/cobrands/bromley/map.js'),
diff --git a/templates/web/bromley/front/pre-steps.html b/templates/web/bromley/front/pre-steps.html
index ebe7154c1..4ba703cb0 100644
--- a/templates/web/bromley/front/pre-steps.html
+++ b/templates/web/bromley/front/pre-steps.html
@@ -9,5 +9,5 @@ priority issues in the first instance.
<p>This is primarily for reporting physical problems that can be fixed
like graffiti, cleansing issues or road defects. To report other
kinds of problems like missed bins use our
-<a href="http://www.bromley.gov.uk/report">online report it forms</a>.
+<a href="https://www.bromley.gov.uk/report">online report it forms</a>.
</p>
diff --git a/templates/web/bromley/header_extra.html b/templates/web/bromley/header_extra.html
new file mode 100644
index 000000000..709f06084
--- /dev/null
+++ b/templates/web/bromley/header_extra.html
@@ -0,0 +1 @@
+<link rel="stylesheet" href="/vendor/govuk-frontend/govuk-frontend-3.5.0.min.css">
diff --git a/templates/web/bromley/header_logo.html b/templates/web/bromley/header_logo.html
index 8c49d9145..2159dc5d3 100644
--- a/templates/web/bromley/header_logo.html
+++ b/templates/web/bromley/header_logo.html
@@ -1,13 +1,19 @@
<div class="bromley-header clearfix">
- <a href="http://www.bromley.gov.uk/" id="site-logo">[% site_name %]</a>
+[% IF bodyclass == 'waste' %]
+ <a href="https://www.bromley.gov.uk/" id="site-logo">
+ <img src="/cobrands/bromley/images/waste.png" alt="Bromley Council">
+ </a>
+[% ELSE %]
+ <a href="https://www.bromley.gov.uk/" id="site-logo">[% site_name %]</a>
+[% END %]
<ul class="linear-links subtext float-right top-links">
- <li class="first-child"><i class="fa fa-home"></i><a href="http://www.bromley.gov.uk">Home</a></li>
- <li><i class="fa fa-sitemap"></i><a href="http://www.bromley.gov.uk/site_map">Sitemap</a></li>
+ <li class="first-child"><i class="fa fa-home"></i><a href="https://www.bromley.gov.uk">Home</a></li>
+ <li><i class="fa fa-sitemap"></i><a href="https://www.bromley.gov.uk/site_map">Sitemap</a></li>
<li><i class="fa fa-user"></i><a href="https://www.bromley.gov.uk/SiteLogin">Register/Sign in</a></li>
</ul>
- <form action="http://www.bromley.gov.uk/site/scripts/google_results.aspx" method="get" id="search" class="main-search" role="search">
+ <form action="https://www.bromley.gov.uk/site_search/results/" method="get" id="search" class="main-search" role="search">
<label for="SearchSite" class="hidden">Search this site</label>
<input type="text" size="18" class="main-search-input field" name="q" id="SearchSite" value="" placeholder="Search the website">
<input value="Search" type="submit" class="button__primary">
@@ -21,32 +27,32 @@
<li class="first-child">
<a href="#" class="main-nav-title">A-Z</a>
<ul class="nav-hover-item nav-hover-item-active a-z">
- <li class="first-child"><a href="http://www.bromley.gov.uk/a_to_z/A">a</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/B">b</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/C">c</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/D">d</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/E">e</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/F">f</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/G">g</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/H">h</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/I">i</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/J">j</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/K">k</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/L">l</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/M">m</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/N">n</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/O">o</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/P">p</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/Q">q</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/R">r</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/S">s</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/T">t</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/U">u</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/V">v</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/W">w</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/X">x</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/Y">y</a></li>
- <li><a href="http://www.bromley.gov.uk/a_to_z/Z">z</a></li>
+ <li class="first-child"><a href="https://www.bromley.gov.uk/a_to_z/A">a</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/B">b</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/C">c</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/D">d</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/E">e</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/F">f</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/G">g</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/H">h</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/I">i</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/J">j</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/K">k</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/L">l</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/M">m</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/N">n</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/O">o</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/P">p</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/Q">q</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/R">r</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/S">s</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/T">t</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/U">u</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/V">v</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/W">w</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/X">x</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/Y">y</a></li>
+ <li><a href="https://www.bromley.gov.uk/a_to_z/Z">z</a></li>
</ul>
</li>
</ul>
@@ -55,7 +61,7 @@
<div class="breadcrumb">
<!-- Breadcrumb --><!-- googleoff:all -->
<ul>
- <li class="first-child"><a href="http://www.bromley.gov.uk">Home</a></li>
+ <li class="first-child"><a href="https://www.bromley.gov.uk">Home</a></li>
<li class="current"><span>FixMyStreet</span></li>
</ul>
<!-- END Breadcrumb --><!-- googleon:all -->
diff --git a/templates/web/bromley/report/_updates_disallowed_message.html b/templates/web/bromley/report/_updates_disallowed_message.html
new file mode 100644
index 000000000..25e3a57c4
--- /dev/null
+++ b/templates/web/bromley/report/_updates_disallowed_message.html
@@ -0,0 +1,21 @@
+[% IF c.cobrand.updates_disallowed(problem) == 'waste';
+ SET property_id = problem.get_extra_field_value('property_id');
+%]
+<p>
+ <a href="/waste[% IF property_id %]/[% property_id %][% END %]">See your bin collections</a>.
+</p>
+
+<div class="bromley-waste-credits">
+ <p>Powered by</p>
+ <p>
+ <a href="https://www.societyworks.org/services/waste/">SocietyWorks</a>
+ </p>
+</div>
+
+[% ELSE %]
+<p>[% loc('This report is now closed to updates.') %]
+ [% tprintf(loc('You can <a href="%s">make a new report in the same location</a>.'),
+ c.uri_for( '/report/new', { longitude = longitude, latitude = latitude } )
+ ) %]
+</p>
+[% END %]
diff --git a/templates/web/bromley/report/form/user_loggedout_email.html b/templates/web/bromley/report/form/user_loggedout_email.html
index 8aad16289..e7f08a4a8 100644
--- a/templates/web/bromley/report/form/user_loggedout_email.html
+++ b/templates/web/bromley/report/form/user_loggedout_email.html
@@ -1,21 +1,20 @@
[% IF c.config.SMS_AUTHENTICATION %]
[% SET username_label = loc('Your email or mobile') %]
[% SET username_type = 'text' %]
- [% SET username_value = object.user.username %]
[% ELSE %]
[% SET username_label = loc('Your email') %]
[% SET username_type = 'email' %]
- [% SET username_value = object.user.email %]
[% END %]
+[% SET username_field = (name == 'username_sign_in') ? 'username' : 'username_register' ~%]
<label for="form_[% name %]">[% loc('Email' ) %]
[% IF type == 'update' %]
<span class="muted">([% loc('We never show your email') %])</span>
[% END %]
</label>
-[% IF field_errors.username %]
- <p class='form-error'>[% field_errors.username %]</p>
+[% IF field_errors.$name %]
+ <p class='form-error'>[% field_errors.$name %]</p>
[% END %]
-<input type="[% username_type %]" name="username" id="form_[% name %]"
- value="[% username_value | html %]"
+<input type="[% username_type %]" name="[% username_field %]" id="form_[% name %]"
+ value="[% c.get_param(username_field) %]"
class="form-control required">
diff --git a/templates/web/bromley/waste/enquiry-problem.html b/templates/web/bromley/waste/enquiry-problem.html
new file mode 100644
index 000000000..db4cb1848
--- /dev/null
+++ b/templates/web/bromley/waste/enquiry-problem.html
@@ -0,0 +1,29 @@
+[%
+
+f = [];
+service_id = c.req.params.service_id;
+service = services.$service_id;
+IF service.report_allowed;
+ IF !service.enquiry_open_events.2118;
+ f.push( { value = 'Gate not closed', label = 'A gate or enclosure wasn’t closed after the collection' } );
+ END;
+ IF !service.enquiry_open_events.2119;
+ f.push( { value = 'Waste spillage', label = 'Bin contents were spilled during the collection' } );
+ END;
+ IF !service.enquiry_open_events.2120;
+ f.push( { value = 'Bin not returned', label = 'A bin wasn’t returned after the collection' } );
+ END;
+END;
+f.push(
+ { value = 'Crew behaviour', label = 'There was a problem with the crew’s behaviour' },
+ { value = 'Wrongful removal', label = 'Something was wrongly removed during the collection' },
+ { value = 'Damage to 3rd party', label = 'Someone else’s vehicle was damaged' },
+ { value = 'Damage to Property', label = 'My property was damaged' },
+ { value = 'Failure to deliver bin', label = 'My bin was not delivered' },
+);
+
+PROCESS waste/enquiry.html
+ title = 'Report a problem'
+ field_options = f;
+
+%]
diff --git a/templates/web/bromley/waste/services.html b/templates/web/bromley/waste/services.html
new file mode 100644
index 000000000..6fc654f07
--- /dev/null
+++ b/templates/web/bromley/waste/services.html
@@ -0,0 +1,39 @@
+[% IF unit.service_id == 531 ~%]
+[% domestic_collection = 1 ~%]
+[% END ~%]
+[% IF unit.report_open %]
+ <span class="waste-service-descriptor">
+ A [% unit.service_name FILTER lower %] collection has been reported as missed
+ [% IF unit.report_open.report %] – <a href="[% unit.report_open.report.url %]" class="waste-service-link">check status</a>[% END %]
+ </span>
+[% ELSIF unit.report_allowed %]
+ [% any_report_allowed = 1 %]
+ <form method="post" action="[% c.uri_for_action('waste/report', [ property.id ]) %]">
+ <input type="hidden" name="token" value="[% csrf_token %]">
+ <input type="hidden" name="service-[% unit.service_id %]" value="1">
+ <input type="submit" value="Report a [% unit.service_name FILTER lower %] collection as missed" class="waste-service-descriptor waste-service-link">
+ </form>
+[% ELSIF unit.report_locked_out %]
+ <span class="waste-service-descriptor">A missed collection cannot be reported, please see the last collection status above.</span>
+[% ELSE %]
+ <span class="waste-service-descriptor">Please note that missed collections can only be reported within 2 working days of your scheduled collection day.</span>
+[% END %]
+ <a href="[% c.uri_for_action('waste/enquiry', [ property.id ]) %]?template=problem&amp;service_id=[% unit.service_id %]" class="waste-service-link waste-service-descriptor">Report a problem with a [% unit.service_name FILTER lower %] collection</a>
+[% IF unit.request_open %]
+ <span class="waste-service-descriptor">
+ A new [% unit.service_name FILTER lower %] container request has been made
+ [% IF unit.request_open.report %] – <a href="[% unit.request_open.report.url %]" class="waste-service-link">check status</a>[% END %]
+ </span>
+[% ELSIF unit.request_allowed %]
+ [% any_request_allowed = 1 %]
+ <form method="post" action="[% c.uri_for_action('waste/request', [ property.id ]) %]">
+ <input type="hidden" name="token" value="[% csrf_token %]">
+ <input type="hidden" name="container-[% unit.request_containers.0 %]" value="1">
+ <input type="submit" value="Request a new [% unit.service_name FILTER lower %] container" class="waste-service-descriptor waste-service-link">
+ </form>
+[% END %]
+ <form method="get" action="[% c.uri_for_action('waste/enquiry', [ property.id ]) %]">
+ <input type="hidden" name="service_id" value="[% unit.service_id %]">
+ <input type="hidden" name="category" id="category" value="General Enquiry">
+ <input type="submit" value="Contact us about a [% unit.service_name FILTER lower %] collection" class="waste-service-descriptor waste-service-link">
+ </form>
diff --git a/templates/web/bromley/waste/services_extra.html b/templates/web/bromley/waste/services_extra.html
new file mode 100644
index 000000000..d635c843f
--- /dev/null
+++ b/templates/web/bromley/waste/services_extra.html
@@ -0,0 +1,15 @@
+[% IF domestic_collection %]
+<h3 class="govuk-heading-m waste-service-name">Batteries, small electrical items and textiles</h3>
+<div class="govuk-grid-row">
+ <div class="govuk-grid-column-one-quarter text-centered">
+ <img src="/cobrands/bromley/images/container-images/electricals-batteries-textiles.png"
+ srcset="/cobrands/bromley/images/container-images/electricals-batteries-textiles.png 1x, /cobrands/bromley/images/container-images/electricals-batteries-textiles@2x.png 2x"
+ alt="" class="waste-service-image">
+ </div>
+ <div class="govuk-grid-column-three-quarters">
+ <p>Please only present one small bag each week as we cannot handle high
+ volumes. If we do not collect your items, please bring them back inside and
+ present them for collection next week.</p>
+ </div>
+</div>
+[% END %]
diff --git a/templates/web/buckinghamshire/footer_extra_js.html b/templates/web/buckinghamshire/footer_extra_js.html
index 9132ead25..3e2eca135 100644
--- a/templates/web/buckinghamshire/footer_extra_js.html
+++ b/templates/web/buckinghamshire/footer_extra_js.html
@@ -1 +1 @@
-[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 roadworks=1 %]
diff --git a/templates/web/buckinghamshire/front/pre-steps.html b/templates/web/buckinghamshire/front/pre-steps.html
index 4728bff2f..ee7f83ec9 100644
--- a/templates/web/buckinghamshire/front/pre-steps.html
+++ b/templates/web/buckinghamshire/front/pre-steps.html
@@ -1,4 +1,4 @@
-<p style="margin: -1em -1em 1em; padding: 20px 30px; background-color: #f79f73; color: #000;">
+<p style="margin: 1em -20px; padding: 20px; background-color: #f79f73; color: #000;">
In light of the ongoing COVID 19 crisis an element of TfB workforce has reduced
by the need for self-isolation. This regrettably means that for the immediate
future some work will have to be delayed. We apologise for any possible delay
diff --git a/templates/web/cheshireeast/about/privacy.html b/templates/web/cheshireeast/about/privacy.html
deleted file mode 100644
index 396b34b7e..000000000
--- a/templates/web/cheshireeast/about/privacy.html
+++ /dev/null
@@ -1,362 +0,0 @@
-[% INCLUDE 'header.html',
- title = loc('Privacy and cookies'),
- bodyclass = 'twothirdswidthpage' %]
-
-[% INCLUDE 'about/_sidebar.html' %]
-
-<h1>Privacy, cookies, and third party services</h1>
-
-<h2>Privacy Policy</h2>
-
-<p>
- FixMyStreet is run by the charity <a href="https://www.mysociety.org/">mySociety</a>.
-</p>
-
-<p>
- Working in the fields of transparency and accountability, mySociety thinks hard and
- cares very much about the privacy and security of our users: the length of this
- privacy policy is one result of that. We know no-one goes through Privacy Policies for
- fun though, so we’ve tried to keep it a clear and reasonably quick read.
-</p>
-
-<p>
- We hope it covers everything you need to know, but if you still have any questions
- feel free to <a href="/contact">contact us</a>.
-</p>
-
-<h2>What information we collect and how we use it</h2>
-
-<p>
- When you submit a report, <b>we pass on your details, and details of the issue, to the
- council contact</b> or contacts responsible for the area where you located the issue, or
- other relevant body.
-</p>
-
-<h3>
-When you make a report
-</h3>
-
-<p>
- When you use FixMyStreet to send a report, you provide us with personal information
- including:
-</p>
-
-<ul>
- <li>Your name</li>
- <li>Contact details</li>
-</ul>
-
-<p>
- We <b>send this information to the body responsible for fixing your issue</b>, as per your
- choice of category and location.
-</p>
-
-<p>
- At the same time, <b>your report appears on the FixMyStreet website</b>. Your email address
- and phone number are not published, and we only published your name if you opted to publish it.
-</p>
-
-<p>
- Some councils, including Cheshire East Council, use FixMyStreet on their
- own websites. If you make a report within the boundaries of one of these
- councils (either through FixMyStreet.com or via the council website), it
- will be published on both web sites.
-</p>
-
-<p>
- FixMyStreet provides RSS/JSON feeds which allow anyone to publish reports on their own
- website or page. Typically these feeds consist of reports made within a specific local
- area, and are published on community or local interest sites.
-</p>
-
-<p>
- Anything you include in the body of your report will be published in one or
- all of the places listed above, so keep personal information such
- as your contact details to the correct fields.
-</p>
-
-<p>
- We <b>store your personal details</b>, along with your password where used (passwords are
- stored in a format that is unreadable to anyone — including us — known as a hash) and
- any reports or updates you make, in our own database.
-</p>
-
-<p>
- These are accessible only to FixMyStreet administrators who adhere to strict internal
- data-handling policies, and, where a council is a <a href="https://www.fixmystreet.com/pro/">FixMyStreet Pro</a> client, to council
- staff, whose own data-handling and security policies will apply.
-</p>
-
-<h3>
- When you subscribe to an alert by email
-</h3>
-
-<p>
- We collect your email address, which we store with the details of whichever alert/s
- you have subscribed to.
-</p>
-
-<h3>
- When you contact the support team
-</h3>
-
-<p>
- Your message will be accessible to our small team of support staff, who adhere to
- strict internal data-handling policies.
-</p>
-
-<p>
- <b>Your personal information is never shared, or used for purposes other than those
- listed above, unless we are obliged to by law.</b>
-</p>
-
-<h2>
- Research
-</h2>
-
-<p>
- We sometimes use data from FixMyStreet, or share it with trusted third parties, for
- research. This data is completely anonymised and contains no identifying details such
- as names, email addresses or the content of reports. Our Research Data Release policy
- may be seen on request.
-</p>
-
-<h2>
- What happens when you use FixMyStreet
-</h2>
-
-<h2>
- Making a report
-</h2>
-
-<ul>
- <li>
- When your council responds to your report, if you have provided us with an email
- address, in most cases <b>their reply will go directly to your email inbox</b>. This
- response, and any subsequent correspondence, happens outside the FixMyStreet
- system, except in the case of some councils which have integrated with FixMyStreet
- so that their responses and auto-updates are published on the report page. If you
- have submitted via phone verification, you may not receive any response from the
- council, depending on how their systems are set up.
- </li>
- <li>
- If your report is particularly interesting, our Communications Manager may get in
- touch, as we like to feature notable requests on the
- <a href="https://www.mysociety.org/blog/">mySociety blog</a> (or just
- <a href="mailto:press@mysociety.org">let us know</a> directly!).
- </li>
- <li>
- We only ever send you emails in relation to your reports or use of the site.
- </li>
-</ul>
-
-<h3>
- Subscribing to alerts
-</h3>
-
-<p>
- We’ll send you an automated email every time someone makes a report within the area
- you specify, or when updates are made to a report you’ve opted to follow. The
- frequency of these emails will depend on how large your chosen area is and how many
- reports are made within it, but you won’t get more than one an hour.
-</p>
-
-<h2>
- Unsubscribing
-</h2>
-
-<h3>
- How to stop receiving emails from us
-</h3>
-
-<p>
- Every alert email we send contains an unsubscribe link at the bottom for you to stop
- receiving that alert.
-</p>
-
-<h2>
- Legal basis for processing
-</h2>
-
-<p>
- In using FixMyStreet for any of the functions listed above (sending a
- report, leaving an update, email alerts or site registration), we are
- processing your data under the legal basis 6(1)(f) – legitimate interests.
- We assert that we have a legitimate charitable and commercial interest in
- giving people an easy and public way to report street problems, even if they
- don't know who the problems should go to, and in sending them updates or
- alerts. The benefits of reporting problems publicly are that others can
- quickly see what has already been reported, so it prevents the council from
- having to deal with duplicates. It also creates a snapshot for local
- communities, so it's easy to see what the common problems are in a given
- area, and how quickly they get fixed. Other local residents can browse, read
- and comment on problems – and perhaps even offer a solution.
-</p>
-
-<h2>
- Retention periods and your right to removal
-</h2>
-
-<h3>
- Reports and updates
-</h3>
-
-<p>
- Except in exceptional circumstances, we do not delete reports or updates made through
- FixMyStreet. Historic FixMyStreet reports provide an invaluable resource for
- researchers into the quantity and type of street problems made across the UK during
- the years the site has been running. This research can help inform civic planners,
- developers, coders, historians and social scientists, among others.
-</p>
-
-<p>
- Therefore, <b>if you ask for a report to be removed, in most cases we will instead invite
- you to anonymise it</b>, so that there is no public connection between the content and
- your name. You can anonymise reports singly, or in bulk, by logging in to your account
- and clicking on the ‘“Hide your name” link beside the time and date of your report.
- From here you may anonymise this report or all reports you have made.
-</p>
-
-<h3>
- Your personal information
-</h3>
-
-<p>
- As well as your report or update appearing on the FixMyStreet website, your details,
- including name and email address, are stored in our admin system.
-</p>
-
-<p>
- If you submit a report but do not click on the confirmation email, your report will
- not be sent to the council; however, the report and your details remain in our system
- and are accessible to site administrators.
-</p>
-
-<p>
- <a href="/contact">Contact us</a> if you would like your details to be removed from our admin
- database.
-</p>
-
-<h3>
- Support mail
-</h3>
-
-<p>
- If you contact FixMyStreet via our support email address we keep your message for two
- years at which point they will be automatically deleted. This is to aid continuity
- and so that we can view any historic context which may have bearing on subsequent
- support mail, even if members of the support staff change. Support staff adhere to
- internal privacy policies which may be viewed on request.
-</p>
-
-<h2>
- Your right to object
-</h2>
-<p>
- The General Data Protection Regulation gives you the right to object to our
- processing of your personal information and to ask us to stop processing it.
- However, it also gives us the right to continue to process it if we can demonstrate
- compelling legitimate grounds for the processing that override your interests, rights
- and freedoms. To exercise your right to object, you can <a href="/contact">
- contact us</a>, giving specific reasons why you are objecting to the processing of
- your personal data. These reasons should be based upon your particular situation.
-</p>
-<h2>
- Your right to access
-</h2>
-
-<p>
- You may <a href="/contact">contact us</a> at any time to ask to see what personal data we hold about you.
-</p>
-
-<h2>
- Your right to complain
-</h2>
-
-<p>
- If you believe that we have mishandled your data, you have the right to lodge a
- complaint with the Information Commissioner’s Office.
- <a href="https://ico.org.uk/concerns/handling/">You can report a concern here</a>
- (but do contact us first, so that we can try and help).
-</p>
-
-<h3>
- Who we are
-</h3>
-
-<p>
- FixMyStreet is run by mySociety, a UK not-for-profit social enterprise. Our registered
- address is:
-</p>
-
-<p>
-mySociety<br>
-483 Green Lanes<br>
-London<br>
-N13 4BS<br>
-United Kingdom<br>
-</p>
-
-<p>
- …and we can also be <a href="/contact">contacted here</a>.
-</p>
-
-
-<h2>Cookies</h2>
-
-<p>To make our service easier or more useful, we sometimes place small data
-files on your computer or mobile phone, known as cookies; many websites do
-this. We use this information to, for example, remember you have logged in so
-you don’t need to do that on every page, or to measure how people use the
-website so we can improve it and make sure it works properly. Below, we list
-the cookies and services that this site can use.
-
-<table class="nicetable">
- <tr>
- <th scope="col">Name</th>
- <th scope="col">Typical Content</th>
- <th scope="col">Expires</th>
- </tr>
- <tr>
- <td>fixmystreet_app_session</td>
- <td nowrap>A random unique identifier</td>
- <td>When browser is closed, or four weeks if &ldquo;Keep me signed in&rdquo; is ticked</td>
- </tr>
-</table>
-
-<h3>Measuring website usage (Google Analytics)</h3>
-
-<p>We use Google Analytics software to collect information about how you use
-this site. We do this to help make sure the site is meeting the needs of its
-users and to help us make improvements.
-
-<p>Google Analytics stores information such as what
-pages you visit, how long you are on the site, how you got here, what you click
-on, and information about your web browser. IP addresses are masked (only a
-portion is stored) and personal information is only reported in aggregate. We
-do not allow Google to use or share our analytics data for any purpose besides
-providing us with analytics information, and we recommend that any user of
-Google Analytics does the same.
-
-<h3>Opting out</h3>
-<p>You can <a href="https://tools.google.com/dlpage/gaoptout">opt out of Google
-Analytics cookies</a>.
-
-<p>If you want to disable advertising-based tracking, you can
-<a href="https://www.google.com/settings/ads">adjust your Google Ads
-Settings</a>, or opt out of advertising-based tracking across a
-number of providers in one go using the
-<a href="http://www.networkadvertising.org/choices/">Network
-Advertising Initiative’s opt-out form</a>.
-
-<p>Rest assured, we only track usage data for one reason: to help us
-understand how we can make the site work better for you, our
-users.
-
-<h2>Credits</h2>
-
-<p>Bits of wording taken from the <a
-href="https://www.gov.uk/help/cookies">gov.uk cookies page</a> (under the Open
-Government Licence).
-
-[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/cheshireeast/footer_extra_js.html b/templates/web/cheshireeast/footer_extra_js.html
index 9132ead25..3e2eca135 100644
--- a/templates/web/cheshireeast/footer_extra_js.html
+++ b/templates/web/cheshireeast/footer_extra_js.html
@@ -1 +1 @@
-[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 roadworks=1 %]
diff --git a/templates/web/cheshireeast/report/_council_sent_info.html b/templates/web/cheshireeast/report/_council_sent_info.html
index 1963020bc..c7e1eaf1d 100644
--- a/templates/web/cheshireeast/report/_council_sent_info.html
+++ b/templates/web/cheshireeast/report/_council_sent_info.html
@@ -1,4 +1,4 @@
-[% SET duration_clause = problem.duration_string(c) %]
+[% SET duration_clause = problem.duration_string %]
[% IF duration_clause || problem.whensent %]
<p class="council_sent_info">
[%- IF problem.whensent %]
diff --git a/templates/web/eastherts/about/faq-en-gb.html b/templates/web/eastherts/about/faq-en-gb.html
index 697536df8..d9f9becb7 100644
--- a/templates/web/eastherts/about/faq-en-gb.html
+++ b/templates/web/eastherts/about/faq-en-gb.html
@@ -79,11 +79,10 @@ by a user of the site.</dd>
<dt>The site is powered by FixMyStreet, who are they?</dt>
<dd>FixMyStreet was built by <a href="http://www.mysociety.org/">mySociety</a>, in conjunction with the <a href="http://www.youngfoundation.org.uk/">Young Foundation</a>.
-mySociety is the project of a registered charity which has grown out of the community of
+mySociety is a registered charity, number 1076346, which has grown out of the community of
volunteers who built sites like <a href="http://www.theyworkforyou.com/">TheyWorkForYou</a>.
mySociety&rsquo;s primary mission is to build Internet projects which give people simple, tangible
-benefits in the civic and community aspects of their lives.
-The charity is called UK Citizens Online Democracy and is charity number 1076346. mySociety
+benefits in the civic and community aspects of their lives. mySociety
can be contacted by email at <a href="mailto:hello&#64;mysociety.org">hello&#64;mysociety.org</a>,
or by post at mySociety, 483 Green Lanes, London, N13 4BS.</dd>
diff --git a/templates/web/fixamingata/about/_sidebar.html b/templates/web/fixamingata/about/_sidebar.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/fixamingata/about/_sidebar.html
diff --git a/templates/web/fixamingata/about/accessibility.html b/templates/web/fixamingata/about/accessibility.html
index 05e95c918..ee121cff3 100644
--- a/templates/web/fixamingata/about/accessibility.html
+++ b/templates/web/fixamingata/about/accessibility.html
@@ -33,7 +33,6 @@
</p>
<ul>
<li>skicka e-post till <a href="mailto:info@fixamingata.se">info@fixamingata.se</a></li>
- <!--<li>ring <a href="tel:+46-771-123456">telefonnummer</a></li>-->
</ul>
<h3>Rapportera brister i webbplatsens tillgänglighet</h3>
@@ -61,12 +60,6 @@
<h3>Innehåll som inte är tillgängligt</h3>
<h4>Bristande förenlighet med lagkraven</h4>
<p>
- Problem vid användning utan hörsel
-</p>
-<ul>
- <li>Filmen som beskriver hur man använder webbplatsen har inte undertexter.</li>
-</ul>
-<p>
Användning med nedsatt färgseende
</p>
<ul>
@@ -93,7 +86,7 @@
Vi har gjort en självskattning (intern testning) av FixaMinGata.
</p>
<p>
- Senaste bedömningen gjordes den 6 oktober 2019.
+ Senaste bedömningen gjordes den 31 mars 2020.
</p>
<!-- TODO: add 2020-09-23?
<p>
@@ -104,7 +97,7 @@
</p>
-->
<p>
- Redogörelsen uppdaterades senast den 6 oktober 2019.
+ Redogörelsen uppdaterades senast den 31 mars 2020.
</p>
[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/fixamingata/about/council.html b/templates/web/fixamingata/about/council.html
index 165c91a46..2a3729c7f 100755
--- a/templates/web/fixamingata/about/council.html
+++ b/templates/web/fixamingata/about/council.html
@@ -16,7 +16,12 @@
<h1>Information för kommuner</h1>
<p>FixaMinGata är en e-tjänst som drivs av <a href="http://sambruk.se/">Föreningen Sambruk</a> och är framtagen i samarbete med <a href="http://kivos.se/">KIVOS</a> och <a href="http://ffkp.se/">FFKP</a>. ALLA kan använda e-tjänsten för att rapportera fel till kommuner. Tjänsten är en molntjänst och kan snabbt anpassas för en ny kommun. Fel som rapporteras skickas via e-post till berörd enhet på kommunen. För kommuner som har befintliga verksamhetssystem för rapportering och uppföljning finns flera möjligheter att integrera systemen.</p>
-
+<p>
+ <div class="resp-iframe-container">
+ <iframe class="resp-iframe" title="Hör Forshaga kommun berätta om FixaMinGata" src="https://www.youtube.com/embed/wq9Es6Owong" frameborder="0" allowfullscreen="allowfullscreen"></iframe>
+ </div>
+ <div><i>Hör Forshaga kommun berätta om FixaMinGata</i></div>
+</p>
<h2><a name="kommuner"></a>Kommuner</h2>
<p>FixaMinGata stödjer samtliga svenska kommuner. Kommuner som deltar i Förvaltningsrådet för FixaMinGata, ges möjlighet att påverka utveckling och framtida inriktning. Medlemskommuner har även säker och prioriterad tillgång till support, samt att vi är behjälpliga i dialogen med olika leverantör vid integration med verksamhetssystem.</p>
diff --git a/templates/web/fixamingata/about/faq-sv.html b/templates/web/fixamingata/about/faq-sv.html
index 62721d381..aa88f979b 100755
--- a/templates/web/fixamingata/about/faq-sv.html
+++ b/templates/web/fixamingata/about/faq-sv.html
@@ -7,8 +7,7 @@
<li><a href="#practical">Praktiska frågor</a></li>
<li><a href="#organisation">Organisation</a></li>
<li><a href="#pul">Dataskyddsombud</a></li>
- <li><a href="/privacy">Offentlighet och kakor</a></li>
- <li><a href="/about/accessibility">Tillgänglighet</a></li>
+ <li><a href="#privacy">Sekretess och kakor</a></li>
</ul>
</aside>
</div>
@@ -80,4 +79,10 @@
<dd>Dataskyddsombud är Britta Sandblom som du kan kontakta via vårt <a href="/contact">kontaktformulär.</a></dd>
</dl>
+<h2><a name="privacy"></a>Sekretess och kakor</h2>
+<dl>
+ <dt>Vill du läsa mer om det juridiska?</dt>
+ <dd>Läs vår information om <a href="/about/privacy">Sekretess och kakor</a>.</dd>
+</dl>
+
[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/fixamingata/about/privacy.html b/templates/web/fixamingata/about/privacy.html
index c734711f9..b62a83fe9 100755
--- a/templates/web/fixamingata/about/privacy.html
+++ b/templates/web/fixamingata/about/privacy.html
@@ -1,18 +1,6 @@
[% INCLUDE 'header.html', title => loc('Vanliga Frågor'), bodyclass => 'twothirdswidthpage' %]
-<div class="sticky-sidebar">
- <aside>
- <ul class="plain-list">
- <li><a href="/faq#faq">Vanliga frågor</a></li>
- <li><a href="/faq#practical">Praktiska frågor</a></li>
- <li><a href="/faq#organisation">Organisation</a></li>
- <li><a href="/faq#pul">Dataskyddsombud</a></li>
- <li><strong>Offentlighet och kakor</strong></li>
- </ul>
- </aside>
-</div>
-
-<h1>Offentlighet, kakor och tredjepartstjänster</h1>
+<h1>Sekretess och kakor</h1>
<p><strong>Vår användning av din information och vad du behöver veta.</strong></p>
<p>Offentlighetsprincipen är en viktig del i det demokratiska samhället. Genom tryckfrihetsförordningen och offentlighetslagen har du rätt att ta del av allmänna offentliga handlingar hos statliga och kommunala myndigheter. Det kan ge dig insyn i hur förtroendevalda (politiker) och tjänstemän handlägger ärenden, vilka handlingar som kommit in till kommunens olika förvaltningar och vilka som skickats ut.</p>
<p>Fr.o.m. 2018-05-25 tillämpas ett nytt regelverk inom EU för behandling av personuppgifter &ndash; i Sverige kallad Dataskyddsfördordningen.</p>
diff --git a/templates/web/fixamingata/footer_extra.html b/templates/web/fixamingata/footer_extra.html
index 260b3af2f..7ff146f06 100644
--- a/templates/web/fixamingata/footer_extra.html
+++ b/templates/web/fixamingata/footer_extra.html
@@ -12,7 +12,7 @@
<ul>
<li>
<h4>Sekretess och kakor</h4>
- <p>Vill du veta mer om det juridiska? Läs vår information <a href="/privacy">om Dataskyddsförordning, sekretess och kakor</a>.</p>
+ <p>Vill du veta mer om det juridiska? Läs vår information om <a href="/about/privacy">Sekretess och kakor</a>.</p>
</li>
<li>
<h4>Är du en utvecklare?</h4>
@@ -22,6 +22,10 @@
<h4>Är du anställd i en kommun?</h4>
<p>Vill du veta mer om FixaMinGata eller hur det kan fungera för er kommun? <a href="/about/council">Läs mer om FixaMinGata för kommuner</a>.</p>
</li>
+ <li>
+ <h4>Tillgänglighet</h4>
+ <p>Läs gärna vår <a href="/about/accessibility">tillgänglighetsredogörelse</a>.</p>
+ </li>
</ul>
</div>
</div>
diff --git a/templates/web/fixmystreet-uk-councils/about/faq-en-gb.html b/templates/web/fixmystreet-uk-councils/about/faq-en-gb.html
new file mode 100755
index 000000000..762fc0093
--- /dev/null
+++ b/templates/web/fixmystreet-uk-councils/about/faq-en-gb.html
@@ -0,0 +1,251 @@
+[% INCLUDE 'header.html', title = loc('Frequently Asked Questions'), bodyclass = 'twothirdswidthpage' %]
+
+[% INCLUDE 'about/_sidebar.html' %]
+
+<h1>Frequently Asked Questions</h1>
+
+<dl>
+
+<dt>What sort of issues can I report?</dt>
+<dd>
+<p>This site is for reporting things which are <strong>broken, dirty,
+damaged</strong> or <strong>dumped</strong>, and need <strong>fixing,
+cleaning</strong> or <strong>clearing</strong>.
+</dd>
+
+<dt>Which issues shouldn't I report?</dt>
+
+<dd>
+<p>Please don’t use this site to inform us of:</p>
+
+<ul>
+ <li>Urgent and emergency problems</li>
+ <li>Complaints about people, including anti-social behaviour</li>
+ <li>Issues with council services, such as bins and recycling</li>
+ <li>Proposals for change, eg to road layouts</li>
+ <li>Complaints about [% c.cobrand.council_name %]</li>
+</ul>
+
+<p>
+ For these types of issue, please contact us through the appropriate
+ channel.
+</p>
+
+<p>
+ If you use this site to report issues it wasn’t designed for, there may be
+ a delay in your report getting to the right department.
+</p>
+
+<p>
+ Also: remember that all reports are published online, so it’s not a good
+ idea to use it for any issue that requires the inclusion of people’s
+ personal information, like names, addresses, photos of people, or car
+ number plates.
+</p>
+</dd>
+
+<dt>Where do my reports go?</dt>
+
+<dd>
+<p>
+ This site is an official street fault reporting system for
+ [% c.cobrand.council_name %].
+</p>
+
+<p>
+ Your report will go directly to the department responsible for getting it
+ fixed, or, if it’s not our responsibility, will be routed to the relevant
+ body. Reports are also published online for others to see.
+</p>
+
+<p>
+ The system is provided by SocietyWorks, and operates in tandem with their
+ nationwide site <a href="https://www.fixmystreet.com/">FixMyStreet.com</a>
+ — so reports made on FixMyStreet.com will also be shown here, and vice
+ versa.
+</p>
+</dd>
+
+<dt>How do I use this site?</dt>
+
+<dd>
+<p>
+ Begin by entering the location of your issue <a href="/">on the front
+ page</a>. You can use the name of a street, area, a place or a postcode —
+ or you can click “use my location” which will automatically detect where
+ you are.
+</p>
+<p>
+ You’ll be taken to a map centred on that location, where you can view
+ reports already made in that area. If someone has already reported your
+ issue, there’s no need to report it again: click ‘get updates’ at the
+ bottom of the report to be kept informed on progress.
+</p>
+<p>
+ If you don’t see the issue you’ve come to report, start a new one by
+ clicking on the map to show precisely where the issue is.
+</p>
+<p>
+ You’ll then be asked to fill in a few details.
+</p>
+</dd>
+
+<dt>Do I have to be a [% c.cobrand.council_name %] resident to use this site?</dt>
+
+<dd>
+<p>
+ No — anyone can use this site.
+</p>
+</dd>
+
+<dt>Do I need to make an account to use this site?</dt>
+
+<dd>
+<p>
+ No; if you wish to see previous reports you have made, you can sign in by
+ clicking ‘Sign in’ and then either have a link sent to your email, sign in
+ with a previously set password, or set a password using the ‘create an
+ account’ link.
+</p>
+<p>
+ If you already have an account on fixmystreet.com, you can use the same
+ details on this site.
+</p>
+</dd>
+
+<dt>How are the issues resolved?
+
+<dd>
+<p>
+ When you make a report on this site, we ask you where the issue is, what
+ category it fits within, and perhaps some other information, like questions
+ specific to the category, or which particular street light is broken.
+</p>
+
+<p>
+ These pieces of information will help direcrt your report to the right
+ place to get it fixed. If the issue is our responsibility, it will drop
+ into our internal system which will route it to the correct department. If
+ it’s more suited to another authority, we will try and send it there
+ instead.
+</p>
+</dd>
+
+<dt>What happens next?
+
+<dd>
+<p>
+ When there’s a change in your report’s status, and where you have provided
+ your email address, you’ll receive an update. This might tell you, for
+ example, that:
+</p>
+
+<ul>
+ <li>our inspectors have gone out to assess the issue</li>
+ <li>our contractors have scheduled the issue for repair</li>
+ <li>the issue has been resolved</li>
+ <li>The issue has been deemed unsuitable for fixing (as happens in some cases)</li>
+</ul>
+
+<p>
+ These updates are also published on the site so that everyone can see what
+ progress has been made.
+</p>
+</dd>
+
+<dt>Can I use this site on my smartphone or tablet?</dt>
+
+<dd>
+<p>
+ Yes - use your device’s browser to visit this site or fixmystreet.com. The
+ site works well on all sizes of screen, resizing automatically.
+</p>
+</dd>
+
+<dt>Why do you publish reports online?</dt>
+
+<dd>
+<p>
+ There’s no need to make a report if we’re already aware of the issue, so by
+ showing which issues have already been reported, we save your time and
+ ours.
+</p>
+<p>
+ Having everything visible online also allows everyone to keep up with an
+ issue’s status, even if they aren’t the one who reported it.
+</p>
+</dd>
+
+<dt>What else can I do on this site?</dt>
+
+<dd>
+<p>
+ You can subscribe to a specific area, so you’ll get an email whenever
+ someone makes a report in your chosen neighbourhood.
+</p>
+<p>
+ Search for a location, and then click ‘get updates’ at the bottom of the
+ list of reports.
+</p>
+<p>
+ If you run a website and you’d like to publish reports automatically from a
+ specific area, you can also access an RSS feed from the ‘get updates’
+ interface.
+</p>
+</dd>
+
+<dt>Can I edit or delete a report?</dt>
+
+<dd>
+<p>
+ You can remove your name from a report if you have included it by accident,
+ or changed your mind about it being published. Visit the report page when
+ signed in and click on the link marked ‘hide your name?’.
+</p>
+<p>
+ You’ll then have the option to remove your name from one report or every
+ report you’ve made.
+</p>
+<p>
+ If you’d like to edit some other part of your report, please get in touch.
+</p>
+</dd>
+
+[% IF c.cobrand.feature('updates_allowed') == 'open' %]
+ <dt>Can I make updates to my report?</dt>
+ <p>
+ Yes, you can leave updates on open reports, by visiting a report page and
+ filling in the update form.
+ </p>
+[% ELSIF c.cobrand.feature('updates_allowed') == 'reporter-open' %]
+ <dt>Can I make updates to my report?</dt>
+ <p>
+ Yes, you can leave updates on open reports you have made, by visiting a
+ report page and filling in the update form.
+ </p>
+[% ELSIF c.cobrand.feature('updates_allowed') == 'reporter' %]
+ <dt>Can I make updates to my report?</dt>
+ <p>
+ Yes, you can leave updates on reports you have made, by visiting a report
+ page and filling in the update form.
+ </p>
+[% END %]
+
+<dt>Do you remove content from this site?</dt>
+
+<dd>
+<p>
+ [% c.cobrand.council_name %] is not responsible for the content and
+ accuracy of material submitted by its users. We reserve the right to edit
+ or remove any problems or updates which we consider to be inappropriate
+ upon being informed by a user of the site.
+</p>
+<p>
+ If you have seen content that is offensive or inappropriate, please click
+ the ‘report abuse’ link at the foot of the report and let us know.
+</p>
+</dd>
+
+</dl>
+
+[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/fixmystreet-uk-councils/about/privacy.html b/templates/web/fixmystreet-uk-councils/about/privacy.html
index e7ef6b377..aee2f6978 100644
--- a/templates/web/fixmystreet-uk-councils/about/privacy.html
+++ b/templates/web/fixmystreet-uk-councils/about/privacy.html
@@ -1,12 +1,10 @@
[% INCLUDE 'header.html',
- title = loc('Privacy and cookies'),
+ title = 'Privacy policy',
bodyclass = 'twothirdswidthpage' %]
[% INCLUDE 'about/_sidebar.html' %]
-<h1>Privacy, cookies, and third party services</h1>
-
-<h2>Privacy Policy</h2>
+<h1>Privacy policy</h1>
[% IF c.cobrand.moniker == 'bathnes' %]
<p>Your email address identifies you and your report, and so it is your
@@ -18,44 +16,43 @@ else, for other purposes.
<p>Further information about the Council’s treatment of personal data, and your
privacy rights, is available in our
-<a href="http://www.bathnes.gov.uk/services/your-council-and-democracy/data-protection-and-freedom-information/council-privacy-notice">Privacy Notice</a>.
+<a href="https://www.bathnes.gov.uk/services/your-council-and-democracy/data-protection-and-freedom-information/council-privacy-notice">Privacy Notice</a>.
The Council’s Data Protection Officer may be contacted at
<a href="mailto:data_protection@bathnes.gov.uk">data_protection@bathnes.gov.uk</a>.
<hr>
[% END %]
+<h2>Who runs this service?</h2>
+
<p>
- FixMyStreet is run by the charity <a href="https://www.mysociety.org/">mySociety</a>.
+ This site is a service provided to [% c.cobrand.council_name %] by
+ <a href="https://www.societyworks.org/">SocietyWorks Ltd</a>, a limited
+ company (05798215). SocietyWorks is a trading subsidiary of mySociety, a
+ registered charity in England and Wales (1076346), who also run the
+ national <a href="https://www.fixmystreet.com/">fixmystreet.com</a> website
+ with which this site is linked. Henceforth this privacy policy will refer
+ to mySociety.
</p>
<p>
- Working in the fields of transparency and accountability, mySociety thinks hard and
- cares very much about the privacy and security of our users: the length of this
- privacy policy is one result of that. We know no-one goes through Privacy Policies for
- fun though, so we’ve tried to keep it a clear and reasonably quick read.
+ Reports made on this site also appear on fixmystreet.com, and vice versa.
</p>
<p>
- We hope it covers everything you need to know, but if you still have any questions
- please feel free to <a href="/contact">contact us</a>.
+ These reports and the associated user data are stored in a single database
+ which is hosted by mySociety. They are accessible to mySociety and
+ [% c.cobrand.council_name %] administrators.
</p>
<h2>What information we collect and how we use it</h2>
-<p>
- When you submit a report, <b>we pass on your details, and details of the issue, to the
- council contact</b> or contacts responsible for the area where you located the issue, or
- other relevant body such as TfL.
-</p>
-
<h3>
When you make a report
</h3>
<p>
- When you use FixMyStreet to send a report, you provide us with personal information
- including:
+ You may have provided us with personal information including:
</p>
<ul>
@@ -64,74 +61,94 @@ When you make a report
</ul>
<p>
- We <b>send this information to the body responsible for fixing your issue</b>, as per your
- choice of category and location.
+ This information, together with details of the issue, are routed directly
+ to the contact or contacts responsible for fixing it, based on two pieces
+ of data: the issue category, and its location.
</p>
<p>
- At the same time, <b>your report appears on the FixMyStreet website</b>. Your email address
- and phone number are not published, and your name is only published if you have opted
- to do so.
+ If the issue is the responsibility of [% c.cobrand.council_name %], your
+ report comes into our system. But this site also has the ability to route
+ your report to a different authority if they are the ones responsbile for
+ it. This might be a different council, or a body such as TfL or Highways
+ England.
</p>
<p>
- Some councils use FixMyStreet on their own websites. If you make a report within the
- boundaries of one of these councils (either through FixMyStreet.com or via the council
- website), it will be published on both sites.
+ If the report falls within our boundaries, <b>your report appears publicly
+ on both this site and on fixmystreet.com</b>, in some cases even if it has
+ been sent to another authority. It may additionally appear on that other
+ authority’s website, if they also use FixMyStreet as their reporting
+ software.
</p>
<p>
- FixMyStreet provides RSS/JSON feeds which allow anyone to publish reports on their own
- website or page. Typically these feeds consist of reports made within a specific local
- area, and are published on community or local interest sites.
+ Information that you enter in the email address and phone number fields
+ <strong>are not published</strong>, and your name is <strong>only published
+ if you have checked the box opting to do so</strong>.
</p>
<p>
- Note that anything you include in the body of your report will be published in one or
- all of the places listed above, so please take care to keep personal information such
- as your contact details to the correct fields.
+ FixMyStreet provides RSS/JSON feeds, accessible from both fixmystreet.com
+ and this site, which allow anyone to publish reports on their own website
+ or page. Typically these feeds consist of reports made within a specific
+ local area, and are published on community or local interest sites.
</p>
<p>
- We <b>store your personal details</b>, along with your password where used (passwords are
- stored in a format that is unreadable to anyone — including us — known as a hash) and
- any reports or updates you make, in our own database.
+ [% IF c.cobrand.moniker == 'cheshireeast' %]
+ Anything you include in the body of your report will be published in one or
+ all of the places listed above, so <strong>keep personal information such
+ as your contact details to the correct fields</strong>.
+ [% ELSE %]
+ <strong>Note that</strong> anything you include in the body of your report
+ will be published in one or all of the places listed above, so
+ <strong>please take care to keep personal information such as your contact
+ details to the correct fields</strong>.
+ [% END %]
</p>
<p>
- These are accessible only to FixMyStreet administrators who adhere to strict internal
- data-handling policies, and, where a council is a <a href="https://www.fixmystreet.com/pro/">FixMyStreet Pro</a> client, to council
- staff, whose own data-handling and security policies will apply.
+ mySociety <b>stores your personal details</b>, along with your password
+ where used (passwords are stored in a format that is unreadable to anyone —
+ including mySociety staff — known as a hash) and any reports or updates you
+ make, in our own database.
</p>
-<h3>
- When you add an update
- [% IF c.cobrand.send_questionnaires %]
- or respond to our ‘has your problem been fixed?’ survey
- [% END %]
-</h3>
-
<p>
- When you add an update to a report,
- [% IF c.cobrand.send_questionnaires %]
- or click through from our ‘has your problem been fixed?’ survey,
- [% END %]
- we record this along with the initial report and your user data.
+ These are accessible only to mySociety’s administrators, who adhere to
+ strict data-handling policies, and to [% c.cobrand.council_name %] staff,
+ who abide by their own data-handling and security policies.
</p>
-<p>
- <b>Updates are published on the website</b> but not routinely sent to the council except in
- cases where a council has opted for full integration. You may opt to include your
- name; your email address is not published.
-</p>
+[% IF c.cobrand.feature('updates_allowed') != 'staff' AND c.cobrand.send_questionnaires %]
+ <h3>When you add an update or respond to the email asking whether your problem was fixed</h3>
+ <p>
+ When you add an update to a report, or click through from our ‘has your
+ problem been fixed?’ email (where this function is available), this is
+ recorded along with the initial report and your user data.
+ </p>
+[% ELSIF c.cobrand.feature('updates_allowed') != 'staff' %]
+ <h3>When you add an update</h3>
+ <p>
+ When you add an update to a report, this is recorded along with the initial
+ report and your user data.
+ </p>
+[% ELSIF c.cobrand.send_questionnaires %]
+ <h3>When you respond to the email asking whether your problem was fixed</h3>
+ <p>
+ When you click through from our ‘has your problem been fixed?’ email, this
+ is recorded along with the initial report and your user data.
+ </p>
+[% END %]
<h3>
When you subscribe to an alert by email
</h3>
<p>
- We collect your email address, which we store with the details of whichever alert/s
- you have subscribed to.
+ mySociety collects your email address, which they store with the details of
+ whichever alert/s you have subscribed to.
</p>
<h3>
@@ -139,8 +156,12 @@ When you make a report
</h3>
<p>
- Your message will be accessible to our small team of support staff, who adhere to
- strict internal data-handling policies.
+ Your message will be accessible to [% c.cobrand.council_name %]’s support
+ staff, who adhere to our data-handling and security policies. If your issue
+ is about the use or functions of FixMyStreet, it may be passed to
+ mySociety’s support staff (including personal details, such as name and
+ email address, in order to help troubleshoot issues), whose privacy policy
+ <a href="https://www.fixmystreet.com/about/privacy">can be seen here</a>.
</p>
<p>
@@ -153,32 +174,23 @@ When you make a report
</h2>
<p>
- We sometimes use data from FixMyStreet, or share it with trusted third parties, for
- research. This data is completely anonymised and contains no identifying details such
- as names, email addresses or the content of reports. Our Research Data Release policy
- may be seen on request.
+ mySociety sometimes use report data, or share it with trusted third
+ parties, for research. This data is completely anonymised and contains
+ <strong>no identifying details</strong> such as names, email addresses or
+ the content of reports. mySociety’s Research Data Release policy may be
+ seen <a href="mailto:research@mysociety.org">on request to them</a>.
</p>
-<h2>
- What happens when you use FixMyStreet
-</h2>
-
-<h2>
- Making a report
-</h2>
+<h2>What to expect</h2>
<ul>
<li>
- When your council responds to your report, if you have provided us with an email
- address, in most cases <b>their reply will go directly to your email inbox</b>. This
- response, and any subsequent correspondence, happens outside the FixMyStreet
- system, except in the case of some councils which have integrated with FixMyStreet
- so that their responses and auto-updates are published on the report page. If you
- have submitted via phone verification, you may not receive any response from the
- council, depending on how their systems are set up.
+ When we respond to your report, if you have provided us with an email
+ address, in most cases <b>our reply will go directly to your email inbox</b>.
+ Responses and updates are also published on the report’s public webpage.
</li>
<li>
- We <b>email you if someone leaves an update</b> on a report you’ve made.
+ You’ll receive an email <b>if someone leaves an update</b> on a report you’ve made.
</li>
[% IF c.cobrand.send_questionnaires %]
<li>
@@ -188,13 +200,9 @@ When you make a report
</li>
[% END %]
<li>
- If your report is particularly interesting, our Communications Manager may get in
- touch, as we like to feature notable requests on the
- <a href="https://www.mysociety.org/blog/">mySociety blog</a> (or just
- <a href="mailto:press@mysociety.org">let us know</a> directly!).
- </li>
- <li>
- We only ever send you emails in relation to your reports or use of the site.
+ [% c.cobrand.council_name %] and/or mySociety will only ever send you
+ emails in relation to your reports or use of the site. Your personal
+ details will not be used for any other purpose.
</li>
</ul>
@@ -203,20 +211,21 @@ When you make a report
</h3>
<p>
- We’ll send you an automated email every time someone makes a report within the area
- you specify, or when updates are made to a report you’ve opted to follow. The
- frequency of these emails will depend on how large your chosen area is and how many
- reports are made within it, but you won’t get more than one an hour.
+ If you subscribe to an alert, you’ll receive an automated email every time
+ someone makes a report within the area you specify. The frequency of these
+ emails will depend on how large your chosen area is and how many reports
+ are made within it, but you won’t get more than one an hour.
+
+ If you’ve opted to follow a report, you’ll receive an email each time an
+ update is made, which could be a change in status made by our team, a
+ comment made by another member of the public, or an update from the person
+ who made the report originally.
</p>
<h2>
Unsubscribing
</h2>
-<h3>
- How do I stop receiving emails from you?
-</h3>
-
<p>
Every alert email we send contains an unsubscribe link at the bottom for you to stop
receiving that alert.
@@ -232,17 +241,43 @@ When you make a report
<p>
In using FixMyStreet for any of the functions listed above (sending a
- report, leaving an update, email alerts or site registration), we are
- processing your data under the legal basis 6(1)(f) – legitimate interests.
- We assert that we have a legitimate charitable and commercial interest in
- giving people an easy and public way to report street problems, even if they
- don't know who the problems should go to, and in sending them updates or
- alerts. The benefits of reporting problems publicly are that others can
- quickly see what has already been reported, so it prevents the council from
- having to deal with duplicates. It also creates a snapshot for local
- communities, so it's easy to see what the common problems are in a given
- area, and how quickly they get fixed. Other local residents can browse, read
- and comment on problems – and perhaps even offer a solution.
+ report, leaving an update, email alerts or site registration), your data is
+ processed by both [% c.cobrand.council_name %] and mySociety.
+</p>
+<p>
+ [% c.cobrand.council_name %] is the data controller and mySociety is a data
+ processor.
+</p>
+[% IF c.cobrand.moniker == 'hackney' %]
+<p>
+ Your data is processed by [% c.cobrand.council_name %] under the legal
+ basis 6(1)(a) – consent.
+</p>
+[% ELSE %]
+<p>
+ Your data is processed by [% c.cobrand.council_name %] under the legal
+ basis 6(1)(e) – <strong>public task</strong>. [% c.cobrand.council_name %]
+ asserts that the processing of users’ personal information is necessary for
+ us to perform a task in the public interest or for our official functions,
+ and the task or function has a clear basis in law. Our obligation to keep
+ highways in good order and to keep public areas safe and functional are set
+ in law.
+</p>
+[% END %]
+
+<p>
+ mySociety also runs a service called FixMyStreet. If you report a problem
+ that [% c.cobrand.council_name %] is responsible for directly on
+ FixMyStreet, rather than this site, mySociety will share your report (and
+ personal details if provided) with us.
+</p>
+
+<p>
+ This sharing is in accordance with the FixMyStreet
+ <a href="https://www.fixmystreet.com/faq">terms of service</a> and their
+ <a href="https://www.fixmystreet.com/about/privacy">privacy statement</a>.
+ When [% c.cobrand.council_name %] receives this information we will hold it
+ as explained on this page.
</p>
<h2>
@@ -254,51 +289,69 @@ When you make a report
</h3>
<p>
- Except in exceptional circumstances, we do not delete reports or updates made through
- FixMyStreet. Historic FixMyStreet reports provide an invaluable resource for
+ Except in exceptional circumstances, reports or updates made through this site
+ or FixMyStreet are not deleted. Historic reports provide an invaluable resource for
researchers into the quantity and type of street problems made across the UK during
the years the site has been running. This research can help inform civic planners,
developers, coders, historians and social scientists, among others.
</p>
<p>
- Therefore, <b>if you ask for a report to be removed, in most cases we will instead invite
- you to anonymise it</b>, so that there is no public connection between the content and
+ Therefore, <b>if you ask for a report to be removed, in most cases you will instead be
+ invited to anonymise it</b>, so that there is no public connection between the content and
your name. You can anonymise reports singly, or in bulk, by logging in to your account
- and clicking on the ‘“Hide your name” link beside the time and date of your report.
- From here you may anonymise this report or all reports you have made.
+ on either this site or on fixmystreet.com and clicking on the ‘“Hide your
+ name” link beside the time and date of your report. From here you may
+ anonymise this report or all reports you have made.
</p>
-<h3>
- Your personal information
-</h3>
-
<p>
- As well as your report or update appearing on the FixMyStreet website, your details,
- including name and email address, are stored in our admin system.
+ If you do not already have an account, it is simple to register, and once
+ you have done so you will have access to all the reports you have made
+ under that email address.
</p>
<p>
- If you submit a report but do not click on the confirmation email, your report will
- not be sent to the council; however, the report and your details remain in our system
- and are accessible to site administrators.
+ Changes you make to your reports will apply immediately on this site, on
+ fixmystreet.com and will also be reflected, sometimes with a delay,
+ anywhere else they appear (see “What information we collect and how we use
+ it”, above, for more details about where reports are published). If you do
+ not see the changes, please ‘hard refresh’ your browser by eg pressing the
+ Ctrl and F5 keys simultaneously.
</p>
<p>
- Please <a href="/contact">contact us</a> if you would like your details to be removed from our admin
- database.
+ Search engines such as Google often take a little time to reflect changes
+ to content, but anonymising your report should also remove your name from
+ their search results once the pages have been recrawled by their robots.
</p>
<h3>
- Support mail
+ Your personal information
</h3>
<p>
- If you contact FixMyStreet via our support email address we keep your message for two
- years at which point they will be automatically deleted.. This is to aid continuity
- and so that we can view any historic context which may have bearing on subsequent
- support mail, even if members of the support staff change. Support staff adhere to
- internal privacy policies which may be viewed on request.
+ As well as your report or update appearing on this site and the FixMyStreet
+ website, your details, including name and email address, are stored in
+ FixMyStreet’s admin system.
+</p>
+
+<p>
+ If you submit a report but do not click on the confirmation email, your
+ report will not be sent or published; however, the report and your details
+ remain in our system and are accessible to site administrators.
+</p>
+
+<p>
+ Personal details will automatically be removed from the database after two
+ years of inactivity of the associated account.
+ [% IF c.cobrand.moniker == 'cheshireeast' %]
+ <a href="/contact">Contact us</a>
+ [% ELSE %]
+ Please <a href="/contact">contact us</a>
+ [% END %]
+ if you would like your details to be removed from our admin database sooner
+ than that.
</p>
<h2>
@@ -313,12 +366,14 @@ When you make a report
contact us</a>, giving specific reasons why you are objecting to the processing of
your personal data. These reasons should be based upon your particular situation.
</p>
+
<h2>
Your right to access
</h2>
<p>
- You may <a href="/contact">contact us</a> at any time to ask to see what personal data we hold about you.
+ You may <a href="/contact">contact us</a> at any time to ask to see what
+ personal data we hold about you.
</p>
<h2>
@@ -326,34 +381,12 @@ When you make a report
</h2>
<p>
- If you believe that we have mishandled your data, you have the right to lodge a
- complaint with the Information Commissioner’s Office.
+ If you believe that we have mishandled your data, you have the right to
+ lodge a complaint with the Information Commissioner’s Office.
<a href="https://ico.org.uk/concerns/handling/">You can report a concern here</a>
(but do contact us first, so that we can try and help).
</p>
-<h3>
- Who we are
-</h3>
-
-<p>
- FixMyStreet is run by mySociety, a UK not-for-profit social enterprise. Our registered
- address is:
-</p>
-
-<p>
-mySociety<br>
-483 Green Lanes<br>
-London<br>
-N13 4BS<br>
-United Kingdom<br>
-</p>
-
-<p>
- …and we can also be <a href="/contact">contacted here</a>.
-</p>
-
-
<h2 id="cookies">Cookies</h2>
<p>To make our service easier or more useful, we sometimes place small data
@@ -372,43 +405,8 @@ the cookies and services that this site can use.
<tr>
<td>fixmystreet_app_session</td>
<td nowrap>A random unique identifier</td>
- <td>When browser is closed, or four weeks if &ldquo;Keep me signed in&rdquo; is ticked</td>
+ <td>When browser is closed</td>
</tr>
</table>
-<h3>Measuring website usage (Google Analytics)</h3>
-
-<p>We use Google Analytics software to collect information about how you use
-this site. We do this to help make sure the site is meeting the needs of its
-users and to help us make improvements.
-
-<p>Google Analytics stores information such as what
-pages you visit, how long you are on the site, how you got here, what you click
-on, and information about your web browser. IP addresses are masked (only a
-portion is stored) and personal information is only reported in aggregate. We
-do not allow Google to use or share our analytics data for any purpose besides
-providing us with analytics information, and we recommend that any user of
-Google Analytics does the same.
-
-<h3>Opting out</h3>
-<p>You can <a href="https://tools.google.com/dlpage/gaoptout">opt out of Google
-Analytics cookies</a>.
-
-<p>If you want to disable advertising-based tracking, you can
-<a href="https://www.google.com/settings/ads">adjust your Google Ads
-Settings</a>, or opt out of advertising-based tracking across a
-number of providers in one go using the
-<a href="http://www.networkadvertising.org/choices/">Network
-Advertising Initiative’s opt-out form</a>.
-
-<p>Rest assured, we only track usage data for one reason: to help us
-understand how we can make the site work better for you, our
-users.
-
-<h2>Credits</h2>
-
-<p>Bits of wording taken from the <a
-href="https://www.gov.uk/help/cookies">gov.uk cookies page</a> (under the Open
-Government Licence).
-
[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/fixmystreet-uk-councils/admin/bodies/_updates_disallowed_hint.html b/templates/web/fixmystreet-uk-councils/admin/bodies/_updates_disallowed_hint.html
new file mode 100644
index 000000000..fc9ef4867
--- /dev/null
+++ b/templates/web/fixmystreet-uk-councils/admin/bodies/_updates_disallowed_hint.html
@@ -0,0 +1,9 @@
+[% cfg = c.cobrand.feature('updates_allowed') ~%]
+<span class="form-hint">
+ This site’s configuration means even if this is unticked, only
+ [%~ IF cfg == 'staff' %] staff will be able to leave updates.
+ [%~ ELSIF cfg == 'reporter' %] the problem reporter will be able to leave updates.
+ [%~ ELSIF cfg == 'reporter-open' %] the problem reporter will be able to leave updates on open reports.
+ [%~ ELSIF cfg == 'open' %] open reports can have updates left on them.
+ [%~ END %]
+</span>
diff --git a/templates/web/fixmystreet-uk-councils/around/location_error.html b/templates/web/fixmystreet-uk-councils/around/location_error.html
new file mode 120000
index 000000000..970e242fb
--- /dev/null
+++ b/templates/web/fixmystreet-uk-councils/around/location_error.html
@@ -0,0 +1 @@
+../../fixmystreet.com/around/location_error.html \ No newline at end of file
diff --git a/templates/web/fixmystreet-uk-councils/auth/form_extra.html b/templates/web/fixmystreet-uk-councils/auth/form_extra.html
new file mode 100644
index 000000000..92cc31050
--- /dev/null
+++ b/templates/web/fixmystreet-uk-councils/auth/form_extra.html
@@ -0,0 +1,4 @@
+[% IF c.cobrand.requires_recaptcha %]
+ <script nonce="[% csp_nonce %]" src="https://www.google.com/recaptcha/api.js" async defer></script>
+ <div class="g-recaptcha" data-sitekey="[% c.config.RECAPTCHA.site_key %]"></div>
+[% END %]
diff --git a/templates/web/fixmystreet-uk-councils/footer_extra_js_base.html b/templates/web/fixmystreet-uk-councils/footer_extra_js_base.html
index 58e2872e3..633d1f14a 100644
--- a/templates/web/fixmystreet-uk-councils/footer_extra_js_base.html
+++ b/templates/web/fixmystreet-uk-councils/footer_extra_js_base.html
@@ -20,6 +20,11 @@ IF bodyclass.match('mappage');
version('/cobrands/highways/assets.js'),
);
END;
+ IF roadworks;
+ scripts.push(
+ version('/cobrands/fixmystreet-uk-councils/roadworks.js'),
+ );
+ END;
IF tfl;
scripts.push(
version('/cobrands/tfl/assets.js'),
diff --git a/templates/web/fixmystreet.com/about/privacy.html b/templates/web/fixmystreet.com/about/privacy.html
index 8ed953cc9..9e1316819 100755
--- a/templates/web/fixmystreet.com/about/privacy.html
+++ b/templates/web/fixmystreet.com/about/privacy.html
@@ -287,8 +287,10 @@ When you make a report
</p>
<p>
+ Personal details will automatically be removed from our database after two
+ years of inactivity of the associated account.
Please <a href="/contact">contact us</a> if you would like your details to be removed from our admin
- database.
+ database sooner than that.
</p>
<h3>
@@ -297,7 +299,7 @@ When you make a report
<p>
If you contact FixMyStreet via our support email address we keep your message for two
- years at which point they will be automatically deleted.. This is to aid continuity
+ years at which point it will be automatically deleted. This is to aid continuity
and so that we can view any historic context which may have bearing on subsequent
support mail, even if members of the support staff change. Support staff adhere to
internal privacy policies which may be viewed on request.
@@ -383,7 +385,7 @@ the cookies and services that this site can use.
<tr>
<td>fixmystreet_app_session</td>
<td nowrap>A random unique identifier</td>
- <td>When browser is closed, or four weeks if &ldquo;Keep me signed in&rdquo; is ticked</td>
+ <td>When browser is closed</td>
</tr>
</table>
diff --git a/templates/web/fixmystreet.com/around/location_error.html b/templates/web/fixmystreet.com/around/location_error.html
new file mode 100644
index 000000000..4e4ac8736
--- /dev/null
+++ b/templates/web/fixmystreet.com/around/location_error.html
@@ -0,0 +1,31 @@
+[% IF location_error_pc_lookup %]
+
+ <div class="search-help">
+ <h2 class="search-help__header" role="alert">
+ [% location_error | safe %]
+ </h2>
+
+ <div class="search-help__tips">
+ <div class="search-help__tips__category">
+ <h3>[% loc('Searching by postcode?') %]</h3>
+ <ul>
+ <li>[% loc('Check you <strong>haven’t swapped numbers and letters</strong>. <code>O</code>, <code>0</code>, <code>I</code> and <code>1</code> aren’t the same.') %]</li>
+ <li>[% loc('<strong>Don’t forget the space</strong> in your postcode.') %]</li>
+ <li>[% loc('<strong>Don’t mix postcodes and street names.</strong>') %]</li>
+ </ul>
+ </div>
+ <div class="search-help__tips__category">
+ <h3>[% loc('Searching by street name?') %]</h3>
+ <ul>
+ <li>[% loc('<strong>One at a time!</strong> Multiple street names in a single search can confuse us.') %]</li>
+ <li>[% loc('If you’re <strong>not sure on the spelling</strong>, try another nearby street you <em>are</em> sure about, then trace your way back on our map.') %]</li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
+[% ELSE %]
+
+ <p class="form-error">[% location_error | safe %]</p>
+
+[% END %]
diff --git a/templates/web/fixmystreet.com/auth/form_extra.html b/templates/web/fixmystreet.com/auth/form_extra.html
new file mode 100644
index 000000000..92cc31050
--- /dev/null
+++ b/templates/web/fixmystreet.com/auth/form_extra.html
@@ -0,0 +1,4 @@
+[% IF c.cobrand.requires_recaptcha %]
+ <script nonce="[% csp_nonce %]" src="https://www.google.com/recaptcha/api.js" async defer></script>
+ <div class="g-recaptcha" data-sitekey="[% c.config.RECAPTCHA.site_key %]"></div>
+[% END %]
diff --git a/templates/web/fixmystreet.com/contact/address.html b/templates/web/fixmystreet.com/contact/address.html
index 2cea59684..c1d61d24f 100644
--- a/templates/web/fixmystreet.com/contact/address.html
+++ b/templates/web/fixmystreet.com/contact/address.html
@@ -1,7 +1,7 @@
<hr>
-<p>FixMyStreet is a service provided by mySociety, which is the project of a
-registered charity, UK Citizens Online Democracy, charity number 1076346.</p>
+<p>FixMyStreet is a service provided by mySociety, which is a
+registered charity, charity number 1076346.</p>
<p>If you wish to contact us by post, our address is
<address>mySociety, 483 Green Lanes, London, N13 4BS, UK.</address></p>
diff --git a/templates/web/fixmystreet.com/footer_extra.html b/templates/web/fixmystreet.com/footer_extra.html
index 699d7de8b..b1cb0572e 100644
--- a/templates/web/fixmystreet.com/footer_extra.html
+++ b/templates/web/fixmystreet.com/footer_extra.html
@@ -70,7 +70,12 @@
<div class="col-sm-4">
<div class="mysoc-footer__legal">
- <p>mySociety Limited is a project of UK Citizens Online Democracy, a registered charity in England and Wales. For full details visit <a href="https://www.mysociety.org?utm_source=fixmystreet.com&amp;utm_content=footer+full+legal+details&amp;utm_medium=link&amp;utm_campaign=mysoc_footer">mysociety.org</a>.</p>
+ <p>
+ <a href="https://www.societyworks.org?utm_source=fixmystreet.com&amp;utm_content=footer+full+legal+details&amp;utm_medium=link&amp;utm_campaign=mysoc_footer">SocietyWorks</a>
+ is a limited company (05798215). It is a trading subsidiary of
+ <a href="https://www.mysociety.org?utm_source=fixmystreet.com&amp;utm_content=footer+full+legal+details&amp;utm_medium=link&amp;utm_campaign=mysoc_footer">mySociety</a>,
+ a registered charity in England and Wales (1076346).
+ </p>
</div>
</div>
diff --git a/templates/web/fixmystreet.com/footer_extra_js.html b/templates/web/fixmystreet.com/footer_extra_js.html
index 289e230e7..2a4f9ed9c 100644
--- a/templates/web/fixmystreet.com/footer_extra_js.html
+++ b/templates/web/fixmystreet.com/footer_extra_js.html
@@ -16,6 +16,7 @@ IF bodyclass.match('mappage');
scripts.push( version('/cobrands/lincolnshire/assets.js') );
scripts.push( version('/cobrands/northamptonshire/assets.js') );
scripts.push( version('/cobrands/hounslow/assets.js') );
+ scripts.push( version('/cobrands/oxfordshire/assets.js') );
scripts.push( version('/cobrands/westminster/assets.js') );
scripts.push( version('/cobrands/peterborough/assets.js') );
scripts.push( version('/cobrands/tfl/assets.js') );
diff --git a/templates/web/fixmystreet.com/report/_report_meta_info.html b/templates/web/fixmystreet.com/report/_report_meta_info.html
index 2eab84c9e..82d4b289a 100644
--- a/templates/web/fixmystreet.com/report/_report_meta_info.html
+++ b/templates/web/fixmystreet.com/report/_report_meta_info.html
@@ -1,4 +1,4 @@
-[% problem.meta_line(c) | html %]
+[% problem.meta_line(c.user) | html %]
[% IF c.cobrand.moniker != problem.get_cobrand_logged.moniker AND problem.get_cobrand_logged.is_council %]
using <a href="https://www.fixmystreet.com/pro/">FixMyStreet Pro</a>
[% END %]
diff --git a/templates/web/fixmystreet.com/report/_updates_disallowed_message.html b/templates/web/fixmystreet.com/report/_updates_disallowed_message.html
index d2d9cf83b..d7b3d383a 100644
--- a/templates/web/fixmystreet.com/report/_updates_disallowed_message.html
+++ b/templates/web/fixmystreet.com/report/_updates_disallowed_message.html
@@ -1,4 +1,4 @@
-[% cfg = c.cobrand.updates_disallowed_config(problem).0 ~%]
+[% cfg = c.cobrand.per_body_config('updates_allowed', problem).0 ~%]
[% IF cfg.match('reporter') AND (NOT cfg.match('open') OR problem.is_open) %]
<p>
Only the original reporter may leave updates.
diff --git a/templates/web/fixmystreet.com/report/update/form_state_checkbox.html b/templates/web/fixmystreet.com/report/update/form_state_checkbox.html
index 16ae59bc8..41b8c4897 100644
--- a/templates/web/fixmystreet.com/report/update/form_state_checkbox.html
+++ b/templates/web/fixmystreet.com/report/update/form_state_checkbox.html
@@ -2,6 +2,8 @@
[% IF (problem.is_fixed OR problem.is_closed) AND ((c.user_exists AND c.user.id == problem.user_id) OR alert_to_reporter) %]
+ [% RETURN IF c.cobrand.reopening_disallowed(problem) ~%]
+
<input type="checkbox" name="reopen" id="form_reopen" value="1"[% ' checked' IF (update.mark_open || c.req.params.reopen) %]>
[% IF problem.is_closed %]
<label class="inline" for="form_reopen">[% loc('This problem is still ongoing') %]</label>
diff --git a/templates/web/greenwich/about/faq-en-gb.html b/templates/web/greenwich/about/faq-en-gb.html
index dc628dbe9..bb890ff9d 100644
--- a/templates/web/greenwich/about/faq-en-gb.html
+++ b/templates/web/greenwich/about/faq-en-gb.html
@@ -72,11 +72,10 @@ by a user of the site.</dd>
<dt>The site is powered by FixMyStreet, who are they?</dt>
<dd>FixMyStreet was built by <a href="http://www.mysociety.org/">mySociety</a>, in conjunction with the <a href="http://www.youngfoundation.org.uk/">Young Foundation</a>.
-mySociety is the project of a registered charity which has grown out of the community of
+mySociety is a registered charity, number 1076346, which has grown out of the community of
volunteers who built sites like <a href="http://www.theyworkforyou.com/">TheyWorkForYou</a>.
mySociety&rsquo;s primary mission is to build Internet projects which give people simple, tangible
-benefits in the civic and community aspects of their lives.
-The charity is called UK Citizens Online Democracy and is charity number 1076346. mySociety
+benefits in the civic and community aspects of their lives. mySociety
can be contacted by email at <a href="mailto:hello&#64;mysociety.org">hello&#64;mysociety.org</a>,
or by post at mySociety, 483 Green Lanes, London, N13 4BS.</dd>
diff --git a/templates/web/hackney/around/intro.html b/templates/web/hackney/around/intro.html
new file mode 100644
index 000000000..d4510ac9a
--- /dev/null
+++ b/templates/web/hackney/around/intro.html
@@ -0,0 +1,5 @@
+ <div id="postcode-intro">
+ <h1> Report, view, or discuss local problems</h1>
+ <h2> (like potholes, fly tipping, broken paving slabs, or street lighting) </h2>
+ </div>
+
diff --git a/templates/web/hackney/auth/general.html b/templates/web/hackney/auth/general.html
new file mode 100644
index 000000000..1a9e4a060
--- /dev/null
+++ b/templates/web/hackney/auth/general.html
@@ -0,0 +1,88 @@
+[% INCLUDE 'header.html', bodyclass='authpage', title = loc('Sign in or create an account') %]
+
+<h1>
+ [% loc('Sign in') %]
+ <small>
+ [% tprintf(loc('or <a href="%s">create an account</a>'), '/auth/create') %]
+ </small>
+</h1>
+
+[% TRY %][% INCLUDE 'auth/_general_top.html' %][% CATCH file %][% END %]
+
+[% IF oauth_need_email %]
+ <p class="form-error">[% loc('We need your email address, please give it below.') %]</p>
+[% END %]
+[% IF oauth_failure %]
+ <p class="form-error">[% loc('Sorry, we could not log you in. Please fill in the form below.') %]</p>
+[% END %]
+
+<form action="/auth" method="post" name="general_auth" class="validate">
+ <fieldset>
+
+ <input type="hidden" name="r" value="[% c.req.params.r | html %]">
+
+ [% loc_username_error = INCLUDE 'auth/_username_error.html' default='email' %]
+
+[% IF c.config.SMS_AUTHENTICATION %]
+ [% SET username_label = loc('Your email or mobile') %]
+[% ELSE %]
+ [% SET username_label = loc('Your email') %]
+[% END %]
+
+ <label class="n" for="username">[% username_label %]</label>
+ [% IF loc_username_error %]
+ <div class="form-error">[% loc_username_error %]</div>
+ [% END %]
+ <input type="text" class="form-control required" id="username" name="username" value="[% username | html %]" autocomplete="username"
+ [%~ IF c.cobrand.moniker != 'borsetshire' %] autofocus[% END %]>
+
+ <div id="form_sign_in">
+ [% IF oauth_need_email %]
+ [% INCLUDE form_sign_in_no %]
+ <input type="hidden" name="oauth_need_email" value="1">
+ [% ELSE %]
+ [% INCLUDE form_sign_in_yes %]
+ [% INCLUDE form_sign_in_no %]
+ [% INCLUDE form_sign_in_hackney_staff %]
+ [% END %]
+ </div>
+ </fieldset>
+</form>
+
+[% INCLUDE 'footer.html' %]
+
+[% BLOCK form_sign_in_yes %]
+ <p class="hidden-nojs js-sign-in-password-hide">
+ <input class="btn btn--primary btn--block js-sign-in-password-btn" type="submit" name="sign_in_by_password" value="[% loc('Sign in with a password') %]">
+ </p>
+ <div class="hidden-js js-sign-in-password">
+ <label for="password_sign_in">[% loc('Your password') %]</label>
+
+ <div class="form-txt-submit-box">
+ <input type="password" name="password_sign_in" class="form-control" id="password_sign_in" value="" autocomplete="current-password">
+ <input class="green-btn" type="submit" name="sign_in_by_password" value="[% loc('Sign in') %]">
+ </div>
+
+ <p>
+ <a href="/auth/forgot">[% loc('Forgotten your password?') %]</a>
+ </p>
+ </div>
+[% END %]
+
+[% BLOCK form_sign_in_no %]
+ <p><input class="fake-link" type="submit" name="sign_in_by_code" value="
+ [%~ IF c.config.SMS_AUTHENTICATION %]
+ [%~ loc('Email me a link or text me a code to sign in') %]
+ [%~ ELSE %]
+ [%~ loc('Email me a link to sign in') %]
+ [%~ END ~%]
+ "></p>
+[% END %]
+
+[% BLOCK form_sign_in_hackney_staff %]
+ [% IF c.cobrand.feature('oidc_login') %]
+ <button name="social_sign_in" id="oidc_sign_in" value="oidc" class="fake-link sso-staff-sign-in">
+ Hackney Staff Sign-in
+ </button>
+ [% END %]
+[% END %] \ No newline at end of file
diff --git a/templates/web/hackney/footer_extra.html b/templates/web/hackney/footer_extra.html
new file mode 100644
index 000000000..1e7c53aad
--- /dev/null
+++ b/templates/web/hackney/footer_extra.html
@@ -0,0 +1,10 @@
+ <div class="hackney-footer">
+ <div class="container">
+ <a href="https://hackney.gov.uk/" alt="Hackney.gov.uk" class="hackney-footer__logo">Hackney</a>
+ [% IF NOT bodyclass.match('mappage') %]
+ <p class="footer-powered-by">
+ Powered by <a class="platform-logo" href="https://www.fixmystreet.com/pro/">FixMyStreet Platform</a>
+ </p>
+ [% END %]
+ </div>
+</div> \ No newline at end of file
diff --git a/templates/web/hackney/footer_extra_js.html b/templates/web/hackney/footer_extra_js.html
new file mode 100644
index 000000000..61b8dacea
--- /dev/null
+++ b/templates/web/hackney/footer_extra_js.html
@@ -0,0 +1,7 @@
+[%
+IF bodyclass.match('mappage');
+ scripts.push(
+ version('/cobrands/fixmystreet-uk-councils/alloy.js'),
+ );
+END %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 tfl=1 cobrand_js=1 validation=1 %]
diff --git a/templates/web/hackney/header_extra.html b/templates/web/hackney/header_extra.html
new file mode 100644
index 000000000..73d214ae0
--- /dev/null
+++ b/templates/web/hackney/header_extra.html
@@ -0,0 +1,2 @@
+[% INCLUDE 'tracking_code.html' %]
+<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,600,700&amp;display=swap" rel="stylesheet">
diff --git a/templates/web/hackney/report/form/user.html b/templates/web/hackney/report/form/user.html
new file mode 100644
index 000000000..bced8c189
--- /dev/null
+++ b/templates/web/hackney/report/form/user.html
@@ -0,0 +1,29 @@
+<!-- report/form/user.html -->
+<div class="js-new-report-user-hidden form-section-preview form-section-preview--next
+ [%~ ' hidden-nojs' IF c.user_exists OR NOT c.cobrand.social_auth_enabled %]">
+ <h2 class="form-section-heading form-section-heading--private hidden-nojs">
+ [% loc('Next:') %] [% loc('Tell us about you') %]
+ </h2>
+ <button type="button" class="btn btn--block hidden-nojs js-new-report-user-show">[% loc('Continue') %]</button>
+[% IF NOT c.user_exists AND c.cobrand.feature('oidc_login') %]
+ <button name="social_sign_in" id="oidc_sign_in" value="oidc" class="fake-link sso-staff-sign-in">
+ Hackney Staff Sign-in
+ </button>
+[% END %]
+ <div class="js-show-if-anonymous
+ [%~ ' hidden-js' UNLESS type == 'report' AND c.cobrand.allow_anonymous_reports == 'button' %]">
+ <small id="or">[% loc('or') %]</small>
+ <button name="report_anonymously" value="yes" class="btn btn--block js-new-report-submit">[% loc('Report anonymously') %]</button>
+ <small>[% loc('No personal details will be stored, and you will not receive updates about this report.') %]</small>
+ </div>
+</div>
+
+[% IF (c.user_exists OR NOT c.cobrand.social_auth_enabled) AND type == 'report' AND c.cobrand.allow_anonymous_reports == 'button' %]
+<div class="form-section-preview form-section-preview--next hidden-js">
+ <button name="report_anonymously" value="yes" class="btn btn--block">[% loc('Report anonymously') %]</button>
+ <small>[% loc('No personal details will be stored, and you will not receive updates about this report.') %]</small>
+ <small id="or">[% loc('or') %]</small>
+</div>
+[% END %]
+
+<!-- /report/form/user.html -->
diff --git a/templates/web/hackney/site-name.html b/templates/web/hackney/site-name.html
new file mode 100644
index 000000000..29d7f1480
--- /dev/null
+++ b/templates/web/hackney/site-name.html
@@ -0,0 +1 @@
+Report A Problem
diff --git a/templates/web/hackney/tracking_code.html b/templates/web/hackney/tracking_code.html
new file mode 100644
index 000000000..ac9a5bcf4
--- /dev/null
+++ b/templates/web/hackney/tracking_code.html
@@ -0,0 +1,11 @@
+[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
+<!-- Global site tag (gtag.js) - Google Analytics -->
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-171536255-1"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+
+ gtag('config', 'UA-171536255-1');
+</script>
+[% END %]
diff --git a/templates/web/hart/about/faq-en-gb.html b/templates/web/hart/about/faq-en-gb.html
index 522d7f3b2..2f9958cbe 100755
--- a/templates/web/hart/about/faq-en-gb.html
+++ b/templates/web/hart/about/faq-en-gb.html
@@ -70,11 +70,10 @@ by a user of the site.</dd>
<dt>The site is powered by FixMyStreet, who are they?</dt>
<dd>FixMyStreet was built by <a href="http://www.mysociety.org/">mySociety</a>, in conjunction with the <a href="http://www.youngfoundation.org.uk/">Young Foundation</a>.
-mySociety is the project of a registered charity which has grown out of the community of
+mySociety is a registered charity, number 1076346, which has grown out of the community of
volunteers who built sites like <a href="http://www.theyworkforyou.com/">TheyWorkForYou</a>.
mySociety&rsquo;s primary mission is to build Internet projects which give people simple, tangible
-benefits in the civic and community aspects of their lives.
-The charity is called UK Citizens Online Democracy and is charity number 1076346. mySociety
+benefits in the civic and community aspects of their lives. mySociety
can be contacted by email at <a href="mailto:hello&#64;mysociety.org">hello&#64;mysociety.org</a>,
or by post at mySociety, 483 Green Lanes, London, N13 4BS.</dd>
diff --git a/templates/web/hart/around/intro.html b/templates/web/hart/around/intro.html
index 7cc971041..fc5e2a844 100644
--- a/templates/web/hart/around/intro.html
+++ b/templates/web/hart/around/intro.html
@@ -1,4 +1,4 @@
<div id="postcode-intro">
<h1> Report something in Hart that needs to be fixed </h1>
- <h2> (like graffiti, fly tipping, broken paving slabs, or street lighting) </h2>
+ <h2> (like graffiti, fly tipping, broken paving slabs, dog fouling, or street lighting) </h2>
</div>
diff --git a/templates/web/highwaysengland/report/new/inline-tips.html b/templates/web/highwaysengland/report/new/inline-tips.html
index ff0ef42f8..730b482e5 100644
--- a/templates/web/highwaysengland/report/new/inline-tips.html
+++ b/templates/web/highwaysengland/report/new/inline-tips.html
@@ -1,3 +1,9 @@
+<div class="description_tips" >
+ <p>
+ Content of reports shall be monitored and any language that could be deemed to cause offense or be inappropriate shall be removed.
+ </p>
+</div>
+
<label for="where_hear">How did you hear about us?</label>
[%~ SET where_hear = report.get_extra_metadata('where_hear') %]
@@ -8,6 +14,6 @@
<option value="Highways England website"[% ' selected' IF 'Highways England website' == where_hear %]>Highways England website</option>
<option value="Twitter"[% ' selected' IF 'Twitter' == where_hear %]>Twitter</option>
<option value="Word of mouth"[% ' selected' IF 'Word of mouth' == where_hear %]>Word of mouth</option>
-<option value="Through the post"[% ' selected' IF 'Through the post' == where_hear %]>Through the post</option>
+<option value="Highways England correspondence"[% ' selected' IF 'Highways England correspondence' == where_hear %]>Highways England correspondence</option>
<option value="Other"[% ' selected' IF 'Other' == where_hear %]>Other</option>
</select>
diff --git a/templates/web/highwaysengland/report/new/roads_message.html b/templates/web/highwaysengland/report/new/roads_message.html
index e75a0a01b..d09845daf 100644
--- a/templates/web/highwaysengland/report/new/roads_message.html
+++ b/templates/web/highwaysengland/report/new/roads_message.html
@@ -7,10 +7,9 @@
</p>
</div>
- <div id="js-not-area7-road" class="hidden js-responsibility-message">
- <strong>This site is currently only for reports in the East Midlands</strong>
- <p>
- Please follow this link to
+ <div id="js-dbfo-road" class="hidden js-responsibility-message">
+ Whilst this site is being used to report on roads directly maintained
+ by Highways England, please follow this link to
<a class="js-update-coordinates" href="https://www.fixmystreet.com/report/new?latitude=[% latitude %]&amp;longitude=[% longitude %]">FixMyStreet</a> to continue reporting your issue.
</p>
</div>
diff --git a/templates/web/highwaysengland/report/new/top_message.html b/templates/web/highwaysengland/report/new/top_message.html
index 98bbd2cd3..4d6b5e73b 100644
--- a/templates/web/highwaysengland/report/new/top_message.html
+++ b/templates/web/highwaysengland/report/new/top_message.html
@@ -1,5 +1,5 @@
<div class="box-warning">
- If the issue you’re reporting is safety critical (ie a fallen sign) then do
- not continue with this report. Please call us on <strong>0300 123
- 5000</strong> from a safe place.
+ If the issue you’re reporting is safety critical (ie a fallen sign or not
+ working traffic light) then do not continue with this report. Please call
+ us on <strong>0300 123 5000</strong> from a safe place.
</div>
diff --git a/templates/web/hounslow/about/mapterms.html b/templates/web/hounslow/about/mapterms.html
index 04c0aeb09..fe08dcdd1 100644
--- a/templates/web/hounslow/about/mapterms.html
+++ b/templates/web/hounslow/about/mapterms.html
@@ -8,7 +8,7 @@
<li>
I. You are granted a non-exclusive, royalty free revocable licence
solely to view the licensed data for non-commercial purposes for the
- period during which mySociety Ltd. makes it available;
+ period during which SocietyWorks Ltd. makes it available;
</li>
<li>
II. You are not permitted to copy, sub-license, distribute, sell or
diff --git a/templates/web/hounslow/footer_extra_js.html b/templates/web/hounslow/footer_extra_js.html
index 081ec3a12..84531dee6 100644
--- a/templates/web/hounslow/footer_extra_js.html
+++ b/templates/web/hounslow/footer_extra_js.html
@@ -1,4 +1,4 @@
-[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 tfl=1 %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 tfl=1 roadworks=1 %]
[%
IF bodyclass.match('mappage');
scripts.push(
diff --git a/templates/web/hounslow/front/stats.html b/templates/web/hounslow/front/stats.html
new file mode 100644
index 000000000..23d035551
--- /dev/null
+++ b/templates/web/hounslow/front/stats.html
@@ -0,0 +1,40 @@
+[% USE Number.Format %]
+
+[%
+ stats = c.cobrand.front_stats_data();
+
+ new_text =
+ stats.recency == '1 week'
+ ? nget(
+ "<big>%s</big> report in past week",
+ "<big>%s</big> reports in past week",
+ stats.new
+ )
+ : nget(
+ "<big>%s</big> report recently",
+ "<big>%s</big> reports recently",
+ stats.new
+ );
+
+ completed_text = nget(
+ "<big>%s</big> completed in past month",
+ "<big>%s</big> completed in past month",
+ stats.completed
+ );
+
+ updates_text = nget(
+ "<big>%s</big> update on reports",
+ "<big>%s</big> updates on reports",
+ stats.updates
+ );
+
+ new_n = stats.new | format_number;
+ completed_n = stats.completed | format_number;
+ updates_n = stats.updates | format_number;
+%]
+
+<div id="front_stats">
+ <div>[% tprintf( new_text, decode(new_n) ) %]</div>
+ <div>[% tprintf( completed_text, decode(completed_n) ) %]</div>
+ <div>[% tprintf( updates_text, decode(updates_n) ) %]</div>
+</div>
diff --git a/templates/web/hounslow/report/_council_sent_info.html b/templates/web/hounslow/report/_council_sent_info.html
index 921f17f5f..97a7c4ca5 100644
--- a/templates/web/hounslow/report/_council_sent_info.html
+++ b/templates/web/hounslow/report/_council_sent_info.html
@@ -1,5 +1,5 @@
[% SET can_display_external_id = problem.external_id AND c.user_exists AND c.user.belongs_to_body(problem.bodies_str) %]
-[% SET duration_clause = problem.duration_string(c) %]
+[% SET duration_clause = problem.duration_string %]
[% IF duration_clause || can_display_external_id %]
<p class="council_sent_info">
[% duration_clause %]
diff --git a/templates/web/hounslow/reports/_body_name.html b/templates/web/hounslow/reports/_body_name.html
new file mode 100644
index 000000000..6cb43da82
--- /dev/null
+++ b/templates/web/hounslow/reports/_body_name.html
@@ -0,0 +1 @@
+Hounslow Highways
diff --git a/templates/web/isleofwight/about/mapterms.html b/templates/web/isleofwight/about/mapterms.html
index 04c0aeb09..fe08dcdd1 100644
--- a/templates/web/isleofwight/about/mapterms.html
+++ b/templates/web/isleofwight/about/mapterms.html
@@ -8,7 +8,7 @@
<li>
I. You are granted a non-exclusive, royalty free revocable licence
solely to view the licensed data for non-commercial purposes for the
- period during which mySociety Ltd. makes it available;
+ period during which SocietyWorks Ltd. makes it available;
</li>
<li>
II. You are not permitted to copy, sub-license, distribute, sell or
diff --git a/templates/web/isleofwight/footer_extra_js.html b/templates/web/isleofwight/footer_extra_js.html
index a7cea7811..490bbfe33 100644
--- a/templates/web/isleofwight/footer_extra_js.html
+++ b/templates/web/isleofwight/footer_extra_js.html
@@ -1,4 +1,4 @@
-[% PROCESS 'footer_extra_js_base.html' cobrand_js=1 %]
+[% PROCESS 'footer_extra_js_base.html' validation=1 cobrand_js=1 roadworks=1 %]
[% IF bodyclass.match('mappage');
scripts.push(
version('/cobrands/isleofwight/js.js'),
diff --git a/templates/web/isleofwight/report/_council_sent_info.html b/templates/web/isleofwight/report/_council_sent_info.html
index d9edac902..a2933d81e 100644
--- a/templates/web/isleofwight/report/_council_sent_info.html
+++ b/templates/web/isleofwight/report/_council_sent_info.html
@@ -1,4 +1,4 @@
-[% SET duration_clause = problem.duration_string(c) %]
+[% SET duration_clause = problem.duration_string %]
[% IF duration_clause || problem.can_display_external_id %]
<p class="council_sent_info">
[%- IF problem.can_display_external_id %]
diff --git a/templates/web/isleofwight/report/_item_heading.html b/templates/web/isleofwight/report/_item_heading.html
index 90010a548..40f9c8ad2 100644
--- a/templates/web/isleofwight/report/_item_heading.html
+++ b/templates/web/isleofwight/report/_item_heading.html
@@ -1,7 +1,7 @@
[%
SET title = problem.title;
IF c.req.uri.path == '/';
- title = problem.category_display;
+ title = problem.category; # Not category_display to prevent unneeded DM lookup
END;
%]
<h3 class="item-list__heading">[% title %]</h3>
diff --git a/templates/web/isleofwight/reports/_body_name.html b/templates/web/isleofwight/reports/_body_name.html
new file mode 100644
index 000000000..764623032
--- /dev/null
+++ b/templates/web/isleofwight/reports/_body_name.html
@@ -0,0 +1 @@
+Island Roads
diff --git a/templates/web/lincolnshire/footer_extra_js.html b/templates/web/lincolnshire/footer_extra_js.html
index 9132ead25..3e2eca135 100644
--- a/templates/web/lincolnshire/footer_extra_js.html
+++ b/templates/web/lincolnshire/footer_extra_js.html
@@ -1 +1 @@
-[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 roadworks=1 %]
diff --git a/templates/web/northamptonshire/footer_extra_js.html b/templates/web/northamptonshire/footer_extra_js.html
index fbd33dd11..523f441cf 100644
--- a/templates/web/northamptonshire/footer_extra_js.html
+++ b/templates/web/northamptonshire/footer_extra_js.html
@@ -4,4 +4,4 @@ IF bodyclass.match('mappage');
version('/cobrands/fixmystreet-uk-councils/alloy.js'),
);
END %]
-[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 roadworks=1 %]
diff --git a/templates/web/northamptonshire/report/_council_sent_info.html b/templates/web/northamptonshire/report/_council_sent_info.html
index 6329c51ad..5a53f2034 100644
--- a/templates/web/northamptonshire/report/_council_sent_info.html
+++ b/templates/web/northamptonshire/report/_council_sent_info.html
@@ -1,4 +1,4 @@
-[% SET duration_clause = problem.duration_string(c) %]
+[% SET duration_clause = problem.duration_string %]
[% IF duration_clause || problem.whensent %]
<p class="council_sent_info">
[%- IF problem.whensent AND NOT c.cobrand.is_defect(problem) %]
diff --git a/templates/web/oxfordshire/footer_extra_js.html b/templates/web/oxfordshire/footer_extra_js.html
index 88fc006e7..bb65cec8b 100644
--- a/templates/web/oxfordshire/footer_extra_js.html
+++ b/templates/web/oxfordshire/footer_extra_js.html
@@ -1 +1 @@
-[% PROCESS 'footer_extra_js_base.html' highways=1 validation=1 %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 validation=1 roadworks=1 cobrand_js=1 %]
diff --git a/templates/web/oxfordshire/report/_council_sent_info.html b/templates/web/oxfordshire/report/_council_sent_info.html
index 8b742cb2e..1dd86c918 100644
--- a/templates/web/oxfordshire/report/_council_sent_info.html
+++ b/templates/web/oxfordshire/report/_council_sent_info.html
@@ -1,13 +1,16 @@
-[% IF problem.whensent || problem.can_display_external_id %]
- <div class="council_info_box">
- [% IF problem.can_display_external_id %]
- [% reference = problem.get_extra_metadata('customer_reference') %]
- <h3>
- [% IF reference %]
- [% problem.external_body %] Council ref:&nbsp;[% reference %]
- [% END %]
- </h3>
- [% END %]
+[% reference = problem.get_extra_metadata('customer_reference') ~%]
+[% feature_id = problem.get_extra_field_value('feature_id') ~%]
+[% column_no = problem.get_extra_field_value('column_no') ~%]
+[% RETURN UNLESS reference OR feature_id OR column_no %]
- </div>
-[% END %]
+<div class="council_info_box">
+ [% IF reference %]
+ <p><strong>Council ref:</strong> [% reference %]</p>
+ [% END %]
+ [% IF feature_id %]
+ <p><strong>Asset ID:</strong> [% feature_id %]</p>
+ [% END %]
+ [% IF column_no %]
+ <p><strong>Column number:</strong> [% column_no %]</p>
+ [% END %]
+</div>
diff --git a/templates/web/oxfordshire/report/_main_sent_info.html b/templates/web/oxfordshire/report/_main_sent_info.html
index 9865153d3..7066ebe5d 100644
--- a/templates/web/oxfordshire/report/_main_sent_info.html
+++ b/templates/web/oxfordshire/report/_main_sent_info.html
@@ -1,4 +1,4 @@
-[% SET duration_clause = problem.duration_string(c) %]
+[% SET duration_clause = problem.duration_string %]
[% IF duration_clause %]
<p class="council_sent_info">[% duration_clause %]</p>
[% END %]
diff --git a/templates/web/oxfordshire/report/inspect/_extra_details_field.html b/templates/web/oxfordshire/report/inspect/_extra_details_field.html
new file mode 100644
index 000000000..5fc7b0086
--- /dev/null
+++ b/templates/web/oxfordshire/report/inspect/_extra_details_field.html
@@ -0,0 +1,35 @@
+<p>
+ <label for="detailed_information">[% loc('Extra details') %]</label>
+ [% IF max_detailed_info_length %]
+ <span id="detailed_information_length">
+ [% tprintf(loc('%d characters maximum'), max_detailed_info_length) %]
+ </span>
+ [% END %]
+ <span class="js-inspect-defect-yes hidden-js">
+ <br>[% c.user.email %] <span id="js-defect-prefix"></span> &hellip;
+ </span>
+ <textarea rows="2" name="detailed_information" id="detailed_information" class="form-control"
+ [% IF max_detailed_info_length %]data-max-length="[% max_detailed_info_length %]"[% END %]>[% problem.get_extra_metadata('detailed_information') | html %]</textarea>
+</p>
+
+<script nonce="[% csp_nonce %]">
+(function(){
+ function update_prefix() {
+ var prefix = document.getElementById('js-defect-prefix');
+ var text = '';
+ var traffic = document.getElementById('traffic_information');
+ if (traffic.selectedIndex) {
+ text += 'TM' + traffic.selectedIndex + ' ';
+ }
+ var type = document.getElementById('defect_item_type');
+ type = type.options[type.selectedIndex].value;
+ type = type.split(' ')[0];
+ text += (type == 'Sweep') ? 'S&F' : type;
+ text += ' ';
+ prefix.textContent = text;
+ }
+
+ document.getElementById('traffic_information').addEventListener('change', update_prefix);
+ document.getElementById('defect_item_type').addEventListener('change', update_prefix);
+})();
+</script>
diff --git a/templates/web/oxfordshire/report/inspect/_raise_defect.html b/templates/web/oxfordshire/report/inspect/_raise_defect.html
new file mode 100644
index 000000000..d6e05d3b5
--- /dev/null
+++ b/templates/web/oxfordshire/report/inspect/_raise_defect.html
@@ -0,0 +1,107 @@
+[% IF permissions.report_instruct %]
+
+[% IF problem.get_extra_metadata('inspected') AND NOT errors %]
+
+<dl>
+ <dt>Defect category</dt>
+ <dd>[% problem.get_extra_metadata('defect_item_category') %]</dd>
+
+ <dt>Defect type</dt>
+ <dd>[% problem.get_extra_metadata('defect_item_type') %]</dd>
+
+ <dt>Defect detail</dt>
+ <dd>[% problem.get_extra_metadata('defect_item_detail') %]</dd>
+
+ <dt>Location description</dt>
+ <dd>[% problem.get_extra_metadata('defect_location_description') %]</dd>
+
+ <dt>Traffic management required?</dt>
+ <dd>[% problem.get_extra_metadata('traffic_information') %]</dd>
+</dl>
+
+[% ELSE %]
+
+<div id="js-inspect-action-scheduled" class="[% "hidden" UNLESS problem.state == 'action scheduled' %]">
+
+ <p>[% loc('Do you want to automatically raise a defect?') %]</p>
+ <p class="segmented-control segmented-control--radio">
+ <input type="radio" name="raise_defect" id="raise_defect_yes" value="1" data-show=".js-inspect-defect-yes">
+ <label class="btn" for="raise_defect_yes">[% loc('Yes') %]</label>
+ <input type="radio" name="raise_defect" id="raise_defect_no" value="0" data-hide=".js-inspect-defect-yes">
+ <label class="btn" for="raise_defect_no">[% loc('No') %]</label>
+ </p>
+
+ <div class="js-inspect-defect-yes hidden-js">
+
+ <p>Please fill in the below:</p>
+
+ <label for="defect_item_category">Defect category</label>
+ <select id="defect_item_category" name="defect_item_category" class="form-control" required>
+ <option value="">-- Pick a category --</option>
+ <option data-show=".defect-non-kerb-options" data-hide=".defect-kerb-options">Minor Carriageway</option>
+ <option data-show=".defect-non-kerb-options" data-hide=".defect-kerb-options">Footway/ Cycleway</option>
+ <option data-show=".defect-kerb-options" data-hide=".defect-non-kerb-options">Kerbing</option>
+ </select>
+
+ <label for="defect_item_type">Defect type</label>
+ <select id="defect_item_type" name="defect_item_type" class="form-control" required>
+ <option value="">-- Pick a type --</option>
+ <optgroup class="defect-non-kerb-options" label="Minor Carriageway/ Footway/ Cycleway">
+ <option>Sweep &amp; Fill</option>
+ </optgroup>
+ <optgroup class="defect-kerb-options" label="Kerbing">
+ <option>Damaged</option>
+ <option>Loose</option>
+ <option>Misaligned Single Units or Uneven Run of Units</option>
+ <option>Missing</option>
+ </optgroup>
+ </select>
+
+ <label for="defect_item_detail">Defect detail</label>
+ <select id="defect_item_detail" name="defect_item_detail" class="form-control" required>
+ <option value="">-- Pick a detail --</option>
+ <optgroup class="defect-non-kerb-options" label="Minor Carriageway/ Footway/ Cycleway">
+ <option>Pothole Sweep &amp; Fill 0-1m&sup2;</option>
+ <option>Pothole Cluster Sweep &amp; Fill 1-2m&sup2;</option>
+ </optgroup>
+ <optgroup class="defect-kerb-options" label="Kerbing">
+ <option>1 kerb unit or 1 linear m</option>
+ <option>Greater than 1 kerb unit or 1 linear m</option>
+ </optgroup>
+ </select>
+
+ <label for="traffic_information">[% loc('Traffic management required?') %]</label>
+ [% traffic_info = problem.get_extra_metadata('traffic_information') %]
+ <select id="traffic_information" name="traffic_information" class="form-control">
+ <option value=""[% ' selected' IF NOT traffic_info %]>-</option>
+ [% FOREACH option IN ['Signs and Cones', 'Stop and Go Boards'] %]
+ <option value='[% option %]'[% ' selected' IF traffic_info == option %]>[% option %]</option>
+ [% END %]
+ </select>
+
+ <label for="defect_location_description">Location description</label>
+ <textarea rows="2" id="defect_location_description" name="defect_location_description" class="form-control"></textarea>
+
+ </div>
+
+</div>
+
+<script nonce="[% csp_nonce %]">
+(function(){
+ var item = document.getElementById('defect_item_category');
+ item.addEventListener('change', function(){
+ var opt = item.options[item.selectedIndex].value;
+ if (opt !== 'Kerbing') {
+ var type = document.getElementById('defect_item_type');
+ type.selectedIndex = 1;
+ var event = document.createEvent("Event");
+ event.initEvent("change", true, false);
+ type.dispatchEvent(event);
+ }
+ });
+})();
+</script>
+
+[% END %]
+
+[% END %]
diff --git a/templates/web/oxfordshire/report/new/roads_message.html b/templates/web/oxfordshire/report/new/roads_message.html
new file mode 100644
index 000000000..4572b07bd
--- /dev/null
+++ b/templates/web/oxfordshire/report/new/roads_message.html
@@ -0,0 +1,13 @@
+<div id="js-roads-responsibility" class="box-warning hidden">
+ <div id="js-not-a-road" class="hidden js-responsibility-message">
+ <p>This area is not under the responsibility of Oxfordshire
+ County Council and therefore we are unable to accept reports in
+ this area / street.</p>
+ </div>
+ <div id="js-not-an-asset" class="hidden js-responsibility-message">
+ <p>This item is not maintained by Oxfordshire
+ County Council and therefore we are unable to accept reports about it. Please
+ Contact your Parish or District Council.
+ </p>
+ </div>
+</div>
diff --git a/templates/web/peterborough/admin/bodies/_category_field.html b/templates/web/peterborough/admin/bodies/_category_field.html
new file mode 100644
index 000000000..6497e3511
--- /dev/null
+++ b/templates/web/peterborough/admin/bodies/_category_field.html
@@ -0,0 +1,21 @@
+[% IF contact.in_storage %]
+ <h1>[% contact.category | html %]</h1>
+ <input type="hidden" name="category" value="[% contact.category | html %]" >
+
+ <div class="admin-hint">
+ <p>A display name will be used in preference to the main category name on web pages and dropdown menus, but not in URLs.</p>
+ </div>
+
+ <p>
+ <label>
+ Display name:
+ <input type="text" class="form-control" name="extra[display_name]" id="display_name"
+ value="[% contact.get_extra_metadata('display_name') | html %]" size="30">
+ </label>
+ </p>
+
+[% ELSE %]
+ <p>
+ <strong>[% loc('Category') %] </strong><input type="text" class="form-control" name="category" size="30" value="[% contact.category | html %]" required>
+ </p>
+[% END %]
diff --git a/templates/web/peterborough/footer_extra_js.html b/templates/web/peterborough/footer_extra_js.html
index 9132ead25..3e2eca135 100644
--- a/templates/web/peterborough/footer_extra_js.html
+++ b/templates/web/peterborough/footer_extra_js.html
@@ -1 +1 @@
-[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 roadworks=1 %]
diff --git a/templates/web/peterborough/report/_council_sent_info.html b/templates/web/peterborough/report/_council_sent_info.html
index 1963020bc..c7e1eaf1d 100644
--- a/templates/web/peterborough/report/_council_sent_info.html
+++ b/templates/web/peterborough/report/_council_sent_info.html
@@ -1,4 +1,4 @@
-[% SET duration_clause = problem.duration_string(c) %]
+[% SET duration_clause = problem.duration_string %]
[% IF duration_clause || problem.whensent %]
<p class="council_sent_info">
[%- IF problem.whensent %]
diff --git a/templates/web/rutland/about/faq-en-gb.html b/templates/web/rutland/about/faq-en-gb.html
index cfe1d9153..31fdf5e0d 100644
--- a/templates/web/rutland/about/faq-en-gb.html
+++ b/templates/web/rutland/about/faq-en-gb.html
@@ -3,7 +3,7 @@
<div class="sticky-sidebar">
<aside>
<ul class="plain-list">
- <li><strong>Frequently Asked Questions</strong</li>
+ <li><strong>Frequently Asked Questions</strong></li>
<li><a href="/privacy">Privacy and cookies</a></li>
<li><a href="https://www.rutland.gov.uk/my-council/contact-us/">Contact Rutland County Council</a></li>
</ul>
diff --git a/templates/web/stevenage/about/faq-en-gb.html b/templates/web/stevenage/about/faq-en-gb.html
index a92a80cb3..764a9fbfc 100644
--- a/templates/web/stevenage/about/faq-en-gb.html
+++ b/templates/web/stevenage/about/faq-en-gb.html
@@ -64,11 +64,10 @@ by a user of the site.</dd>
<dt>The site is powered by FixMyStreet, who are they?</dt>
<dd>FixMyStreet was built by <a href="http://www.mysociety.org/">mySociety</a>, in conjunction with the <a href="http://www.youngfoundation.org.uk/">Young Foundation</a>.
-mySociety is the project of a registered charity which has grown out of the community of
+mySociety is a registered charity, number 1076346, which has grown out of the community of
volunteers who built sites like <a href="http://www.theyworkforyou.com/">TheyWorkForYou</a>.
mySociety&rsquo;s primary mission is to build Internet projects which give people simple, tangible
-benefits in the civic and community aspects of their lives.
-The charity is called UK Citizens Online Democracy and is charity number 1076346. mySociety
+benefits in the civic and community aspects of their lives. mySociety
can be contacted by email at <a href="mailto:hello&#64;mysociety.org">hello&#64;mysociety.org</a>,
or by post at mySociety, 483 Green Lanes, London, N13 4BS.</dd>
diff --git a/templates/web/tfl/front/pre-steps.html b/templates/web/tfl/front/pre-steps.html
deleted file mode 100644
index 9a740c692..000000000
--- a/templates/web/tfl/front/pre-steps.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<p style="max-width: 38em; font-size: 1.2em; margin-bottom: 2.5em;">
- <strong>
- All issues reported on Streetcare continue to be monitored by our teams at
- Transport for London. We are not able to carry out all of our normal
- maintenance works at the moment but we are working hard to deal with all
- safety critical issues.
- </strong>
- <br>
- We will continue to serve you the best that we can but urge everyone not to
- make journeys unless absolutely necessary.
- <br>
- We will be able to give you a further update on this by the end of May.
-</p>
diff --git a/templates/web/tfl/report/_council_sent_info.html b/templates/web/tfl/report/_council_sent_info.html
index ef6cca079..472c6ce10 100644
--- a/templates/web/tfl/report/_council_sent_info.html
+++ b/templates/web/tfl/report/_council_sent_info.html
@@ -1,4 +1,4 @@
-[% SET duration_clause = problem.duration_string(c) %]
+[% SET duration_clause = problem.duration_string %]
[% IF duration_clause || problem.whensent %]
<p class="council_sent_info">
[%- IF problem.whensent %]
diff --git a/templates/web/westminster/footer_extra_js.html b/templates/web/westminster/footer_extra_js.html
index f6e8c8bf9..c4896cfbe 100644
--- a/templates/web/westminster/footer_extra_js.html
+++ b/templates/web/westminster/footer_extra_js.html
@@ -1 +1 @@
-[% PROCESS 'footer_extra_js_base.html' cobrand_js=1 tfl=1 %]
+[% PROCESS 'footer_extra_js_base.html' cobrand_js=1 tfl=1 roadworks=1 %]
diff --git a/templates/web/zurich/admin/_index_table.html b/templates/web/zurich/admin/_index_table.html
new file mode 100644
index 000000000..232d4dc80
--- /dev/null
+++ b/templates/web/zurich/admin/_index_table.html
@@ -0,0 +1,17 @@
+<table cellspacing="0" cellpadding="2" border="1">
+ <tr>
+ <th>[% loc('ID') %]</th>
+ <th>[% loc('Description') %]</th>
+ [% FOREACH col IN [ [ 'category', loc('Category') ], [ 'created', loc('Submitted') ], [ 'lastupdate', loc('Updated') ], [ 'state', loc('Status') ] ] %]
+ <th><a href="[% INCLUDE sort_link choice = col.0 %]#[% hash %]">[% col.1 %] [% INCLUDE sort_arrow choice = col.0 %]</a></th>
+ [% END %]
+ [% IF include_subdiv %]
+ <th>[% loc('Subdivision/Body') %]</th>
+ [% END %]
+ <th>[% loc('Photo') %]</th>
+ [% IF NOT no_edit %]
+ <th class='edit'>*</th>
+ [% END %]
+ </tr>
+[% INCLUDE 'admin/problem_row.html' %]
+</table>
diff --git a/templates/web/zurich/admin/index-dm.html b/templates/web/zurich/admin/index-dm.html
index 39fa34dcb..eb791e8d2 100644
--- a/templates/web/zurich/admin/index-dm.html
+++ b/templates/web/zurich/admin/index-dm.html
@@ -6,34 +6,13 @@
</div>
<h2 id="submitted">[% loc('Submitted') %]</h2>
-[% INCLUDE list, problems = submitted.all, hash = 'submitted' %]
+[% INCLUDE 'admin/_index_table.html' problems=submitted.all hash='submitted' %]
<h2 id="feedback_pending">Rückmeldung ausstehend</h2>
-[% INCLUDE list, problems = approval.all, hash = 'feedback_pending' %]
+[% INCLUDE 'admin/_index_table.html' problems=approval.all hash='feedback_pending' %]
<h2 id="alle">[% loc('All reports') %]</h2>
-[% INCLUDE list, problems = other.all, include_subdiv = 1, hash = 'alle' %]
+[% INCLUDE 'admin/_index_table.html' problems=other.all include_subdiv=1 hash='alle' %]
[% INCLUDE 'pagination.html', admin = 1, param = 'p', hash = 'alle' %]
[% INCLUDE 'admin/footer.html' %]
-
-[% BLOCK list %]
-<table cellspacing="0" cellpadding="2" border="1">
- <tr>
- <th>[% loc('ID') %]</th>
- <th>[% loc('Description') %]</th>
- [% FOREACH col IN [ [ 'category', loc('Category') ], [ 'created', loc('Submitted') ], [ 'lastupdate', loc('Updated') ], [ 'state', loc('Status') ] ] %]
- <th><a href="[% INCLUDE sort_link choice = col.0 %]#[% hash %]">[% col.1 %] [% INCLUDE sort_arrow choice = col.0 %]</a></th>
- [% END %]
- [% IF include_subdiv %]
- <th>[% loc('Subdivision/Body') %]</th>
- [% END %]
- <th>[% loc('Photo') %]</th>
- <th class='edit'>*</th>
- </tr>
- <tr class="filter-row">
- <td colspan="8"><input type="text" placeholder="[%= loc('Filter report list') %]" /></td>
- </tr>
-[% INCLUDE 'admin/problem_row.html' %]
-</table>
-[% END %]
diff --git a/templates/web/zurich/admin/index-sdm.html b/templates/web/zurich/admin/index-sdm.html
index 68a2fcf62..6155f6a39 100644
--- a/templates/web/zurich/admin/index-sdm.html
+++ b/templates/web/zurich/admin/index-sdm.html
@@ -2,33 +2,13 @@
[% PROCESS 'admin/report_blocks.html' %]
<h2 id="new">[% loc('New reports') %]</h2>
-[% INCLUDE list, problems = reports_new.all, hash = 'new' %]
+[% INCLUDE 'admin/_index_table.html' problems=reports_new.all hash='new' %]
<h2 id="wait">[% loc('Reports awaiting approval') %]</h2>
-[% INCLUDE list, problems = reports_unpublished.all, hash = 'wait' %]
+[% INCLUDE 'admin/_index_table.html' problems=reports_unpublished.all hash='wait' %]
<h2 id="alle">[% loc('Reports published') %]</h2>
-[% INCLUDE list, problems = reports_published.all, no_edit = 1, hash = 'alle' %]
+[% INCLUDE 'admin/_index_table.html' problems=reports_published.all no_edit=1 hash='alle' %]
[% INCLUDE 'pagination.html', admin = 1, param = 'p', hash = 'alle' %]
[% INCLUDE 'admin/footer.html' %]
-
-[% BLOCK list %]
-<table cellspacing="0" cellpadding="2" border="1">
- <tr>
- <th>[% loc('ID') %]</th>
- <th>[% loc('Description') %]</th>
- [% FOREACH col IN [ [ 'category', loc('Category') ], [ 'created', loc('Submitted') ], [ 'lastupdate', loc('Updated') ], [ 'state', loc('Status') ] ] %]
- <th><a href="[% INCLUDE sort_link choice = col.0 %]#[% hash %]">[% col.1 %] [% INCLUDE sort_arrow choice = col.0 %]</a></th>
- [% END %]
- <th>[% loc('Photo') %]</th>
- [% IF NOT no_edit %]
- <th class='edit'>*</th>
- [% END %]
- </tr>
- <tr class="filter-row">
- <td colspan="8"><input type="text" placeholder="[%= loc('Filter report list') %]" /></td>
- </tr>
-[% INCLUDE 'admin/problem_row.html' %]
-</table>
-[% END %]
diff --git a/templates/web/zurich/admin/problem_row.html b/templates/web/zurich/admin/problem_row.html
index 502a7bc39..a2805d6dc 100644
--- a/templates/web/zurich/admin/problem_row.html
+++ b/templates/web/zurich/admin/problem_row.html
@@ -1,3 +1,5 @@
+[% no_edit = no_edit AND NOT c.req.params.internal ~%]
+
[%- FOR problem IN problems %]
[% SET p_body = problem.bodies.values.0 %]
<tr[%
@@ -21,14 +23,15 @@
<td>[% prettify_state(problem.state) %]
[% IF problem.state == 'feedback pending';
SET cs=problem.get_extra_metadata('closure_status');
- IF cs %] ([% prettify_state(cs) %]) [% END; END %]</td>
+ IF cs %] ([% prettify_state(cs) %]) [% END; END %]
+ [% IF problem.non_public %]<br><i>Interne Meldung</i>[% END %]</td>
[% IF include_subdiv %]
<td>
[%- IF p_body.parent.parent.id -%][%# ...it's a subdivision %]
[% PROCESS value_or_nbsp value=p_body.name %]
[%- ELSIF problem.external_body %]
- [% PROCESS value_or_nbsp value=problem.body(c).name %]
+ [% PROCESS value_or_nbsp value=problem.body.name %]
[%- ELSE -%]
&nbsp;
[%- END -%]
diff --git a/templates/web/zurich/admin/report_edit-sdm.html b/templates/web/zurich/admin/report_edit-sdm.html
index b468bc7a0..8d1fa464c 100644
--- a/templates/web/zurich/admin/report_edit-sdm.html
+++ b/templates/web/zurich/admin/report_edit-sdm.html
@@ -85,11 +85,17 @@
<div class="admin-report-edit admin-report-edit--interact">
-<p align="right" class="screen-only"><input [% sdm_disabled %] type="submit" class="btn" name="send_back" value="[% loc('Not for my subdivision') %]"></p>
+[% IF problem.non_public %]
+<p align="right" class="screen-only">
+ <input [% sdm_disabled %] [% sdm_disabled_fixed %] type="submit" class="btn" name="stop_internal" value="Keine interne Meldung">
+</p>
+[% END %]
+
+<p align="right" class="screen-only"><input [% sdm_disabled %] [% sdm_disabled_fixed %] type="submit" class="btn" name="send_back" value="[% loc('Not for my subdivision') %]"></p>
[% status_message | safe %]
-<p align="right" class="screen-only"><input [% sdm_disabled %] type="submit" class="btn" name="not_contactable" value="[% loc('Customer not contactable') %]"></p>
+<p align="right" class="screen-only"><input [% sdm_disabled %] [% sdm_disabled_internal %] [% sdm_disabled_fixed %] type="submit" class="btn" name="not_contactable" value="[% loc('Customer not contactable') %]"></p>
<ul class="no-bullets screen-only">
<li>
@@ -98,7 +104,7 @@
</li>
<li>
<label for="status_update">[% loc('New note to DM:') %]</label>
- <textarea [% sdm_disabled %] class="form-control" name='status_update' id='status_update' cols=60 rows=4></textarea>
+ <textarea [% sdm_disabled %] [% sdm_disabled_internal %] [% sdm_disabled_fixed %] class="form-control" name='status_update' id='status_update' cols=60 rows=4></textarea>
</li>
</ul>
@@ -109,7 +115,7 @@
<p class="clearfix screen-only">
<input [% sdm_disabled %] style="float:left" type="submit" class="btn" name="Submit changes" value="[% loc('Submit changes') %]" >
- <input [% sdm_disabled %] style="float:right" type="submit" class="btn" name="no_more_updates" value="[% loc('No further updates') %]">
+ <input [% sdm_disabled %] [% sdm_disabled_fixed %] style="float:right" type="submit" class="btn" name="no_more_updates" value="[% loc('No further updates') %]">
</p>
[% INCLUDE 'admin/list_updates.html' %]
diff --git a/templates/web/zurich/admin/reports/edit.html b/templates/web/zurich/admin/reports/edit.html
index 147022981..4a35192f0 100644
--- a/templates/web/zurich/admin/reports/edit.html
+++ b/templates/web/zurich/admin/reports/edit.html
@@ -119,6 +119,10 @@
[% status_message | safe %]
+[% IF problem.non_public %]
+<p align="right" class="screen-only"><input type="submit" class="btn" name="stop_internal" value="Keine interne Meldung"></p>
+[% END %]
+
<dl [% IF status_message %]class="with-message"[% END %]>
<dt class="screen-only">
@@ -268,7 +272,7 @@
[% ELSE %]
[% loc('Message to competent body:') %]
[% END %]
- [% problem.body(c).endpoint %]
+ [% problem.body.endpoint %]
</h2>
<div class="admin-external-message">
[% problem.extra.external_message | html_para %]
diff --git a/templates/web/zurich/admin/reports/index.html b/templates/web/zurich/admin/reports/index.html
index 481dfb49d..e2790309b 100644
--- a/templates/web/zurich/admin/reports/index.html
+++ b/templates/web/zurich/admin/reports/index.html
@@ -1,4 +1,4 @@
-[% PROCESS 'admin/header.html' title=loc('Search Reports') %]
+[% PROCESS 'admin/header.html' title=loc('All Reports') %]
[% PROCESS 'admin/report_blocks.html' %]
<form method="get" action="[% c.uri_for_action('admin/reports/index') %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
@@ -6,21 +6,8 @@
</form>
[% IF problems.size %]
-<table cellspacing="0" cellpadding="2" border="1">
- <tr>
- <th>[% loc('ID') %]</th>
- <th>[% loc('Description') %]</th>
- [% FOREACH col IN [ [ 'category', loc('Category') ], [ 'created', loc('Submitted') ], [ 'lastupdate', loc('Updated') ], [ 'state', loc('Status') ] ] %]
- <th><a href="[% INCLUDE sort_link choice = col.0 %]">[% col.1 %] [% INCLUDE sort_arrow choice = col.0 %]</a></th>
- [% END %]
- <th>[% loc('Photo') %]</th>
- <th class='edit'>*</th>
- </tr>
- [% INCLUDE 'admin/problem_row.html' %]
-</table>
-
-[% INCLUDE 'pagination.html', admin = 1, param = 'p', pager = problems_pager %]
-
+ [% PROCESS 'admin/_index_table.html' %]
+ [% INCLUDE 'pagination.html', admin = 1, param = 'p', pager = problems_pager %]
[% END %]
[% INCLUDE 'admin/list_updates.html' %]
diff --git a/templates/web/zurich/admin/users/form.html b/templates/web/zurich/admin/users/form.html
new file mode 100644
index 000000000..ec670a28a
--- /dev/null
+++ b/templates/web/zurich/admin/users/form.html
@@ -0,0 +1,43 @@
+<form method="post" id="user_edit" action="[%
+ SET action_end = user.id || 'add';
+ c.uri_for_action( 'admin/users/edit', [ action_end ] )
+ %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+ <input type="hidden" name="token" value="[% csrf_token %]" >
+ <input type="hidden" name="submit" value="1" >
+
+ [% INCLUDE 'errors.html' errors = field_errors.values %]
+ <ul class="no-bullets">
+ [% PROCESS 'admin/users/_form_details.html' %]
+
+ <li>
+ <label for="body">[% loc('Body:') %]</label>
+ <select class="form-control" id='body' name='body'>
+ <option value=''>[% loc('No body') %]</option>
+ [% FOR body IN bodies %]
+ <option value="[% body.id %]"[% ' selected data-originally-selected' IF body.id == user.from_body.id %]>[% body.name %]</option>
+ [% END %]
+ </select>
+ </li>
+
+ <li>
+ <label>
+ [% loc('government-internal') %]
+ <input type="checkbox" id="flagged" name="flagged"[% user.flagged ? ' checked' : '' %]>
+ </label>
+ </li>
+
+ </ul>
+ <p>
+ <input type="submit" class="btn" name="Submit changes" value="[% loc('Submit changes') %]" >
+ </p>
+
+ [% IF user AND NOT user.from_body %]
+ <ul class="no-bullets danger-zone">
+ <li><input class="btn-danger" type="submit" name="logout_everywhere" value="[% loc('Log out of all sessions') %]">
+ <li><input class="btn-danger" type="submit" name="anon_everywhere" value="[% loc('Make anonymous on all reports and updates') %]">
+ <li><input class="btn-danger" type="submit" name="hide_everywhere" value="[% loc('Hide all reports and updates') %]">
+ <li><input class="btn-danger" type="submit" name="remove_account" value="[% loc('Remove account details') %]">
+ </ul>
+ [% END %]
+
+</form>
diff --git a/templates/web/zurich/header.html b/templates/web/zurich/header.html
index 347bf6b70..c9343d8d6 100644
--- a/templates/web/zurich/header.html
+++ b/templates/web/zurich/header.html
@@ -41,11 +41,20 @@
[% pagename = c.req.uri.path %]
[% pagename = pagename.replace('/admin/?(\w*).*', '$1') %]
+ [% IF admin_type == 'super' %]
<li [% IF pagename == 'summary' OR pagename == '' %]class="current"[% END %]>
<a href="/admin/summary">[% loc('Summary') %]</a>
</li>
+ [% ELSE %]
+ <li [% IF NOT c.get_param('internal') AND (pagename == 'summary' OR pagename == '') %]class="current"[% END %]>
+ <a href="/admin/summary">Öffentliche</a>
+ </li>
+ <li [% IF c.get_param('internal') AND (pagename == 'summary' OR pagename == '') %]class="current"[% END %]>
+ <a href="/admin/summary?internal=1">Interne</a>
+ </li>
+ [% END %]
<li [% IF pagename == 'reports' OR pagename == 'report_edit' %]class="current"[% END %]>
- <a href="/admin/reports">[% loc('Reports') %]</a>
+ <a href="/admin/reports">[% loc('All') %]</a>
</li>
[% IF admin_type == 'dm' OR admin_type == 'super' %]
<li [% IF pagename == 'bodies' OR pagename == 'body' %]class="current"[% END %]>
@@ -66,7 +75,7 @@
</li>
[% END %]
<li class="search-box">
- <form method="get" action="[% c.uri_for('reports') %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+ <form method="get" action="[% c.uri_for_action('/admin/reports/index') %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
<input type="text" name="search" size="20" id="search" placeholder="[% loc('Search reports') %]">
</form>
diff --git a/templates/web/zurich/maps/zurich.html b/templates/web/zurich/maps/zurich.html
index f3a9bdc7f..8310b0758 100644
--- a/templates/web/zurich/maps/zurich.html
+++ b/templates/web/zurich/maps/zurich.html
@@ -5,9 +5,4 @@
[% map_html = BLOCK %]
[% INCLUDE maps/openlayers.html %]
[% INCLUDE maps/wmts_config.html %]
-[% UNLESS around_page %]
-<p class="sub-map-links" id="sub_map_links">
- [% map_sub_links | safe %]
-</p>
-[% END %]
[% END %]
diff --git a/templates/web/zurich/report/banner.html b/templates/web/zurich/report/banner.html
index 8814dc986..b8ba7fa43 100644
--- a/templates/web/zurich/report/banner.html
+++ b/templates/web/zurich/report/banner.html
@@ -1,5 +1,5 @@
[% USE date %]
-[% problem_hashref = c.cobrand.problem_as_hashref(problem, c) %]
+[% problem_hashref = c.cobrand.problem_as_hashref(problem) %]
<div class="banner banner--[% problem_hashref.banner_id %]">
<p>[% problem_hashref.state_t %]</p>
</div>
diff --git a/templates/web/zurich/report/new/fill_in_details_form.html b/templates/web/zurich/report/new/fill_in_details_form.html
index 376429dad..c7ad0fb96 100644
--- a/templates/web/zurich/report/new/fill_in_details_form.html
+++ b/templates/web/zurich/report/new/fill_in_details_form.html
@@ -51,10 +51,10 @@
[% PROCESS "report/new/category_wrapper.html" %]
<label for="form_username_register">[% loc('Your email') %]</label>
- [% IF field_errors.username %]
- <p class='form-error'>[% field_errors.username %]</p>
+ [% IF field_errors.username_register %]
+ <p class='form-error'>[% field_errors.username_register %]</p>
[% END %]
- <input class="form-control" type="email" value="[% email | html %]" name="username" id="form_username_register" required>
+ <input class="form-control" type="email" value="[% email | html %]" name="username_register" id="form_username_register" required>
<label for="form_name">[% loc('Name') %] [% loc('(optional)') %]</label>
[% IF field_errors.name %]
@@ -70,7 +70,10 @@
<div class="form-txt-submit-box">
[%# class of submit_sign_in so name can be optional, name of submit_register so it doesn't try and sign us in %]
- <p><input class="green-btn js-submit_sign_in" type="submit" name="submit_register" value="[% loc('Submit') %]">
+ <p>
+ <input class="desk-only green-btn js-submit_sign_in" type="submit" name="submit_register" value="[% loc('Submit') %]">
+ <input class="mob-only green-btn js-submit_sign_in" type="submit" name="submit_register_mobile" value="[% loc('Submit') %]">
+ </p>
</div>
</div>