aboutsummaryrefslogtreecommitdiffstats
path: root/templates
diff options
context:
space:
mode:
Diffstat (limited to 'templates')
-rw-r--r--templates/email/bathnes/_email_top.html6
-rw-r--r--templates/email/bexley/_email_color_overrides.html19
-rw-r--r--templates/email/bexley/_problem-confirm_footer.html12
-rw-r--r--templates/email/buckinghamshire/_email_color_overrides.html12
-rw-r--r--templates/email/buckinghamshire/alert-update.html4
-rw-r--r--templates/email/buckinghamshire/other-reported.html25
-rw-r--r--templates/email/buckinghamshire/other-reported.txt20
-rw-r--r--templates/email/cheshireeast/_council_reference.html3
-rw-r--r--templates/email/cheshireeast/_council_reference.txt2
-rw-r--r--templates/email/cheshireeast/_council_reference_alert_update.html2
-rw-r--r--templates/email/cheshireeast/_council_reference_alert_update.txt2
-rw-r--r--templates/email/cheshireeast/_email_color_overrides.html19
-rw-r--r--templates/email/cheshireeast/_email_setting_overrides.html5
-rw-r--r--templates/email/cheshireeast/site-name.txt1
-rw-r--r--templates/email/default/_email_bottom.html4
-rw-r--r--templates/email/default/_email_comment_list.html2
-rw-r--r--templates/email/default/_email_report_list.html2
-rw-r--r--templates/email/default/_email_report_list.txt2
-rw-r--r--templates/email/default/_email_settings.html11
-rw-r--r--templates/email/default/_email_sidebar.html8
-rw-r--r--templates/email/default/_email_top.html29
-rw-r--r--templates/email/default/alert-update.html8
-rw-r--r--templates/email/default/alert-update.txt2
-rw-r--r--templates/email/default/contact.html17
-rw-r--r--templates/email/default/contact.txt8
-rw-r--r--templates/email/default/login.html2
-rw-r--r--templates/email/default/other-reported.html14
-rw-r--r--templates/email/default/other-reported.txt9
-rw-r--r--templates/email/default/other-updated.html4
-rw-r--r--templates/email/default/problem-confirm-not-sending.html4
-rw-r--r--templates/email/default/problem-confirm.html7
-rw-r--r--templates/email/default/problem-confirm.txt4
-rw-r--r--templates/email/default/problem-moderated.html4
-rw-r--r--templates/email/default/questionnaire.html4
-rw-r--r--templates/email/default/submit.html6
-rw-r--r--templates/email/default/update-confirm.html4
-rw-r--r--templates/email/default/xsl.xsl48
-rw-r--r--templates/email/fixamingata/_email_bottom.html2
-rw-r--r--templates/email/fixamingata/_email_comment_list.html2
-rw-r--r--templates/email/fixamingata/_email_report_list.html2
-rw-r--r--templates/email/fixamingata/alert-update.html4
-rw-r--r--templates/email/fixamingata/contact.html4
-rw-r--r--templates/email/fixamingata/other-reported.html13
-rw-r--r--templates/email/fixamingata/other-reported.txt9
-rw-r--r--templates/email/fixamingata/other-updated.html4
-rw-r--r--templates/email/fixamingata/problem-confirm-not-sending.html4
-rw-r--r--templates/email/fixamingata/problem-confirm.html4
-rw-r--r--templates/email/fixamingata/problem-moderated.html4
-rw-r--r--templates/email/fixamingata/questionnaire.html4
-rw-r--r--templates/email/fixamingata/submit.html6
-rw-r--r--templates/email/fixamingata/submit.txt2
-rw-r--r--templates/email/fixamingata/update-confirm.html4
-rw-r--r--templates/email/fixmystreet.com/_submit_footer.html4
-rw-r--r--templates/email/fixmystreet.com/submit.html18
-rw-r--r--templates/email/fixmystreet.com/submit.txt7
-rw-r--r--templates/email/highwaysengland/_email_color_overrides.html36
-rw-r--r--templates/email/highwaysengland/_email_setting_overrides.html5
-rw-r--r--templates/email/highwaysengland/submit.html50
-rw-r--r--templates/email/highwaysengland/submit.txt40
-rw-r--r--templates/email/hounslow/_council_reference.html4
-rw-r--r--templates/email/hounslow/_council_reference.txt2
-rw-r--r--templates/email/hounslow/_council_reference_alert_update.html4
-rw-r--r--templates/email/hounslow/_council_reference_alert_update.txt2
-rw-r--r--templates/email/hounslow/_email_color_overrides.html19
-rw-r--r--templates/email/hounslow/archive.html55
-rw-r--r--templates/email/hounslow/archive.txt27
-rw-r--r--templates/email/hounslow/confirm_report_sent.html1
-rw-r--r--templates/email/hounslow/confirm_report_sent.txt1
-rw-r--r--templates/email/hounslow/other-reported.html38
-rw-r--r--templates/email/hounslow/other-reported.txt36
-rw-r--r--templates/email/hounslow/problem-confirm.html31
-rw-r--r--templates/email/hounslow/problem-confirm.txt31
-rw-r--r--templates/email/hounslow/submit.html70
-rw-r--r--templates/email/hounslow/submit.txt43
-rw-r--r--templates/email/isleofwight/_council_reference.html4
-rw-r--r--templates/email/isleofwight/_council_reference.txt2
-rw-r--r--templates/email/isleofwight/_council_reference_alert_update.html4
-rw-r--r--templates/email/isleofwight/_council_reference_alert_update.txt2
-rw-r--r--templates/email/isleofwight/_email_color_overrides.html19
-rw-r--r--templates/email/isleofwight/archive.html48
-rw-r--r--templates/email/isleofwight/archive.txt26
-rw-r--r--templates/email/isleofwight/confirm_report_sent.html42
-rw-r--r--templates/email/isleofwight/confirm_report_sent.txt43
-rw-r--r--templates/email/isleofwight/problem-confirm.html31
-rw-r--r--templates/email/isleofwight/problem-confirm.txt31
-rw-r--r--templates/email/isleofwight/signature.txt2
-rw-r--r--templates/email/lincolnshire/contact.html4
-rw-r--r--templates/email/oxfordshire/_problem-confirm_extra.html14
-rw-r--r--templates/email/oxfordshire/_problem-confirm_extra.txt12
-rw-r--r--templates/email/peterborough/_council_reference.html3
-rw-r--r--templates/email/peterborough/_council_reference.txt2
-rw-r--r--templates/email/peterborough/_council_reference_alert_update.html2
-rw-r--r--templates/email/peterborough/_council_reference_alert_update.txt2
-rw-r--r--templates/email/peterborough/_email_color_overrides.html20
-rw-r--r--templates/email/tfl/_council_reference.html3
-rw-r--r--templates/email/tfl/_council_reference.txt2
-rw-r--r--templates/email/tfl/_council_reference_alert_update.html1
-rw-r--r--templates/email/tfl/_council_reference_alert_update.txt1
-rw-r--r--templates/email/tfl/_email_color_overrides.html24
-rw-r--r--templates/email/tfl/_email_setting_overrides.html7
-rw-r--r--templates/email/tfl/confirm_report_sent.html1
-rw-r--r--templates/email/tfl/confirm_report_sent.txt1
-rw-r--r--templates/email/tfl/other-reported.html33
-rw-r--r--templates/email/tfl/other-reported.txt31
-rw-r--r--templates/email/tfl/problem-confirm.html28
-rw-r--r--templates/email/tfl/problem-confirm.txt31
-rw-r--r--templates/email/tfl/reply-autoresponse35
-rw-r--r--templates/email/tfl/signature.txt1
-rw-r--r--templates/email/tfl/site-name.txt1
-rw-r--r--templates/email/tfl/submit.html76
-rw-r--r--templates/email/tfl/submit.txt49
-rw-r--r--templates/email/tfl/update-confirm-donotsend.txt2
-rw-r--r--templates/email/warwickshire/_email_color_overrides.html6
-rw-r--r--templates/email/westminster/_email_color_overrides.html21
-rw-r--r--templates/email/westminster/_email_setting_overrides.html5
-rw-r--r--templates/email/westminster/archive.html55
-rw-r--r--templates/email/westminster/archive.txt27
-rw-r--r--templates/email/zurich/problem-confirm.txt4
-rw-r--r--templates/web/base/admin/bodies/_category_field.html17
-rw-r--r--templates/web/base/admin/bodies/body.html33
-rw-r--r--templates/web/base/admin/bodies/contact-form.html193
-rw-r--r--templates/web/base/admin/bodies/open311-form-fields.html4
-rw-r--r--templates/web/base/admin/category-checkboxes.html33
-rw-r--r--templates/web/base/admin/config_page.html9
-rw-r--r--templates/web/base/admin/council_contacts.txt2
-rw-r--r--templates/web/base/admin/defecttypes/list.html3
-rw-r--r--templates/web/base/admin/exordefects/index.html39
-rw-r--r--templates/web/base/admin/extra-metadata-form.html98
-rw-r--r--templates/web/base/admin/extra-metadata-item.html110
-rw-r--r--templates/web/base/admin/extra-metadata-option.html29
-rw-r--r--templates/web/base/admin/index.html47
-rw-r--r--templates/web/base/admin/list_updates.html2
-rw-r--r--templates/web/base/admin/manifesttheme/form.html71
-rw-r--r--templates/web/base/admin/manifesttheme/index.html35
-rw-r--r--templates/web/base/admin/problem_row.html4
-rw-r--r--templates/web/base/admin/report-category.html17
-rw-r--r--templates/web/base/admin/report_blocks.html4
-rw-r--r--templates/web/base/admin/reports/edit.html (renamed from templates/web/base/admin/report_edit.html)15
-rw-r--r--templates/web/base/admin/reports/index.html (renamed from templates/web/base/admin/reports.html)2
-rw-r--r--templates/web/base/admin/responsepriorities/edit.html57
-rw-r--r--templates/web/base/admin/responsepriorities/index.html58
-rw-r--r--templates/web/base/admin/responsepriorities/list.html36
-rw-r--r--templates/web/base/admin/roles/form.html32
-rw-r--r--templates/web/base/admin/roles/index.html35
-rw-r--r--templates/web/base/admin/states/index.html2
-rw-r--r--templates/web/base/admin/stats/index.html17
-rw-r--r--templates/web/base/admin/templates/edit.html (renamed from templates/web/base/admin/template_edit.html)6
-rw-r--r--templates/web/base/admin/templates/index.html (renamed from templates/web/base/admin/templates_index.html)2
-rw-r--r--templates/web/base/admin/templates/view.html (renamed from templates/web/base/admin/templates.html)4
-rw-r--r--templates/web/base/admin/triage/_inspect.html77
-rw-r--r--templates/web/base/admin/triage/_list-filters.html53
-rw-r--r--templates/web/base/admin/triage/index.html42
-rw-r--r--templates/web/base/admin/update_edit.html2
-rw-r--r--templates/web/base/admin/users/edit.html2
-rw-r--r--templates/web/base/admin/users/form.html42
-rw-r--r--templates/web/base/admin/users/import.html11
-rw-r--r--templates/web/base/admin/users/index.html59
-rw-r--r--templates/web/base/admin/users/log.html72
-rw-r--r--templates/web/base/alert/_index_text.html25
-rw-r--r--templates/web/base/alert/_list.html21
-rw-r--r--templates/web/base/alert/_list_rss_local.html10
-rw-r--r--templates/web/base/alert/index.html30
-rw-r--r--templates/web/base/alert/list.html2
-rw-r--r--templates/web/base/alert/updates.html16
-rw-r--r--templates/web/base/around/_error_multiple.html5
-rw-r--r--templates/web/base/around/_postcode_form_examples.html1
-rw-r--r--templates/web/base/around/_postcode_submit_button.html6
-rwxr-xr-xtemplates/web/base/around/display_location.html8
-rw-r--r--templates/web/base/around/location_error.html2
-rw-r--r--templates/web/base/around/postcode_form.html17
-rwxr-xr-xtemplates/web/base/around/tabbed_lists.html2
-rw-r--r--templates/web/base/auth/2fa/form-add.html17
-rw-r--r--templates/web/base/auth/2fa/form.html (renamed from templates/web/base/auth/2faform.html)2
-rw-r--r--templates/web/base/auth/2fa/intro.html32
-rw-r--r--templates/web/base/auth/create.html31
-rw-r--r--templates/web/base/auth/general.html11
-rw-r--r--templates/web/base/auth/generate_token.html50
-rw-r--r--templates/web/base/common_header_tags.html20
-rw-r--r--templates/web/base/common_scripts.html7
-rw-r--r--templates/web/base/contact/enquiry/index.html79
-rw-r--r--templates/web/base/contact/enquiry/submit.html1
-rw-r--r--templates/web/base/contact/index.html8
-rw-r--r--templates/web/base/dashboard/heatmap-list.html (renamed from templates/web/bromley/about/heatmap-list.html)2
-rwxr-xr-xtemplates/web/base/dashboard/heatmap.html (renamed from templates/web/bromley/about/heatmap.html)17
-rw-r--r--templates/web/base/dashboard/index.html3
-rw-r--r--templates/web/base/debug_footer.html40
-rw-r--r--templates/web/base/debug_header.html8
-rw-r--r--templates/web/base/defect_type/format.html9
-rwxr-xr-xtemplates/web/base/errors/generic.html7
-rw-r--r--[-rwxr-xr-x]templates/web/base/footer.html0
-rw-r--r--templates/web/base/header.html14
-rw-r--r--templates/web/base/header/css.html2
-rw-r--r--templates/web/base/header/title.html4
-rw-r--r--templates/web/base/header_opengraph.html2
-rw-r--r--templates/web/base/header_opengraph_image.html9
-rw-r--r--templates/web/base/js/translation_strings.html131
-rw-r--r--templates/web/base/main_nav.html6
-rw-r--r--templates/web/base/main_nav_items.html28
-rw-r--r--templates/web/base/maps/google-ol.html2
-rw-r--r--templates/web/base/maps/noscript_map.html8
-rw-r--r--templates/web/base/maps/noscript_map_base_wmx.html18
-rw-r--r--templates/web/base/maps/openlayers.html11
-rw-r--r--templates/web/base/maps/wms.html4
-rw-r--r--templates/web/base/maps/wms_config.html13
-rw-r--r--templates/web/base/maps/wmts.html4
-rw-r--r--templates/web/base/maps/wmts_config.html6
-rw-r--r--templates/web/base/my/my.html20
-rw-r--r--templates/web/base/my/planned.html2
-rw-r--r--templates/web/base/navigation/_all_reports.html13
-rw-r--r--templates/web/base/navigation/_report.html9
-rw-r--r--templates/web/base/offline/fallback.html (renamed from templates/web/base/offline/appcache.html)8
-rw-r--r--templates/web/base/offline/manifest.html16
-rw-r--r--templates/web/base/offline/service_worker.html104
-rw-r--r--templates/web/base/pagination.html4
-rw-r--r--templates/web/base/questionnaire/index.html6
-rw-r--r--templates/web/base/report/_inspect.html142
-rw-r--r--templates/web/base/report/_item.html16
-rw-r--r--templates/web/base/report/_item_expandable.html7
-rw-r--r--templates/web/base/report/_main.html2
-rw-r--r--templates/web/base/report/_updates_disallowed_message.html5
-rw-r--r--templates/web/base/report/display.html6
-rw-r--r--templates/web/base/report/display_tools.html16
-rw-r--r--templates/web/base/report/form/user.html28
-rw-r--r--templates/web/base/report/form/user_loggedout_by_email.html6
-rw-r--r--templates/web/base/report/form/user_loggedout_by_email_heading.html8
-rw-r--r--templates/web/base/report/form/user_loggedout_email.html1
-rw-r--r--templates/web/base/report/form/user_loggedout_password.html8
-rw-r--r--templates/web/base/report/inspect/_extra_details_field.html10
-rw-r--r--templates/web/base/report/inspect/extra_details.html23
-rw-r--r--templates/web/base/report/inspect/information.html56
-rw-r--r--templates/web/base/report/inspect/public_update.html14
-rw-r--r--templates/web/base/report/new/_category_select.html13
-rw-r--r--templates/web/base/report/new/category.html29
-rw-r--r--templates/web/base/report/new/category_extras.html21
-rw-r--r--templates/web/base/report/new/category_extras_fields.html4
-rw-r--r--templates/web/base/report/new/category_wrapper.html10
-rw-r--r--templates/web/base/report/new/councils_text.html1
-rw-r--r--templates/web/base/report/new/councils_text_all.html18
-rw-r--r--templates/web/base/report/new/councils_text_private.html1
-rw-r--r--templates/web/base/report/new/duplicate_suggestions.html16
-rw-r--r--templates/web/base/report/new/fill_in_details.html2
-rw-r--r--templates/web/base/report/new/fill_in_details_form.html4
-rw-r--r--templates/web/base/report/new/form_after_heading.html (renamed from templates/web/buckinghamshire/front/footer-marketing.html)0
-rw-r--r--templates/web/base/report/new/form_heading.html1
-rw-r--r--templates/web/base/report/new/form_public_councils_text.html11
-rw-r--r--templates/web/base/report/new/form_report.html34
-rw-r--r--templates/web/base/report/new/form_title.html2
-rw-r--r--templates/web/base/report/new/form_user.html6
-rw-r--r--templates/web/base/report/new/form_user_loggedin.html14
-rw-r--r--templates/web/base/report/new/login_success_form.html7
-rw-r--r--templates/web/base/report/new/oauth_email_form.html5
-rw-r--r--templates/web/base/report/new/report_import.html46
-rw-r--r--templates/web/base/report/update-form-wrapper.html11
-rw-r--r--templates/web/base/report/update-form.html3
-rw-r--r--templates/web/base/report/update/form_user.html4
-rw-r--r--templates/web/base/report/updates.html3
-rw-r--r--templates/web/base/reports/_list-filter-status.html45
-rw-r--r--templates/web/base/reports/_list-filters-sort.html14
-rw-r--r--templates/web/base/reports/_list-filters.html87
-rw-r--r--templates/web/base/reports/_rss.html7
-rwxr-xr-xtemplates/web/base/reports/body.html19
-rwxr-xr-xtemplates/web/base/reports/index.html2
-rw-r--r--templates/web/base/status/stats.html2
-rw-r--r--templates/web/bathnes/admin/bodies/_category_field.html21
-rw-r--r--templates/web/bathnes/before_wrapper.html6
-rw-r--r--templates/web/bathnes/footer_extra_js.html12
-rw-r--r--templates/web/bathnes/report/new/roads_message.html7
-rw-r--r--templates/web/bathnes/tracking_code.html14
-rw-r--r--templates/web/bexley/around/intro.html2
-rw-r--r--templates/web/bexley/email_sent.html38
-rw-r--r--templates/web/bexley/footer_extra_js.html1
-rw-r--r--templates/web/bexley/front/pre-steps.html12
-rw-r--r--templates/web/bexley/header_extra.html1
-rw-r--r--templates/web/bexley/header_logo.html2
-rw-r--r--templates/web/bexley/main_nav_items.html31
-rw-r--r--templates/web/bexley/tokens/_extras_confirm.html12
-rw-r--r--templates/web/bexley/tracking_code.html15
-rw-r--r--templates/web/borsetshire/auth/_general_top.html8
-rw-r--r--templates/web/borsetshire/front/footer-marketing.html2
-rw-r--r--templates/web/bristol/footer.html23
-rw-r--r--templates/web/bristol/footer_extra.html (renamed from templates/web/bristol/front/footer-marketing.html)6
-rw-r--r--templates/web/bristol/footer_extra_js.html6
-rw-r--r--templates/web/bristol/maps/bristol.html4
-rw-r--r--templates/web/bristol/maps/noscript_map.html32
-rw-r--r--templates/web/bristol/report/_updates_disallowed_message.html6
-rw-r--r--templates/web/bristol/tracking_code.html2
-rw-r--r--templates/web/bromley/footer.html2
-rw-r--r--templates/web/bromley/footer_extra_js.html4
-rw-r--r--templates/web/bromley/front/pre-steps.html8
-rw-r--r--templates/web/bromley/navigation/_report.html11
-rw-r--r--templates/web/bromley/report/form/user_loggedout_email.html1
-rw-r--r--templates/web/bromley/report/update/form_user.html4
-rwxr-xr-xtemplates/web/buckinghamshire/about/faq-en-gb.html21
-rw-r--r--templates/web/buckinghamshire/footer.html23
-rw-r--r--templates/web/buckinghamshire/footer_extra_js.html4
-rw-r--r--templates/web/buckinghamshire/front/pre-steps.html7
-rw-r--r--templates/web/buckinghamshire/header_logo.html2
-rw-r--r--templates/web/buckinghamshire/report/new/form_after_heading.html (renamed from templates/web/buckinghamshire/report/new/form_heading.html)0
-rw-r--r--templates/web/buckinghamshire/report/new/roads_message.html8
-rw-r--r--templates/web/buckinghamshire/tracking_code.html3
-rw-r--r--templates/web/cheshireeast/about/faq-en-gb.html56
-rw-r--r--templates/web/cheshireeast/about/privacy.html362
-rw-r--r--templates/web/cheshireeast/alert/_index_text.html16
-rw-r--r--templates/web/cheshireeast/alert/_list_rss_local.html10
-rw-r--r--templates/web/cheshireeast/around/intro.html2
-rw-r--r--templates/web/cheshireeast/email_sent.html25
-rw-r--r--templates/web/cheshireeast/footer_extra.html8
-rw-r--r--templates/web/cheshireeast/footer_extra_js.html1
-rw-r--r--templates/web/cheshireeast/front/pre-steps.html6
-rw-r--r--templates/web/cheshireeast/header_extra.html13
-rw-r--r--templates/web/cheshireeast/header_logo.html2
-rw-r--r--templates/web/cheshireeast/report/_council_sent_info.html17
-rw-r--r--templates/web/cheshireeast/report/new/_form_labels.html4
-rw-r--r--templates/web/cheshireeast/report/new/councils_text_all.html4
-rw-r--r--templates/web/cheshireeast/report/new/form_after_heading.html7
-rw-r--r--templates/web/cheshireeast/report/new/form_heading.html1
-rw-r--r--templates/web/cheshireeast/report/new/roads_message.html10
-rw-r--r--templates/web/cheshireeast/tokens/confirm_problem.html39
-rw-r--r--templates/web/cheshireeast/tokens/confirm_update.html22
-rw-r--r--templates/web/eastherts/footer.html54
-rw-r--r--templates/web/eastherts/footer_extra.html29
-rw-r--r--templates/web/eastherts/header_site.html41
-rw-r--r--templates/web/fiksgatami/header.html6
-rw-r--r--templates/web/fiksgatami/nn/footer.html1
-rw-r--r--templates/web/fixamingata/about/accessibility.html112
-rwxr-xr-xtemplates/web/fixamingata/about/council.html2
-rwxr-xr-xtemplates/web/fixamingata/about/faq-sv.html11
-rwxr-xr-xtemplates/web/fixamingata/about/privacy.html10
-rw-r--r--templates/web/fixamingata/footer.html33
-rw-r--r--templates/web/fixamingata/footer_extra.html28
-rw-r--r--templates/web/fixamingata/front/footer-marketing.html27
-rw-r--r--templates/web/fixamingata/front/recent.html21
-rw-r--r--templates/web/fixamingata/front/tips.html6
-rw-r--r--templates/web/fixamingata/header_opengraph_image.html9
-rw-r--r--templates/web/fixamingata/open311/index.html143
-rw-r--r--templates/web/fixamingata/report/updates-sidebar-notes.html2
-rw-r--r--templates/web/fixmystreet-uk-councils/about/privacy.html2
-rw-r--r--templates/web/fixmystreet-uk-councils/footer_extra_js.html13
-rw-r--r--templates/web/fixmystreet-uk-councils/footer_extra_js_base.html29
-rw-r--r--templates/web/fixmystreet-uk-councils/report/_item_photo_title.html5
-rw-r--r--templates/web/fixmystreet-uk-councils/report/_updates_disallowed_message.html17
-rw-r--r--templates/web/fixmystreet-uk-councils/report/banner.html22
-rw-r--r--templates/web/fixmystreet-uk-councils/report/form/user_name.html8
-rw-r--r--templates/web/fixmystreet-uk-councils/report/new/roads_message.html5
-rwxr-xr-xtemplates/web/fixmystreet.com/about/faq-en-gb.html2
-rw-r--r--templates/web/fixmystreet.com/about/posters.html4
-rw-r--r--templates/web/fixmystreet.com/footer_extra_js.html9
-rw-r--r--templates/web/fixmystreet.com/front/footer-marketing.html2
-rw-r--r--templates/web/fixmystreet.com/header/css.html4
-rw-r--r--templates/web/fixmystreet.com/header_extra.html1
-rw-r--r--templates/web/fixmystreet.com/report/_item_photo_title.html5
-rw-r--r--templates/web/fixmystreet.com/report/_updates_disallowed_message.html17
-rw-r--r--templates/web/fixmystreet.com/report/banner.html2
-rw-r--r--templates/web/fixmystreet.com/report/new/_form_labels.html9
-rw-r--r--templates/web/fixmystreet.com/report/new/roads_message.html16
-rw-r--r--templates/web/fixmystreet.com/report/update/form_state_checkbox.html19
-rwxr-xr-xtemplates/web/fixmystreet.com/reports/_body_gone.html1
-rw-r--r--templates/web/fixmystreet.com/reports/cobrand_stats.html2
-rw-r--r--templates/web/fixmystreet.com/reports/summary.html2
-rw-r--r--templates/web/fixmystreet.com/tracking_code.html2
-rw-r--r--templates/web/greenwich/footer.html20
-rw-r--r--templates/web/greenwich/footer_extra_js.html1
-rw-r--r--templates/web/greenwich/header_logo.html2
-rw-r--r--templates/web/hart/footer.html69
-rw-r--r--templates/web/hart/footer_extra.html58
-rw-r--r--templates/web/hart/header.html6
-rw-r--r--templates/web/highwaysengland/around/_postcode_form_examples.html2
-rw-r--r--templates/web/highwaysengland/around/intro.html5
-rw-r--r--templates/web/highwaysengland/footer_extra.html6
-rw-r--r--templates/web/highwaysengland/footer_extra_js.html9
-rw-r--r--templates/web/highwaysengland/front/footer-marketing.html (renamed from templates/web/lincolnshire/front/footer-marketing.html)0
-rw-r--r--templates/web/highwaysengland/header_extra.html4
-rw-r--r--templates/web/highwaysengland/header_logo.html2
-rw-r--r--templates/web/highwaysengland/header_opengraph.html (renamed from templates/web/fixamingata/header_opengraph.html)2
-rw-r--r--templates/web/highwaysengland/header_opengraph_image.html13
-rw-r--r--templates/web/highwaysengland/header_site.html14
-rw-r--r--templates/web/highwaysengland/index-steps.html13
-rw-r--r--templates/web/highwaysengland/main_nav_items.html21
-rw-r--r--templates/web/highwaysengland/report/form/user.html6
-rw-r--r--templates/web/highwaysengland/report/form/user_loggedout.html0
-rw-r--r--templates/web/highwaysengland/report/new/_form_labels.html5
-rw-r--r--templates/web/highwaysengland/report/new/councils_text_all.html17
-rw-r--r--templates/web/highwaysengland/report/new/form_heading.html2
-rw-r--r--templates/web/highwaysengland/report/new/form_user_loggedin.html0
-rw-r--r--templates/web/highwaysengland/report/new/inline-tips.html13
-rw-r--r--templates/web/highwaysengland/report/new/roads_message.html17
-rw-r--r--templates/web/highwaysengland/report/new/sidebar.html0
-rw-r--r--templates/web/highwaysengland/report/new/top_message.html5
-rw-r--r--templates/web/highwaysengland/report/update/form_state_checkbox.html0
-rw-r--r--templates/web/highwaysengland/report/updates-sidebar-notes.html3
-rw-r--r--templates/web/highwaysengland/site-name.html1
-rw-r--r--templates/web/highwaysengland/tokens/confirm_problem.html21
-rw-r--r--templates/web/highwaysengland/tracking_code.html15
-rw-r--r--templates/web/hounslow/about/mapterms.html24
-rw-r--r--templates/web/hounslow/footer_extra_js.html8
-rw-r--r--templates/web/hounslow/header_extra.html1
-rw-r--r--templates/web/hounslow/header_logo.html2
-rw-r--r--templates/web/hounslow/main_nav_items.html34
-rw-r--r--templates/web/hounslow/report/_council_sent_info.html12
-rw-r--r--templates/web/hounslow/report/new/_form_labels.html3
-rw-r--r--templates/web/hounslow/report/new/after_photo.html8
-rw-r--r--templates/web/hounslow/report/new/top_message.html0
-rw-r--r--templates/web/hounslow/report/update/form_state_checkbox.html0
-rw-r--r--templates/web/hounslow/report/updates-sidebar-notes.html10
-rw-r--r--templates/web/hounslow/tokens/_confirm_problem_council_id.html2
-rw-r--r--templates/web/hounslow/tracking_code.html15
-rw-r--r--templates/web/isleofwight/about/mapterms.html24
-rw-r--r--templates/web/isleofwight/footer_extra_js.html6
-rw-r--r--templates/web/isleofwight/header_extra.html1
-rw-r--r--templates/web/isleofwight/header_logo.html2
-rw-r--r--templates/web/isleofwight/main_nav_items.html36
-rw-r--r--templates/web/isleofwight/report/_council_sent_info.html17
-rw-r--r--templates/web/isleofwight/report/_item_heading.html7
-rw-r--r--templates/web/isleofwight/report/inspect.html10
-rw-r--r--templates/web/isleofwight/report/new/_form_labels.html3
-rw-r--r--templates/web/isleofwight/report/new/councils_extra_text.html1
-rw-r--r--templates/web/isleofwight/tokens/_confirm_problem_council_id.html2
-rw-r--r--templates/web/isleofwight/tracking_code.html16
-rw-r--r--templates/web/lincolnshire/footer_extra_js.html4
-rw-r--r--templates/web/lincolnshire/tracking_code.html3
-rw-r--r--templates/web/northamptonshire/footer_extra_js.html6
-rw-r--r--templates/web/northamptonshire/index-steps.html18
-rw-r--r--templates/web/northamptonshire/report/_council_sent_info.html2
-rw-r--r--templates/web/northamptonshire/report/new/roads_message.html17
-rw-r--r--templates/web/northamptonshire/tracking_code.html2
-rw-r--r--templates/web/oxfordshire/_email_sent_extra.html2
-rw-r--r--templates/web/oxfordshire/_response_time.html14
-rw-r--r--templates/web/oxfordshire/admin/user-form-extra-fields.html9
-rw-r--r--templates/web/oxfordshire/around/_postcode_form_examples.html0
-rw-r--r--templates/web/oxfordshire/around/_postcode_submit_button.html1
-rw-r--r--templates/web/oxfordshire/around/postcode_form.html20
-rw-r--r--templates/web/oxfordshire/defect_type/format.html4
-rw-r--r--templates/web/oxfordshire/footer.html18
-rw-r--r--templates/web/oxfordshire/footer_extra.html13
-rw-r--r--templates/web/oxfordshire/footer_extra_js.html13
-rw-r--r--templates/web/oxfordshire/header.html11
-rw-r--r--templates/web/oxfordshire/main_nav.html4
-rw-r--r--templates/web/oxfordshire/main_nav_items.html20
-rw-r--r--templates/web/oxfordshire/report/_council_sent_info.html2
-rw-r--r--templates/web/oxfordshire/report/_inspect_extra_info.html8
-rw-r--r--templates/web/oxfordshire/report/new/councils_text_all.html10
-rw-r--r--templates/web/oxfordshire/report/new/form_after_heading.html (renamed from templates/web/oxfordshire/report/new/form_heading.html)0
-rw-r--r--templates/web/oxfordshire/tokens/_extras_confirm.html1
-rw-r--r--templates/web/oxfordshire/tracking_code.html3
-rwxr-xr-xtemplates/web/peterborough/about/faq-en-gb.html97
-rw-r--r--templates/web/peterborough/alert/_index_text.html19
-rw-r--r--templates/web/peterborough/around/intro.html2
-rw-r--r--templates/web/peterborough/before_wrapper.html6
-rw-r--r--templates/web/peterborough/footer_extra.html31
-rw-r--r--templates/web/peterborough/footer_extra_js.html1
-rw-r--r--templates/web/peterborough/front/pre-steps.html8
-rw-r--r--templates/web/peterborough/header/title.html4
-rw-r--r--templates/web/peterborough/header_extra.html3
-rw-r--r--templates/web/peterborough/header_logo.html2
-rw-r--r--templates/web/peterborough/index-steps.html13
-rw-r--r--templates/web/peterborough/report/_council_sent_info.html17
-rw-r--r--templates/web/peterborough/tracking_code.html15
-rw-r--r--templates/web/rutland/footer_extra_js.html4
-rw-r--r--[-rwxr-xr-x]templates/web/rutland/front/footer-marketing.html0
-rw-r--r--templates/web/stevenage/footer.html2
-rw-r--r--templates/web/stevenage/header.html6
-rw-r--r--templates/web/stevenage/tracking_code.html2
-rwxr-xr-xtemplates/web/tfl/about/faq-en-gb.html77
-rw-r--r--templates/web/tfl/around/_postcode_form_examples.html3
-rw-r--r--templates/web/tfl/around/intro.html2
-rw-r--r--templates/web/tfl/contact/_footer.html0
-rw-r--r--templates/web/tfl/contact/_heading.html1
-rw-r--r--templates/web/tfl/email_sent.html25
-rw-r--r--templates/web/tfl/footer.html (renamed from templates/web/lincolnshire/footer.html)10
-rw-r--r--templates/web/tfl/footer_extra.html11
-rw-r--r--templates/web/tfl/footer_extra_js.html18
-rw-r--r--templates/web/tfl/front/pre-steps.html13
-rw-r--r--templates/web/tfl/header_extra.html1
-rw-r--r--templates/web/tfl/header_site.html13
-rw-r--r--templates/web/tfl/index-steps.html14
-rw-r--r--templates/web/tfl/report/_council_sent_info.html17
-rw-r--r--templates/web/tfl/report/_item_extra_class.html3
-rw-r--r--templates/web/tfl/report/_item_heading.html7
-rw-r--r--templates/web/tfl/report/_item_photo_title.html1
-rw-r--r--templates/web/tfl/report/form/private_details.html19
-rw-r--r--templates/web/tfl/report/inspect/extra_details.html3
-rw-r--r--templates/web/tfl/report/new/after_photo.html10
-rw-r--r--templates/web/tfl/report/new/councils_text_all.html17
-rw-r--r--templates/web/tfl/report/new/councils_text_private.html4
-rw-r--r--templates/web/tfl/report/new/form_public_councils_text.html13
-rw-r--r--templates/web/tfl/report/new/inline-tips.html11
-rw-r--r--templates/web/tfl/report/new/roads_message.html11
-rw-r--r--templates/web/tfl/report/new/top_message.html0
-rw-r--r--templates/web/tfl/report/update/form_state_checkbox.html0
-rw-r--r--templates/web/tfl/report/updates-sidebar-notes.html4
-rw-r--r--templates/web/tfl/site-name.html1
-rw-r--r--templates/web/tfl/tokens/confirm_problem.html18
-rw-r--r--templates/web/tfl/tracking_code.html7
-rw-r--r--templates/web/warwickshire/footer.html57
-rw-r--r--templates/web/warwickshire/footer_extra.html48
-rw-r--r--templates/web/warwickshire/header.html54
-rw-r--r--templates/web/warwickshire/header_extra.html12
-rw-r--r--templates/web/warwickshire/warwickshire_masthead.html219
-rw-r--r--templates/web/westminster/about/faq-en-gb.html94
-rw-r--r--templates/web/westminster/around/intro.html1
-rw-r--r--templates/web/westminster/auth/general.html89
-rw-r--r--templates/web/westminster/before_wrapper.html6
-rw-r--r--templates/web/westminster/contact/_heading.html1
-rw-r--r--templates/web/westminster/contact/blurb.html11
-rw-r--r--templates/web/westminster/footer_extra.html35
-rw-r--r--templates/web/westminster/footer_extra_js.html1
-rw-r--r--templates/web/westminster/front/stats.html32
-rw-r--r--templates/web/westminster/header_extra.html3
-rw-r--r--templates/web/westminster/header_logo.html2
-rw-r--r--templates/web/westminster/next_steps.html0
-rw-r--r--templates/web/westminster/report/form/user.html35
-rw-r--r--templates/web/westminster/report/form/user_loggedout.html2
-rw-r--r--templates/web/westminster/report/new/_category_extra_field_notice.html3
-rw-r--r--templates/web/westminster/report/new/_form_labels.html4
-rw-r--r--templates/web/westminster/report/new/roads_message.html5
-rw-r--r--templates/web/westminster/report/new/top_message.html0
-rw-r--r--templates/web/westminster/site-name.html1
-rw-r--r--templates/web/westminster/tracking_code.html12
-rw-r--r--templates/web/zurich/about/faq-de-ch.html6
-rw-r--r--templates/web/zurich/admin/bodies/body.html4
-rw-r--r--templates/web/zurich/admin/bodies/contact-form.html10
-rw-r--r--templates/web/zurich/admin/bodies/form.html12
-rw-r--r--templates/web/zurich/admin/index-dm.html4
-rw-r--r--templates/web/zurich/admin/problem_row.html2
-rw-r--r--templates/web/zurich/admin/report_edit-sdm.html33
-rw-r--r--templates/web/zurich/admin/reports/edit.html (renamed from templates/web/zurich/admin/report_edit.html)31
-rw-r--r--templates/web/zurich/admin/reports/index.html (renamed from templates/web/zurich/admin/reports.html)2
-rw-r--r--templates/web/zurich/admin/templates/edit.html (renamed from templates/web/zurich/admin/template_edit.html)5
-rw-r--r--templates/web/zurich/admin/templates/view.html (renamed from templates/web/zurich/admin/templates.html)4
-rw-r--r--templates/web/zurich/admin/update_edit.html2
-rw-r--r--templates/web/zurich/header.html7
-rw-r--r--templates/web/zurich/header/title.html4
-rw-r--r--templates/web/zurich/header_opengraph.html8
-rw-r--r--templates/web/zurich/maps/noscript_map.html10
-rw-r--r--templates/web/zurich/maps/zurich.html2
-rw-r--r--templates/web/zurich/report/new/fill_in_details_form.html4
-rw-r--r--templates/web/zurich/reports/_list-filter-status.html7
-rwxr-xr-xtemplates/web/zurich/reports/index.html2
-rw-r--r--templates/web/zurich/tracking_code.html2
539 files changed, 6426 insertions, 2312 deletions
diff --git a/templates/email/bathnes/_email_top.html b/templates/email/bathnes/_email_top.html
index ec3c80ce2..89dd1dcbf 100644
--- a/templates/email/bathnes/_email_top.html
+++ b/templates/email/bathnes/_email_top.html
@@ -51,7 +51,7 @@
</style>
</head>
<body style="[% body_style %]">
- <table [% wrapper_table %] style="[% wrapper_style %]">
+ <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">
@@ -60,11 +60,11 @@
<th class="spacer-cell"></th>
</tr>
</table>
- <table [% wrapper_table %] style="[% wrapper_style %]">
+ <table [% wrapper_table | safe %] style="[% wrapper_style %]">
<tr>
<th class="spacer-cell"></th>
<th width="[% wrapper_max_width %]" style="[% td_style %] min-width: [% wrapper_min_width %]px;" id="main">
- <table [% table_reset %]>
+ <table [% table_reset | safe %]>
<tr>
<th id="header" colspan="[% email_columns %]" style="[% td_style %][% header_style %]">
[%~ IF file_exists("web/cobrands/${ img_dir }/images/email-logo.gif") ~%]
diff --git a/templates/email/bexley/_email_color_overrides.html b/templates/email/bexley/_email_color_overrides.html
new file mode 100644
index 000000000..5645da3ef
--- /dev/null
+++ b/templates/email/bexley/_email_color_overrides.html
@@ -0,0 +1,19 @@
+[%
+
+color_fuchsia = '#912B88'
+color_spring = '#5DA70E'
+color_white = '#fff'
+
+header_background_color = color_fuchsia
+header_text_color = color_white
+
+secondary_column_background_color = color_white
+
+button_background_color = color_spring
+button_text_color = color_white
+
+logo_width = "200" # pixel measurement, but without 'px' suffix
+logo_height = "80" # pixel measurement, but without 'px' suffix
+logo_file = "logo.png"
+
+%]
diff --git a/templates/email/bexley/_problem-confirm_footer.html b/templates/email/bexley/_problem-confirm_footer.html
new file mode 100644
index 000000000..5a7cc2782
--- /dev/null
+++ b/templates/email/bexley/_problem-confirm_footer.html
@@ -0,0 +1,12 @@
+<p style="border: 0.1em solid rgb(252, 13, 27); padding: 0.5em; background-color: rgb(237, 207, 206);">
+ <strong>While we find ourselves in these unprecedented times.</strong>
+ All issues reported on Bexley’s FixMyStreet system will continue to be
+ actioned to keep our roads safe for critical workers to be able to continue
+ to support the London Borough of Bexley and its residents. We may take
+ longer to respond to you while we concentrate on getting issues resolved in
+ priority order and within available resources. Non-urgent defects may also
+ take longer than normal to fix. We will continue to serve you the best that
+ we can but urge everyone not to make journeys unless absolutely necessary
+ and not report to anything that is not urgent. Thank you for
+ your&nbsp;understanding.
+</p>
diff --git a/templates/email/buckinghamshire/_email_color_overrides.html b/templates/email/buckinghamshire/_email_color_overrides.html
index 672a1ae3b..0795fdc0c 100644
--- a/templates/email/buckinghamshire/_email_color_overrides.html
+++ b/templates/email/buckinghamshire/_email_color_overrides.html
@@ -1,9 +1,9 @@
[%
-color_bucks_green = '#97c34b'
-color_bucks_dark_green = '#547f35'
-color_bucks_text = '#2e3137'
-color_bucks_grey = '#eaeaea'
+color_bucks_green = '#9FC63B'
+color_bucks_dark_green = '#00642F'
+color_bucks_text = '#3C3C3B'
+color_bucks_grey = '#eeeeee'
body_background_color = color_white
@@ -19,8 +19,8 @@ secondary_column_background_color = color_white
secondary_column_text_color = color_bucks_text
column_divider_color = color_bucks_grey
-logo_width = '88'
-logo_height = '94'
+logo_width = '100'
+logo_height = '100'
logo_file = "email-logo.png"
header_background_color = color_white
diff --git a/templates/email/buckinghamshire/alert-update.html b/templates/email/buckinghamshire/alert-update.html
index 8831fd379..16bac06dd 100644
--- a/templates/email/buckinghamshire/alert-update.html
+++ b/templates/email/buckinghamshire/alert-update.html
@@ -12,11 +12,11 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">New updates on <a href="[% problem_url %]">[% category %] report</a></h1>
[%~ INCLUDE '_email_comment_list.html' %]
<p style="[% p_style %]"><a href="[% unsubscribe_url %]">Unsubscribe from alerts about this report</a></p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report %]
<h2 style="[% h2_style %]">[% title %]</h2>
diff --git a/templates/email/buckinghamshire/other-reported.html b/templates/email/buckinghamshire/other-reported.html
index 584c5b89e..8f790425f 100644
--- a/templates/email/buckinghamshire/other-reported.html
+++ b/templates/email/buckinghamshire/other-reported.html
@@ -9,19 +9,30 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Your report has been&nbsp;logged</h1>
<p style="[% p_style %]">Your report to [% report.body %] has been logged on [% site_name %].</p>
-[% IF cobrand.is_council && !cobrand.owns_problem( report ) %]
-<p style="[% p_style %]">Please note that [% cobrand.council_name %] is not responsible for this type
-of report, so it will instead be sent to [% report.body %].</p>
-[% ELSE %]
+
+[% IF report.non_public %]
+<p style="[% p_style %]">It has been marked as private and will not be visible
+to the general public; you may view it using the link below, or if you sign in
+using the email address associated with the report.</p>
+[% END %]
+
+[% IF cobrand.owns_problem( report ) %]
[% TRY %][% INCLUDE '_council_reference.html' problem=report %][% CATCH file %][% END %]
[% END %]
+
+<p style="[% p_style %]">
+Due to the current COVID 19 crisis and associated restrictions regrettably we
+must prioritise more urgent work, therefore we hope you will understand that
+there may be a delay in fixing the defect.
+</p>
+
<p style="margin: 20px auto; text-align: center">
- <a style="[% button_style %]" href="[% cobrand.base_url_for_report(report) %][% report.url %]">View my report</a>
+ <a style="[% button_style %]" href="[% cobrand.base_url_for_report(report) %][% report.view_url %]">View my report</a>
</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report %]
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
diff --git a/templates/email/buckinghamshire/other-reported.txt b/templates/email/buckinghamshire/other-reported.txt
index 7f78617e0..8fa9cfb15 100644
--- a/templates/email/buckinghamshire/other-reported.txt
+++ b/templates/email/buckinghamshire/other-reported.txt
@@ -2,18 +2,26 @@ Subject: Your [% report.category | lower %] report has been logged
Hello [% report.name %],
-Your report to [% report.body %] has been logged on [% site_name %].
+Thank you for your report to [% report.body %] which has been logged on [% site_name %].
-[% IF cobrand.is_council && !cobrand.owns_problem( report ) %]
-Please note that [% cobrand.council_name %] is not responsible for this type
-of report, so it will instead be sent to [% report.body %].
-[% ELSE %]
+[% IF report.non_public ~%]
+It has been marked as private and will not be visible to the general public;
+you may view it using the link below, or if you sign in using the email address
+associated with the report.
+
+[% END ~%]
+
+[% IF cobrand.owns_problem( report ) %]
[% TRY %][% INCLUDE '_council_reference.txt' problem=report %][% CATCH file %][% END %]
[% END %]
+Due to the current COVID 19 crisis and associated restrictions regrettably we
+must prioritise more urgent work, therefore we hope you will understand that
+there may be a delay in fixing the defect.
+
It is available to view at:
-[% cobrand.base_url_for_report(report) %][% report.url %]
+[% cobrand.base_url_for_report(report) %][% report.view_url %]
Your report is at the following location:
diff --git a/templates/email/cheshireeast/_council_reference.html b/templates/email/cheshireeast/_council_reference.html
new file mode 100644
index 000000000..8a1a9e1ee
--- /dev/null
+++ b/templates/email/cheshireeast/_council_reference.html
@@ -0,0 +1,3 @@
+<p style="[% p_style %]">The report's reference number is <strong>[% problem.id %]</strong>.
+ Please quote this if you need to contact the council about this report.</p>
+
diff --git a/templates/email/cheshireeast/_council_reference.txt b/templates/email/cheshireeast/_council_reference.txt
new file mode 100644
index 000000000..75d7e93d2
--- /dev/null
+++ b/templates/email/cheshireeast/_council_reference.txt
@@ -0,0 +1,2 @@
+The report's reference number is [% problem.id %]. Please quote this if
+you need to contact the council about this report.
diff --git a/templates/email/cheshireeast/_council_reference_alert_update.html b/templates/email/cheshireeast/_council_reference_alert_update.html
new file mode 100644
index 000000000..bc7e0282c
--- /dev/null
+++ b/templates/email/cheshireeast/_council_reference_alert_update.html
@@ -0,0 +1,2 @@
+<p style="[% p_style %]">The report's reference number is <strong>[% problem.id %]</strong>.
+ Please quote this if you need to contact the council about this report.</p>
diff --git a/templates/email/cheshireeast/_council_reference_alert_update.txt b/templates/email/cheshireeast/_council_reference_alert_update.txt
new file mode 100644
index 000000000..75d7e93d2
--- /dev/null
+++ b/templates/email/cheshireeast/_council_reference_alert_update.txt
@@ -0,0 +1,2 @@
+The report's reference number is [% problem.id %]. Please quote this if
+you need to contact the council about this report.
diff --git a/templates/email/cheshireeast/_email_color_overrides.html b/templates/email/cheshireeast/_email_color_overrides.html
new file mode 100644
index 000000000..794c7bbc6
--- /dev/null
+++ b/templates/email/cheshireeast/_email_color_overrides.html
@@ -0,0 +1,19 @@
+[%
+
+color_green = '#206c49'
+color_gold = '#ffa100'
+color_white = '#fff'
+
+header_background_color = color_green
+header_text_color = color_white
+
+secondary_column_background_color = color_white
+
+button_background_color = color_green
+button_text_color = color_white
+
+logo_width = "148" # pixel measurement, but without 'px' suffix
+logo_height = "67" # pixel measurement, but without 'px' suffix
+logo_file = "cec-navbar-logo-white.png"
+
+%]
diff --git a/templates/email/cheshireeast/_email_setting_overrides.html b/templates/email/cheshireeast/_email_setting_overrides.html
new file mode 100644
index 000000000..339a763f7
--- /dev/null
+++ b/templates/email/cheshireeast/_email_setting_overrides.html
@@ -0,0 +1,5 @@
+[%
+
+header_style = "padding: $header_padding; background: $header_background_color; color: $header_text_color; border-bottom: 8px solid $color_gold;"
+
+%]
diff --git a/templates/email/cheshireeast/site-name.txt b/templates/email/cheshireeast/site-name.txt
new file mode 100644
index 000000000..54bdfee40
--- /dev/null
+++ b/templates/email/cheshireeast/site-name.txt
@@ -0,0 +1 @@
+Cheshire East FixMyStreet
diff --git a/templates/email/default/_email_bottom.html b/templates/email/default/_email_bottom.html
index 4967dfaa2..13c5c019f 100644
--- a/templates/email/default/_email_bottom.html
+++ b/templates/email/default/_email_bottom.html
@@ -4,12 +4,12 @@
<th class="spacer-cell"></th>
</tr>
</table>
- <table [% wrapper_table %] style="[% wrapper_style %]">
+ <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 %]
+ [% email_footer | safe %]
[%~ ELSE %]
This email was sent automatically, from an unmonitored email account. Please do not reply to it.
[%~ END %]
diff --git a/templates/email/default/_email_comment_list.html b/templates/email/default/_email_comment_list.html
index efbb3e8da..346efadfb 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 %]
- <p style="[% list_item_p_style %]">&ldquo;[% update.item_text | html %]&rdquo;</p>
+ [% update.item_text | 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_report_list.html b/templates/email/default/_email_report_list.html
index 5f7f67864..5a43ce7ea 100644
--- a/templates/email/default/_email_report_list.html
+++ b/templates/email/default/_email_report_list.html
@@ -10,7 +10,7 @@
[%~ report.title | html ~%]
</a>
</h2>
- <p style="[% list_item_p_style %]">[% report.detail | html %]</p>
+ [% report.detail | html_para | replace('<p>', '<p style="' _ list_item_p_style _ '">') %]
<p style="[% list_item_date_style %]">
[% cobrand.prettify_dt( report.confirmed ) %].
[% report.nearest %]
diff --git a/templates/email/default/_email_report_list.txt b/templates/email/default/_email_report_list.txt
index 3128e2f06..fed75a163 100644
--- a/templates/email/default/_email_report_list.txt
+++ b/templates/email/default/_email_report_list.txt
@@ -1,4 +1,4 @@
-[% FOR report IN data -%]
+[% FOR report IN data %]
[% cobrand.base_url_for_report(report) %]/report/[% report.id %] - [% report.title %]
[% report.nearest ~%]
diff --git a/templates/email/default/_email_settings.html b/templates/email/default/_email_settings.html
index 94045bd3c..5bc7faa66 100644
--- a/templates/email/default/_email_settings.html
+++ b/templates/email/default/_email_settings.html
@@ -33,7 +33,7 @@ logo_font_size = "24px"
primary_column_background_color = color_white
primary_column_text_color = color_black
secondary_column_background_color = color_blue_pale
-secondary_column_text_color = color_black
+secondary_column_text_color = color_gunmetal
column_divider_color = color_grey
column_padding = "20" # a single CSS pixel measurement without the "px" suffix
@@ -51,6 +51,8 @@ button_text_color_notfixed = color_white
button_text_color_dontknow = color_black
button_font_weight = "bold"
+text_input_border_color = "#999";
+
submit_footer_td_style = "text-align: left; vertical-align: top; font-weight: normal; color: #000;"
submit_footer_h2_style = "font-size: 16px; line-height: 18px; margin: 0 0 10px 0;";
submit_footer_link_style = "color: #9CD0EA;";
@@ -81,6 +83,8 @@ wrapper_min_width = 520 # in pixels without "px" suffix
hint_min_width = wrapper_min_width - (column_padding * 2)
hint_style = "min-width: ${ hint_min_width }px; padding: ${ column_padding }px; color: $body_text_color; font-size: 12px; line-height: 18px;"
+warning_style = "min-width: ${ hint_min_width }x; padding: ${ column_padding }px; background-color: $color_red_dark; color: $color_white;"
+
header_style = "padding: $header_padding; background: $header_background_color; color: $header_text_color;"
only_column_style = "padding: ${ column_padding }px; vertical-align: top; background-color: $primary_column_background_color; color: $primary_column_text_color;"
@@ -108,6 +112,11 @@ list_item_photo_style = "float: right; margin: 0 0 1em 1em; border: none;"
contact_meta_style = "padding: 15px ${ column_padding }px; vertical-align: top; background-color: $secondary_column_background_color; border-bottom: 1px solid $column_divider_color;"
contact_th_style = "vertical-align: top; padding: 0.4em 1em 0 0; white-space: nowrap; text-align: left;"
contact_td_style = "vertical-align: top; padding: 0.4em 0 0.4em 0; width: 100%;"
+contact_admin_links_style = "display: block;"
+
+rss_meta_style = "padding: 5px ${ column_padding }px; vertical-align: top; background-color: $secondary_column_background_color; color: $secondary_column_text_color; border-bottom: 1px solid $column_divider_color; font-size: 14px;"
+
+text_input_style = "padding: 0.5em 0.75em; border-radius: 0.3em; border: 1px solid $text_input_border_color; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3) inset; width: 30em; max-width: 100%; margin-top: 0.5em; font-size: 1em;";
# The below is so the buttons work okay in Outlook: https://litmus.com/blog/a-guide-to-bulletproof-buttons-in-email-design
button_style = "display: inline-block; border: 10px solid $button_background_color; border-width: 10px 15px; border-radius: $button_border_radius; background-color: $button_background_color; color: $button_text_color; font-size: 18px; line-height: 21px; font-weight: $button_font_weight; text-decoration: underline;"
diff --git a/templates/email/default/_email_sidebar.html b/templates/email/default/_email_sidebar.html
index 7897d168c..b90a55c28 100644
--- a/templates/email/default/_email_sidebar.html
+++ b/templates/email/default/_email_sidebar.html
@@ -13,11 +13,13 @@ DEFAULT url = cobrand.base_url_for_report(report) _ report.url
~%]
<th style="[% td_style %][% secondary_column_style %]" id="secondary_column">
+ [% IF url %]
<a href="[% url %]"><img style="[% map_image_style %]" src="[% inline_image(report.static_map, 'map.jpeg') %]" width="310" height="200" alt=""></a>
- [% start_padded_box %]
+ [% END %]
+ [% start_padded_box | safe %]
[%~ IF object.photo %]
<img style="[% preview_photo_style %]" src="[% inline_image(object.get_first_image_fp) %]" alt="" align="right">
[%~ END %]
- [%~ content %]
- [% end_padded_box %]
+ [%~ content | safe %]
+ [% end_padded_box | safe %]
</th>
diff --git a/templates/email/default/_email_top.html b/templates/email/default/_email_top.html
index 0191bacfc..943b522cb 100644
--- a/templates/email/default/_email_top.html
+++ b/templates/email/default/_email_top.html
@@ -8,10 +8,12 @@
ELSE;
SET img_dir = cobrand;
END -%]
+[% IF NOT for_rss ~%]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+[% END ~%]
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
- <title></title>
+ <title>[% rss_title | safe %]</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
[%~ # Styles here will be applied by everything except Gmail.com %]
@@ -45,7 +47,18 @@
</style>
</head>
<body style="[% body_style %]">
- <table [% wrapper_table %] style="[% wrapper_style %]">
+[% IF staging AND NOT for_rss %]
+ <table [% wrapper_table | safe %] style="[% td_style %]">
+ <tr>
+ <th class="spacer-cell"></th>
+ <th width="[% wrapper_max_width %]" style="[% td_style %][% warning_style %]" class="hint">
+ [% loc('This email was sent from a staging site.') %]
+ </th>
+ <th class="spacer-cell"></th>
+ </tr>
+ </table>
+[% END %]
+ <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">
@@ -54,15 +67,19 @@
<th class="spacer-cell"></th>
</tr>
</table>
- <table [% wrapper_table %] style="[% wrapper_style %]">
+ <table [% wrapper_table | safe %] style="[% wrapper_style %]">
<tr>
<th class="spacer-cell"></th>
<th width="[% wrapper_max_width %]" style="[% td_style %] min-width: [% wrapper_min_width %]px;" id="main">
- <table [% table_reset %]>
+ <table [% table_reset | safe %]>
<tr>
<th colspan="[% email_columns %]" style="[% td_style %][% header_style %]">
- [%~ IF file_exists("web/cobrands/${ img_dir }/images/${ logo_file }") ~%]
- <img src="[% inline_image('web/cobrands/' _ img_dir _ '/images/' _ logo_file ) %]" width="[% logo_width %]" height="[% logo_height %]" alt="[% site_name %]" style="[% logo_style %]"/>
+ [%~ IF file_exists("web/cobrands/${ img_dir }/images/${ logo_file }") ~%]
+ [%~ IF for_rss ~%]
+ <img src="/cobrands/[% img_dir %]/images/[% logo_file %]" width="[% logo_width %]" height="[% logo_height %]" alt="[% site_name %]" style="[% logo_style %]"/>
+ [%~ ELSE ~%]
+ <img src="[% inline_image('web/cobrands/' _ img_dir _ '/images/' _ logo_file ) %]" width="[% logo_width %]" height="[% logo_height %]" alt="[% site_name %]" style="[% logo_style %]"/>
+ [%~ END ~%]
[%~ ELSE ~%]
<span style="[% logo_style %]">[% site_name %]</span>
[%~ END %]
diff --git a/templates/email/default/alert-update.html b/templates/email/default/alert-update.html
index 082f5e369..0f7c30481 100644
--- a/templates/email/default/alert-update.html
+++ b/templates/email/default/alert-update.html
@@ -1,7 +1,7 @@
[%
title = report.title | html;
-email_summary = "New updates on &ldquo;" _ title _ "&rdquo;";
+email_summary = "New updates on “" _ title _ "”";
email_columns = 2;
PROCESS '_email_settings.html';
@@ -11,11 +11,13 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">New updates on <a href="[% problem_url %]">[% title %]</a></h1>
[%~ INCLUDE '_email_comment_list.html' %]
+ [% IF unsubscribe_url %]
<p style="[% p_style %]"><a href="[% unsubscribe_url %]">Unsubscribe from alerts about this report</a></p>
- [% end_padded_box %]
+ [% END %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report %]
<h2 style="[% h2_style %]">[% title %]</h2>
diff --git a/templates/email/default/alert-update.txt b/templates/email/default/alert-update.txt
index 952b2dbca..903c68e35 100644
--- a/templates/email/default/alert-update.txt
+++ b/templates/email/default/alert-update.txt
@@ -21,6 +21,7 @@ please do not reply to it.
[% signature %]
+[% IF unsubscribe_url %]
Unsubscribe?
We currently email you whenever someone leaves an update on the
@@ -28,3 +29,4 @@ We currently email you whenever someone leaves an update on the
If you no longer wish to receive an email whenever this report is updated,
please follow this link: [% unsubscribe_url %]
+[% END %]
diff --git a/templates/email/default/contact.html b/templates/email/default/contact.html
index 8dc9f3af0..301245f1b 100644
--- a/templates/email/default/contact.html
+++ b/templates/email/default/contact.html
@@ -2,7 +2,7 @@
subject_html = subject | html;
name = form_name | html;
-email_summary = "&ldquo;" _ subject_html _ "&rdquo; &ndash; Message from " _ name _ " on " _ host;
+email_summary = "“" _ subject_html _ "” – Message from " _ name _ " on " _ host;
email_footer = "Sent via " _ host _ ", IP " _ ip;
email_columns = 1;
@@ -13,10 +13,21 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% contact_meta_style %]">
- <table [% table_reset %]>
+ <table [% table_reset | safe %]>
<tr>
<th style="[% contact_th_style %]">From</th>
- <td style="[% contact_td_style %]">[% name %] &lt;<a href="mailto:[% em | html %]">[% em | html %]</a>&gt;</td>
+ <td style="[% contact_td_style %]">
+ [% name %] &lt;<a href="mailto:[% em | html %]">[% em | html %]</a>&gt;
+ [%~ IF user_admin_url %]
+ <small style="[% contact_admin_links_style %]">
+ <a href="[% user_admin_url | html %]">Edit user</a> –
+ [%~ IF user_latest_report_admin_url %]
+ <a href="[% user_latest_report_admin_url | html %]">Edit latest report</a> –
+ [%~ END %]
+ <a href="[% user_reports_admin_url | html %]">Show all reports</a>
+ </small>
+ [%~ END %]
+ </td>
</tr>
</table>
</th>
diff --git a/templates/email/default/contact.txt b/templates/email/default/contact.txt
index bd97d17a6..67ff6f610 100644
--- a/templates/email/default/contact.txt
+++ b/templates/email/default/contact.txt
@@ -6,6 +6,14 @@ Subject: [% site_name %] message: [% subject %]
[ [% complaint %] - [% problem_url %] - [% admin_url %] ]
[% END %]
+[%~ IF user_admin_url %]
+[ Edit user: [% user_admin_url %] ]
+[%~ IF user_latest_report_admin_url %]
+[ Edit latest report: [% user_latest_report_admin_url %] ]
+[%~ END %]
+[ Show all reports: [% user_reports_admin_url %] ]
+[%~ END %]
+
--
Sent by contact form on [% host %].
IP address [% ip %], user agent [% user_agent %]
diff --git a/templates/email/default/login.html b/templates/email/default/login.html
index b22838d4e..86bda2464 100644
--- a/templates/email/default/login.html
+++ b/templates/email/default/login.html
@@ -1,6 +1,6 @@
[%
-email_summary = "Click this link to confirm your email address and log into " _ site_name;
+email_summary = "Click the link below to confirm your email address and log into " _ site_name;
email_columns = 1;
PROCESS '_email_settings.html';
diff --git a/templates/email/default/other-reported.html b/templates/email/default/other-reported.html
index 584c5b89e..c22bee231 100644
--- a/templates/email/default/other-reported.html
+++ b/templates/email/default/other-reported.html
@@ -9,19 +9,27 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Your report has been&nbsp;logged</h1>
<p style="[% p_style %]">Your report to [% report.body %] has been logged on [% site_name %].</p>
+
+[% IF report.non_public %]
+<p style="[% p_style %]">It has been marked as private and will not be visible
+to the general public; you may view it using the link below, or if you sign in
+using the email address associated with the report.</p>
+[% END %]
+
[% IF cobrand.is_council && !cobrand.owns_problem( report ) %]
<p style="[% p_style %]">Please note that [% cobrand.council_name %] is not responsible for this type
of report, so it will instead be sent to [% report.body %].</p>
[% ELSE %]
[% TRY %][% INCLUDE '_council_reference.html' problem=report %][% CATCH file %][% END %]
[% END %]
+
<p style="margin: 20px auto; text-align: center">
- <a style="[% button_style %]" href="[% cobrand.base_url_for_report(report) %][% report.url %]">View my report</a>
+ <a style="[% button_style %]" href="[% cobrand.base_url_for_report(report) %][% report.view_url %]">View my report</a>
</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report %]
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
diff --git a/templates/email/default/other-reported.txt b/templates/email/default/other-reported.txt
index 7b1230555..522a89b50 100644
--- a/templates/email/default/other-reported.txt
+++ b/templates/email/default/other-reported.txt
@@ -4,6 +4,13 @@ Hello [% report.name %],
Your report to [% report.body %] has been logged on [% site_name %].
+[% IF report.non_public ~%]
+It has been marked as private and will not be visible to the general public;
+you may view it using the link below, or if you sign in using the email address
+associated with the report.
+
+[% END ~%]
+
[% IF cobrand.is_council && !cobrand.owns_problem( report ) %]
Please note that [% cobrand.council_name %] is not responsible for this type
of report, so it will instead be sent to [% report.body %].
@@ -13,7 +20,7 @@ of report, so it will instead be sent to [% report.body %].
It is available to view at:
-[% cobrand.base_url_for_report(report) %][% report.url %]
+[% cobrand.base_url_for_report(report) %][% report.view_url %]
Your report has the title:
diff --git a/templates/email/default/other-updated.html b/templates/email/default/other-updated.html
index e7f09e123..2609b0027 100644
--- a/templates/email/default/other-updated.html
+++ b/templates/email/default/other-updated.html
@@ -9,14 +9,14 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Your update has been&nbsp;logged</h1>
<p style="[% p_style %]">Your update has been logged on [% site_name %].</p>
[% TRY %][% INCLUDE '_council_reference.html' %][% CATCH file %][% END %]
<p style="margin: 20px auto; text-align: center">
<a style="[% button_style %]" href="[% cobrand.base_url_for_report(problem) %][% update.url %]">View my update</a>
</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html'
object = update
diff --git a/templates/email/default/problem-confirm-not-sending.html b/templates/email/default/problem-confirm-not-sending.html
index 827a49d55..43a4c6372 100644
--- a/templates/email/default/problem-confirm-not-sending.html
+++ b/templates/email/default/problem-confirm-not-sending.html
@@ -10,7 +10,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Please confirm your&nbsp;report</h1>
<p style="[% p_style %]">Please click on the link below to confirm that you want your report to appear
on [% site_name %], despite not being sent to the
@@ -20,7 +20,7 @@ council.</p>
<a style="[% button_style %]" href="[% token_url %]">Yes, publish my report</a>
</p>
<p style="[% p_style %]">If you no longer wish to publish this report, please take no further action.</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report, url = token_url %]
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
diff --git a/templates/email/default/problem-confirm.html b/templates/email/default/problem-confirm.html
index f545d7385..40b83a5a0 100644
--- a/templates/email/default/problem-confirm.html
+++ b/templates/email/default/problem-confirm.html
@@ -10,7 +10,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Please confirm your&nbsp;report</h1>
<p style="[% p_style %]">Please click on the link below to confirm that you want to send your report to [% report.body %].
[% IF c.cobrand.is_council && !c.cobrand.owns_problem( report ) %]
@@ -20,12 +20,13 @@ of problem, so it will instead be sent to [% report.body %].
[% TRY %][% INCLUDE '_problem-confirm_extra.html' %][% CATCH file %][% END %]
</p>
- <p style="[% p_style %]">Your report will also appear on the [% site_name %] website.</p>
+ [% UNLESS report.non_public %]<p style="[% p_style %]">Your report will also appear on the [% site_name %] website.</p>[% END %]
<p style="margin: 20px auto; text-align: center">
<a style="[% button_style %]" href="[% token_url %]">Yes, send my report</a>
</p>
<p style="[% p_style %]">If you no longer wish to send this report, please take no further action.</p>
- [% end_padded_box %]
+ [% TRY %][% INCLUDE '_problem-confirm_footer.html' %][% CATCH file %][% END %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report, url = token_url %]
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
diff --git a/templates/email/default/problem-confirm.txt b/templates/email/default/problem-confirm.txt
index 693d7a131..7939a988a 100644
--- a/templates/email/default/problem-confirm.txt
+++ b/templates/email/default/problem-confirm.txt
@@ -3,8 +3,8 @@ Subject: Confirm your report on [% site_name %]
Hello [% report.name %],
Please click on the link below to confirm that you want to send your report to
-[% report.body %]. Note that your report will also appear on the [% site_name %]
-website:
+[% report.body %].[% UNLESS report.non_public %] Note that your report will also
+appear on the [% site_name %] website.[% END %]
[% token_url %]
diff --git a/templates/email/default/problem-moderated.html b/templates/email/default/problem-moderated.html
index 142f27fc2..915bb4138 100644
--- a/templates/email/default/problem-moderated.html
+++ b/templates/email/default/problem-moderated.html
@@ -10,7 +10,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Your report has been&nbsp;moderated</h1>
[% IF types == 'hide' -%]
<p style="[% p_style %]">The report has been hidden from the site.</p>
@@ -22,7 +22,7 @@ INCLUDE '_email_top.html';
[% END -%]
<p style="[% p_style %]">If you do not think that this report should have been moderated, you may contact
the team at <a href="[% report_complain_uri %]">[% report_complain_uri %]</a></p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = problem %]
<h2 style="[% h2_style %]">[% moderated_data.title | html %]</h2>
diff --git a/templates/email/default/questionnaire.html b/templates/email/default/questionnaire.html
index eaa570ae0..bc0b6dbd5 100644
--- a/templates/email/default/questionnaire.html
+++ b/templates/email/default/questionnaire.html
@@ -11,7 +11,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Has your problem been&nbsp;fixed?</h1>
<p style="[% p_style %]">[% created %] ago, you reported a problem using [% site_name %].</p>
<p style="[% p_style %]">Help us keep [% site_name %] up to date by letting us know whether the problem has been fixed yet:</p>
@@ -23,7 +23,7 @@ INCLUDE '_email_top.html';
<a style="[% dontknow_button_style %]" href="[% url %]?been_fixed=Unknown">Don’t know</a>
</p>
<p style="[% p_style %]">Thank you! Your feedback is really valuable.</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report, url = url %]
<h2 style="[% h2_style %]">[% title %]</h2>
diff --git a/templates/email/default/submit.html b/templates/email/default/submit.html
index 8dc06041e..0fed5770f 100644
--- a/templates/email/default/submit.html
+++ b/templates/email/default/submit.html
@@ -11,7 +11,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% 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>
@@ -20,7 +20,7 @@ of a local problem that they believe might require your attention.</p>
<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 %]>
+ <table [% table_reset | safe %]>
<tr>
<th style="[% contact_th_style %]">Name</th>
<td style="[% contact_td_style %]">[% report.name | html %]</td>
@@ -43,7 +43,7 @@ of a local problem that they believe might require your attention.</p>
[%~ 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 %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report %]
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
diff --git a/templates/email/default/update-confirm.html b/templates/email/default/update-confirm.html
index c2a39c0e5..888511346 100644
--- a/templates/email/default/update-confirm.html
+++ b/templates/email/default/update-confirm.html
@@ -10,7 +10,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Please confirm your&nbsp;update</h1>
<p style="[% p_style %]">Please click on the link below to confirm your update on [% site_name %].</p>
<p style="margin: 20px auto; text-align: center">
@@ -18,7 +18,7 @@ INCLUDE '_email_top.html';
</p>
<p style="[% p_style %]">[% INCLUDE 'update-confirm-donotsend.txt' %]</p>
<p style="[% p_style %]">If you no longer wish to confirm this update, please take no further action.</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html'
object = update
diff --git a/templates/email/default/xsl.xsl b/templates/email/default/xsl.xsl
new file mode 100644
index 000000000..09fc9adfe
--- /dev/null
+++ b/templates/email/default/xsl.xsl
@@ -0,0 +1,48 @@
+[%
+email_footer = site_name;
+-%]
+[% FILTER collapse %][% PROCESS '_email_settings.html' %][% END ~%]
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:output method="html" />
+ <xsl:variable name="title" select="/rss/channel/title"/>
+ <xsl:variable name="uri" select="/rss/channel/uri"/>
+ <xsl:template match="/">
+ [% PROCESS '_email_top.html' for_rss=1 rss_title='<xsl:value-of select="$title"/> XML Feed' %]
+
+ <th style="[% td_style %][% rss_meta_style %]">
+ <p>
+ This is an RSS feed from the [% site_name %] website. RSS feeds allow you
+ to stay up to date with the latest changes and additions to the site.
+ <a href="https://www.bbc.co.uk/news/10628494">Learn more about RSS feeds.</a>
+ </p>
+ <p>
+ To subscribe to this RSS feed, copy this URL into your RSS feed reader:
+ <input type="text" style="[% text_input_style %]" onClick="this.setSelectionRange(0, this.value.length)">
+ <xsl:attribute name="value">
+ <xsl:value-of select="$uri"/>
+ </xsl:attribute>
+ </input>
+ </p>
+ </th>
+
+ </tr>
+ <tr>
+
+ <th style="[% td_style %][% only_column_style %]">
+ <h1 style="[% h1_style %]"><xsl:value-of select="$title"/></h1>
+ <xsl:apply-templates select="rss/channel/item"/>
+ </th>
+
+ [% PROCESS '_email_bottom.html' %]
+
+ </xsl:template>
+
+ <xsl:template match="item">
+ <div style="[% list_item_style %]">
+ <h2 style="[% list_item_h2_style %]"><a href="{link}"><xsl:value-of select="title"/></a></h2>
+ <xsl:value-of disable-output-escaping="yes" select="description" />
+ </div>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/templates/email/fixamingata/_email_bottom.html b/templates/email/fixamingata/_email_bottom.html
index 0a8c95c1c..fb4ddc6dd 100644
--- a/templates/email/fixamingata/_email_bottom.html
+++ b/templates/email/fixamingata/_email_bottom.html
@@ -4,7 +4,7 @@
<th></th>
</tr>
</table>
- <table [% wrapper_table %] style="[% wrapper_style %]">
+ <table [% wrapper_table | safe %] style="[% wrapper_style %]">
<tr>
<th></th>
<th width="[% wrapper_max_width %]" style="[% td_style %][% hint_style %]" class="hint">
diff --git a/templates/email/fixamingata/_email_comment_list.html b/templates/email/fixamingata/_email_comment_list.html
index efbb3e8da..346efadfb 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 %]
- <p style="[% list_item_p_style %]">&ldquo;[% update.item_text | html %]&rdquo;</p>
+ [% update.item_text | 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/fixamingata/_email_report_list.html b/templates/email/fixamingata/_email_report_list.html
index 5f7f67864..5a43ce7ea 100644
--- a/templates/email/fixamingata/_email_report_list.html
+++ b/templates/email/fixamingata/_email_report_list.html
@@ -10,7 +10,7 @@
[%~ report.title | html ~%]
</a>
</h2>
- <p style="[% list_item_p_style %]">[% report.detail | html %]</p>
+ [% report.detail | html_para | replace('<p>', '<p style="' _ list_item_p_style _ '">') %]
<p style="[% list_item_date_style %]">
[% cobrand.prettify_dt( report.confirmed ) %].
[% report.nearest %]
diff --git a/templates/email/fixamingata/alert-update.html b/templates/email/fixamingata/alert-update.html
index e24bb4e31..2dcec3273 100644
--- a/templates/email/fixamingata/alert-update.html
+++ b/templates/email/fixamingata/alert-update.html
@@ -11,11 +11,11 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Ny uppdatering i <a href="[% problem_url %]">[% title %]</a></h1>
[%~ INCLUDE '_email_comment_list.html' %]
<p style="[% p_style %]"><a href="[% unsubscribe_url %]">Avsluta min prenumeration kring denna rapport</a></p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report %]
<h2 style="[% h2_style %]">[% title | html %]</h2>
diff --git a/templates/email/fixamingata/contact.html b/templates/email/fixamingata/contact.html
index 47c828a36..b182e48a5 100644
--- a/templates/email/fixamingata/contact.html
+++ b/templates/email/fixamingata/contact.html
@@ -2,7 +2,7 @@
subject_html = subject | html;
name = form_name | html;
-email_summary = "&ldquo;" _ subject_html _ "&rdquo; &ndash; Meddelande från " _ name _ " hos " _ host;
+email_summary = "“" _ subject_html _ "” – Meddelande från " _ name _ " hos " _ host;
email_footer = "Skickat via " _ host _ " och IP-adressen " _ ip;
email_columns = 1;
@@ -13,7 +13,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% contact_meta_style %]">
- <table [% table_reset %]>
+ <table [% table_reset | safe %]>
<tr>
<th style="[% contact_th_style %]">Från</th>
<td style="[% contact_td_style %]">[% name %] &lt;<a href="mailto:[% em | html %]">[% em | html %]</a>&gt;</td>
diff --git a/templates/email/fixamingata/other-reported.html b/templates/email/fixamingata/other-reported.html
index 0b0160696..751da0cae 100644
--- a/templates/email/fixamingata/other-reported.html
+++ b/templates/email/fixamingata/other-reported.html
@@ -9,18 +9,25 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Din rapport har&nbsp;loggats</h1>
<p style="[% p_style %]">Din rapport till [% report.body %] har blivit loggad på [% site_name %].
+
+[% IF report.non_public %]
+<p style="[% p_style %]">It has been marked as private and will not be visible
+to the general public; you may view it using the link below, or if you sign in
+using the email address associated with the report.</p>
+[% END %]
+
[% IF cobrand.is_council && !cobrand.owns_problem( report ) %]
Eftersom [% cobrand.council_name %] inte är ansvarig för den här typen av
rapporter, så kommer rapporten istället att skickas till [% report.body %].
[% END %]
</p>
<p style="margin: 20px auto; text-align: center">
- <a style="[% button_style %]" href="[% cobrand.base_url_for_report(report) %][% report.url %]">Visa min rapport</a>
+ <a style="[% button_style %]" href="[% cobrand.base_url_for_report(report) %][% report.view_url %]">Visa min rapport</a>
</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report %]
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
diff --git a/templates/email/fixamingata/other-reported.txt b/templates/email/fixamingata/other-reported.txt
index e39adf527..e9ed542d3 100644
--- a/templates/email/fixamingata/other-reported.txt
+++ b/templates/email/fixamingata/other-reported.txt
@@ -4,6 +4,13 @@ Hej [% report.name %],
Din rapport till [% report.body %] har blivit loggad på [% site_name %].
+[% IF report.non_public ~%]
+It has been marked as private and will not be visible to the general public;
+you may view it using the link below, or if you sign in using the email address
+associated with the report.
+
+[% END ~%]
+
[% IF cobrand.is_council && !cobrand.owns_problem( report ) %]
Eftersom [% cobrand.council_name %] inte är ansvarig för den här typen av
rapporter, så kommer rapporten istället att skickas till [% report.body %].
@@ -11,7 +18,7 @@ rapporter, så kommer rapporten istället att skickas till [% report.body %].
Du kan se din rapport på:
-[% cobrand.base_url_for_report(report) %][% report.url %]
+[% cobrand.base_url_for_report(report) %][% report.view_url %]
Din rapport har titeln:
diff --git a/templates/email/fixamingata/other-updated.html b/templates/email/fixamingata/other-updated.html
index 7be360ef7..bb0a90416 100644
--- a/templates/email/fixamingata/other-updated.html
+++ b/templates/email/fixamingata/other-updated.html
@@ -9,13 +9,13 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Din uppdatering har&nbsp;loggats</h1>
<p style="[% p_style %]">Din uppdatering har blivit loggad på [% site_name %]:</p>
<p style="margin: 20px auto; text-align: center">
<a style="[% button_style %]" href="[% cobrand.base_url_for_report(problem) %][% problem.url %]#update_[% update.id %]">Visa min uppdatering</a>
</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html'
object = update
diff --git a/templates/email/fixamingata/problem-confirm-not-sending.html b/templates/email/fixamingata/problem-confirm-not-sending.html
index 665288a02..e0b991d98 100644
--- a/templates/email/fixamingata/problem-confirm-not-sending.html
+++ b/templates/email/fixamingata/problem-confirm-not-sending.html
@@ -10,7 +10,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Bekräfta din&nbsp;FixaMinGata-rapport</h1>
<p style="[% p_style %]">För att bekräfta den rapport som du nyligen lade in på FixaMinGata
måste du klicka på nedanstående länk. Notera att din rapport inte kommer att
@@ -20,7 +20,7 @@ skickas till kommunen.</p>
<a style="[% button_style %]" href="[% token_url %]">Skicka min rapport</a>
</p>
<p style="[% p_style %]">Om du inte vill skicka din rapport så behöver du inte göra något.</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report, url = token_url %]
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
diff --git a/templates/email/fixamingata/problem-confirm.html b/templates/email/fixamingata/problem-confirm.html
index 937743fc6..a6a7c9b88 100644
--- a/templates/email/fixamingata/problem-confirm.html
+++ b/templates/email/fixamingata/problem-confirm.html
@@ -10,7 +10,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Bekräfta din&nbsp;FixaMinGata-rapport</h1>
<p style="[% p_style %]">För att bekräfta den rapport som du nyligen lade in på FixaMinGata
måste du klicka på nedanstående knapp.</p>
@@ -19,7 +19,7 @@ måste du klicka på nedanstående knapp.</p>
<a style="[% button_style %]" href="[% token_url %]">Skicka min rapport</a>
</p>
<p style="[% p_style %]">Om du inte vill skicka din rapport så behöver du inte göra något.</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report, url = token_url %]
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
diff --git a/templates/email/fixamingata/problem-moderated.html b/templates/email/fixamingata/problem-moderated.html
index 02bace72f..4c927c11d 100644
--- a/templates/email/fixamingata/problem-moderated.html
+++ b/templates/email/fixamingata/problem-moderated.html
@@ -10,7 +10,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Din rapport har blivit&nbsp;modererad</h1>
[% IF types == 'hide' -%]
<p style="[% p_style %]">Din rapport har dolts från sajten.</p>
@@ -22,7 +22,7 @@ INCLUDE '_email_top.html';
[% END -%]
<p style="[% p_style %]">Om du inte tycker att rapporten skulle ha blivit modererad kan du
kontakta FixaMinGata:s support på <a href="[% report_complain_uri %]">[% report_complain_uri %]</a></p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = problem %]
<h2 style="[% h2_style %]">[% problem.moderation_original_data.title | html %]</h2>
diff --git a/templates/email/fixamingata/questionnaire.html b/templates/email/fixamingata/questionnaire.html
index d66c50535..fef76f0c2 100644
--- a/templates/email/fixamingata/questionnaire.html
+++ b/templates/email/fixamingata/questionnaire.html
@@ -11,7 +11,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Har ditt problem blivit&nbsp;fixat?</h1>
<p style="[% p_style %]">[% created %] sedan lämnade du en rapport på FixaMinGata.</p>
<p style="[% p_style %]">För att hålla alla rapporter uppdaterade skulle vi uppskatta om du kunde informera oss om huruvida problemet har blivit fixat än:</p>
@@ -23,7 +23,7 @@ INCLUDE '_email_top.html';
<a style="[% dontknow_button_style %]" href="[% url %]?been_fixed=Unknown">Vet ej</a>
</p>
<p style="[% p_style %]">Tack! Din feedback är värdefull.</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report, url = url %]
<h2 style="[% h2_style %]">[% title %]</h2>
diff --git a/templates/email/fixamingata/submit.html b/templates/email/fixamingata/submit.html
index 6a1208982..f04801bd6 100644
--- a/templates/email/fixamingata/submit.html
+++ b/templates/email/fixamingata/submit.html
@@ -11,7 +11,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Ny rapport för [% report.body %]</h1>
<p style="[% p_style %]">[% missing %][% multiple %]Följande rapport
tror medborgaren behöver er uppmärksamhet.</p>
@@ -20,7 +20,7 @@ tror medborgaren behöver er uppmärksamhet.</p>
<a style="[% button_style %]" href="[% url %]">Visa rapporten</a>
</p>
<h2 style="[% h2_style %] margin: 30px 0 10px 0">Rapporterad av:</h2>
- <table [% table_reset %]>
+ <table [% table_reset | safe %]>
<tr>
<th style="[% contact_th_style %]">Namn</th>
<td style="[% contact_td_style %]">[% report.name | html %]</td>
@@ -42,7 +42,7 @@ tror medborgaren behöver er uppmärksamhet.</p>
[%~ END %]
</table>
<p style="[% p_style %] margin-top: 0.5em;">Svar på det här brevet kommer att skickas till den person som lämnade rapporten.</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report %]
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
diff --git a/templates/email/fixamingata/submit.txt b/templates/email/fixamingata/submit.txt
index d2e7399b4..20a49706d 100644
--- a/templates/email/fixamingata/submit.txt
+++ b/templates/email/fixamingata/submit.txt
@@ -1,4 +1,4 @@
-Subject: Ny rapport: [% report.title %]
+Subject: Ny rapport: [% IF problem.extra.building %][% problem.extra.building %], [% END %][% report.title %]
Till [% bodies_name %],
diff --git a/templates/email/fixamingata/update-confirm.html b/templates/email/fixamingata/update-confirm.html
index 3953b16fd..178f5b79e 100644
--- a/templates/email/fixamingata/update-confirm.html
+++ b/templates/email/fixamingata/update-confirm.html
@@ -10,7 +10,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% start_padded_box | safe %]
<h1 style="[% h1_style %]">Bekräfta din uppdatering</h1>
<p style="[% p_style %]">Vänligen klicka på knappen nedan för att bekräfta den uppdatering du just lämnade:</p>
<p style="margin: 20px auto; text-align: center">
@@ -18,7 +18,7 @@ INCLUDE '_email_top.html';
</p>
<p style="[% p_style %]">[% INCLUDE 'update-confirm-donotsend.txt' %]</p>
<p style="[% p_style %]">Om du inte vill bekräfta din uppdatering behöver du inte göra något.</p>
- [% end_padded_box %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html'
object = update
diff --git a/templates/email/fixmystreet.com/_submit_footer.html b/templates/email/fixmystreet.com/_submit_footer.html
index cb0dbb165..0da75a3b7 100644
--- a/templates/email/fixmystreet.com/_submit_footer.html
+++ b/templates/email/fixmystreet.com/_submit_footer.html
@@ -1,4 +1,4 @@
-<table [% table_reset %]>
+<table [% table_reset | safe %]>
<tr>
<th style="[% td_style %] padding: [% column_padding %]px; background-color: [% color_yellow %]; color: [% color_black %];">
<h2 style="[% h2_style %] margin-bottom: 15px;">
@@ -14,7 +14,7 @@
</tr>
</table>
-<table [% table_reset %] style="table-layout: fixed;">
+<table [% table_reset | safe %] style="table-layout: fixed;">
<tr>
<th style="[% submit_footer_td_style %] padding: [% column_padding %]px 40px 0 0;">
<h2 style="[% submit_footer_h2_style %]">
diff --git a/templates/email/fixmystreet.com/submit.html b/templates/email/fixmystreet.com/submit.html
index 2742c4b44..f8b2db0dc 100644
--- a/templates/email/fixmystreet.com/submit.html
+++ b/templates/email/fixmystreet.com/submit.html
@@ -11,7 +11,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% primary_column_style %]" id="primary_column">
- [% start_padded_box %]
+ [% 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>
@@ -20,7 +20,7 @@ of a local problem that they believe might require your attention.</p>
<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 %]>
+ <table [% table_reset | safe %]>
<tr>
<th style="[% contact_th_style %]">Name</th>
<td style="[% contact_td_style %]">[% report.name | html %]</td>
@@ -43,7 +43,7 @@ of a local problem that they believe might require your attention.</p>
[%~ 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 %]
+ [% end_padded_box | safe %]
</th>
[% WRAPPER '_email_sidebar.html' object = report %]
<h2 style="[% h2_style %]">[% report.title | html %]</h2>
@@ -62,6 +62,18 @@ of a local problem that they believe might require your attention.</p>
</a>)
[% IF closest_address %]<br>[% closest_address | trim | replace("\n\n", "<br>") %][% END %]
</p>
+ [% IF report.get_extra_field_value('road_name') %]
+ <p style="[% secondary_p_style %]">
+ <strong>Road:</strong>
+ [% report.get_extra_field_value('road_name') %]
+ </p>
+ [% END %]
+ [% IF report.get_extra_field_value('sect_label') %]
+ <p style="[% secondary_p_style %]">
+ <strong>Section:</strong>
+ [% report.get_extra_field_value('sect_label') %]
+ </p>
+ [% END %]
[% END %]
[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/fixmystreet.com/submit.txt b/templates/email/fixmystreet.com/submit.txt
index 3eaf400a2..c22d83713 100644
--- a/templates/email/fixmystreet.com/submit.txt
+++ b/templates/email/fixmystreet.com/submit.txt
@@ -35,6 +35,13 @@ Latitude: [% report.latitude %]
Longitude: [% report.longitude %]
+[% IF report.get_extra_field_value('road_name') ~%]
+Road: [% report.get_extra_field_value('road_name') %]
+[% END %]
+[% IF report.get_extra_field_value('sect_label') ~%]
+Section: [% report.get_extra_field_value('sect_label') %]
+[% END %]
+
View OpenStreetMap of this location: [% osm_url %]
[% closest_address %]----------
diff --git a/templates/email/highwaysengland/_email_color_overrides.html b/templates/email/highwaysengland/_email_color_overrides.html
new file mode 100644
index 000000000..999a90865
--- /dev/null
+++ b/templates/email/highwaysengland/_email_color_overrides.html
@@ -0,0 +1,36 @@
+[%
+
+color_he_darkblue = '#011e41';
+color_he_blue = '#0073a6';
+color_he_brightblue = '#0082c9';
+color_he_paleblue = '#99cceb';
+color_he_black = '#00050d';
+color_he_orange = '#f28a00';
+color_he_green = '#4a7529';
+color_he_red = '#d13339';
+color_he_yellow = '#ffc726';
+color_he_pink = '#cc2b99';
+
+color_he_grey1 = '#f2f2f2';
+color_he_grey2 = '#eff0f2';
+color_he_grey3 = '#cfd1d1';
+color_he_grey4 = '#59595c';
+color_he_grey5 = '#38383b';
+color_he_grey6 = '#241f21';
+
+body_background_color = color_he_grey3
+body_text_color = color_he_grey6
+
+header_background_color = '#fff'
+header_text_color = color_he_black
+
+secondary_column_background_color = color_he_grey2
+
+button_background_color = color_he_blue
+button_text_color = '#fff'
+
+logo_file = "email-logo.png"
+logo_width = "118" # pixel measurement, but without 'px' suffix
+logo_height = "35" # pixel measurement, but without 'px' suffix
+
+%]
diff --git a/templates/email/highwaysengland/_email_setting_overrides.html b/templates/email/highwaysengland/_email_setting_overrides.html
new file mode 100644
index 000000000..2359d2033
--- /dev/null
+++ b/templates/email/highwaysengland/_email_setting_overrides.html
@@ -0,0 +1,5 @@
+[%
+
+header_style = "${header_style} border-bottom: 4px solid ${color_he_blue};"
+
+%]
diff --git a/templates/email/highwaysengland/submit.html b/templates/email/highwaysengland/submit.html
new file mode 100644
index 000000000..a5c17c694
--- /dev/null
+++ b/templates/email/highwaysengland/submit.html
@@ -0,0 +1,50 @@
+[%
+
+email_summary = "A new problem in your area has been reported by a " _ site_name _ " user.";
+email_footer = "Sent via FixMyStreet";
+email_columns = 2;
+
+PROCESS '_email_settings.html';
+
+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>
+ [% end_padded_box | safe %]
+</th>
+[% WRAPPER '_email_sidebar.html' object = report %]
+ <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>
+ <p style="[% secondary_p_style %]">
+ <strong>Location:</strong>
+ <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>
+ <p style="[% secondary_p_style %]">
+ <strong>Road:</strong>
+ [% report.get_extra_field_value('road_name') %]
+ </p>
+ <p style="[% secondary_p_style %]">
+ <strong>Section:</strong>
+ [% report.get_extra_field_value('sect_label') %]
+ </p>
+ <p style="[% secondary_p_style %]">
+ <strong>Heard from:</strong>
+ [% report.get_extra_metadata('where_hear') %]
+ </p>
+
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/highwaysengland/submit.txt b/templates/email/highwaysengland/submit.txt
new file mode 100644
index 000000000..aa32bd1be
--- /dev/null
+++ b/templates/email/highwaysengland/submit.txt
@@ -0,0 +1,40 @@
+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 %]----------
+
+Category: [% report.category %]
+
+Subject: [% report.title %]
+
+Details: [% report.detail %]
+
+Latitude: [% report.latitude %]
+
+Longitude: [% report.longitude %]
+
+Road: [% report.get_extra_field_value('road_name') %]
+
+Section: [% report.get_extra_field_value('sect_label') %]
+
+Heard from: [% report.get_extra_metadata('where_hear') %]
+
+View OpenStreetMap of this location: [% osm_url %]
+
+[% closest_address %]----------
+
+[% signature %]
+
+If there is a more appropriate email address for messages about
+[% category_footer %], please let us know. This will help improve the
+service for local people. We also welcome any other feedback you may have.
diff --git a/templates/email/hounslow/_council_reference.html b/templates/email/hounslow/_council_reference.html
new file mode 100644
index 000000000..3b886a51e
--- /dev/null
+++ b/templates/email/hounslow/_council_reference.html
@@ -0,0 +1,4 @@
+[% IF problem.external_id ~%]
+<p style="[% p_style %]">The report's reference number is <strong>[% problem.external_id %]</strong>.
+ Please quote this if you need to contact Hounslow Highways about this report.</p>
+[%~ END %]
diff --git a/templates/email/hounslow/_council_reference.txt b/templates/email/hounslow/_council_reference.txt
new file mode 100644
index 000000000..ebd7d4588
--- /dev/null
+++ b/templates/email/hounslow/_council_reference.txt
@@ -0,0 +1,2 @@
+[% IF problem.external_id %]The report's reference number is [% problem.external_id %]. Please quote this if
+you need to contact Hounslow Highways about this report.[% END %]
diff --git a/templates/email/hounslow/_council_reference_alert_update.html b/templates/email/hounslow/_council_reference_alert_update.html
new file mode 100644
index 000000000..3b886a51e
--- /dev/null
+++ b/templates/email/hounslow/_council_reference_alert_update.html
@@ -0,0 +1,4 @@
+[% IF problem.external_id ~%]
+<p style="[% p_style %]">The report's reference number is <strong>[% problem.external_id %]</strong>.
+ Please quote this if you need to contact Hounslow Highways about this report.</p>
+[%~ END %]
diff --git a/templates/email/hounslow/_council_reference_alert_update.txt b/templates/email/hounslow/_council_reference_alert_update.txt
new file mode 100644
index 000000000..ebd7d4588
--- /dev/null
+++ b/templates/email/hounslow/_council_reference_alert_update.txt
@@ -0,0 +1,2 @@
+[% IF problem.external_id %]The report's reference number is [% problem.external_id %]. Please quote this if
+you need to contact Hounslow Highways about this report.[% END %]
diff --git a/templates/email/hounslow/_email_color_overrides.html b/templates/email/hounslow/_email_color_overrides.html
new file mode 100644
index 000000000..b08a92d86
--- /dev/null
+++ b/templates/email/hounslow/_email_color_overrides.html
@@ -0,0 +1,19 @@
+[%
+
+color_purple = '#7D2B80'
+color_green = '#8BC54F'
+color_white = '#fff'
+
+header_background_color = color_white
+header_text_color = color_purple
+
+secondary_column_background_color = color_white
+
+button_background_color = color_purple
+button_text_color = color_white
+
+logo_width = "231" # pixel measurement, but without 'px' suffix
+logo_height = "102" # pixel measurement, but without 'px' suffix
+logo_file = "logo.gif"
+
+%]
diff --git a/templates/email/hounslow/archive.html b/templates/email/hounslow/archive.html
new file mode 100644
index 000000000..45089caa6
--- /dev/null
+++ b/templates/email/hounslow/archive.html
@@ -0,0 +1,55 @@
+[%
+
+email_summary = "Your reports on " _ site_name;
+
+PROCESS '_email_settings.html';
+
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% only_column_style %]">
+ <h1 style="[% h1_style %]">Your reports on [% site_name %]</h1>
+ <p style="[% p_style %]">
+ Hello [% user.name %],
+ </p>
+ <p style="[% p_style %]">
+ FixMyStreet is being updated in Hounslow to
+ improve how problems get reported.
+ </p>
+ <p style="[% p_style %]">
+ As part of this process we are closing all reports
+ made before the update.
+ </p>
+ <p style="[% p_style %]">
+ We noticed that you have [% report_count %] old [% nget('report', 'reports', report_count) %] on the system,
+ which we've listed below.
+ </p>
+ <p style="[% p_style %]">
+ All of your reports will have been received and reviewed by Hounslow, so if
+ your report is no longer an issue, you don't need to do anything.
+ </p>
+ <p style="[% p_style %]">
+ If you believe that the issue has not been resolved you can <a href="https://fms.hounslowhighways.org/">report it again here.</a>
+ </p>
+
+ [% FOR report IN reports %]
+ <div style="[% list_item_style %]">
+ [% IF report.photo %]
+ <a href="[% cobrand.base_url_for_report( report ) %]/report/[% report.id %]">
+ <img style="[% list_item_photo_style %]" src="[% inline_image(report.get_first_image_fp) %]" alt="">
+ </a>
+ [% END %]
+ <h2 style="[% list_item_h2_style %]"><a href="[% cobrand.base_url_for_report( report ) %]/report/[% report.id %]">
+ [%~ report.title | html ~%]
+ </a></h2>
+ <p style="[% list_item_p_style %]">[% report.detail | html %]</p>
+ <p style="[% list_item_date_style %]">
+ Reported [% report.time_ago %] ago.
+ </p>
+ </div>
+ [% END %]
+
+</th>
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/hounslow/archive.txt b/templates/email/hounslow/archive.txt
new file mode 100644
index 000000000..3573eb288
--- /dev/null
+++ b/templates/email/hounslow/archive.txt
@@ -0,0 +1,27 @@
+Subject: Your reports on [% site_name %]
+
+Hello [% user.name %],
+
+FixMyStreet is being updated in Hounslow to improve how problems get reported.
+
+As part of this process we are closing all reports made before the update.
+
+We noticed that you have [% report_count %] old [% nget('report', 'reports', report_count) %] on the system, which we've listed below.
+
+All of your reports will have been received and reviewed by Hounslow, so if your report is no longer an issue, you don't need to do anything.
+
+If you believe that the issue has not been resolved you can report it again here: https://fms.hounslowhighways.org/
+
+[% FOR report IN reports %]
+
+[% report.title %]
+
+Reported [% report.time_ago %] ago.
+
+View report: [% cobrand.base_url_for_report( report ) %]/report/[% report.id %]
+
+----
+
+[% END %]
+
+The FixMyStreet team and Hounslow Highways
diff --git a/templates/email/hounslow/confirm_report_sent.html b/templates/email/hounslow/confirm_report_sent.html
new file mode 100644
index 000000000..5a0c19f0d
--- /dev/null
+++ b/templates/email/hounslow/confirm_report_sent.html
@@ -0,0 +1 @@
+[% INCLUDE 'other-reported.html' %] \ No newline at end of file
diff --git a/templates/email/hounslow/confirm_report_sent.txt b/templates/email/hounslow/confirm_report_sent.txt
new file mode 100644
index 000000000..72fe01f6d
--- /dev/null
+++ b/templates/email/hounslow/confirm_report_sent.txt
@@ -0,0 +1 @@
+[% INCLUDE 'other-reported.txt' %] \ No newline at end of file
diff --git a/templates/email/hounslow/other-reported.html b/templates/email/hounslow/other-reported.html
new file mode 100644
index 000000000..b4b4faa99
--- /dev/null
+++ b/templates/email/hounslow/other-reported.html
@@ -0,0 +1,38 @@
+[%
+
+email_summary = "Thanks for logging your report";
+email_columns = 2;
+
+PROCESS '_email_settings.html';
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% primary_column_style %]" id="primary_column">
+ [% start_padded_box | safe %]
+ <h1 style="[% h1_style %]">Your report has been&nbsp;logged</h1>
+ <p style="[% p_style %]">Your report to [% cobrand.council_name %] has been logged on [% site_name %].</p>
+
+[% IF report.non_public %]
+<p style="[% p_style %]">It has been marked as private and will not be visible
+to the general public; you may view it using the link below, or if you sign in
+using the email address associated with the report.</p>
+[% END %]
+
+[% IF cobrand.is_council && !cobrand.owns_problem( report ) %]
+<p style="[% p_style %]">Please note that [% cobrand.council_name %] is not responsible for this type
+of report, so it will instead be sent to [% report.body %].</p>
+[% ELSE %]
+[% TRY %][% INCLUDE '_council_reference.html' problem=report %][% CATCH file %][% END %]
+[% END %]
+ <p style="margin: 20px auto; text-align: center">
+ <a style="[% button_style %]" href="[% cobrand.base_url_for_report(report) %][% report.view_url %]">View my report</a>
+ </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 %]">[% report.detail | html %]</p>
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/hounslow/other-reported.txt b/templates/email/hounslow/other-reported.txt
new file mode 100644
index 000000000..a3b7e37c8
--- /dev/null
+++ b/templates/email/hounslow/other-reported.txt
@@ -0,0 +1,36 @@
+Subject: Your report has been logged: [% report.title %]
+
+Hello [% report.name %],
+
+Your report to [% cobrand.council_name %] has been logged on [% site_name %].
+
+[% IF report.non_public ~%]
+It has been marked as private and will not be visible to the general public;
+you may view it using the link below, or if you sign in using the email address
+associated with the report.
+
+[% END ~%]
+
+[% IF cobrand.is_council && !cobrand.owns_problem( report ) %]
+Please note that [% cobrand.council_name %] is not responsible for this type
+of report, so it will instead be sent to [% report.body %].
+[% ELSE %]
+[% TRY %][% INCLUDE '_council_reference.txt' problem=report %][% CATCH file %][% END %]
+[% END %]
+
+It is available to view at:
+
+[% cobrand.base_url_for_report(report) %][% report.view_url %]
+
+Your report has the title:
+
+[% report.title %]
+
+And details:
+
+[% report.detail %]
+
+[% signature %]
+
+This email was sent automatically, from an unmonitored email account - so
+please do not reply to it.
diff --git a/templates/email/hounslow/problem-confirm.html b/templates/email/hounslow/problem-confirm.html
new file mode 100644
index 000000000..08a7531ca
--- /dev/null
+++ b/templates/email/hounslow/problem-confirm.html
@@ -0,0 +1,31 @@
+[%
+
+email_summary = "You need to confirm your " _ site_name _ " report before it can be sent to Hounslow Highways.";
+email_columns = 2;
+
+PROCESS '_email_settings.html';
+
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% primary_column_style %]" id="primary_column">
+ [% start_padded_box | safe %]
+ <h1 style="[% h1_style %]">Please confirm your&nbsp;report</h1>
+ <p style="[% p_style %]">Please click on the link below to confirm that you want to send your report to Hounslow Highways.
+
+[% TRY %][% INCLUDE '_problem-confirm_extra.html' %][% CATCH file %][% END %]
+ </p>
+ [% UNLESS report.non_public %]<p style="[% p_style %]">Your report will also appear on the [% site_name %] website.</p>[% END %]
+ <p style="margin: 20px auto; text-align: center">
+ <a style="[% button_style %]" href="[% token_url %]">Yes, send my report</a>
+ </p>
+ <p style="[% p_style %]">If you no longer wish to send this report, please take no further action.</p>
+ [% end_padded_box | safe %]
+</th>
+[% WRAPPER '_email_sidebar.html' object = report, url = token_url %]
+ <h2 style="[% h2_style %]">[% report.title | html %]</h2>
+ <p style="[% secondary_p_style %]">[% report.detail | html %]</p>
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/hounslow/problem-confirm.txt b/templates/email/hounslow/problem-confirm.txt
new file mode 100644
index 000000000..9343b2a6e
--- /dev/null
+++ b/templates/email/hounslow/problem-confirm.txt
@@ -0,0 +1,31 @@
+Subject: Confirm your report on [% site_name %]
+
+Hello [% report.name %],
+
+Please click on the link below to confirm that you want to send your report to
+Hounslow Highways.[% UNLESS report.non_public %] Note that your report will also
+appear on the [% site_name %] website.[% END %]
+
+[% token_url %]
+
+If your email program does not let you click on this link, copy and paste it
+into your web browser and press return.
+[% TRY %][% INCLUDE '_problem-confirm_extra.txt' %][% CATCH file %][% END %]
+Your problem had the title:
+
+[% report.title %]
+
+And details:
+
+[% report.detail %]
+
+If you no longer wish to send this report, please take no further action.
+
+Thank you for submitting a report through [% site_name %].
+
+
+
+[% signature %]
+
+This email was sent automatically, from an unmonitored email account - so
+please do not reply to it.
diff --git a/templates/email/hounslow/submit.html b/templates/email/hounslow/submit.html
new file mode 100644
index 000000000..5b9f2e255
--- /dev/null
+++ b/templates/email/hounslow/submit.html
@@ -0,0 +1,70 @@
+[%
+
+PROCESS '_email_settings.html';
+
+email_summary = "A new problem in your area has been reported by a " _ site_name _ " user.";
+email_footer = "";
+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 %]">[% 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>
+ [% IF report.external_id %]
+ <p style="[% secondary_p_style %]"><strong>Enquiry ref:</strong> [% report.external_id | html %]</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
+ [%~ " (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>
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/hounslow/submit.txt b/templates/email/hounslow/submit.txt
new file mode 100644
index 000000000..3d9518e53
--- /dev/null
+++ b/templates/email/hounslow/submit.txt
@@ -0,0 +1,43 @@
+Subject: Problem Report: [% report.title %]
+
+[% 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' %]
+
+[% IF report.external_id %]Enquiry ref: [% report.external_id %][% END %]
+
+Category: [% report.category %]
+
+Subject: [% report.title %]
+
+Details: [% report.detail %]
+
+[% additional_information %]
+
+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.
+
diff --git a/templates/email/isleofwight/_council_reference.html b/templates/email/isleofwight/_council_reference.html
new file mode 100644
index 000000000..5b73ee7e7
--- /dev/null
+++ b/templates/email/isleofwight/_council_reference.html
@@ -0,0 +1,4 @@
+[% IF problem.external_id ~%]
+<p style="[% p_style %]">The report's reference number is <strong>[% problem.external_id %]</strong>.
+ Please quote this if you need to contact Island Roads about this report.</p>
+[%~ END %]
diff --git a/templates/email/isleofwight/_council_reference.txt b/templates/email/isleofwight/_council_reference.txt
new file mode 100644
index 000000000..d6922217d
--- /dev/null
+++ b/templates/email/isleofwight/_council_reference.txt
@@ -0,0 +1,2 @@
+[% IF problem.external_id %]The report's reference number is [% problem.external_id %]. Please quote this if
+you need to contact Island Roads about this report.[% END %]
diff --git a/templates/email/isleofwight/_council_reference_alert_update.html b/templates/email/isleofwight/_council_reference_alert_update.html
new file mode 100644
index 000000000..5b73ee7e7
--- /dev/null
+++ b/templates/email/isleofwight/_council_reference_alert_update.html
@@ -0,0 +1,4 @@
+[% IF problem.external_id ~%]
+<p style="[% p_style %]">The report's reference number is <strong>[% problem.external_id %]</strong>.
+ Please quote this if you need to contact Island Roads about this report.</p>
+[%~ END %]
diff --git a/templates/email/isleofwight/_council_reference_alert_update.txt b/templates/email/isleofwight/_council_reference_alert_update.txt
new file mode 100644
index 000000000..d6922217d
--- /dev/null
+++ b/templates/email/isleofwight/_council_reference_alert_update.txt
@@ -0,0 +1,2 @@
+[% IF problem.external_id %]The report's reference number is [% problem.external_id %]. Please quote this if
+you need to contact Island Roads about this report.[% END %]
diff --git a/templates/email/isleofwight/_email_color_overrides.html b/templates/email/isleofwight/_email_color_overrides.html
new file mode 100644
index 000000000..3d6218ca4
--- /dev/null
+++ b/templates/email/isleofwight/_email_color_overrides.html
@@ -0,0 +1,19 @@
+[%
+
+color_cyan = '#00aeef'
+color_blue = '#00478c'
+color_green = '#75c044'
+color_white = '#fff'
+
+header_background_color = color_white
+header_text_color = color_blue
+
+secondary_column_background_color = color_white
+
+button_background_color = color_green
+button_text_color = color_white
+
+logo_width = "282" # pixel measurement, but without 'px' suffix
+logo_height = "76" # pixel measurement, but without 'px' suffix
+
+%]
diff --git a/templates/email/isleofwight/archive.html b/templates/email/isleofwight/archive.html
new file mode 100644
index 000000000..9b0bda0db
--- /dev/null
+++ b/templates/email/isleofwight/archive.html
@@ -0,0 +1,48 @@
+[%
+
+email_summary = "Your reports on FixMyStreet";
+
+PROCESS '_email_settings.html';
+
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% only_column_style %]">
+ <h1 style="[% h1_style %]">Your reports on FixMyStreet</h1>
+ <p style="[% p_style %]">
+ Hello [% user.name %],
+ </p>
+ <p style="[% p_style %]">
+ FixMyStreet is being updated for the Isle of Wight to improve how problems get reported.
+ </p>
+ <p style="[% p_style %]">
+As part of this process we are closing all enquiries made before the update. We noticed
+that you have [% report_count %] old [% nget('report', 'reports', report_count) %] on the system, which we've listed below.
+ </p>
+ <p style="[% p_style %]">
+If your enquiry is no longer an issue, you don't need to do anything. If you believe
+that the issue has not been resolved, please log it again on
+<a href="https://fms.islandroads.com/">https://fms.islandroads.com/</a> or contact the Island Roads Help Desk via <a href="mailto:info@islandroads.com">info@islandroads.com</a> or 01983 822440.
+ </p>
+
+ [% FOR report IN reports %]
+ <div style="[% list_item_style %]">
+ [% IF report.photo %]
+ <a href="https://www.fixmystreet.com/report/[% report.id %]">
+ <img style="[% list_item_photo_style %]" src="[% inline_image(report.get_first_image_fp) %]" alt="">
+ </a>
+ [% END %]
+ <h2 style="[% list_item_h2_style %]"><a href="[% cobrand.base_url_for_report( report ) %]/report/[% report.id %]">
+ [%~ report.title | html ~%]
+ </a></h2>
+ <p style="[% list_item_p_style %]">[% report.detail | html %]</p>
+ <p style="[% list_item_date_style %]">
+ Reported [% report.time_ago %] ago.
+ </p>
+ </div>
+ [% END %]
+
+</th>
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/isleofwight/archive.txt b/templates/email/isleofwight/archive.txt
new file mode 100644
index 000000000..1a2cd40d5
--- /dev/null
+++ b/templates/email/isleofwight/archive.txt
@@ -0,0 +1,26 @@
+Subject: Your reports on FixMyStreet
+
+Hello [% user.name %],
+
+FixMyStreet is being updated for the Isle of Wight to improve how problems get reported.
+
+As part of this process we are closing all enquiries made before the update. We noticed
+that you have [% report_count %] old [% nget('report', 'reports', report_count) %] on the system, which we've listed below.
+
+If your enquiry is no longer an issue, you don't need to do anything. If you believe
+that the issue has not been resolved, please log it again on
+https://fms.islandroads.com/ or contact the Island Roads Help Desk via info@islandroads.com or 01983 822440.
+
+[% FOR report IN reports %]
+
+[% report.title %]
+
+Reported [% report.time_ago %] ago.
+
+View report: https://www.fixmystreet.com/report/[% report.id %]
+
+----
+
+[% END %]
+
+The FixMyStreet team and Island Roads
diff --git a/templates/email/isleofwight/confirm_report_sent.html b/templates/email/isleofwight/confirm_report_sent.html
new file mode 100644
index 000000000..88838960e
--- /dev/null
+++ b/templates/email/isleofwight/confirm_report_sent.html
@@ -0,0 +1,42 @@
+[%
+
+email_summary = "Thanks for logging your report";
+email_columns = 2;
+
+PROCESS '_email_settings.html';
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% primary_column_style %]" id="primary_column">
+ [% start_padded_box | safe %]
+ <h1 style="[% h1_style %]">Your report has been&nbsp;logged</h1>
+ [% IF report.state == 'for triage' %]
+ <p style="[% p_style %]">Thank you for submitting your report to FixMyStreet, it will be submitted to Island Roads for review.</p>
+ [% ELSE %]
+ <p style="[% p_style %]">Thank you, your enquiry has been received by Island Roads and appropriate action will be taken.</p>
+
+ <p style="[% p_style %]">We don't routinely contact customers regarding their enquiries, unless we have a specific query about
+ the issue. Any status updates for the issue can be tracked via FixMyStreet, if you contact us again about this issue,
+ please quote your 8-digit reference number.</p>
+
+ <p style="[% p_style %]">Thank you for submitting your enquiry to us via FixMyStreet.</p>
+ [% END %]
+
+[% IF cobrand.is_council && !cobrand.owns_problem( report ) %]
+<p style="[% p_style %]">Please note that [% cobrand.council_name %] is not responsible for this type
+of report, so it will instead be sent to [% report.body %].</p>
+[% ELSE %]
+[% TRY %][% INCLUDE '_council_reference.html' problem=report %][% CATCH file %][% END %]
+[% END %]
+ <p style="margin: 20px auto; text-align: center">
+ <a style="[% button_style %]" href="[% cobrand.base_url_for_report(report) %][% report.url %]">View my report</a>
+ </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 %]">[% report.detail | html %]</p>
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/isleofwight/confirm_report_sent.txt b/templates/email/isleofwight/confirm_report_sent.txt
new file mode 100644
index 000000000..a368bd95e
--- /dev/null
+++ b/templates/email/isleofwight/confirm_report_sent.txt
@@ -0,0 +1,43 @@
+Subject: Your report has been logged: [% report.title %]
+
+Hello [% report.name %],
+
+[% IF report.state == 'for triage' %]
+Thank you for submitting your report to FixMyStreet, it will be
+submitted to Island Roads for review.
+[% ELSE %]
+Thank you, your enquiry has been received by Island Roads and
+appropriate action will be taken.
+
+We don't routinely contact customers regarding their enquiries,
+unless we have a specific query about the issue. Any status
+updates for the issue can be tracked via FixMyStreet, if you
+contact us again about this issue, please quote your 8-digit
+reference number.
+
+Thank you for submitting your enquiry to us via FixMyStreet.
+[% END %]
+
+[% IF cobrand.is_council && !cobrand.owns_problem( report ) %]
+Please note that [% cobrand.council_name %] is not responsible for this type
+of report, so it will instead be sent to [% report.body %].
+[% ELSE %]
+[% TRY %][% INCLUDE '_council_reference.txt' problem=report %][% CATCH file %][% END %]
+[% END %]
+
+It is available to view at:
+
+[% cobrand.base_url_for_report(report) %][% report.url %]
+
+Your report has the title:
+
+[% report.title %]
+
+And details:
+
+[% report.detail %]
+
+[% signature %]
+
+This email was sent automatically, from an unmonitored email account - so
+please do not reply to it.
diff --git a/templates/email/isleofwight/problem-confirm.html b/templates/email/isleofwight/problem-confirm.html
new file mode 100644
index 000000000..551e42e31
--- /dev/null
+++ b/templates/email/isleofwight/problem-confirm.html
@@ -0,0 +1,31 @@
+[%
+
+email_summary = "You need to confirm your " _ site_name _ " report before it can be sent to Island Roads.";
+email_columns = 2;
+
+PROCESS '_email_settings.html';
+
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% primary_column_style %]" id="primary_column">
+ [% start_padded_box | safe %]
+ <h1 style="[% h1_style %]">Please confirm your&nbsp;report</h1>
+ <p style="[% p_style %]">Please click on the link below to confirm that you want to send your report to Island Roads.
+
+[% TRY %][% INCLUDE '_problem-confirm_extra.html' %][% CATCH file %][% END %]
+ </p>
+ [% UNLESS report.non_public %]<p style="[% p_style %]">Your report will also appear on the [% site_name %] website.</p>[% END %]
+ <p style="margin: 20px auto; text-align: center">
+ <a style="[% button_style %]" href="[% token_url %]">Yes, send my report</a>
+ </p>
+ <p style="[% p_style %]">If you no longer wish to send this report, please take no further action.</p>
+ [% end_padded_box | safe %]
+</th>
+[% WRAPPER '_email_sidebar.html' object = report, url = token_url %]
+ <h2 style="[% h2_style %]">[% report.title | html %]</h2>
+ <p style="[% secondary_p_style %]">[% report.detail | html %]</p>
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/isleofwight/problem-confirm.txt b/templates/email/isleofwight/problem-confirm.txt
new file mode 100644
index 000000000..20a871453
--- /dev/null
+++ b/templates/email/isleofwight/problem-confirm.txt
@@ -0,0 +1,31 @@
+Subject: Confirm your report on [% site_name %]
+
+Hello [% report.name %],
+
+Please click on the link below to confirm that you want to send your report to
+Island Roads.[% UNLESS report.non_public %] Note that your report will also
+appear on the [% site_name %] website.[% END %]
+
+[% token_url %]
+
+If your email program does not let you click on this link, copy and paste it
+into your web browser and press return.
+[% TRY %][% INCLUDE '_problem-confirm_extra.txt' %][% CATCH file %][% END %]
+Your problem had the title:
+
+[% report.title %]
+
+And details:
+
+[% report.detail %]
+
+If you no longer wish to send this report, please take no further action.
+
+Thank you for submitting a report through [% site_name %].
+
+
+
+[% signature %]
+
+This email was sent automatically, from an unmonitored email account - so
+please do not reply to it.
diff --git a/templates/email/isleofwight/signature.txt b/templates/email/isleofwight/signature.txt
new file mode 100644
index 000000000..e375a0402
--- /dev/null
+++ b/templates/email/isleofwight/signature.txt
@@ -0,0 +1,2 @@
+
+Island Roads
diff --git a/templates/email/lincolnshire/contact.html b/templates/email/lincolnshire/contact.html
index d9e9b060a..a1be947de 100644
--- a/templates/email/lincolnshire/contact.html
+++ b/templates/email/lincolnshire/contact.html
@@ -2,7 +2,7 @@
subject_html = subject | html;
name = form_name | html;
-email_summary = "&ldquo;" _ subject_html _ "&rdquo; &ndash; Message from " _ name _ " on " _ host;
+email_summary = "“" _ subject_html _ "” – Message from " _ name _ " on " _ host;
email_footer = "Sent via " _ host _ ", IP " _ ip;
email_columns = 1;
@@ -13,7 +13,7 @@ INCLUDE '_email_top.html';
%]
<th style="[% td_style %][% contact_meta_style %]">
- <table [% table_reset %]>
+ <table [% table_reset | safe %]>
<tr>
<th style="[% contact_th_style %]">From</th>
<td style="[% contact_td_style %]">[% name %] &lt;<a href="mailto:[% em | html %]">[% em | html %]</a>&gt;</td>
diff --git a/templates/email/oxfordshire/_problem-confirm_extra.html b/templates/email/oxfordshire/_problem-confirm_extra.html
deleted file mode 100644
index 5e22be6b9..000000000
--- a/templates/email/oxfordshire/_problem-confirm_extra.html
+++ /dev/null
@@ -1,14 +0,0 @@
-[% IF c.cobrand.problem_response_days(report) == 'emergency' %]
- <p>
- Thank you for contacting Oxfordshire County Council [% report.category %], unfortunately we are currently only available to respond to emergency situations which may have an impact on the health and safety of members of the public, these will be dealt with within a 24 hour period.<br />
- Reported faults will continue to be registered on our management system and these will be tackled in coming months.
- </p>
-[% ELSIF c.cobrand.problem_response_days(report) > 0 %]
- <p>
- Problems in the
- [% report.category %]
- category are generally responded to within
- [% c.cobrand.problem_response_days(report) %]
- working days.
- </p>
-[% END %]
diff --git a/templates/email/oxfordshire/_problem-confirm_extra.txt b/templates/email/oxfordshire/_problem-confirm_extra.txt
deleted file mode 100644
index eb9ccfd12..000000000
--- a/templates/email/oxfordshire/_problem-confirm_extra.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-[% IF c.cobrand.problem_response_days(report) == 'emergency' %]
-Thank you for contacting Oxfordshire County Council [% report.category %],
-unfortunately we are currently only available to respond to emergency
-situations which may have an impact on the health and safety of members
-of the public, these will be dealt with within a 24 hour period.
-
-Reported faults will continue to be registered on our management
-system and these will be tackled in coming months.
-[% ELSIF c.cobrand.problem_response_days(report) > 0 %]
-Problems in the [% report.category %] category are generally responded
-to within [% c.cobrand.problem_response_days(report) %] working days.
-[% END %]
diff --git a/templates/email/peterborough/_council_reference.html b/templates/email/peterborough/_council_reference.html
new file mode 100644
index 000000000..8a1a9e1ee
--- /dev/null
+++ b/templates/email/peterborough/_council_reference.html
@@ -0,0 +1,3 @@
+<p style="[% p_style %]">The report's reference number is <strong>[% problem.id %]</strong>.
+ Please quote this if you need to contact the council about this report.</p>
+
diff --git a/templates/email/peterborough/_council_reference.txt b/templates/email/peterborough/_council_reference.txt
new file mode 100644
index 000000000..75d7e93d2
--- /dev/null
+++ b/templates/email/peterborough/_council_reference.txt
@@ -0,0 +1,2 @@
+The report's reference number is [% problem.id %]. Please quote this if
+you need to contact the council about this report.
diff --git a/templates/email/peterborough/_council_reference_alert_update.html b/templates/email/peterborough/_council_reference_alert_update.html
new file mode 100644
index 000000000..bc7e0282c
--- /dev/null
+++ b/templates/email/peterborough/_council_reference_alert_update.html
@@ -0,0 +1,2 @@
+<p style="[% p_style %]">The report's reference number is <strong>[% problem.id %]</strong>.
+ Please quote this if you need to contact the council about this report.</p>
diff --git a/templates/email/peterborough/_council_reference_alert_update.txt b/templates/email/peterborough/_council_reference_alert_update.txt
new file mode 100644
index 000000000..75d7e93d2
--- /dev/null
+++ b/templates/email/peterborough/_council_reference_alert_update.txt
@@ -0,0 +1,2 @@
+The report's reference number is [% problem.id %]. Please quote this if
+you need to contact the council about this report.
diff --git a/templates/email/peterborough/_email_color_overrides.html b/templates/email/peterborough/_email_color_overrides.html
new file mode 100644
index 000000000..cc601869e
--- /dev/null
+++ b/templates/email/peterborough/_email_color_overrides.html
@@ -0,0 +1,20 @@
+[%
+
+color_green = '#337b1c'
+color_alt_green = '#328b15'
+color_white = '#fff'
+
+header_background_color = color_white
+header_text_color = color_alt_green
+link_text_color = color_green
+
+secondary_column_background_color = color_white
+
+button_background_color = color_green
+button_text_color = color_white
+
+logo_width = "162" # pixel measurement, but without 'px' suffix
+logo_height = "56" # pixel measurement, but without 'px' suffix
+logo_file = "logo.png"
+
+%]
diff --git a/templates/email/tfl/_council_reference.html b/templates/email/tfl/_council_reference.html
new file mode 100644
index 000000000..7013a1f9f
--- /dev/null
+++ b/templates/email/tfl/_council_reference.html
@@ -0,0 +1,3 @@
+<p style="[% p_style %]">The report's reference number is <strong>FMS[% problem.id %]</strong>.
+ Please quote this if you need to contact Transport for London about this report.</p>
+
diff --git a/templates/email/tfl/_council_reference.txt b/templates/email/tfl/_council_reference.txt
new file mode 100644
index 000000000..be82dc8d6
--- /dev/null
+++ b/templates/email/tfl/_council_reference.txt
@@ -0,0 +1,2 @@
+The report's reference number is FMS[% problem.id %]. Please quote this if
+you need to contact Transport for London about this report.
diff --git a/templates/email/tfl/_council_reference_alert_update.html b/templates/email/tfl/_council_reference_alert_update.html
new file mode 100644
index 000000000..3e7a29dbf
--- /dev/null
+++ b/templates/email/tfl/_council_reference_alert_update.html
@@ -0,0 +1 @@
+[% INCLUDE '_council-reference.html' %] \ No newline at end of file
diff --git a/templates/email/tfl/_council_reference_alert_update.txt b/templates/email/tfl/_council_reference_alert_update.txt
new file mode 100644
index 000000000..2cc57a339
--- /dev/null
+++ b/templates/email/tfl/_council_reference_alert_update.txt
@@ -0,0 +1 @@
+[% INCLUDE '_council-reference.txt' %] \ No newline at end of file
diff --git a/templates/email/tfl/_email_color_overrides.html b/templates/email/tfl/_email_color_overrides.html
new file mode 100644
index 000000000..2b9f798fc
--- /dev/null
+++ b/templates/email/tfl/_email_color_overrides.html
@@ -0,0 +1,24 @@
+[%
+
+color_blue = '#001aa8'
+color_black = '#000000'
+color_white = '#FFFFFF'
+color_tfl_grey = '#414b56'
+color_tfl_pale_blue = '#eff6fd'
+
+body_background_color = color_tfl_pale_blue
+body_text_color = color_tfl_grey
+
+header_background_color = color_blue
+header_text_color = color_white
+
+secondary_column_background_color = color_white
+
+button_background_color = color_blue
+button_text_color = color_white
+
+logo_width = "220" # pixel measurement, but without 'px' suffix
+logo_height = "86" # pixel measurement, but without 'px' suffix
+header_padding = "10px 20px"
+
+%]
diff --git a/templates/email/tfl/_email_setting_overrides.html b/templates/email/tfl/_email_setting_overrides.html
new file mode 100644
index 000000000..00eeed9cc
--- /dev/null
+++ b/templates/email/tfl/_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/tfl/confirm_report_sent.html b/templates/email/tfl/confirm_report_sent.html
new file mode 100644
index 000000000..b698520dd
--- /dev/null
+++ b/templates/email/tfl/confirm_report_sent.html
@@ -0,0 +1 @@
+[% INCLUDE 'other-reported.html' %]
diff --git a/templates/email/tfl/confirm_report_sent.txt b/templates/email/tfl/confirm_report_sent.txt
new file mode 100644
index 000000000..3d566f89b
--- /dev/null
+++ b/templates/email/tfl/confirm_report_sent.txt
@@ -0,0 +1 @@
+[% INCLUDE 'other-reported.txt' %]
diff --git a/templates/email/tfl/other-reported.html b/templates/email/tfl/other-reported.html
new file mode 100644
index 000000000..89e76b303
--- /dev/null
+++ b/templates/email/tfl/other-reported.html
@@ -0,0 +1,33 @@
+[%
+
+email_summary = "Thanks for logging your report";
+email_columns = 2;
+
+PROCESS '_email_settings.html';
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% primary_column_style %]" id="primary_column">
+ [% start_padded_box | safe %]
+ <h1 style="[% h1_style %]">Your report has been&nbsp;logged</h1>
+ <p style="[% p_style %]">Your report to Transport for London has been logged on [% site_name %].</p>
+
+[% IF report.non_public %]
+<p style="[% p_style %]">It has been marked as private and will not be visible
+to the general public; you may view it using the link below, or if you sign in
+using the email address associated with the report.</p>
+[% END %]
+
+[% TRY %][% INCLUDE '_council_reference.html' problem=report %][% CATCH file %][% END %]
+ <p style="margin: 20px auto; text-align: center">
+ <a style="[% button_style %]" href="[% cobrand.base_url_for_report(report) %][% report.view_url %]">View my report</a>
+ </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 %]">[% report.detail | html %]</p>
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/tfl/other-reported.txt b/templates/email/tfl/other-reported.txt
new file mode 100644
index 000000000..e70c4eb1c
--- /dev/null
+++ b/templates/email/tfl/other-reported.txt
@@ -0,0 +1,31 @@
+Subject: Your report has been logged: [% report.title %]
+
+Hello [% report.name %],
+
+Your report to Transport for London has been logged on [% site_name %].
+
+[% IF report.non_public ~%]
+It has been marked as private and will not be visible to the general public;
+you may view it using the link below, or if you sign in using the email address
+associated with the report.
+
+[% END ~%]
+
+[% TRY %][% INCLUDE '_council_reference.txt' problem=report %][% CATCH file %][% END %]
+
+It is available to view at:
+
+[% cobrand.base_url_for_report(report) %][% report.view_url %]
+
+Your report has the title:
+
+[% report.title %]
+
+And details:
+
+[% report.detail %]
+
+[% signature %]
+
+This email was sent automatically, from an unmonitored email account - so
+please do not reply to it.
diff --git a/templates/email/tfl/problem-confirm.html b/templates/email/tfl/problem-confirm.html
new file mode 100644
index 000000000..7d083d82e
--- /dev/null
+++ b/templates/email/tfl/problem-confirm.html
@@ -0,0 +1,28 @@
+[%
+
+email_summary = "You need to confirm your " _ site_name _ " report before it can be sent to Transport for London.";
+email_columns = 2;
+
+PROCESS '_email_settings.html';
+
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% primary_column_style %]" id="primary_column">
+ [% start_padded_box | safe %]
+ <h1 style="[% h1_style %]">Please confirm your&nbsp;report</h1>
+ <p style="[% p_style %]">Please click on the link below to confirm that you want to send your report to Transport for London.</p>
+ [% UNLESS report.non_public %]<p style="[% p_style %]">Your report will also appear on the [% site_name %] website.</p>[% END %]
+ <p style="margin: 20px auto; text-align: center">
+ <a style="[% button_style %]" href="[% token_url %]">Yes, send my report</a>
+ </p>
+ <p style="[% p_style %]">If you no longer wish to send this report, please take no further action.</p>
+ [% end_padded_box | safe %]
+</th>
+[% WRAPPER '_email_sidebar.html' object = report, url = token_url %]
+ <h2 style="[% h2_style %]">[% report.title | html %]</h2>
+ <p style="[% secondary_p_style %]">[% report.detail | html %]</p>
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/tfl/problem-confirm.txt b/templates/email/tfl/problem-confirm.txt
new file mode 100644
index 000000000..212fa3f11
--- /dev/null
+++ b/templates/email/tfl/problem-confirm.txt
@@ -0,0 +1,31 @@
+Subject: Confirm your report on [% site_name %]
+
+Hello [% report.name %],
+
+Please click on the link below to confirm that you want to send your report to
+Transport for London.[% UNLESS report.non_public %] Note that your report will also
+appear on the [% site_name %] website.[% END %]
+
+[% token_url %]
+
+If your email program does not let you click on this link, copy and paste it
+into your web browser and press return.
+
+Your problem had the title:
+
+[% report.title %]
+
+And details:
+
+[% report.detail %]
+
+If you no longer wish to send this report, please take no further action.
+
+Thank you for submitting a report through [% site_name %].
+
+
+
+[% signature %]
+
+This email was sent automatically, from an unmonitored email account - so
+please do not reply to it.
diff --git a/templates/email/tfl/reply-autoresponse b/templates/email/tfl/reply-autoresponse
new file mode 100644
index 000000000..d2c34627e
--- /dev/null
+++ b/templates/email/tfl/reply-autoresponse
@@ -0,0 +1,35 @@
+Subject: Automatic reply to your message to TfL Street Care
+
+Hello,
+
+You are receiving this message because you have tried to reply to an automated
+email from TfL Street Care.
+
+This is an automatic response to your email.
+
+If you are trying to contact us about a report you have made, please
+search your email for the latest communication (or auto-reply), and respond
+to that.
+
+Alternatively, if you would like your comment to be published on the Street Care
+website, you can post it as an update to the original report if it has not been
+closed. In the event that the report has been closed on Street Care, you may
+wish to open a new report if the issue is ongoing.
+
+If you are trying to reply to an update someone has left on your report, please
+visit your report page on TfL Street Care and enter your response in the 'update'
+box.
+
+If you are trying to confirm a report or an email alert, please click the link
+in the email that we sent you, or, if you cannot click the link, copy and paste
+it into the address bar of your web browser.
+
+If you're trying to unsubscribe from an email alert, there is an unsubscribe
+link at the bottom of the email.
+
+All the best,
+
+The TfL Street Care team
+
+This email was sent automatically, from an unmonitored email account - so
+please do not reply to it.
diff --git a/templates/email/tfl/signature.txt b/templates/email/tfl/signature.txt
new file mode 100644
index 000000000..ef8d7d667
--- /dev/null
+++ b/templates/email/tfl/signature.txt
@@ -0,0 +1 @@
+Street Care
diff --git a/templates/email/tfl/site-name.txt b/templates/email/tfl/site-name.txt
new file mode 100644
index 000000000..ef8d7d667
--- /dev/null
+++ b/templates/email/tfl/site-name.txt
@@ -0,0 +1 @@
+Street Care
diff --git a/templates/email/tfl/submit.html b/templates/email/tfl/submit.html
new file mode 100644
index 000000000..a1bd8f134
--- /dev/null
+++ b/templates/email/tfl/submit.html
@@ -0,0 +1,76 @@
+[%
+
+PROCESS '_email_settings.html';
+
+email_summary = "A new problem in your area has been reported by a " _ site_name _ " user.";
+email_footer = "";
+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 %]">[% multiple %]A user of [% site_name %] has submitted the following report
+of a local problem that they believe might require your attention.</p>
+
+ [% IF report.get_extra_field_value('safety_critical') == 'yes' %]<p>This report is marked as safety critical.</p>[% END %]
+
+ <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>Report reference:</strong> FMS[% report.id %]</p>
+ <p style="[% secondary_p_style %]"><strong>Category:</strong> [% report.category | html %]</p>
+ [% IF report.get_extra_field_value('stop_code') %]
+ <p style="[% secondary_p_style %]"><strong>Stop number:</strong> [% report.get_extra_field_value('stop_code') | html %]</p>
+ [% END %]
+ [% IF report.get_extra_field_value('site') %]
+ <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
+ [%~ " (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>
+[% END %]
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/tfl/submit.txt b/templates/email/tfl/submit.txt
new file mode 100644
index 000000000..b6af867ff
--- /dev/null
+++ b/templates/email/tfl/submit.txt
@@ -0,0 +1,49 @@
+Subject: [% IF report.get_extra_field_value('safety_critical') == 'yes' %]Dangerous [% report.category %][% ELSE %]Problem[% END %] Report: [% report.title %]
+
+[% multiple %]A user of
+[% site_name %] has submitted the following report
+of a local problem that they believe might require your attention.
+
+[% IF report.get_extra_field_value('safety_critical') == 'yes' %]This report is marked as safety critical.[% END %]
+
+[% 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' %]
+
+Report reference: FMS[% report.id %]
+
+Category: [% report.category %]
+
+[% IF report.get_extra_field_value('stop_code') %]Stop number: [% report.get_extra_field_value('stop_code') %]
+[% END %]
+[% IF report.get_extra_field_value('site') %]Signal site number: [% report.get_extra_field_value('site') %]
+[% END %]
+Subject: [% report.title %]
+
+Details: [% report.detail %]
+
+[% additional_information %]
+
+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.
+
diff --git a/templates/email/tfl/update-confirm-donotsend.txt b/templates/email/tfl/update-confirm-donotsend.txt
new file mode 100644
index 000000000..87ec67328
--- /dev/null
+++ b/templates/email/tfl/update-confirm-donotsend.txt
@@ -0,0 +1,2 @@
+This update will be sent to Transport for London and will
+also be displayed on the [% site_name %] website.
diff --git a/templates/email/warwickshire/_email_color_overrides.html b/templates/email/warwickshire/_email_color_overrides.html
index 6528f0a5c..81369720f 100644
--- a/templates/email/warwickshire/_email_color_overrides.html
+++ b/templates/email/warwickshire/_email_color_overrides.html
@@ -1,7 +1,9 @@
[%
-color_warwickshire_green = '#006d3c'
-color_warwickshire_pale_green = '#F9FFF8'
+color_warwickshire_green = '#096f48'
+color_warwickshire_pale_green = '#e6ecea'
+
+body_background_color = '#f6f6f6'
header_background_color = color_warwickshire_green
header_text_color = color_white
diff --git a/templates/email/westminster/_email_color_overrides.html b/templates/email/westminster/_email_color_overrides.html
new file mode 100644
index 000000000..297d70f9e
--- /dev/null
+++ b/templates/email/westminster/_email_color_overrides.html
@@ -0,0 +1,21 @@
+[%
+
+westminster_black = '#0d0e16'
+westminster_blue = '#3065bd'
+westminster_navy = '#0b2265'
+westminster_yellow = '#fecb00'
+westminster_grey = '#f7f5f6'
+
+body_background_color = westminster_grey
+header_background_color = '#fff'
+secondary_column_background_color = '#fff'
+
+link_text_color = westminster_blue
+
+header_padding = "20px" # a full CSS padding property (eg: top/right/bottom/left)
+
+logo_width = "139" # pixel measurement, but without 'px' suffix
+logo_height = "35" # pixel measurement, but without 'px' suffix
+logo_file = "wcc_logo.png"
+
+%]
diff --git a/templates/email/westminster/_email_setting_overrides.html b/templates/email/westminster/_email_setting_overrides.html
new file mode 100644
index 000000000..9dce49a83
--- /dev/null
+++ b/templates/email/westminster/_email_setting_overrides.html
@@ -0,0 +1,5 @@
+[%
+
+header_style = "padding: $header_padding; background: $header_background_color; color: $header_text_color; border-bottom: 3px solid $westminster_yellow;"
+
+%] \ No newline at end of file
diff --git a/templates/email/westminster/archive.html b/templates/email/westminster/archive.html
new file mode 100644
index 000000000..0ecd5889c
--- /dev/null
+++ b/templates/email/westminster/archive.html
@@ -0,0 +1,55 @@
+[%
+
+email_summary = "Your reports on " _ site_name;
+
+PROCESS '_email_settings.html';
+
+INCLUDE '_email_top.html';
+
+%]
+
+<th style="[% td_style %][% only_column_style %]">
+ <h1 style="[% h1_style %]">Your reports on [% site_name %]</h1>
+ <p style="[% p_style %]">
+ Hello [% user.name %],
+ </p>
+ <p style="[% p_style %]">
+ FixMyStreet is being updated in Westminster to
+ improve how problems get reported.
+ </p>
+ <p style="[% p_style %]">
+ As part of this process we are closing all reports
+ made before the update.
+ </p>
+ <p style="[% p_style %]">
+ We noticed that you have [% report_count %] old [% nget('report', 'reports', report_count) %] on the system,
+ which we've listed below.
+ </p>
+ <p style="[% p_style %]">
+ All of your reports will have been received and reviewed by Westminster, so if
+ your report is no longer an issue, you don't need to do anything.
+ </p>
+ <p style="[% p_style %]">
+ If you believe that the issue has not been resolved you can <a href="https://report.westminster.gov.uk/">report it again here.</a>
+ </p>
+
+ [% FOR report IN reports %]
+ <div style="[% list_item_style %]">
+ [% IF report.photo %]
+ <a href="[% cobrand.base_url_for_report( report ) %]/report/[% report.id %]">
+ <img style="[% list_item_photo_style %]" src="[% inline_image(report.get_first_image_fp) %]" alt="">
+ </a>
+ [% END %]
+ <h2 style="[% list_item_h2_style %]"><a href="[% cobrand.base_url_for_report( report ) %]/report/[% report.id %]">
+ [%~ report.title | html ~%]
+ </a></h2>
+ <p style="[% list_item_p_style %]">[% report.detail | html %]</p>
+ <p style="[% list_item_date_style %]">
+ Reported [% report.time_ago %] ago.
+ </p>
+ </div>
+ [% END %]
+
+</th>
+
+[% INCLUDE '_email_bottom.html' %]
diff --git a/templates/email/westminster/archive.txt b/templates/email/westminster/archive.txt
new file mode 100644
index 000000000..657646d9c
--- /dev/null
+++ b/templates/email/westminster/archive.txt
@@ -0,0 +1,27 @@
+Subject: Your reports on [% site_name %]
+
+Hello [% user.name %],
+
+FixMyStreet is being updated in Westminster to improve how problems get reported.
+
+As part of this process we are closing all reports made before the update.
+
+We noticed that you have [% report_count %] old [% nget('report', 'reports', report_count) %] on the system, which we've listed below.
+
+All of your reports will have been received and reviewed by Westminster, so if your report is no longer an issue, you don't need to do anything.
+
+If you believe that the issue has not been resolved you can report it again here: https://report.westminster.gov.uk/
+
+[% FOR report IN reports %]
+
+[% report.title %]
+
+Reported [% report.time_ago %] ago.
+
+View report: [% cobrand.base_url_for_report( report ) %]/report/[% report.id %]
+
+----
+
+[% END %]
+
+The FixMyStreet team and Westminster Council
diff --git a/templates/email/zurich/problem-confirm.txt b/templates/email/zurich/problem-confirm.txt
index 7a76332bd..f7216ea9c 100644
--- a/templates/email/zurich/problem-confirm.txt
+++ b/templates/email/zurich/problem-confirm.txt
@@ -6,7 +6,9 @@ Besten Dank für Ihre Meldung auf <<Züri wie neu>>. Klicken Sie bitte auf diese
[% token_url %]
-Wir werden Ihr Anliegen innerhalb der nächsten sechs Arbeitstage beantworten.
+Wir bitten Sie um Verständnis, dass Meldungen und Schäden während der
+Coronakrise weniger schnell als gewohnt beantwortet respektive repariert werden
+können.
Achtung: Notfälle müssen der Polizei gemeldet werden via Telefon 117.
diff --git a/templates/web/base/admin/bodies/_category_field.html b/templates/web/base/admin/bodies/_category_field.html
new file mode 100644
index 000000000..8c5a1c352
--- /dev/null
+++ b/templates/web/base/admin/bodies/_category_field.html
@@ -0,0 +1,17 @@
+<div class="admin-hint">
+ <p>
+ [% loc('Choose a <strong>category</strong> name that makes sense to the public (e.g., "Pothole", "Street lighting") but is helpful
+ to the body too. These will appear in the drop-down menu on the report-a-problem page.') %]
+ <br>
+ [% loc("If two or more bodies serve the same location, FixMyStreet combines identical categories into a single entry in
+ the menu. Make sure you use the same category name in the bodies if you want this to happen.") %]
+ </p>
+</div>
+
+<p>
+ <strong>[% loc('Category') %] </strong><input type="text" class="form-control" name="category" size="30" value="[% contact.category | html %]" required>
+</p>
+
+[% IF contact.in_storage %]
+ <input type="hidden" name="current_category" value="[% current_contact.category | html %]" >
+[% END %]
diff --git a/templates/web/base/admin/bodies/body.html b/templates/web/base/admin/bodies/body.html
index 8f298676e..0db50e97b 100644
--- a/templates/web/base/admin/bodies/body.html
+++ b/templates/web/base/admin/bodies/body.html
@@ -70,15 +70,16 @@
<table cellspacing="0" cellpadding="2" border="1" id="admin_contacts">
<tr>
- <th>[% loc('Category') %]</th>
- <th>[% loc('State') %]</th>
- <th>[% loc('Last editor') %]</th>
- <th>[% loc('Note') %]</th>
+ <th scope="col">[% loc('Category') %]</th>
+ <th scope="col">[% loc('State') %]</th>
+ <th scope="col">[% loc('Last editor') %]</th>
+ <th scope="col">[% loc('Note') %]</th>
[% IF any_not_confirmed %]
- <th>[% loc('Confirm') %]</th>
+ <th scope="col">[% loc('Confirm') %]</th>
[% END %]
</tr>
- [% WHILE ( cat = contacts.next ) %]
+
+ [% BLOCK category_row %]
<tr [% IF cat.state == 'deleted' %]class="is-deleted"[% END %]>
<td class="contact-category"><a href="[% c.uri_for_action( '/admin/bodies/edit', [ body_id ], cat.category ) %]">[% cat.category_display | html %]</a>
<br>[% cat.email | html %]</td>
@@ -102,6 +103,24 @@
[% END %]
</tr>
[% END %]
+
+ [%~ IF category_groups.size ~%]
+ [%~ FOREACH group IN category_groups ~%]
+ [% IF group.name %]
+ <tr>
+ <th class="group" colspan="[% any_not_confirmed ? 5 : 4 %]" scope="colgroup">[% group.name %]</th>
+ </tr>
+ [% END %]
+ [%~ FOREACH cat IN group.categories ~%]
+ [% INCLUDE category_row %]
+ [%~ END ~%]
+ [%~ END =%]
+ [%~ ELSE ~%]
+ [%~ FOREACH cat IN contacts ~%]
+ [% INCLUDE category_row %]
+ [%~ END =%]
+ [%~ END ~%]
+
</table>
[% IF any_not_confirmed %]
@@ -129,7 +148,7 @@
[% IF errors %]
<div class="fms-admin-warning">
- [% errors.values.join('<br>') %]
+ [% FOR error IN errors.values %][% error %][% IF NOT loop.last %]<br>[% END %][% END %]
</div>
[% INCLUDE 'admin/bodies/contact-form.html' translations=contact_translations %]
[% ELSE %]
diff --git a/templates/web/base/admin/bodies/contact-form.html b/templates/web/base/admin/bodies/contact-form.html
index c55c5c036..35fab4541 100644
--- a/templates/web/base/admin/bodies/contact-form.html
+++ b/templates/web/base/admin/bodies/contact-form.html
@@ -1,102 +1,74 @@
<form method="post" action="[% c.uri_for_action('admin/bodies/edit', [ body_id ] ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8" id="category_edit">
- [% IF contact.in_storage %]
- <p>
- <h1>[% contact.category_display | html %]</h1>
- <input type="hidden" name="category" value="[% contact.category | html %]" >
- </p>
- [% ELSE %]
- <div class="admin-hint">
- <p>
- [% loc('Choose a <strong>category</strong> name that makes sense to the public (e.g., "Pothole", "Street lighting") but is helpful
- to the body too. These will appear in the drop-down menu on the report-a-problem page.') %]
- <br>
- [% loc("If two or more bodies serve the same location, FixMyStreet combines identical categories into a single entry in
- the menu. Make sure you use the same category name in the bodies if you want this to happen.") %]
- </p>
- </div>
- <p>
- <strong>[% loc('Category') %] </strong><input type="text" class="form-control" name="category" size="30" value="[% contact.category | html %]" required>
- </p>
- [% END %]
+ [% PROCESS 'admin/bodies/_category_field.html' %]
[% INCLUDE 'admin/bodies/_translations.html' %]
- <div class="admin-hint">
- <p>
- [% loc("The <strong>email address</strong> is the destination to which reports about this category will be sent.
- Other categories for this body may have the same email address.") %]
+ <label for="destination">[% loc('Destination') %]</label>
+ <p class="form-hint" id="destination-hint">
+ [% IF body.can_be_devolved %]
+ [% loc('An email address or service ID (Open311 or similar).') %]
+ [% ELSIF body.send_method == 'Open311' %]
+ [% loc('A service ID (Open311 or similar).') %]
+ [% ELSIF body.send_method.match('Email') OR NOT body.send_method %]
+ [% loc('An email address.') %]
+ [% ELSE %]
+ [% loc('An email address or service ID (Open311 or similar).') %]
+ [% END %]
</p>
- [% IF (body.send_method AND body.send_method.match('Email')) OR body.can_be_devolved %]
- <p>
- [% loc("If you're using <strong>a send method that is not email</strong>, enter the service ID (Open311) or equivalent identifier here.") %]
- </p>
- [% END %]
- </div>
+ <input type="text" class="form-control" id="destination" aria-describedby="destination-hint" name="email" size="30" value="[% contact.email | html %]" required>
- <p>
- <strong>[% loc('Email address') %] </strong><input type="text" class="form-control" name="email" size="30" value="[% contact.email | html %]" required>
- </p>
+ <fieldset>
+ <legend>[% loc('State') %]</legend>
+ <div class="form-check form-check--inline">
+ <input type="radio" name="state" id="state-unconfirmed" aria-describedby="state-unconfirmed-hint" value="unconfirmed"[% ' checked' IF contact.state == 'unconfirmed' %]>
+ <label for="state-unconfirmed">[% loc('Unconfirmed') %]</label>
+ <p class="form-hint" id="state-unconfirmed-hint">[% loc('You are not sure of the origin or validity of the contact.') %]</p>
+ </div>
+ <div class="form-check form-check--inline">
+ <input type="radio" name="state" id="state-confirmed" aria-describedby="state-confirmed-hint" value="confirmed"[% ' checked' IF contact.state == 'confirmed' || contact.state == "" %]>
+ <label for="state-confirmed">[% loc('Confirmed') %]</label>
+ <p class="form-hint" id="state-confirmed-hint">[% loc('The contact has been confirmed as correct.') %]</p>
+ </div>
+ <div class="form-check form-check--inline">
+ <input type="radio" name="state" id="state-inactive" aria-describedby="state-inactive-hint" value="inactive"[% ' checked' IF contact.state == 'inactive' %]>
+ <label for="state-inactive">[% loc('Inactive') %]</label>
+ <p class="form-hint" id="state-inactive-hint">[% loc('Prevent new reports from using this category, but keep it available in map filters.') %]</p>
+ </div>
+ <div class="form-check form-check--inline">
+ <input type="radio" name="state" id="state-deleted" aria-describedby="state-deleted-hint" value="deleted"[% ' checked' IF contact.state == 'deleted' %]>
+ <label for="state-deleted">[% loc('Deleted') %]</label>
+ <p class="form-hint" id="state-deleted-hint">[% loc('Prevent new reports from using this category, <em>and</em> also remove it from map filters.') %]</p>
+ </div>
+ <div class="form-check form-check--inline">
+ <input type="radio" name="state" id="state-staff" aria-describedby="state-staff-hint" value="staff"[% ' checked' IF contact.state == 'staff' %]>
+ <label for="state-staff">[% loc('Staff only') %]</label>
+ <p class="form-hint" id="state-staff-hint">[% loc('Only staff users will be able to add reports in this category.') %]</p>
+ </div>
+ </fieldset>
- <div class="admin-hint">
- <p>
- [%
-loc("Use <strong>confirmed</strong> to indicate that this contact has been
-confirmed as correct. If you are not sure of the origin or validity of the
-contact, use <strong>unconfirmed</strong>. <strong>inactive</strong> will
-remove the category from use when reporting problems, but keep it available in
-map filters, and <strong>deleted</strong> will remove the category from there
-as well.") %]
+ <p class="form-check">
+ <input type="checkbox" name="non_public" value="1" id="non_public" [% ' checked' IF contact.non_public %]>
+ <label for="non_public">[% loc('Hide reports made in this category') %]</label>
+ <span class='form-hint'>[% loc('Use this for issues that you want to allow users to report, but for which there is no public interest in displaying the report, like requesting an extra rubbish bin at a specific address.') %]</span>
</p>
- </div>
- <p>
- <label for="state">[% loc('State') %]</label>
- <select name="state" id="state">
- <option value="unconfirmed"[% ' selected' IF contact.state == 'unconfirmed' %]>[% loc('Unconfirmed') %]
- <option value="confirmed"[% ' selected' IF contact.state == 'confirmed' || contact.state == "" %]>[% loc('Confirmed') %]
- <option value="inactive"[% ' selected' IF contact.state == 'inactive' %]>[% loc('Inactive') %]
- <option value="deleted"[% ' selected' IF contact.state == 'deleted' %]>[% loc('Deleted') %]
- </select>
- </p>
- <div class="admin-hint">
- <p>
- [% loc("Check <strong>private</strong> if reports in this category should <strong>never be displayed on the website</strong>.
- <br>
- Normally, categories are not private.
- <br>
- This is suitable for issues that you want to allow users to report to the body, but for which there is no public
- interest in displaying the report. In the UK, we've used this for services like requesting an extra rubbish bin
- at a specific address.") %]
+ <p class="form-check">
+ <input type="checkbox" name="disable" value="1" id="disable" data-toggle-visibility="#js-disable-form-message-box" [% ' checked' IF contact.disable_form_field %]>
+ <label for="disable">[% loc('Disable form when this category is selected') %]</label>
</p>
- </div>
- <p>
- <input type="checkbox" name="non_public" value="1" id="non_public" [% ' checked' IF contact.non_public %]>
- <label for="non_public" class="inline">[% loc('Private') %]</label>
- </p>
- <div class="admin-hint">
- <p>
- [% loc("Check <strong>inspection required</strong> if reports in this category <strong>must be inspected</strong> before being sent.") %]
+ <p class="form-group form-group--indented [% 'hidden-js' IF NOT contact.disable_form_field %]" id="js-disable-form-message-box">
+ <label for="disabled-message">[% loc('Message to show when form is disabled (HTML permitted)') %]</label>
+ <textarea id="disabled-message" name="disable_message" class="form-control">[% contact.disable_form_field.description %]</textarea>
</p>
- </div>
- <p>
- <input type="checkbox" name="inspection_required" value="1" id="inspection_required" [% 'checked' IF contact.get_extra_metadata('inspection_required') %]>
- <label for="inspection_required" class="inline">[% loc('Inspection required') %]</label>
- </p>
- <div class="admin-hint [% 'hidden' UNLESS contact.get_extra_metadata('inspection_required') %]">
- <p>
- [% loc("Reports will automatically be sent without needing to be inspected if the user's <strong>reputation</strong> is at or above this value. Set to <strong>0</strong> if all reports must be inspected regardless.") %]
- </p>
- </div>
- <p [% 'class=hidden' UNLESS contact.get_extra_metadata('inspection_required') %]>
- <label>
- [% loc('Reputation threshold') %]
- <input type="text" class="form-control" name="reputation_threshold" id="reputation_threshold"
- value="[% contact.get_extra_metadata('reputation_threshold') | html %]" size="30">
- </label>
- </p>
+ [% IF body.send_method == '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 body.can_be_devolved %]
<div class="admin-hint">
@@ -121,34 +93,37 @@ as well.") %]
[% END %]
[% IF c.cobrand.enable_category_groups %]
- <div class="admin-hint">
- <p>
- [% loc(
- "The <strong>group</strong> is used for the top-level category field when
- subcategory grouping is enabled."
- ) %]
- </p>
- </div>
<p>
<label>
- [% loc('Group') %]
- <input class="form-control" type="text" name="group" value="[% contact.extra.group | html %]" size="30">
+ [% loc('Parent categories') %]
+ [% IF contact.extra.group %]
+ [% FOR group IN contact.extra.group %]
+ <input class="form-control" type="text" name="group" value="[% group | html %]" size="30">
+ [% END %]
+ [% ELSE %]
+ <input class="form-control" type="text" name="group" value="" size="30">
+ [% END %]
+ <input class="hidden-js js-group-item-template form-control" type="text" name="group" value="" size="30">
+ <p class="hidden-nojs">
+ <button type="button" class="btn btn--small js-group-item-add">[% loc('Add another parent category') %]</button>
+ </p>
</label>
</p>
[% END %]
+ <h2>[% loc('Extra data:') %] </h2>
+ <dl>
+ [% FOR pair IN contact.get_extra_metadata %]
+ <dt>[% pair.key %]</dt> <dd>[% pair.value OR '<em>-</em>' %]</dd>
+ [% END %]
+ </dl>
+ [% INCLUDE 'admin/extra-metadata-form.html' metas=(contact.get_metadata_for_editing OR []) %]
- <div class="admin-hint">
- <p>
- [% loc("Use this field to record details that are only displayed in the admin. Input is not shown publicly, and is not sent to the body.") %]
+ <p class="form-group" style="margin-top: 2em">
+ <label for="note">[% loc('Summarise your changes') %]</label>
+ <span class="form-hint" id="note-hint">[% loc("If you’ve made changes, leave a note explaining what, for other admins to see.") %]</span>
+ <input class="form-control" type="text" id="note" name="note" size="30" aria-describedby="note-hint"[% ' required' UNLESS c.config.STAGING_SITE %]>
</p>
- </div>
- <p>
- <label>
- [% loc('Summarise your changes') %]
- <input class="form-control" type="text" name="note" size="30" required>
- </label>
- </p>
<p>
<input type="hidden" name="posted" value="new" >
@@ -156,11 +131,5 @@ as well.") %]
<input type="submit" class="btn" name="Create category" value="[% contact.in_storage ? loc('Save changes') : loc('Create category') %]" >
</p>
- <h2>[% loc('Extra data:') %] </h2>
- <dl>
- [% FOR pair IN contact.get_extra_metadata %]
- <dt>[% pair.key %]</dt> <dd>[% pair.value %]</dd>
- [% END %]
- </dl>
- [% INCLUDE 'admin/extra-metadata-form.html' metas=(contact.get_metadata_for_editing OR []) %]
+
</form>
diff --git a/templates/web/base/admin/bodies/open311-form-fields.html b/templates/web/base/admin/bodies/open311-form-fields.html
index bdd4ad935..dbb0f84e2 100644
--- a/templates/web/base/admin/bodies/open311-form-fields.html
+++ b/templates/web/base/admin/bodies/open311-form-fields.html
@@ -90,7 +90,7 @@
<label for"comment_user_id">[% loc('User ID to attribute fetched comments to') %]</label>
<input type="text" class="form-control" name="comment_user_id" value="[% object.comment_user_id %]">
[% IF object.comment_user_id %]
- <a href="[% c.uri_for_action('admin/users/edit', object.comment_user_id) %]">[% loc('edit user') %]</a>
+ <a href="[% c.uri_for_action('admin/users/edit', [ object.comment_user_id ]) %]">[% loc('edit user') %]</a>
[% END %]
</p>
@@ -161,7 +161,7 @@
</p>
</div>
<p>
- <input type="checkbox" id="fetch_all_problems" name="fetch_all_problems"[% ' checked' IF object.get_extra_metadata('fetch_all_problems') %]>
+ <input type="checkbox" id="fetch_all_problems" name="extra[fetch_all_problems]"[% ' checked' IF object.get_extra_metadata('fetch_all_problems') %]>
<label for="fetch_all_problems" class="inline">[% loc('Always fetch all problems') %]</label>
</p>
</div>
diff --git a/templates/web/base/admin/category-checkboxes.html b/templates/web/base/admin/category-checkboxes.html
index eacd1a398..cf9530f22 100644
--- a/templates/web/base/admin/category-checkboxes.html
+++ b/templates/web/base/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:') %]
@@ -18,8 +10,31 @@
<label class="inline" title="[% contact.email | html %]">
<input type="checkbox" name="contacts[[% contact.id %]]" [% 'checked' IF contact.active %]/>
[% contact.category %]
+ [% IF contact.group.size > 1 %]<small>([% contact.group.join('; ') | html %])</small>[% END %]
</label>
</li>
[% END %]
</ul>
+[% END %]
+<fieldset>
+ <legend>
+ [% IF hint %]
+ <div class="admin-hint">
+ <p>[% hint %]</p>
+ </div>
+ [% END %]
+ [% loc('Categories:') %]
+ </legend>
+
+ [% IF category_groups %]
+ [% FOR group IN category_groups %]
+ <h3>[% ( group.name OR loc('No Group') ) | html %]</h3>
+ [% IF group.name == loc("Multiple Groups") %]
+ <small>[% loc('These categories appear in more than one group:') %]</small>
+ [% END %]
+ [% INCLUDE checkboxes contacts=group.categories %]
+ [% END %]
+ [% ELSE %]
+ [% INCLUDE checkboxes contacts=contacts %]
+ [% END %]
</fieldset>
diff --git a/templates/web/base/admin/config_page.html b/templates/web/base/admin/config_page.html
index 8e8d562ff..a534292be 100644
--- a/templates/web/base/admin/config_page.html
+++ b/templates/web/base/admin/config_page.html
@@ -51,7 +51,12 @@ running version <strong>[% git_version || 'unknown' %]</strong>.
[% INCLUDE just_value value="ALLOWED_COBRANDS" conf = allowed_conf %]
<tr>
<td>Web templates</td>
-<td colspan=2>[% c.cobrand.path_to_web_templates.join('<br>') %]</td>
+<td colspan=2>
+ [% FOR path IN c.cobrand.path_to_web_templates %]
+ [% path %]
+ [% IF NOT loop.last %]<br>[% END %]
+ [% END %]
+</td>
</tr>
[% INCLUDE with_cobrand value="MAP_TYPE" cob=c.cobrand.map_type %]
[% INCLUDE with_cobrand value="EXAMPLE_PLACES"
@@ -117,7 +122,7 @@ running version <strong>[% git_version || 'unknown' %]</strong>.
[% INCLUDE just_value value="EMAIL_DOMAIN" %]
[% INCLUDE with_cobrand value="CONTACT_NAME" cob=c.cobrand.contact_name %]
[% INCLUDE with_cobrand value="CONTACT_EMAIL" cob=c.cobrand.contact_email %]
-[% INCLUDE just_value value="DO_NOT_REPLY_EMAIL" %]
+[% INCLUDE with_cobrand value="DO_NOT_REPLY_EMAIL" cob=c.cobrand.do_not_reply_email %]
[% INCLUDE subsection heading="Development" %]
[% INCLUDE just_value value="STAGING_SITE" %]
diff --git a/templates/web/base/admin/council_contacts.txt b/templates/web/base/admin/council_contacts.txt
index f11615789..2622f3fc2 100644
--- a/templates/web/base/admin/council_contacts.txt
+++ b/templates/web/base/admin/council_contacts.txt
@@ -1,4 +1,4 @@
-[% WHILE ( contact = contacts.next ) -%]
+[% FOR contact IN contacts -%]
[%- NEXT IF contact.state != 'confirmed' %]
[% contact.category_display %] [% contact.email %]
[%- END %]
diff --git a/templates/web/base/admin/defecttypes/list.html b/templates/web/base/admin/defecttypes/list.html
index ffff89eff..5730710d9 100644
--- a/templates/web/base/admin/defecttypes/list.html
+++ b/templates/web/base/admin/defecttypes/list.html
@@ -10,10 +10,9 @@
</tr>
</thead>
<tbody>
- [% PROCESS 'defect_type/format.html' %]
[% FOR d IN defect_types %]
<tr>
- <td> [% defect_type_format(defect_type=d) %] </td>
+ <td> [% d.name | html %] </td>
<td> [% d.description | html %] </td>
<td>
[% UNLESS d.contacts.size %]
diff --git a/templates/web/base/admin/exordefects/index.html b/templates/web/base/admin/exordefects/index.html
deleted file mode 100644
index 65b2aa486..000000000
--- a/templates/web/base/admin/exordefects/index.html
+++ /dev/null
@@ -1,39 +0,0 @@
-[% INCLUDE 'admin/header.html' title=('Download Exor RDI') -%]
-
-[% IF error_message %]
- <h2>Error</h2>
- <p>[% error_message %]</p>
-[% END %]
-
-<form method="get" action="[% c.uri_for('download') %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
- <div class="filters">
- <p>
- <label for="start_date">[% ('Start Date:') %]</label><input type="date" class="form-control"
- name="start_date" id="start_date"
- value="[% start_date ? start_date.strftime( '%Y-%m-%d') : '' | html %]" />
- </p>
-
- <p>
- <label for="end_date">[% ('End Date:') %]</label><input type="date" class="form-control"
- name="end_date" id="end_date" size="5"
- value="[% end_date ? end_date.strftime( '%Y-%m-%d') : '' | html %]" />
- </p>
-
- <p>
- <label for="user_id">[% ('Inspector:') %]</label>
- <select class="form-control" id='user_id' name='user_id'>
- <option value=''>[% ('All inspectors') %]</option>
- [% FOR inspector IN inspectors %]
- <option value="[% inspector.id %]" [% 'selected' IF user_id == inspector.id %]>[% inspector.name %] ([% inspector.get_extra_metadata('initials') %])</option>
- [% END %]
- </select>
- </p>
- </div>
-
- <p>
- <input type="submit" class="btn" size="30" value="Download RDI file" />
- </p>
-</form>
-
-
-[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/base/admin/extra-metadata-form.html b/templates/web/base/admin/extra-metadata-form.html
index 4fc5d8e3f..9b8e4909f 100644
--- a/templates/web/base/admin/extra-metadata-form.html
+++ b/templates/web/base/admin/extra-metadata-form.html
@@ -1,91 +1,11 @@
-<ul class="js-metadata-items">
- [% FOR meta IN metas.merge([{}]) %]
- <li class="js-metadata-item [% IF loop.last %]hidden-js js-metadata-item-template[% END %]" data-index="[% loop.index %]">
- <button class="btn btn--small js-metadata-item-remove hidden-nojs">[% loc('Remove field') %]</button>
+<div class="extra-metadata-form js-metadata-items">
+ [% FOR meta IN metas %]
+ [% INCLUDE 'admin/extra-metadata-item.html' i=loop.index collapsed=1 %]
+ [% END %]
+</div>
- <div class="admin-hint"><p>[% loc('The ordering of this field on the report page. Fields are shown in ascending order according to this value.') %]</p></div>
- <label>
- [% loc('Order') %]
- <input name="metadata[[% loop.index %]].order" data-field-name="order" type=text value="[% meta.order OR 0 | html %]">
- </label>
+<div class="hidden-js" id="js-template-extra-metadata-item">
+ [% INCLUDE 'admin/extra-metadata-item.html' meta={} i=9999 collapsed=0 %]
+</div>
- <div class="admin-hint"><p>[% loc('Whether the field is displayed to the user, included as a hidden field and automatically populated, or set by the server upon Open311 submission. This field is usually set automatically.') %]</p></div>
- <label>
- [% loc('Automated') %]
- <select name="metadata[[% loop.index %]].automated" data-field-name="automated">
- <option value="" [% meta.automated == '' ? 'selected' : '' %]></option>
- <option value="server_set" [% meta.automated == 'server_set' ? 'selected' : '' %]>[% loc('Server Set') %]</option>
- <option value="hidden_field" [% meta.automated == 'hidden_field' ? 'selected' : '' %]>[% loc('Hidden Field') %]</option>
- </select>
- </label>
-
- <div class="admin-hint"><p>[% loc('The code used to store this field value in the database. e.g. <code>address</code> would be available as <code>problem.extra.address</code> in the templates.') %]</p></div>
- <label>
- [% loc('Code') %]
- <input name="metadata[[% loop.index %]].code" data-field-name="code" type=text value="[% meta.code | html %]">
- </label>
-
- <div class="admin-hint"><p>[% loc('Whether the user is required to provide a value for this field.') %]</p></div>
- <label>
- [% loc('Required') %]
- <input name="metadata[[% loop.index %]].required" data-field-name="required" type=checkbox [% meta.required == 'true' ? 'checked' : '' %]>
- </label>
-
- <div class="admin-hint"><p>[% loc('If ticked the user won’t see an input field, just the ‘Description’ text.') %]</p></div>
- <label>
- [% loc('Notice') %]
- <input name="metadata[[% loop.index %]].notice" data-field-name="notice" type=checkbox [% meta.variable == 'false' ? 'checked' : '' %]>
- </label>
-
- <div class="admin-hint"><p>[% loc('The field name as shown to the user on the report form.') %]</p></div>
- <label>
- [% loc('Description') %]
- <input name="metadata[[% loop.index %]].description" data-field-name="description" type=text value="[% meta.description | html %]">
- </label>
-
- <div class="admin-hint"><p>[% loc('Can be used to display extra text to the user alongside the field. The default template does not show this (<code>meta.datatype_description</code>), you must add it in <code>category_extras_fields.html</code>') %]</p></div>
- <label>
- [% loc('Hint') %]
- <input name="metadata[[% loop.index %]].datatype_description" data-field-name="datatype_description" type=text value="[% meta.datatype_description | html %]">
- </label>
-
- <div class="admin-hint"><p>[% loc('The type of input field to show to the user. <strong>Text</strong> is a simple text field, <strong>List</strong> is a drop-down selection.') %]</p></div>
- <label>
- [% loc('Type') %]
- <select name="metadata[[% loop.index %]].datatype" data-field-name="datatype" class="js-metadata-item-type">
- <option value="string" [% meta.datatype == 'string' ? 'selected' : '' %]>[% loc('String') %]</option>
- <option value="singlevaluelist" [% meta.datatype == 'singlevaluelist' ? 'selected' : '' %]>[% loc('List') %]</option>
- </select>
- </label>
-
- <div class="js-metadata-options">
- <div class="admin-hint"><p>[% loc('For each option, <strong>Key</strong> is the value which is stored in the database for that option and <strong>Name</strong> is the value displayed to the user.') %]</p></div>
- [% loc('Options') %]<span class="hidden-js"> [% loc('(ignored if type is "String")') %]</span>
- <ul>
- [% outer_loop = loop %]
- [% values = meta.values OR [] %]
- [% FOREACH option IN values.merge([{}]) %]
- [%# the .merge() call is so there's an empty one on the end %]
- <li class="js-metadata-option [% IF loop.last %]hidden-js js-metadata-option-template[% END %]">
- <label>
- [% loc('Key') %]
- <input class="js-metadata-option-key" name="metadata[[% outer_loop.index %]].values[[% loop.index %]].key" type="text" value="[% option.key | html %]">
- </label>
- <label>
- [% loc('Name') %]
- <input class="js-metadata-option-name" name="metadata[[% outer_loop.index %]].values[[% loop.index %]].name" type="text" value="[% option.name | html %]">
- </label>
- <button class="btn btn--small js-metadata-option-remove hidden-nojs">[% loc('Remove') %]</button>
- </li>
- [% END %]
- <li class="hidden-nojs">
- <button class="btn btn--small js-metadata-option-add">[% loc('Add option') %]</button>
- </li>
- </ul>
- </div>
- </li>
- [%- END %]
- <li class="hidden-nojs">
- <button class="btn btn--small js-metadata-item-add">[% loc('Add field') %]</button>
- </li>
-</ul>
+<button type="button" class="btn btn--small js-metadata-item-add hidden-nojs">[% loc('Add field') %]</button>
diff --git a/templates/web/base/admin/extra-metadata-item.html b/templates/web/base/admin/extra-metadata-item.html
new file mode 100644
index 000000000..66cb6f79c
--- /dev/null
+++ b/templates/web/base/admin/extra-metadata-item.html
@@ -0,0 +1,110 @@
+[%
+SET behaviour = '';
+DEFAULT behaviour = 'server' IF meta.automated == 'server_set';
+DEFAULT behaviour = 'hidden' IF meta.automated == 'hidden_field';
+DEFAULT behaviour = 'notice' IF meta.variable == 'false';
+DEFAULT behaviour = 'question';
+~%]
+
+<fieldset class="extra-metadata-item js-metadata-item" data-i="[% i %]">
+ <legend class="visuallyhidden">Extra data field [% i %]</legend>
+
+ <header class="extra-metadata-item__header hidden-nojs">
+ <div class="js-metadata-item-header-grab extra-metadata-item__header__grab" aria-label="Drag to reorder"></div>
+ <button type="button" class="js-metadata-item-header-title extra-metadata-item__header__title" data-default="[% loc('New field') %]" data-toggle-visibility="#metadata-fieldset-[% i %]">
+ [%~ IF meta.code ~%]
+ <strong>[% meta.code | html %]</strong>
+ / [% behaviour %]
+ [% IF meta.description %] / [% meta.description.substr(0, 50) | html %][% END %]
+ [%~ ELSE ~%]
+ <strong>[% loc('New field') %]</strong>
+ [%~ END ~%]
+ </button>
+ <button type="button" class="js-metadata-item-remove extra-metadata-item__header__remove">[% loc('Remove field') %]</button>
+ </header>
+
+ <div class="extra-metadata-item__body [% IF collapsed %]hidden-js[% END %]" id="metadata-fieldset-[% i %]">
+
+ <div class="form-group">
+ <label for="metadata-[% i %]-code">[% loc('Code') %]</label>
+ <span class="form-hint" id="metadata-[% i %]-code-hint">[% loc('The code used to store this field value in the database.') %]</span>
+ <input class="form-control" name="metadata[[% i %]].code" id="metadata-[% i %]-code" aria-describedby="metadata-[% i %]-code-hint" type=text value="[% meta.code | html %]">
+ </div>
+
+ <fieldset>
+ <legend>[% loc('Behaviour') %]</legend>
+ <div class="form-check form-check--inline">
+ <input type="radio" name="metadata[[% i %]].behaviour" id="metadata-[% i %]-behaviour-question" value="question" data-show="#metadata-[% i %]-description-group, #metadata-[% i %]-description-label-question, #metadata-[% i %]-datatype-group, #metadata-[% i %]-required-group, #metadata-[% i %]-protected-group" data-hide="#metadata-[% i %]-description-label-notice, #metadata-[% i %]-disabled-group"[% ' checked' IF behaviour == 'question' %]>
+ <label for="metadata-[% i %]-behaviour-question">[% loc('Extra question shown to user') %]</label>
+ </div>
+ <div class="form-check form-check--inline">
+ <input type="radio" name="metadata[[% i %]].behaviour" id="metadata-[% i %]-behaviour-notice" value="notice" data-show="#metadata-[% i %]-description-group, #metadata-[% i %]-description-label-notice, #metadata-[% i %]-protected-group, #metadata-[% i %]-disabled-group" data-hide="#metadata-[% i %]-description-label-question, #metadata-[% i %]-datatype-group, #metadata-[% i %]-required-group"[% ' checked' IF behaviour == 'notice' %]>
+ <label for="metadata-[% i %]-behaviour-notice">[% loc('Notice shown to user') %]</label>
+ </div>
+ <div class="form-check form-check--inline">
+ <input type="radio" name="metadata[[% i %]].behaviour" id="metadata-[% i %]-behaviour-hidden" value="hidden" data-show="#metadata-[% i %]-protected-group" data-hide="#metadata-[% i %]-description-group, #metadata-[% i %]-datatype-group, #metadata-[% i %]-required-group, #metadata-[% i %]-disabled-group"[% ' checked' IF behaviour == 'hidden' %]>
+ <label for="metadata-[% i %]-behaviour-hidden">[% loc('Hidden data in reporting form') %]</label>
+ </div>
+ <div class="form-check form-check--inline">
+ <input type="radio" name="metadata[[% i %]].behaviour" id="metadata-[% i %]-behaviour-server" value="server" data-show="#metadata-[% i %]-protected-group" data-hide="#metadata-[% i %]-description-group, #metadata-[% i %]-datatype-group, #metadata-[% i %]-required-group, #metadata-[% i %]-disabled-group"[% ' checked' IF behaviour == 'server' %]>
+ <label for="metadata-[% i %]-behaviour-server">[% loc('Internal data set by Open311') %]</label>
+ </div>
+ </fieldset>
+
+ <div class="form-group js-sort-order">
+ <label for="metadata-[% i %]-order">[% loc('Order') %]</label>
+ <input class="form-control" name="metadata[[% i %]].order" id="metadata-[% i %]-order" type=text value="[% meta.order OR 0 | html %]">
+ </div>
+
+ <div class="form-group hidden-js" id="metadata-[% i %]-description-group">
+ <label for="metadata-[% i %]-description" id="metadata-[% i %]-description-label-question" class="[% 'hidden-js' UNLESS behaviour == 'question' %]">[% loc('Question text') %]</label>
+ <label for="metadata-[% i %]-description" id="metadata-[% i %]-description-label-notice" class="[% 'hidden-js' UNLESS behaviour == 'notice' %]">[% loc('Notice text') %]</label>
+ <textarea class="form-control" name="metadata[[% i %]].description" id="metadata-[% i %]-description" rows="2">[% meta.description | html %]</textarea>
+ </div>
+
+ <div class="hidden-js" id="metadata-[% i %]-datatype-group">
+ <div class="form-group">
+ <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="singlevaluelist" data-show="#metadata-[% i %]-options-group" [% 'selected' IF meta.datatype == 'singlevaluelist' %]>[% loc('Drop-down list') %]</option>
+ </select>
+ </div>
+
+ <div class="hidden-js" id="metadata-[% i %]-options-group">
+ <p class="label">[% loc('Options') %]</p>
+ <div class="js-metadata-options">
+ [% SET options = meta.item('values') ? meta.values : [] %]
+ [% FOR option IN options %]
+ [% INCLUDE 'admin/extra-metadata-option.html' option=option i=i j=loop.index %]
+ [% END %]
+ </div>
+
+ <div class="hidden-js"[% IF i==9999 %] id="js-template-extra-metadata-option"[% END %]>
+ [% INCLUDE 'admin/extra-metadata-option.html' option={} i=i j=8888 %]
+ </div>
+
+ <button type="button" class="btn btn--small js-metadata-option-add hidden-nojs">[% loc('Add option') %]</button>
+ </div>
+ </div>
+
+ <p class="form-check hidden-js" id="metadata-[% i %]-required-group">
+ <input type="checkbox" name="metadata[[% i %]].required" value="1" id="metadata-[% i %]-required" aria-describedby="metadata-[% i %]-required-hint" [% ' checked' IF meta.required == 'true' %]>
+ <label for="metadata-[% i %]-required">[% loc('Required') %]</label>
+ <span class="form-hint" id="metadata-[% i %]-required-hint">[% loc('Prevent user from submitting the form until this field is filled in.') %]</span>
+ </p>
+
+ <p class="form-check hidden-js" id="metadata-[% i %]-disabled-group">
+ <input type="checkbox" name="metadata[[% i %]].disable_form" value="1" id="metadata-[% i %]-disable_form" aria-describedby="metadata-[% i %]-disable_form-hint" [% ' checked' IF meta.disable_form == 'true' %]>
+ <label for="metadata-[% i %]-disable_form">[% loc('Disable form when this category is selected') %]</label>
+ <span class="form-hint" id="metadata[[% i %]]-disable_form-hint">[% loc('If ticked, the form will be disabled and this item’s notice text will be displayed.') %]</span>
+ </p>
+
+ <p class="form-check hidden-js" id="metadata-[% i %]-protected-group">
+ <input type="checkbox" name="metadata[[% i %]].protected" value="1" id="metadata-[% i %]-protected" aria-describedby="metadata-[% i %]-protected-hint" [% ' checked' IF meta.protected == 'true' %]>
+ <label for="metadata-[% i %]-protected">[% loc('Protect from Open311 changes') %]</label>
+ <span class="form-hint" id="metadata[[% i %]]-protected-hint">[% loc('If ticked, this extra data will not be edited or deleted by the Open311 population script.') %]</span>
+ </p>
+
+ </div>
+</fieldset>
diff --git a/templates/web/base/admin/extra-metadata-option.html b/templates/web/base/admin/extra-metadata-option.html
new file mode 100644
index 000000000..360dfb208
--- /dev/null
+++ b/templates/web/base/admin/extra-metadata-option.html
@@ -0,0 +1,29 @@
+<fieldset class="extra-metadata-option js-metadata-option">
+ <legend class="visuallyhidden">Option [% j %]</legend>
+
+ <div class="row">
+ <div class="col">
+ <label for="metadata-[% i %]-values-[% j %]-key">[% loc('Internal key') %]</label>
+ <input type="text" class="form-control" name="metadata[[% i %]].values[[% j %]].key" id="metadata-[% i %]-values-[% j %]-key" value="[% option.key | html %]">
+ </div>
+ <div class="col">
+ <label for="metadata-[% i %]-values-[% j %]-name">[% loc('Displayed label') %]</label>
+ <input type="text" class="form-control" name="metadata[[% i %]].values[[% j %]].name" id="metadata-[% i %]-values-[% j %]-name" value="[% option.name | html %]">
+ </div>
+ </div>
+ <div class="row">
+ <div class="col">
+ <p class="form-check">
+ <input type="checkbox" name="metadata[[% i %]].values[[% j %]].disable" value="1" id="metadata-[% i %]-values-[% j %]-disable" data-toggle-visibility="#js-disable-form-message-box-[% i %]-[% j %]" [% ' checked' IF option.disable %]>
+ <label for="metadata-[% i %]-values-[% j %]-disable">[% loc('Disable form when this option is selected') %]</label>
+ </p>
+ <p class="form-group [% 'hidden-js' IF NOT option.disable %]" id="js-disable-form-message-box-[% i %]-[% j %]">
+ <label for="disabled-message-[% i %]-[% j %]">[% loc('Message to show when form is disabled (HTML permitted)') %]</label>
+ <textarea id="disabled-message-[% i %]-[% j %]" name="metadata[[% i %]].values[[% j %]].disable_message" class="form-control">[% option.disable_message OR meta.datatype_description | html %]</textarea>
+ </p>
+ </div>
+ <div class="col">
+ <button type="button" class="js-metadata-option-remove">[% loc('Remove option') %]</button>
+ </div>
+ </div>
+</fieldset>
diff --git a/templates/web/base/admin/index.html b/templates/web/base/admin/index.html
index 8691dbcf8..88c7ff959 100644
--- a/templates/web/base/admin/index.html
+++ b/templates/web/base/admin/index.html
@@ -20,34 +20,40 @@ and to receive notices of updates.
</p>
[% END %]
-<div class="admin-index-search form-txt-submit-box clearfix">
+<div class="admin-index-search clearfix">
<form method="get" action="[% c.uri_for('reports') %]" accept-charset="utf-8">
- <p><label for="search_reports">[% loc('Search Reports') %]</label>
+ <label for="search_reports">[% loc('Search Reports') %]</label>
+ <div class="form-txt-submit-box">
<input type="text" class="form-control" name="search" size="30" id="search_reports" value="[% searched | html %]">
<input type="submit" class="btn" value="[% loc('Go') %]">
+ </div>
</form>
<form method="get" action="[% c.uri_for('users') %]" accept-charset="utf-8">
- <p><label for="search_users">[% loc('Search Users') %]</label>
+ <label for="search_users">[% loc('Search Users') %]</label>
+ <div class="form-txt-submit-box">
<input type="text" class="form-control" name="search" size="30" id="search_users" value="[% searched | html %]">
<input type="submit" class="btn" value="[% loc('Go') %]">
+ </div>
</form>
[% IF c.user.is_superuser %]
- <form method="get" action="[% c.uri_for('bodies') %]">
- <label for="search_body">[% loc('Edit body details') %]</label>
- <select class="form-control" id="search_body" name="body">
- [% FOREACH body IN bodies %]
- [%- SET id = body.id %]
- <option[% IF body.deleted %] class="adminhidden"[% END %] value="[% body.id %]">
- [% body.name | html %]
- [%- IF body.parent %], [% body.parent.name | html %][% END -%]
- </option>
- [% END %]
- </select>
- <input type="submit" class="btn" value="[% loc('Go') %]">
- </form>
+<form method="get" action="[% c.uri_for('bodies') %]">
+ <label for="search_body">[% loc('Edit body details') %]</label>
+ <div class="form-txt-submit-box">
+ <select class="form-control" id="search_body" name="body">
+ [% FOREACH body IN bodies %]
+ [%- SET id = body.id %]
+ <option[% IF body.deleted %] class="adminhidden"[% END %] value="[% body.id %]">
+ [% body.name | html %]
+ [%- IF body.parent %], [% body.parent.name | html %][% END -%]
+ </option>
+ [% END %]
+ </select>
+ <input type="submit" class="btn" value="[% loc('Go') %]">
+ </div>
+</form>
[% END %]
</div>
@@ -68,13 +74,4 @@ and to receive notices of updates.
</table>
[% END %]
-<h2>[% loc('Stats') %]</h2>
-[% INCLUDE 'status/stats.html' admin_include_users=1 %]
-
-[% IF c.cobrand.admin_show_creation_graph -%]
- <p>
- <a href="[% c.config.BASE_URL %]/fms-live-creation.png" class="admin-offsite-link">[% loc('Graph of problem creation by status over time') %]</a>
- </p>
-[% END -%]
-
[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/base/admin/list_updates.html b/templates/web/base/admin/list_updates.html
index b23cd7ca3..e8abdddad 100644
--- a/templates/web/base/admin/list_updates.html
+++ b/templates/web/base/admin/list_updates.html
@@ -41,7 +41,7 @@
</small></td>
<td rowspan=2>
[% IF c.user.has_permission_to('report_edit', update.problem.bodies_str_ids) %]
- <a href="[% c.uri_for( 'update_edit', update.id ) %]">[% loc('Edit') %]</a>
+ <a href="[% c.uri_for_action( 'admin/update_edit', [ update.id ] ) %]">[% loc('Edit') %]</a>
[% END %]
</td>
</tr>
diff --git a/templates/web/base/admin/manifesttheme/form.html b/templates/web/base/admin/manifesttheme/form.html
new file mode 100644
index 000000000..6d02487a6
--- /dev/null
+++ b/templates/web/base/admin/manifesttheme/form.html
@@ -0,0 +1,71 @@
+[% INCLUDE 'admin/header.html' title=loc('Theme') -%]
+
+<form method="post" enctype="multipart/form-data">
+ <div class="admin-hint">
+ <p>[% loc("The <strong>name</strong> is a string that represents the name of the web application as it is usually displayed to the user (e.g., amongst a list of other applications, or as a label for an icon).") %]</p>
+ </div>
+ [% form.field('name').render | safe %]
+
+ <div class="admin-hint">
+ <p>[% loc("The <strong>short name</strong> is a string that represents the name of the web application displayed to the user if there is not enough space to display name (e.g., as a label for an icon on the phone home screen).") %]</p>
+ </div>
+ [% form.field('short_name').render | safe %]
+
+ <div class="admin-hint">
+ <p>[% loc("The <strong>theme colour</strong> defines the default theme colour for the application. This sometimes affects how the OS displays the site (e.g., on Android's task switcher, the theme colour surrounds the site). Colours should be specified with CSS syntax, e.g. <strong><code>#ff00ff</code></strong> or <strong><code>rgb(255, 0, 255)</code></strong> or a named colour like <strong><code>fuchsia</code></strong>.") %]</p>
+ </div>
+ [% form.field('theme_colour').render | safe %]
+
+ <div class="admin-hint">
+ <p>[% loc("The <strong>background colour</strong> defines a placeholder background colour for the application splash screen before it has loaded. Colours should be specified with CSS syntax, e.g. <strong><code>#ff00ff</code></strong> or <strong><code>rgb(255, 0, 255)</code></strong> or a named colour like <strong><code>fuchsia</code></strong>.") %]</p>
+ </div>
+ [% form.field('background_colour').render | safe %]
+
+ [% IF show_all %]
+ [% form.field('cobrand').render | safe %]
+ [% ELSE %]
+ <input type=hidden name=cobrand value='[% c.cobrand.moniker %]' />
+ [% END %]
+
+ <table>
+ <thead>
+ <tr>
+ <th>Icon</th>
+ <th>Size</th>
+ <th>Delete?</th>
+ </tr>
+ </thead>
+ <tbody>
+ [% FOREACH icon IN editing_manifest_theme.icons %]
+ <tr>
+ <td><img src="[% icon.src %]" /></td>
+ <td class="icon-size">[% icon.sizes %]</td>
+ <td><input type=checkbox name=delete_icon value='[% icon.src %]' /></td>
+ </tr>
+ [% END %]
+ <tr>
+ <td colspan=3>
+ <div class="admin-hint">
+ <p>[% loc("The <strong>icons</strong> are used when the application is installed to the user's home screen. Icons must be <strong>square</strong>, with <strong>512x512</strong>px and <strong>192x192</strong>px being the most common sizes.") %]</p>
+ </div>
+ [% form.field('icon').render | safe %]
+ </td>
+ </tr>
+ </tbody>
+ </table>
+
+ <p>
+ <input class="btn" type="submit" name="submit" value="[% loc('Save changes') %]">
+ </p>
+ [% IF form.item.id %]
+ <p>
+ <input class="btn-danger" type="submit" name="delete_theme" value="[% loc('Delete theme') %]" data-confirm="[% loc('Are you sure?') %]">
+ </p>
+ [% END %]
+</form>
+
+[% IF show_all %]
+ <p><a href="[% c.uri_for(c.controller.action_for('list')) %]">Return to themes list</a></p>
+[% END %]
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/base/admin/manifesttheme/index.html b/templates/web/base/admin/manifesttheme/index.html
new file mode 100644
index 000000000..df94c394f
--- /dev/null
+++ b/templates/web/base/admin/manifesttheme/index.html
@@ -0,0 +1,35 @@
+[% INCLUDE 'admin/header.html' title=loc('Themes') %]
+
+<table>
+ <thead>
+ <tr>
+ <th> [% loc('Cobrand') %] </th>
+ <th> [% loc('Name') %] </th>
+ <th> [% loc('Short Name') %] </th>
+ <th> [% loc('Background Colour') %] </th>
+ <th> [% loc('Theme Colour') %] </th>
+ <th> &nbsp; </th>
+ </tr>
+ </thead>
+ <tbody>
+ [% FOR theme IN rs.all %]
+ <tr>
+ <td>[% theme.cobrand %]</td>
+ <td>[% theme.name %]</td>
+ <td>[% theme.short_name %]</td>
+ <td>[% theme.background_colour %]</td>
+ <td>[% theme.theme_colour %]</td>
+ <td> <a href="[% c.uri_for(c.controller.action_for('edit'), [theme.cobrand]) %]" class="btn">[% loc('Edit') %]</a> </td>
+ </tr>
+ [% END %]
+ </tbody>
+</table>
+
+
+
+<p>
+ <a href="[% c.uri_for(c.controller.action_for('create')) %]">[% loc('Create') %]</a>
+ </p>
+
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/base/admin/problem_row.html b/templates/web/base/admin/problem_row.html
index 99142af4e..8d74fec13 100644
--- a/templates/web/base/admin/problem_row.html
+++ b/templates/web/base/admin/problem_row.html
@@ -23,7 +23,7 @@
[% PROCESS value_or_nbsp value=problem.category_display %]
<br>[%- IF edit_body_contacts -%]
[% FOR body IN problem.bodies.values %]
- <a href="[% c.uri_for('body', body.id ) %]">[% PROCESS value_or_nbsp value=body.name %]</a>
+ <a href="[% c.uri_for_action('admin/bodies/edit', [ body.id ] ) %]">[% PROCESS value_or_nbsp value=body.name %]</a>
[% END %]
[%- ELSE -%]
[%- PROCESS value_or_nbsp value=problem.bodies_str -%]
@@ -40,7 +40,7 @@
</small></td>
<td>
[% IF c.user.has_permission_to('report_edit', problem.bodies_str_ids) %]
- <a href="[% c.uri_for( 'report_edit', problem.id ) %]">[% loc('Edit') %]</a>
+ <a href="[% c.uri_for_action( '/admin/reports/edit', [ problem.id ] ) %]">[% loc('Edit') %]</a>
[% END %]
</td>
</tr>
diff --git a/templates/web/base/admin/report-category.html b/templates/web/base/admin/report-category.html
index 0416d71c0..e76106f7f 100644
--- a/templates/web/base/admin/report-category.html
+++ b/templates/web/base/admin/report-category.html
@@ -1,14 +1,15 @@
-<select class="form-control" name="category" id="category">
+[%~ 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} %]
<optgroup label="[% loc('Existing category') %]">
<option selected value="[% problem.category | html %]">[% (problem.category_display OR '-') | html %]</option>
</optgroup>
[% END %]
- [% IF category_options.size %]
- <optgroup label="[% loc('Available categories') %]">
- [% FOREACH cat IN category_options %]
- <option value="[% cat.category | html %]"[% ' selected' IF problem.category == cat.category %]>[% cat.category_display | html %]</option>
- [% END %]
- </optgroup>
- [% END %]
+ [%~ INCLUDE 'report/new/_category_select.html' ~%]
</select>
diff --git a/templates/web/base/admin/report_blocks.html b/templates/web/base/admin/report_blocks.html
index 4c52b14bb..4c679e3b8 100644
--- a/templates/web/base/admin/report_blocks.html
+++ b/templates/web/base/admin/report_blocks.html
@@ -47,3 +47,7 @@ SET state_groups = c.cobrand.state_groups_admin;
</span>
[% END %]
[% END %]
+
+[% BLOCK status_message %]
+ <p><em>[% status_message %]</em></p>
+[% END %]
diff --git a/templates/web/base/admin/report_edit.html b/templates/web/base/admin/reports/edit.html
index e38932d7f..d2b866d01 100644
--- a/templates/web/base/admin/report_edit.html
+++ b/templates/web/base/admin/reports/edit.html
@@ -7,7 +7,7 @@
PROCESS 'admin/report_blocks.html'
-%]
-[% map_html %]
+[% map_html | safe %]
</div>
<div id="map_sidebar">
@@ -16,7 +16,7 @@
<div id="side">
-<form method="post" action="[% c.uri_for( 'report_edit', problem.id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+<form method="post" action="[% c.uri_for_action( '/admin/reports/edit', [ problem.id ] ) %]" 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" >
@@ -57,7 +57,7 @@ class="admin-offsite-link">[% problem.latitude %], [% problem.longitude %]</a>
[% IF problem.bodies_str %]
[% FOREACH body IN problem.bodies.values %]
[% SET body_printed = 1 %]
- <a href="[% c.uri_for('body', body.id) %]">[% body.name | html %]</a>
+ <a href="[% c.uri_for_action('admin/bodies/edit', [ body.id ]) %]">[% body.name | html %]</a>
[%- ',' IF NOT loop.last %]
[% END %]
[% IF NOT body_printed %]
@@ -81,12 +81,17 @@ class="admin-offsite-link">[% problem.latitude %], [% problem.longitude %]</a>
[% IF problem.send_method_used %]
([% problem.send_method_used %])
[% END %]
- [% IF problem.state == 'confirmed' AND problem.whensent %]
+ [% IF problem.state == 'confirmed' AND problem.whensent AND NOT c.cobrand.disable_resend_button %]
<input data-confirm="[% loc('Are you sure?') %]" class="btn" type="submit" name="resend" value="[% loc('Resend report') %]">
[% ELSIF NOT problem.whensent %]
<input type="submit" class="btn" name="mark_sent" value="[% loc('Mark as sent') %]">
[% END %]
</li>
+[% IF c.user.is_superuser AND problem.send_fail_count > 0 %]
+<li class="sm">[% loc('Send Fail Count:') %] [% problem.send_fail_count %]</li>
+<li class="sm">[% loc('Last failure:') %] [% PROCESS format_time time=problem.send_fail_timestamp %]</li>
+<li class="sm truncate_height">[% loc('Reason:') %] [% problem.send_fail_reason | html %]</li>
+[% END %]
<li class="sm">[% loc('Last update:') %] [% PROCESS format_time time=problem.lastupdate %]</li>
<li>[% loc('Alerts:') %] [% alert_count %]</li>
<li>[% loc('Service:') %] [% problem.service OR '<em>' _ loc('None') _ '</em>' %]</li>
@@ -111,7 +116,7 @@ class="admin-offsite-link">[% problem.latitude %], [% problem.longitude %]</a>
</ul>
</div>
-[% status_message %]
+[% INCLUDE status_message %]
<ul class="plain-list">
<li><label for='title'>[% loc('Subject:') %]</label>
diff --git a/templates/web/base/admin/reports.html b/templates/web/base/admin/reports/index.html
index 7d8fe9561..adbd50224 100644
--- a/templates/web/base/admin/reports.html
+++ b/templates/web/base/admin/reports/index.html
@@ -1,7 +1,7 @@
[% INCLUDE 'admin/header.html' title=loc('Search Reports') %]
[% PROCESS 'admin/report_blocks.html' %]
-<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">
<p><label for="search">[% loc('Search:') %]</label>
<input class="form-control" type="text" name="search" size="30" id="search" value="[% searched | html %]">
</form>
diff --git a/templates/web/base/admin/responsepriorities/edit.html b/templates/web/base/admin/responsepriorities/edit.html
index 02661fd14..b9074999f 100644
--- a/templates/web/base/admin/responsepriorities/edit.html
+++ b/templates/web/base/admin/responsepriorities/edit.html
@@ -1,57 +1,46 @@
[% INCLUDE 'admin/header.html' title=tprintf(loc('Response Priority for %s'), body.name) -%]
-[% rp = response_priority %]
-[% UNLESS rp.id %]<h3>[% loc('New priority') %]</h3>[% END %]
+[% UNLESS obj %]<h3>[% loc('New priority') %]</h3>[% END %]
-<form method="post"
- action="[% c.uri_for('', body.id, rp.id || 'new' ) %]"
- enctype="application/x-www-form-urlencoded"
- accept-charset="utf-8"
- class="validate">
+<form method="post" accept-charset="utf-8" class="validate">
- <p>
- <strong>[% loc('Name:') %] </strong>
- <input type="text" name="name" class="required form-control" size="30" value="[% rp.name | html %]">
- </p>
- <p>
- <strong>[% loc('Description:') %] </strong>
- <input type="text" name="description" class="form-control" size="30" value="[% rp.description | html %]">
- </p>
+ [% form.field('name').render | safe %]
+ [% form.field('description').render | safe %]
<div class="admin-hint">
<p>
[% loc('If this priority is passed to an external service (e.g. Exor/Confirm) enter the priority code to use with that service here.') %]
</p>
</div>
- <p>
- <strong>[% loc('External ID') %]:</strong>
- <input type="text" name="external_id" class="form-control" size="30" value="[% rp.external_id | html %]">
- </p>
+ [% form.field('external_id').render | safe %]
<div class="admin-hint">
<p>
[% loc('Select if this is the default priority') %]
</p>
</div>
- <p>
- <label>
- <input type="checkbox" name="is_default" is="is_deleted" value="1"[% ' checked' IF rp.is_default %]>
- [% loc('Default priority') %]
- </label>
- </p>
-
- [% INCLUDE 'admin/category-checkboxes.html' hint=loc('If you only want this priority to be an option for specific categories, pick them here. By default they will show for all categories.') %]
+ [% form.field('is_default').render | safe %]
+
+ <fieldset>
+ <legend>
+ <div class="admin-hint">
+ <p>
+ [% loc('If you only want this priority to be an option for specific categories, pick them here. By default they will show for all categories.') %]
+ </p>
+ </div>
+ [% loc('Categories:') %]
+ </legend>
+ [%# TODO Select all/none %]
+ [% form.field('contacts').render | safe %]
+ </fieldset>
+
+ [% form.field('deleted').render | safe %]
<p>
- <label>
- <input type="checkbox" name="deleted" id="deleted" value="1"[% ' checked' IF rp.deleted %]>
- [% loc('Flag as deleted') %]
- </label>
- </p>
- <p>
<input type="hidden" name="token" value="[% csrf_token %]" >
- <input type="submit" class="btn" name="Edit priorities" value="[% rp.id ? loc('Save changes') : loc('Create priority') %]" >
+ <input type="submit" class="btn" name="Edit priorities" value="[% obj ? loc('Save changes') : loc('Create priority') %]" >
</p>
+
</form>
[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/base/admin/responsepriorities/index.html b/templates/web/base/admin/responsepriorities/index.html
index 882a3c538..bb6324dbe 100644
--- a/templates/web/base/admin/responsepriorities/index.html
+++ b/templates/web/base/admin/responsepriorities/index.html
@@ -1,11 +1,55 @@
[% INCLUDE 'admin/header.html' title=loc('Response Priorities') -%]
-<ul>
- [% FOR body IN bodies %]
- <li>
- <a href="[% c.uri_for('', body.id) %]">[% body.name %]</a>
- </li>
- [% END %]
-</ul>
+<table>
+ <thead>
+ <tr>
+ <th> [% loc('Name') %] </th>
+ <th> [% loc('Description') %] </th>
+ <th> [% loc('Categories') %] </th>
+ <th> [% loc('Default') %] </th>
+ <th> &nbsp; </th>
+ </tr>
+ </thead>
+ <tbody>
+ [% FOR p IN response_priorities %]
+ [% IF c.user.is_superuser AND last_name != p.body.name %]
+ <tr>
+ <td colspan="5"><strong>[% p.body.name %]</strong></td>
+ </tr>
+ [% SET last_name = p.body.name %]
+ [% END %]
+ <tr [% 'class="is-deleted"' IF p.deleted %]>
+ <td> [% p.name | html %] </td>
+ <td> [% p.description | html %] </td>
+ <td>
+ [% UNLESS p.contacts.size %]
+ <em>[% loc('All categories') %]</em>
+ [% ELSE %]
+ [% FOR contact IN p.contacts %]
+ [% contact.category_display %][% ',' UNLESS loop.last %]
+ [% END %]
+ [% END %]
+ </td>
+ <td> [% IF p.is_default %]X[% END %]</td>
+ <td> <a href="[% c.uri_for(c.controller.action_for('edit'), [p.body_id, p.id]) %]" class="btn">[% loc('Edit') %]</a> </td>
+ </tr>
+ [% END %]
+ </tbody>
+</table>
+
+[% IF c.user.is_superuser %]
+<h3>[% loc('Create priority') %]</h3>
+<form>
+<select name="body_id">
+ [% FOR body IN bodies %]
+ <option value="[% body.id %]">[% body.name | html %]</option>
+ [% END %]
+</select>
+<input type="submit" value="[% loc('Go') %]">
+</form>
+
+[% ELSE %]
+<a href="[% c.uri_for(c.controller.action_for('create'), [c.user.from_body.id]) %]" class="btn">[% loc('New priority') %]</a>
+[% END %]
[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/base/admin/responsepriorities/list.html b/templates/web/base/admin/responsepriorities/list.html
deleted file mode 100644
index eedaccfdb..000000000
--- a/templates/web/base/admin/responsepriorities/list.html
+++ /dev/null
@@ -1,36 +0,0 @@
-[% INCLUDE 'admin/header.html' title=tprintf(loc('Response Priorities for %s'), body.name) -%]
-
-<table>
- <thead>
- <tr>
- <th> [% loc('Name') %] </th>
- <th> [% loc('Description') %] </th>
- <th> [% loc('Categories') %] </th>
- <th> [% loc('Default') %] </th>
- <th> &nbsp; </th>
- </tr>
- </thead>
- <tbody>
- [% FOR p IN response_priorities %]
- <tr [% 'class="is-deleted"' IF p.deleted %]>
- <td> [% p.name | html %] </td>
- <td> [% p.description | html %] </td>
- <td>
- [% UNLESS p.contacts.size %]
- <em>[% loc('All categories') %]</em>
- [% ELSE %]
- [% FOR contact IN p.contacts %]
- [% contact.category_display %][% ',' UNLESS loop.last %]
- [% END %]
- [% END %]
- </td>
- <td> [% IF p.is_default %]X[% END %]</td>
- <td> <a href="[% c.uri_for('', body.id, p.id) %]" class="btn">[% loc('Edit') %]</a> </td>
- </tr>
- [% END %]
- </tbody>
-</table>
-
-<a href="[% c.uri_for('', body.id, 'new') %]" class="btn">[% loc('New priority') %]</a>
-
-[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/base/admin/roles/form.html b/templates/web/base/admin/roles/form.html
new file mode 100644
index 000000000..1801746af
--- /dev/null
+++ b/templates/web/base/admin/roles/form.html
@@ -0,0 +1,32 @@
+[% INCLUDE 'admin/header.html' title=loc('Roles') -%]
+
+<form method="post">
+ <div class="admin-hint">
+ <p>[% loc("The role's <strong>name</strong> is used to refer to this group of permissions elsewhere in the admin.") %]</p>
+ </div>
+ [% form.field('name').render | safe %]
+
+ [% IF form.field('body').is_active %]
+ [% form.field('body').render | safe %]
+ [% END %]
+
+ <div class="admin-hint">
+ <p>[% loc("Users with this role can perform the following actions within their assigned body or area.") %]</p>
+ </div>
+ [% form.field('permissions').render | safe %]
+
+ [% form.field('submit').render | safe %]
+
+ <p>
+ <input class="btn" type="submit" name="submit" value="[% loc('Save changes') %]">
+ </p>
+ [% IF form.item.id %]
+ <p>
+ <input class="btn-danger" type="submit" name="delete_role" value="[% loc('Delete') %]" data-confirm="[% loc('Are you sure?') %]">
+ </p>
+ [% END %]
+</form>
+
+<p><a href="[% c.uri_for(c.controller.action_for('list')) %]">Return to roles list</a></p>
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/base/admin/roles/index.html b/templates/web/base/admin/roles/index.html
new file mode 100644
index 000000000..6c561199c
--- /dev/null
+++ b/templates/web/base/admin/roles/index.html
@@ -0,0 +1,35 @@
+[% INCLUDE 'admin/header.html' title=loc('Roles') -%]
+
+<table>
+ <tr>
+ <th>[% loc('Role') %]</th>
+ <th>[% loc('Permissions') %]</th>
+ <th>&nbsp;</th>
+ </tr>
+[% FOREACH role IN roles -%]
+ [% IF c.user.is_superuser AND last_name != role.body.name %]
+ <tr>
+ <td colspan="3"><strong>[% role.body.name %]</strong></td>
+ </tr>
+ [% SET last_name = role.body.name %]
+ [% END %]
+ <tr>
+ <td>[% role.name | html %]</td>
+ <td><ul class="no-margin no-bullets">
+ [% FOR perm IN role.permissions.sort %]
+ <li>[% labels.$perm %]
+ [% END %]
+ </ul></td>
+ <td>
+ <a href="[% c.uri_for(c.controller.action_for('edit'), [role.id]) %]">[% loc('Edit') %]</a>
+ &middot; <a href="[% c.uri_for_action('admin/users/index', role = role.id) %]">[% loc('Users') %]</a>
+ </td>
+ </tr>
+[% END -%]
+</table>
+
+<p>
+ <a href="[% c.uri_for(c.controller.action_for('create')) %]">[% loc('Create') %]</a>
+</p>
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/base/admin/states/index.html b/templates/web/base/admin/states/index.html
index 1b68d4aea..ca2ef03d2 100644
--- a/templates/web/base/admin/states/index.html
+++ b/templates/web/base/admin/states/index.html
@@ -45,7 +45,7 @@
</td>
<td style="text-align:center;vertical-align:middle" rowspan="[% rows %]">
[% IF state.label != 'confirmed' AND state.label != 'closed' %]
- <input class="btn btn--small" type="submit" name="delete:[% state.label %]" value="Delete">
+ <input class="btn btn--small btn-danger" type="submit" data-confirm="[% loc('Are you sure?') %]" name="delete:[% state.label %]" value="Delete">
[% END %]
</td>
</tr>
diff --git a/templates/web/base/admin/stats/index.html b/templates/web/base/admin/stats/index.html
index d47054427..e6ba5e054 100644
--- a/templates/web/base/admin/stats/index.html
+++ b/templates/web/base/admin/stats/index.html
@@ -1,10 +1,27 @@
[% INCLUDE 'admin/header.html' title=loc('Stats') %]
+[% INCLUDE 'status/stats.html' admin_include_users=1 %]
+
+[% IF c.cobrand.admin_show_creation_graph -%]
+ <p>
+ <a href="[% c.config.BASE_URL %]/fms-live-creation.png" class="admin-offsite-link">[% loc('Graph of problem creation by status over time') %]</a>
+ </p>
+[% END -%]
+
<ul>
<li><a href="[% c.uri_for_action('admin/stats/questionnaire') %]">[% loc('Survey Results') %]</a></li>
<li><a href="[% c.uri_for_action('admin/stats/state') %]">[% loc('Problem breakdown by state') %]</a></li>
<li><a href="[% c.uri_for_action('admin/stats/fix_rate') %]">[% loc('Category fix rate for problems > 4 weeks old') %]</a></li>
<li><a href="[% c.uri_for_action('dashboard/index') %]">[% loc('Summary statistics') %]</a></li>
+[% IF c.cobrand.feature('heatmap').keys %]
+ <li>[% loc('Heatmap') %] <ul>
+ [% FOR body IN c.cobrand.feature('heatmap').pairs %]
+ <li><a href="[% c.uri_for_action('dashboard/heatmap') %]?body=[% body.value %]">[% body.key %]</a></li>
+ [% END %]
+ </ul> </li>
+[% ELSIF c.cobrand.feature('heatmap') %]
+<li><a href="[% c.uri_for_action('dashboard/heatmap') %]">[% loc('Heatmap') %]</a></li>
+[% END %]
[% IF c.cobrand.moniker == 'fixmystreet' %]
<li><a href="[% c.uri_for_action('admin/stats/refused') %]">Refused</a></li>
[% END %]
diff --git a/templates/web/base/admin/template_edit.html b/templates/web/base/admin/templates/edit.html
index 2945e36c5..7ce67f96f 100644
--- a/templates/web/base/admin/template_edit.html
+++ b/templates/web/base/admin/templates/edit.html
@@ -4,7 +4,7 @@
[% UNLESS rt.id %]<h3>[% loc('New template') %]</h3>[% END %]
<form method="post"
- action="[% c.uri_for('templates', body.id, rt.id || 'new' ) %]"
+ action="[% c.uri_for_action('/admin/templates/edit', body.id, rt.id || 'new' ) %]"
enctype="application/x-www-form-urlencoded"
accept-charset="utf-8"
class="validate">
@@ -13,7 +13,9 @@
<p class="error">[% loc('Please correct the errors below') %]</p>
[% END %]
-
+ [% IF errors.title %]
+ <div class="form-error">[% errors.title %]</div>
+ [% END %]
<div class="admin-hint">
<p>
[% loc('This is a <strong>private</strong> name for this template so you can identify it when updating reports or editing in the admin.') %]
diff --git a/templates/web/base/admin/templates_index.html b/templates/web/base/admin/templates/index.html
index 40e1be300..9322c6ef6 100644
--- a/templates/web/base/admin/templates_index.html
+++ b/templates/web/base/admin/templates/index.html
@@ -3,7 +3,7 @@
<ul>
[% FOR body IN bodies %]
<li>
- <a href="[% c.uri_for('templates', body.id) %]">[% body.name %]</a>
+ <a href="[% c.uri_for_action('/admin/templates/view', body.id) %]">[% body.name %]</a>
</li>
[% END %]
</ul>
diff --git a/templates/web/base/admin/templates.html b/templates/web/base/admin/templates/view.html
index 21e4eea25..6a1dd9614 100644
--- a/templates/web/base/admin/templates.html
+++ b/templates/web/base/admin/templates/view.html
@@ -28,12 +28,12 @@
[% IF t.external_status_code %][% t.external_status_code | html %] (external)[% END %]
</td>
<td> [% IF t.auto_response %]X[% END %] </td>
- <td> <a href="[% c.uri_for('templates', body.id, t.id) %]" class="btn">[% loc('Edit') %]</a> </td>
+ <td> <a href="[% c.uri_for_action('/admin/templates/edit', body.id, t.id) %]" class="btn">[% loc('Edit') %]</a> </td>
</tr>
[% END %]
</tbody>
</table>
-<a href="[% c.uri_for('templates', body.id, 'new') %]" class="btn">[% loc('New template') %]</a>
+<a href="[% c.uri_for_action('/admin/templates/index', body.id, 'new') %]" class="btn">[% loc('New template') %]</a>
[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/base/admin/triage/_inspect.html b/templates/web/base/admin/triage/_inspect.html
new file mode 100644
index 000000000..926197ceb
--- /dev/null
+++ b/templates/web/base/admin/triage/_inspect.html
@@ -0,0 +1,77 @@
+[% BLOCK category_list %]
+<select class="form-control" name="[% field_name %]" id="[% field_name %]">
+ [% IF category_options.size %]
+ [%~ IF category_groups.size ~%]
+ [%~ FOREACH group IN category_groups ~%]
+ [% IF group.name %]<optgroup label="[% group.name %]">[% END %]
+ [% group_select = 0 %]
+ [% selected = 0 %]
+ [%~ FOREACH cat_op IN group.categories ~%]
+ [% IF group_select == 0 AND problem.category == group.name %]
+ [% selected = 1; group_select = 1 %]
+ [% END %]
+ <option value="[% cat_op.category | html %]"[% ' selected' IF selected OR problem.category == cat_op.category %]>[% cat_op.category_display | html %] ([% cat_op.email | html %])</option>
+ [% selected = 0 %]
+ [%~ END ~%]
+ [% IF group.name %]</optgroup>[% END %]
+ [%~ END =%]
+ [% ELSE %]
+ [% FOREACH cat IN category_options %]
+ <option value="[% cat.category | html %]"[% ' selected' IF problem.category == cat.category %]>[% cat.category_display | html %]</option>
+ [% END %]
+ [% END %]
+ [% END %]
+</select>
+[% END %]
+
+[% permissions = c.user.permissions(problem) %]
+[% second_column = BLOCK -%]
+ <div id="side-inspect">
+
+ <h2 class="inspect-form-heading">[% loc('Inspect report') %]</h2>
+
+ [% INCLUDE 'errors.html' %]
+
+ <form name="report_inspect_form" id="report_inspect_form" method="post" action="[% c.uri_for( '/report', problem.id ) %]" class="validate">
+
+ [% INCLUDE 'report/inspect/information.html' no_relocate=1 %]
+
+ [% IF permissions.report_edit_category OR permissions.report_inspect OR permissions.triage %]
+ <div class="inspect-section">
+ <p>
+ <strong>Holding category:</strong> [% problem.category %]
+ </p>
+
+ <p>
+ <label for="category">CONFIRM Subject</label>
+ [% PROCESS category_list category_groups=end_groups field_name="category" categories_hash=end_categories category_options=end_options %]
+ </p>
+
+ </div>
+ [% END %]
+
+ <div class="inspect-section">
+ [%- extra_fields = problem.get_extra_fields -%]
+ [% FOR field IN extra_fields %]
+ [% NEXT IF field.name == 'urgent' %]
+ <p>
+ <label for="[% field.name %]">[% field.description %]</label>
+ <input class="form-control" name="[% field.name %]" type="text" value="[% field.value | html %]" disabled>
+ </p>
+ [% END %]
+
+ [% IF permissions.report_inspect OR permissions.triage %]
+ [% INCLUDE 'report/inspect/public_update.html' public_update_defaulted=0 %]
+ [% END %]
+
+ <p>
+ <input type="hidden" name="token" value="[% csrf_token %]" />
+ <input class="btn btn-primary" type="submit" value="[% loc('Save changes') %]" data-value-original="[% loc('Save changes') %]" data-value-duplicate="[% loc('Save + close as duplicate') %]" name="save" />
+ </p>
+ </div>
+
+ <input type="hidden" name="js" value="">
+ <input type="hidden" name="triage" value="1">
+ </form>
+ </div>
+[%- END %]
diff --git a/templates/web/base/admin/triage/_list-filters.html b/templates/web/base/admin/triage/_list-filters.html
new file mode 100644
index 000000000..dd3e17875
--- /dev/null
+++ b/templates/web/base/admin/triage/_list-filters.html
@@ -0,0 +1,53 @@
+[% select_category = BLOCK %]
+ [% 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 %]
+ [%~ IF cat.get_extra_metadata('help_text') %] ([% cat.get_extra_metadata('help_text') %])[% END ~%]
+ </option>
+ [% END %]
+ </select>
+ [% ELSE %]
+ [% loc('Everything') %]
+ [% END %]
+[% END %]
+
+<div class="report-list-filters-wrapper">
+
+[% IF use_form_wrapper %]
+ <form method="get" action="">
+[% END %]
+
+ <p class="report-list-filters">
+ [% tprintf(loc('<label for="statuses">Show</label> %s reports <label for="filter_categories">about</label> %s', "The first %s is a dropdown of all/fixed/etc, the second is a dropdown of categories"), 'untriaged', mark_safe(select_category)) %]
+ <input type="submit" name="filter_update" value="[% loc('Go') %]">
+ </p>
+
+ <p class="report-list-filters">
+ <label for="sort">[% loc('Sort by') %]</label>
+ <select class="form-control" name="sort" id="sort">
+ [% IF shortlist %]
+ <option value="shortlist"[% ' selected' IF sort_key == 'shortlist' %]>[% loc('Manual order') %]</option>
+ [% END %]
+ <option value="created-desc"[% ' selected' IF sort_key == 'created-desc' %]>[% loc('Newest') %]</option>
+ <option value="created-asc"[% ' selected' IF sort_key == 'created-asc' %]>[% loc('Oldest') %]</option>
+ <option value="updated-desc"[% ' selected' IF sort_key == 'updated-desc' %]>[% loc('Recently updated') %]</option>
+ <option value="updated-asc"[% ' selected' IF sort_key == 'updated-asc' %]>[% loc('Least recently updated') %]</option>
+ <option value="comments-desc"[% ' selected' IF sort_key == 'comments-desc' %]>[% loc('Most commented') %]</option>
+ </select>
+ <input type="submit" name="filter_update" value="[% loc('Go') %]">
+ </p>
+ [% IF page == 'around' %]
+ <p id="show_old_reports_wrapper" class="report-list-filters[% ' hidden' UNLESS num_old_reports > 0 %]">
+ <label for="show_old_reports">[% loc('Show older reports') %]</label>
+ <input type="checkbox" name="show_old_reports" id="show_old_reports" value="1"[% ' checked' IF show_old_reports %]>
+ <input type="submit" name="filter_update" value="[% loc('Go') %]">
+ </p>
+ [% END %]
+
+[% IF use_form_wrapper %]
+ </form>
+[% END %]
+
+</div>
diff --git a/templates/web/base/admin/triage/index.html b/templates/web/base/admin/triage/index.html
new file mode 100644
index 000000000..8b6880c24
--- /dev/null
+++ b/templates/web/base/admin/triage/index.html
@@ -0,0 +1,42 @@
+[% 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 %]
+
+[%
+ PROCESS "report/photo-js.html";
+ PROCESS "maps/${map.type}.html";
+ SET bodyclass = 'mappage';
+ INCLUDE 'header.html',
+ title = 'Awaiting triage'
+ rss = [ tprintf(loc('Problems within %s, %s', "First %s is the body name, second %s the site name"), name, site_name), rss_url ]
+%]
+
+[% map_html | safe %]
+
+</div>
+<div id="map_sidebar">
+ <div id="side">
+
+ <h1 id="reports_heading">
+ Awaiting triage
+ </h1>
+
+<section class="full-width">
+[% INCLUDE "admin/triage/_list-filters.html", use_form_wrapper = 1 %]
+<div class="js-pagination">
+[% INCLUDE 'pagination.html', param = 'p' %]
+</div>
+<div id="js-reports-list">
+ [% INCLUDE 'reports/_problem-list.html' %]
+</div>
+<div class="js-pagination">
+[% INCLUDE 'pagination.html', param = 'p' %]
+</div>
+</section>
+
+ </div>
+</div>
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/base/admin/update_edit.html b/templates/web/base/admin/update_edit.html
index fca9b1904..527b3f9f8 100644
--- a/templates/web/base/admin/update_edit.html
+++ b/templates/web/base/admin/update_edit.html
@@ -1,7 +1,7 @@
[% INCLUDE 'admin/header.html' title=tprintf(loc('Editing update %d'), update.id ) -%]
[% PROCESS 'admin/report_blocks.html' %]
-[% status_message %]
+[% INCLUDE status_message %]
<form method="post" action="[% c.uri_for( 'update_edit', update.id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
<input type="hidden" name="token" value="[% csrf_token %]" >
diff --git a/templates/web/base/admin/users/edit.html b/templates/web/base/admin/users/edit.html
index 8dd2b926f..204e58607 100644
--- a/templates/web/base/admin/users/edit.html
+++ b/templates/web/base/admin/users/edit.html
@@ -6,7 +6,7 @@
[% INCLUDE 'admin/header.html' title=title -%]
[% PROCESS 'admin/report_blocks.html' %]
-[% status_message %]
+[% INCLUDE status_message %]
[% INCLUDE 'admin/users/form.html' %]
diff --git a/templates/web/base/admin/users/form.html b/templates/web/base/admin/users/form.html
index 8f0f9ad6e..495da8648 100644
--- a/templates/web/base/admin/users/form.html
+++ b/templates/web/base/admin/users/form.html
@@ -1,4 +1,7 @@
-<form method="post" id="user_edit" action="[% c.uri_for_action( 'admin/users/edit', user.id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+<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" >
@@ -116,29 +119,6 @@
</label>
</li>
- [% UNLESS user.is_superuser %]
- <li>
- <div class="admin-hint">
- <p>
- [% loc("Reports made by trusted users will be sent to the responsible body without being inspected first.") %]
- </p>
- </div>
- [% IF c.user.is_superuser %]
- <label for="trusted_bodies">[% loc('Trusted by bodies:') %]</label>
- <select class="form-control js-multiple" id='trusted_bodies' name='trusted_bodies' multiple>
- [% FOR body IN bodies %]
- <option value="[% body.id %]"[% ' selected' IF user.has_permission_to('trusted', body.id) %]>[% body.name %]</option>
- [% END %]
- </select>
- [% ELSE %]
- <label>
- [% loc('Trusted:') %]
- <input type="checkbox" id="trusted_bodies" name="trusted_bodies" value="[% c.user.from_body.id %]" [% 'checked' IF user.has_permission_to('trusted', c.user.from_body.id) %]>
- </label>
- [% END %]
- </li>
- [% END %]
-
[% IF c.user.is_superuser %]
<li>
<div class="admin-hint">
@@ -155,6 +135,20 @@
[% IF available_permissions AND NOT user.is_superuser %]
<li>
+ <div class="admin-hint">
+ <p>
+ [% loc("Users can be assigned one or more roles to give them all the permissions of those roles. Selecting a role or roles will disable manual permission selection.") %]
+ </p>
+ </div>
+ <label for="roles">[% loc('Role:') %]</label>
+ <select class="form-control js-multiple" id="roles" name="roles" multiple>
+ [% FOREACH role IN roles %]
+ <option data-permissions='["[% role.permissions.join('","') | html %]"]' value="[% role.id %]"[% ' selected' IF user.in_role(role.id) %]>[% role.name | html %]</option>
+ [% END %]
+ </select>
+ </li>
+
+ <li>
<fieldset>
<legend>
<div class="admin-hint">
diff --git a/templates/web/base/admin/users/import.html b/templates/web/base/admin/users/import.html
index 0c0b903d7..38e4fe240 100644
--- a/templates/web/base/admin/users/import.html
+++ b/templates/web/base/admin/users/import.html
@@ -1,7 +1,7 @@
[% INCLUDE 'admin/header.html' title=loc("User Import") -%]
[% PROCESS 'admin/report_blocks.html' %]
-[% status_message %]
+[% INCLUDE status_message %]
<form method="post" id="user_edit" enctype="multipart/form-data" accept-charset="utf-8">
<input type="hidden" name="token" value="[% csrf_token %]" >
@@ -27,7 +27,7 @@
[% FOREACH user IN new_users %]
<tr>
<td>
- <a href="[% c.uri_for_action( 'admin/users/edit', user.id ) %]">
+ <a href="[% c.uri_for_action( 'admin/users/edit', [ user.id ] ) %]">
[% user.name %]
</a>
</td>
@@ -50,7 +50,7 @@
[% FOREACH user IN existing_users %]
<tr>
<td>
- <a href="[% c.uri_for_action( 'admin/users/edit', user.id ) %]">
+ <a href="[% c.uri_for_action( 'admin/users/edit', [ user.id ] ) %]">
[% user.name %]
</a>
</td>
@@ -65,11 +65,12 @@
<p>[% loc('This page is a quick way to create many new staff users in one go.') %]</p>
<p>[% loc("Existing users won't be modified.") %]</p>
<p>
- [% loc("The uploaded CSV file must contain a header row, and records must have the following fields (in this order):") %]
- <pre>name,email,from_body,permissions</pre>
+ [% loc("The uploaded CSV file must contain a header row, and records can have the following fields:") %]
+ <pre>name,email,from_body,permissions,roles,passwordhash</pre>
<ul>
<li><code>from_body</code>: [% loc("the database id of the body to associate that user with, e.g. <code>2217</code> for Buckinghamshire.") %]</li>
<li><code>permissions</code>: [% loc("a colon-separated list of permissions to grant that user, e.g. <code>contribute_as_body:moderate:user_edit</code>.") %]</li>
+ <li><code>roles</code>: [% loc("a colon-separated list of roles to assign to that user.") %]</li>
</ul>
</p>
diff --git a/templates/web/base/admin/users/index.html b/templates/web/base/admin/users/index.html
index e939f008b..e573c10fe 100644
--- a/templates/web/base/admin/users/index.html
+++ b/templates/web/base/admin/users/index.html
@@ -1,42 +1,89 @@
[% INCLUDE 'admin/header.html' title=loc('Search Users') %]
[% PROCESS 'admin/report_blocks.html' %]
+[% BLOCK role_select %]
+<select name="[% label %]" id="[% label %]" class="form-control">
+ <option value="">---</option>
+ [% FOR role IN roles %]
+ [% IF c.user.is_superuser AND last_name != role.body.name %]
+ <optgroup label="[% role.body.name %]">
+ [% SET last_name = role.body.name %]
+ [% END %]
+ <option value="[% role.id %]"[% ' selected' IF role.id == role_selected %]>[% role.name | html %]</option>
+ [% END %]
+</select>
+[% END %]
+
+[% INCLUDE status_message %]
+
<div class="fms-admin-info">
[% loc("User search finds matches in users' names and email addresses.") %]
</div>
+
<form method="get" action="[% c.uri_for_action('admin/users/index') %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+<div class="filters">
+
<p><label for="search">[% loc('Search:') %]</label>
<input class="form-control" type="text" name="search" size="30" id="search" value="[% searched | html %]">
+ [% IF roles %]
+ <p><label for="role">[% loc('Role:') %]</label>
+ [% INCLUDE role_select label='role' %]
+ [% END %]
+ <p class="no-label"><input type="submit" value="[% loc('Go') %]" class="btn">
+
+</div>
</form>
[% IF users.size %]
+<form method="post">
<table cellspacing="0" cellpadding="2" border="1">
<tr>
+ <th>*</th>
<th>[% loc('Name') %]</th>
<th>[% loc('Email') %]</th>
<th>[% loc('Body') %]</th>
[% IF c.cobrand.moniker != 'zurich' %]
<th>[% loc('Flagged') %]</th>
[% END %]
- <th>*</th>
+ <th colspan="2">*</th>
</tr>
[%- FOREACH user IN users %]
<tr>
- <td>[% PROCESS value_or_nbsp value=user.name %]</td>
- <td><a href="[% c.uri_for_action( 'admin/reports', search => user.email ) %]">[% PROCESS value_or_nbsp value=user.email %]</a></td>
+ <td align="center">[% IF user.from_body %]
+ <input type="checkbox" name="uid" value="[% user.id %]" id="uid[% user.id %]">
+ [% END %]</td>
+ <td>[% IF user.from_body %]<label class="inline" for="uid[% user.id %]">[% END %]
+ [% PROCESS value_or_nbsp value=user.name %]
+ [% IF user.from_body %]</label>[% END %]
+ </td>
+ <td><a href="[% c.uri_for_action( 'admin/reports/index', search => user.email ) %]">[% PROCESS value_or_nbsp value=user.email %]</a></td>
<td>[% PROCESS value_or_nbsp value=user.from_body.name %]
[% IF user.is_superuser %] * [% END %]
</td>
[% IF c.cobrand.moniker != 'zurich' %]
<td>[% user.flagged == 2 ? loc('User in abuse table') : user.flagged ? loc('Yes') : '&nbsp;' %]</td>
[% END %]
- <td>[% IF user.id %]<a href="[% c.uri_for_action( 'admin/users/edit', user.id ) %]">[% loc('Edit') %]</a>[% END %]</td>
+ <td>[% IF user.id %]<a href="[% c.uri_for_action( 'admin/users/edit', [ user.id ] ) %]">[% loc('Edit') %]</a>[% END %]</td>
+ <td>[% IF user.id %]<a href="[% c.uri_for_action( 'admin/users/log', [ user.id ] ) %]">[% loc('Timeline') %]</a>[% END %]</td>
</tr>
[%- END -%]
</table>
-[% ELSIF searched %]
+<p><label for="roles">[% loc('Assign selected to role:') %]</label>
+[% IF c.user.is_superuser %]
+[% INCLUDE role_select label='roles' %]
+[% ELSE %]
+<select class="form-control js-multiple" id="roles" name="roles" multiple>
+ [% FOREACH role IN roles %]
+ <option value="[% role.id %]">[% role.name | html %]</option>
+ [% END %]
+</select>
+[% END %]
+<p><input class="btn" type="submit" value="[% loc('Save changes') %]">
+</form>
+
+[% ELSIF searched || role_selected %]
<div class="fms-admin-warning">
[% loc("Searching found no users.") %]
@@ -44,7 +91,7 @@
[% END %]
-[% IF NOT searched %]
+[% IF NOT ( searched || role_selected )%]
<h2>[% loc('Add user') %]</h2>
[% INCLUDE 'admin/users/form.html', user = '' %]
[% ELSE %]
diff --git a/templates/web/base/admin/users/log.html b/templates/web/base/admin/users/log.html
new file mode 100644
index 000000000..4b426e0ba
--- /dev/null
+++ b/templates/web/base/admin/users/log.html
@@ -0,0 +1,72 @@
+[% INCLUDE 'admin/header.html' title=loc('Timeline') _ ', ' _ user.name %]
+
+<style>
+.timeline ul {
+ margin-bottom: 0;
+}
+.timeline dd {
+ margin-bottom: 0;
+}
+</style>
+
+[%
+action_map = {
+ add = 'Added'
+ delete = 'Deleted'
+ edit = 'Edited'
+ merge = 'Merged'
+ moderation = 'Moderated'
+ resend = 'Resent'
+ category_change = 'Changed category of'
+ state_change = 'Changed state of'
+}
+%]
+
+[%- date = '' %]
+[% FOREACH moment IN time.keys.sort.reverse %]
+ [%- curdate = time.$moment.0.date.strftime('%A, %e %B %Y') -%]
+ [%- IF date != curdate %]
+ [% '</dl>' IF date %]
+ <h2>[% curdate %]</h2>
+
+ <dl class="timeline">
+ [%- date = curdate -%]
+ [%- END -%]
+ <dt><b>[% time.$moment.0.date.hms %]</b></dt>
+ <dd><ul>
+ [% FOREACH item IN time.$moment %]
+ <li>
+ [%~ IF item.obj.problem_id %]
+ [%~ SET report_url = c.uri_for( '/report', item.obj.problem_id ) _ "#update_" _ item.obj.id %]
+ [%~ ELSE %]
+ [%~ SET report_url = c.uri_for('/report', item.obj.id) %]
+ [%~ END %]
+ [%~ SET report_link = "<a href='" _ report_url _ "'>" _ item.obj.id _ "</a>" %]
+ [%- SWITCH item.type -%]
+ [%~ CASE 'problem' %]
+ [%- tprintf(loc('Problem %s created'), mark_safe(report_link)) %], ‘[% item.obj.title | html %]’
+ [%~ CASE 'problemContributedBy' %]
+ [%- 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 %]
+ [%~ CASE 'shortlistAdded' %]
+ [%- tprintf(loc('Problem %s added to shortlist'), mark_safe(report_link)) %]
+ [%~ CASE 'shortlistRemoved' %]
+ [%- tprintf(loc('Problem %s removed from shortlist'), mark_safe(report_link)) %]
+ [%~ CASE 'log' %]
+ [%~ SET object_summary = item.log.object_summary %]
+ [% IF object_summary %]
+ [%~ SET link = tprintf('<a href="%s">%s</a>', item.log.link, object_summary) %]
+ [%- tprintf('%s %s %s', action_map.${item.log.action}, item.log.actual_object_type, mark_safe(link)) %]
+ [% ' – ' _ item.log.reason IF item.log.reason %]
+ [% ELSE %]
+ [%- tprintf('%s %s %s', action_map.${item.log.action}, item.log.actual_object_type, item.log.object_id) %]
+ [% END %]
+ [%- END %]
+ </li>
+ [%- END %]
+ </ul></dd>
+[% END %]
+
+[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/base/alert/_index_text.html b/templates/web/base/alert/_index_text.html
new file mode 100644
index 000000000..80ed142d1
--- /dev/null
+++ b/templates/web/base/alert/_index_text.html
@@ -0,0 +1,25 @@
+<p>
+[% IF c.cobrand.is_council %]
+[% tprintf(loc('%s has a variety of RSS feeds and email alerts for local
+problems, including alerts for all problems within a particular ward, or all
+problems within a certain distance of a particular location.', "%s is the site name"), site_name) %]
+[% ELSE %]
+[% tprintf(loc('%s has a variety of RSS feeds and email alerts for local problems, including
+alerts for all problems within a particular ward or council, or all problems
+within a certain distance of a particular location.', "%s is the site name"), site_name) %]
+[% END %]
+</p>
+
+[% IF location_error %]
+ <div class="error">[% location_error | safe %]</div>
+[% ELSE %]
+ [% INCLUDE 'errors.html' %]
+[% END %]
+
+<p>
+[% IF c.cobrand.is_council %]
+[% tprintf(loc('To find out what local alerts we have for you, please enter your %s postcode or street name and area:'), c.cobrand.council_area) %]
+[% ELSE %]
+[% loc('To find out what local alerts we have for you, please enter your postcode or street name and area' ) %]
+[% END %]
+</p>
diff --git a/templates/web/base/alert/_list.html b/templates/web/base/alert/_list.html
index d997a5abb..782989a5c 100644
--- a/templates/web/base/alert/_list.html
+++ b/templates/web/base/alert/_list.html
@@ -22,24 +22,18 @@
<h3>[% loc('Problems in an area') %]</h3>
[% END %]
- <p id="rss_local">
- <a href="[% rss_feed_uri %]"><img src='/i/feed.png' width='16' height='16' title='[% loc('RSS feed of nearby problems') %]' alt='[% loc('RSS feed') %]' border='0'></a>
- <label class="label-containing-checkbox" for="[% rss_feed_id %]">
- <input type="radio" name="feed" id="[% rss_feed_id %]" value="[% rss_feed_id %]"[% IF rss_feed_id == selected_feed || selected_feed == '' %] checked[% END %]>
- [% tprintf( loc('Problems within %.1fkm of %s'), population_radius, name_of_location ) %]
- [% loc('(covers roughly 200,000 people)') %]
- </label>
- </p>
+ [% PROCESS 'alert/_list_rss_local.html' %]
<p id="rss_local_alt">
[% SET distance_options = '<a href="' _ rss_feed_2k _ ' ">2km</a> / <a href="' _ rss_feed_5k _ ' ">5km</a> / <a href="' _ rss_feed_10k _ '">10km</a> / <a href="' _ rss_feed_20k _ '">20km</a>' %]
- [% tprintf(loc('(we also have RSS feeds for problems within %s)', "%s is a list of distance links, e.g. [2km] / [5km] / [10km] / [20km]"), distance_options) %]
+ [% tprintf(loc('(we also have RSS feeds for problems within %s)', "%s is a list of distance links, e.g. [2km] / [5km] / [10km] / [20km]"), mark_safe(distance_options)) %]
</p>
[% FOREACH option IN options %]
<p>
- <a href="[% option.uri %]"><img src="/i/feed.png" width="16" height="16"
-title="[% option.rss_text %]" alt="RSS feed" border="0"></a>
+ <a href="[% option.uri %]" class="alerts-rss-link">
+ <img src="/i/feed.png" width="16" height="16" title="[% option.rss_text %]" alt="[% loc('RSS feed') %]">
+ </a>
<label class="label-containing-checkbox" for="[% option.id %]">
<input type="radio" name="feed" id="[% option.id %]" value="[% option.id %]"[% IF option.id == selected_feed %] checked[% END %]>
[% option.text %]
@@ -55,8 +49,9 @@ title="[% option.rss_text %]" alt="RSS feed" border="0"></a>
[% FOREACH option IN reported_to_options %]
<p>
- <a href="[% option.uri %]"><img src="/i/feed.png" width="16" height="16"
- title="[% option.rss_text %]" alt="RSS feed" border="0"></a>
+ <a href="[% option.uri %]" class="alerts-rss-link">
+ <img src="/i/feed.png" width="16" height="16" title="[% option.rss_text %]" alt="[% loc('RSS feed') %]">
+ </a>
<label class="label-containing-checkbox" for="[% option.id %]">
<input type="radio" name="feed" id="[% option.id %]" value="[% option.id %]"[% IF option.id == selected_feed %] checked[% END %]>
[% option.text %]
diff --git a/templates/web/base/alert/_list_rss_local.html b/templates/web/base/alert/_list_rss_local.html
new file mode 100644
index 000000000..a7fd82ca2
--- /dev/null
+++ b/templates/web/base/alert/_list_rss_local.html
@@ -0,0 +1,10 @@
+ <p id="rss_local">
+ <a href="[% rss_feed_uri %]" class="alerts-rss-link">
+ <img src="/i/feed.png" width="16" height="16" title="[% loc('RSS feed of nearby problems') %]" alt="[% loc('RSS feed') %]">
+ </a>
+ <label class="label-containing-checkbox" for="[% rss_feed_id %]">
+ <input type="radio" name="feed" id="[% rss_feed_id %]" value="[% rss_feed_id %]"[% IF rss_feed_id == selected_feed || selected_feed == '' %] checked[% END %]>
+ [% tprintf( loc('Problems within %.1fkm of %s'), population_radius, name_of_location ) %]
+ [% loc('(covers roughly 200,000 people)') %]
+ </label>
+ </p>
diff --git a/templates/web/base/alert/index.html b/templates/web/base/alert/index.html
index fa6e01fad..80186ded7 100644
--- a/templates/web/base/alert/index.html
+++ b/templates/web/base/alert/index.html
@@ -3,41 +3,19 @@
<h1>[% loc('Local RSS feeds and email alerts') %]</h1>
-<p>
-[% IF c.cobrand.is_council %]
-[% tprintf(loc('%s has a variety of RSS feeds and email alerts for local
-problems, including alerts for all problems within a particular ward, or all
-problems within a certain distance of a particular location.', "%s is the site name"), site_name) %]
-[% ELSE %]
-[% tprintf(loc('%s has a variety of RSS feeds and email alerts for local problems, including
-alerts for all problems within a particular ward or council, or all problems
-within a certain distance of a particular location.', "%s is the site name"), site_name) %]
-[% END %]
-</p>
-
-[% IF location_error %]
- <div class="error">[% location_error %]</div>
-[% ELSE %]
- [% INCLUDE 'errors.html' %]
-[% END %]
+[% PROCESS 'alert/_index_text.html' %]
-<p>
-[% IF c.cobrand.is_council %]
-[% tprintf(loc('To find out what local alerts we have for you, please enter your %s postcode or street name and area:'), c.cobrand.council_area) %]
-[% ELSE %]
-[% loc('To find out what local alerts we have for you, please enter your postcode or street name and area' ) %]
-[% END %]
-</p>
<form method="get" action="/alert/list" class="form-box js-geolocate">
<fieldset>
+ <legend class="visuallyhidden">[% loc('Search for location of email alert or RSS feed') %]</legend>
<label for="pc">[% loc('Postcode or street name and area') %]</label>
<p class="form-hint" id="pc-hint">[% tprintf(loc('e.g. ‘%s’ or ‘%s’'), c.cobrand.example_places) %]</p>
<div class="form-txt-submit-box">
<input class="form-control" type="text" id="pc" name="pc" value="[% pc | html %]" aria-describedby="pc-hint">
- <input class="green-btn" type="submit" value="[% loc('Go') %]">
+ [% INCLUDE 'around/_postcode_submit_button.html' attr='class="green-btn"' %]
</div>
</fieldset>
- <a href="/alert/list" id="geolocate_link">&hellip; [% loc('or locate me automatically') %]</a>
+ <a href="/alert/list" id="geolocate_link">&hellip; [% loc('or use my location') %]</a>
</form>
[% IF photos.size %]
diff --git a/templates/web/base/alert/list.html b/templates/web/base/alert/list.html
index 14215b65d..dbc877a69 100644
--- a/templates/web/base/alert/list.html
+++ b/templates/web/base/alert/list.html
@@ -10,7 +10,7 @@
[% IF pretty_pc %]
[%
- pretty_pc = pretty_pc | html | replace(' ', '&nbsp;');
+ pretty_pc = pretty_pc | replace(' ', ' '); # Non-breaking space
title = tprintf( loc("Local RSS feeds and email alerts for ‘%s’"), pretty_pc );
%]
[% END %]
diff --git a/templates/web/base/alert/updates.html b/templates/web/base/alert/updates.html
index a77f8d0f9..0fbed2254 100644
--- a/templates/web/base/alert/updates.html
+++ b/templates/web/base/alert/updates.html
@@ -5,7 +5,7 @@
[% INCLUDE 'errors.html' %]
-<p><a href="[% c.uri_for( '/rss', problem_id ) %]">
+<p><a href="[% c.uri_for( '/rss', problem.id ) %]">
<img src="/i/feed.png" width="16" height="16" title="[% loc('RSS feed') %]" alt="[% loc('RSS feed of updates to this problem' ) %]" border="0" style="float:right">
</a>
</p>
@@ -16,15 +16,27 @@
<form action="/alert/subscribe" method="post">
<fieldset>
+ [% IF c.user_exists %]
+ [% IF c.user.has_permission_to("contribute_as_another_user", problem.bodies_str_ids) %]
+ <label class="hidden n" for="alert_rznvy">[% loc('Email') %]</label>
+ <div class="form-txt-submit-box">
+ <input class="form-control" type="email" name="rznvy" id="alert_rznvy" value="[% email | html %]">
+ <input class="green-btn" type="submit" value="[% loc('Subscribe') %]">
+ </div>
+ [% ELSE %]
+ <input class="green-btn" type="submit" name="alert" value="[% loc('Subscribe') %]">
+ [% END %]
+ [% ELSE %]
<label class="hidden n" for="alert_rznvy">[% loc('Your email') %]</label>
<div class="form-txt-submit-box">
<input class="form-control" type="email" name="rznvy" id="alert_rznvy" value="[% email | html %]">
<input class="green-btn" type="submit" value="[% loc('Subscribe') %]">
</div>
+ [% END %]
<input type="hidden" name="token" value="[% csrf_token %]">
- <input type="hidden" name="id" value="[% problem_id | html %]">
+ <input type="hidden" name="id" value="[% problem.id | html %]">
<input type="hidden" name="type" value="updates">
</fieldset>
</form>
diff --git a/templates/web/base/around/_error_multiple.html b/templates/web/base/around/_error_multiple.html
index 34164973a..337ce7c77 100644
--- a/templates/web/base/around/_error_multiple.html
+++ b/templates/web/base/around/_error_multiple.html
@@ -10,7 +10,10 @@
[% IF match.icon %]
<img src="[% match.icon %]" alt="">
[% END %]
- <a href="/around?lat=[% match.latitude | uri %]&amp;lon=[% match.longitude | uri %][% IF c.req.params.category %]&amp;category=[% c.req.params.category | uri %][% END %]">[% match.address | html %]</a>
+ <a href="/around?lat=[% match.latitude | uri %]&amp;lon=[% match.longitude | uri ~%]
+ [%~ IF c.get_param('category') %]&amp;category=[% c.get_param('category') | uri %][% END ~%]
+ [%~ IF c.get_param('filter_category') %]&amp;filter_category=[% c.get_param('filter_category') | uri %][% END ~%]
+ [%~ IF c.get_param('filter_group') %]&amp;filter_group=[% c.get_param('filter_group') | uri %][% END %]">[% match.address | html %]</a>
</li>
[% END %]
</ul>
diff --git a/templates/web/base/around/_postcode_form_examples.html b/templates/web/base/around/_postcode_form_examples.html
new file mode 100644
index 000000000..975d33927
--- /dev/null
+++ b/templates/web/base/around/_postcode_form_examples.html
@@ -0,0 +1 @@
+<p class="form-hint" id="pc-hint">[% tprintf(loc('e.g. ‘%s’ or ‘%s’'), c.cobrand.example_places) %]</p>
diff --git a/templates/web/base/around/_postcode_submit_button.html b/templates/web/base/around/_postcode_submit_button.html
new file mode 100644
index 000000000..749a3a950
--- /dev/null
+++ b/templates/web/base/around/_postcode_submit_button.html
@@ -0,0 +1,6 @@
+<input type="submit" [% attr | safe %] value="[%
+ IF c.cobrand.moniker == 'cheshireeast';
+ 'Search for location';
+ ELSE;
+ loc('Go');
+ END %]">
diff --git a/templates/web/base/around/display_location.html b/templates/web/base/around/display_location.html
index 6c71ad631..d0592749e 100755
--- a/templates/web/base/around/display_location.html
+++ b/templates/web/base/around/display_location.html
@@ -51,9 +51,13 @@
<input type="hidden" name="latitude" id="fixmystreet.latitude" value="[% latitude | html %]">
<input type="hidden" name="longitude" id="fixmystreet.longitude" value="[% longitude | html %]">
+
+ [% IF c.get_param('filter_group') %]
+ <input type="hidden" name="filter_group" id="filter_group" value="[% c.get_param('filter_group') | html %]">
+ [% END %]
[% END %]
- [% map_html %]
+ [% map_html | safe %]
[% IF c.req.params.no_pins %]
<a class="big-hide-pins-link" rel='nofollow' href="[% c.uri_with( { no_pins => 0 } ) %]">[% loc('Show pins') %]</a>
@@ -62,7 +66,7 @@
[% END %]
<p class="sub-map-links" id='sub_map_links'>
- [% map_sub_links %]
+ [% map_sub_links | safe %]
[% IF c.req.params.no_pins %]
<a id='hide_pins_link' rel='nofollow' href="[% c.uri_with( { no_pins => 0 } ) %]">[% loc('Show pins') %]</a>
[% ELSE %]
diff --git a/templates/web/base/around/location_error.html b/templates/web/base/around/location_error.html
index fc9b2b8ce..8e1a75008 100644
--- a/templates/web/base/around/location_error.html
+++ b/templates/web/base/around/location_error.html
@@ -1 +1 @@
-<p class="form-error">[% location_error %]</p>
+<p class="form-error">[% location_error | safe %]</p>
diff --git a/templates/web/base/around/postcode_form.html b/templates/web/base/around/postcode_form.html
index ca82f3388..60fa1a703 100644
--- a/templates/web/base/around/postcode_form.html
+++ b/templates/web/base/around/postcode_form.html
@@ -10,21 +10,30 @@
<form action="[% c.uri_for('/around') %]" method="get" name="postcodeForm" id="postcodeForm" class="js-geolocate">
<label for="pc">[% question %]:</label>
- <p class="form-hint" id="pc-hint">[% tprintf(loc('e.g. ‘%s’ or ‘%s’'), c.cobrand.example_places) %]</p>
+ [% INCLUDE 'around/_postcode_form_examples.html' %]
<div>
<input type="text" name="pc" value="[% pc | html %]" id="pc" size="10" maxlength="200" required aria-describedby="pc-hint">
- <input type="submit" value="[% loc('Go') %]" id="sub">
+ [% INCLUDE 'around/_postcode_submit_button.html' attr='id="sub"' %]
</div>
[% IF partial_token %]
<input type="hidden" name="partial" value="[% partial_token.token %]">
[% END %]
- [% IF c.user_exists AND c.user.categories.size %]
+ [% IF c.get_param('filter_category') OR c.get_param('filter_group') %]
+ <input type="hidden" name="filter_category" value="[% c.get_param('filter_category') | html %]">
+ <input type="hidden" name="filter_group" value="[% c.get_param('filter_group') | html %]">
+ [% ELSIF c.user_exists AND c.user.categories.size %]
<input type="hidden" name="filter_category" value="[% c.user.categories_string | html %]">
[% END %]
</form>
- <a href="[% c.uri_for('/around') %]" id="geolocate_link">&hellip; [% loc('or locate me automatically') %]</a>
+ [%~ SET link_params = {
+ geolocate = 1
+ };
+ IF c.get_param('filter_category'); link_params.filter_category = c.get_param('filter_category'); END;
+ IF c.get_param('filter_group'); link_params.filter_group = c.get_param('filter_group'); END;
+ %]
+ <a href="[% c.uri_for('/around', link_params) | html %]" id="geolocate_link">&hellip; [% loc('or use my location') %]</a>
[% UNLESS possible_location_matches %]
[% INCLUDE 'around/_postcode_form_post.html' %]
diff --git a/templates/web/base/around/tabbed_lists.html b/templates/web/base/around/tabbed_lists.html
index f135684b9..b3284468a 100755
--- a/templates/web/base/around/tabbed_lists.html
+++ b/templates/web/base/around/tabbed_lists.html
@@ -1,5 +1,7 @@
[% INCLUDE "reports/_list-filters.html" %]
+<h2 class="hidden-js">[% loc('Reports') %]</h2>
+
<div class="js-pagination">
[% INCLUDE 'pagination.html' param = 'p' %]
</div>
diff --git a/templates/web/base/auth/2fa/form-add.html b/templates/web/base/auth/2fa/form-add.html
new file mode 100644
index 000000000..3603ec46c
--- /dev/null
+++ b/templates/web/base/auth/2fa/form-add.html
@@ -0,0 +1,17 @@
+<p>[% loc('Please scan this image with your app, or enter the text code into your app, then generate a new one-time code and enter it below:') %]</p>
+
+<p align="center"><img src="[% qr_code %]" alt=""></p>
+<p align="center">[% secret32.replace('(....)', '$1 ') %]</p>
+
+[% IF incorrect_code %]
+ <div class="form-error">[% loc('Sorry, that wasn&rsquo;t the correct code') %].
+ [% loc('Try again') %]:</div>
+[% END %]
+
+<label for="2fa_code">[% loc('Code') %]</label>
+<div class="form-txt-submit-box">
+ <input autofocus class="form-control" type="number" id="2fa_code" name="2fa_code" value="" required>
+ <input type="submit" value="[% loc('Submit') %]" class="btn-primary">
+</div>
+<input type="hidden" name="secret32" value="[% secret32 %]">
+<input type="hidden" name="2fa_action" value="confirm">
diff --git a/templates/web/base/auth/2faform.html b/templates/web/base/auth/2fa/form.html
index bd6a7bd18..e093f6554 100644
--- a/templates/web/base/auth/2faform.html
+++ b/templates/web/base/auth/2fa/form.html
@@ -8,7 +8,7 @@
<h1>[% loc("Nearly done! Now check your phone&hellip;") %]</h1>
<p>[% loc("Please generate a two-factor code and enter it below:") %]</p>
[% END %]
- <form action="/auth" method="post">
+ <form action="/[% form_action OR 'auth' %]" method="post">
<input type="hidden" name="username" value="[% c.get_param('username') | html %]">
<input type="hidden" name="password_sign_in" value="[% c.get_param('password_sign_in') | html %]">
<input type="hidden" name="r" value="[% c.get_param('r') | html %]">
diff --git a/templates/web/base/auth/2fa/intro.html b/templates/web/base/auth/2fa/intro.html
new file mode 100644
index 000000000..7813507a3
--- /dev/null
+++ b/templates/web/base/auth/2fa/intro.html
@@ -0,0 +1,32 @@
+[%
+INCLUDE 'header.html', title = loc('Two-factor authentication'), bodyclass = 'fullwidthpage'
+%]
+
+<div class="confirmation-header confirmation-header--phone">
+ <h1>[% loc('Two-factor authentication') %]</h1>
+
+ <form action="/[% form_action OR 'auth' %]" method="post">
+
+ [% IF stage == 'success' %]
+ <p>[% loc('Thanks, you have successfully enabled two-factor authentication on your account.') %]</p>
+ <p><a href="/my">[% loc('Your account') %]</a></p>
+
+ [% ELSIF stage == 'activate' %]
+ [% PROCESS 'auth/2fa/form-add.html' %]
+
+ [% ELSE # stage is intro %]
+ <p align="center">[% loc('Your account requires two-factor authentication to be set up.') %]</p>
+ <p align="center">
+ <input class="btn-primary" type="submit" value="[% loc('Activate two-factor authentication') %]">
+ </p>
+ <input type="hidden" name="2fa_action" value="activate">
+ [% END %]
+
+ <input type="hidden" name="username" value="[% c.get_param('username') | html %]">
+ <input type="hidden" name="password_sign_in" value="[% c.get_param('password_sign_in') | html %]">
+ <input type="hidden" name="r" value="[% c.get_param('r') | html %]">
+ <input type="hidden" name="token" value="[% token | html %]">
+ </form>
+</div>
+
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/base/auth/create.html b/templates/web/base/auth/create.html
index 1886da95b..b8830e385 100644
--- a/templates/web/base/auth/create.html
+++ b/templates/web/base/auth/create.html
@@ -1,6 +1,8 @@
[%
IF forgotten;
title = loc('Forgot password');
+ELSIF expired_password;
+ title = loc('Password expired');
ELSE;
title = loc('Create an account');
END;
@@ -9,9 +11,11 @@ INCLUDE 'header.html', bodyclass='authpage' %]
<h1>
[% title %]
+ [% IF NOT expired_password %]
<small>
[% tprintf(loc('or <a href="%s">sign in</a>'), '/auth') %]
</small>
+ [% END %]
</h1>
[% IF forgotten %]
@@ -19,23 +23,32 @@ INCLUDE 'header.html', bodyclass='authpage' %]
[% IF c.config.SMS_AUTHENTICATION %]
[% loc('Sign in by email or text, providing a new password. When you click the link in your email or enter the SMS authentication code, your password will be updated.') %]</p>
[% ELSE %]
- [% loc('Sign in by email instead, providing a new password. When you click the link in your email, your password will be updated.') %]</p>
+ [% loc('Sign in by email instead, providing a new password. When you click the link in your email, your password will be updated.') %]
[% END %]
</p>
+[% ELSIF expired_password %]
+<p>
+ <a href="/auth/sign_out">[% loc('Sign out') %]</a>
+</p>
+<p>
+ [% loc('Your password has expired, please create a new one below. When you click the link in your email, your password will be updated.') %]
+</p>
[% END %]
-<form action="/auth/[% forgotten ? 'forgot' : 'create' %]" method="post" name="general_auth" class="validate">
+<form action="/auth/[% expired_password ? 'expired' : forgotten ? 'forgot' : 'create' %]" method="post" name="general_auth" class="validate">
<fieldset>
<input type="hidden" name="r" value="[% c.req.params.r | html %]">
+ [% IF NOT expired_password %]
+
[% 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 %]
+ [% 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 %]
@@ -43,6 +56,8 @@ INCLUDE 'header.html', bodyclass='authpage' %]
[% END %]
<input type="text" class="form-control required" id="username" name="username" value="[% username | html %]" autofocus autocomplete="username">
+ [% END %]
+
[% IF field_errors.password_register %]
<p class='form-error'>[% field_errors.password_register %]</p>
[% END %]
@@ -54,7 +69,7 @@ INCLUDE 'header.html', bodyclass='authpage' %]
<div class="form-txt-submit-box">
<input class="required form-control js-password-validate" type="password" name="password_register" id="password_register" value="" autocomplete="new-password">
- <input class="green-btn" type="submit" name="sign_in_by_code" value="[% loc('Sign in') %]">
+ <input class="green-btn" type="submit" name="sign_in_by_code" value="[% expired_password ? loc('Reset') : loc('Sign in') %]">
</div>
</fieldset>
diff --git a/templates/web/base/auth/general.html b/templates/web/base/auth/general.html
index e2e880871..30b1bf63f 100644
--- a/templates/web/base/auth/general.html
+++ b/templates/web/base/auth/general.html
@@ -24,15 +24,22 @@
[% IF NOT oauth_need_email AND c.cobrand.social_auth_enabled %]
[% IF c.config.FACEBOOK_APP_ID %]
<div class="form-box">
- <button name="facebook_sign_in" id="facebook_sign_in" value="facebook_sign_in" class="btn btn--block btn--social btn--facebook">
+ <button name="social_sign_in" id="facebook_sign_in" value="facebook" class="btn btn--block btn--social btn--facebook">
<img alt="" src="/i/facebook-icon-32.png" width="17" height="32">
[% loc('Log in with Facebook') %]
</button>
</div>
[% END %]
+ [% IF c.cobrand.feature('oidc_login') %]
+ <div class="form-box">
+ <button name="social_sign_in" id="oidc_sign_in" value="oidc" class="btn btn--block btn--social btn--oidc">
+ [% tprintf(loc('Login with %s'), c.cobrand.feature('oidc_login').display_name) %]
+ </button>
+ </div>
+ [% END %]
[% IF c.config.TWITTER_KEY %]
<div class="form-box">
- <button name="twitter_sign_in" id="twitter_sign_in" value="twitter_sign_in" class="btn btn--block btn--social btn--twitter">
+ <button name="social_sign_in" id="twitter_sign_in" value="twitter" class="btn btn--block btn--social btn--twitter">
<img alt="" src="/i/twitter-icon-32.png" width="17" height="32">
[% loc('Log in with Twitter') %]
</button>
diff --git a/templates/web/base/auth/generate_token.html b/templates/web/base/auth/generate_token.html
index f7061be45..9152d0cb3 100644
--- a/templates/web/base/auth/generate_token.html
+++ b/templates/web/base/auth/generate_token.html
@@ -8,37 +8,63 @@ INCLUDE 'header.html', title = loc('Security'), bodyclass = 'fullwidthpage'
<h1>[% loc('Your token has been generated') %]</h1>
<p>
- <strong>[% loc('Token:') %]</strong>
+ <strong>[% loc('Token') %]:</strong>
<span>[% existing_token | html %]</span>
</p>
<p><a href="/my">[% loc('Your account') %]</a></p>
</div>
-[% ELSIF toggle_2fa_on %]
+[% ELSIF toggle_2fa_off %]
<div class="confirmation-header">
- <h1>[% loc('Two-factor authentication has been activated') %]</h1>
-
- <p align="center"><img src="[% qr_code %]"></p>
- <p align="center">[% secret32.replace('(....)', '$1 ') %]</p>
+ <h1>[% loc('Two-factor authentication has been deactivated') %]</h1>
<p><a href="/my">[% loc('Your account') %]</a></p>
</div>
-[% ELSIF toggle_2fa_off %]
+[% ELSIF stage == 'success' %]
<div class="confirmation-header">
- <h1>[% loc('Two-factor authentication has been deactivated') %]</h1>
-
+ <h1>[% loc('Two-factor authentication has been activated') %]</h1>
+ <p>[% loc('Thanks, you have successfully enabled two-factor authentication on your account.') %]</p>
<p><a href="/my">[% loc('Your account') %]</a></p>
</div>
+[% ELSIF stage == 'activate' %]
+ <div class="confirmation-header confirmation-header--phone">
+ <h1>[% loc('Two-factor authentication') %]</h1>
+
+ <form action="[% c.uri_for_action('/auth/profile/generate_token') %]" method="post" name="generate_token">
+ <input type="hidden" name="token" value="[% csrf_token %]">
+ [% PROCESS 'auth/2fa/form-add.html' %]
+ </form>
+
[% ELSE %]
<h1>[% loc('Security') %]</h1>
<form action="[% c.uri_for_action('/auth/profile/generate_token') %]" method="post" name="generate_token">
+
+<h2>[% loc('Two-factor authentication') %]</h2>
+
+ <input type="hidden" name="token" value="[% csrf_token %]">
+
+ <p>
+ [% IF c.user.is_superuser || c.user.from_body %]
+ [% IF has_2fa %]
+ <input name="2fa_activate" type="submit" class="btn" value="[% loc('Change two-factor authentication') %]">
+ [% IF !c.cobrand.call_hook('must_have_2fa', c.user) %]
+ <input name="2fa_deactivate" type="submit" class="btn" value="[% loc('Deactivate two-factor authentication') %]">
+ [% END %]
+ [% ELSE %]
+ <input name="2fa_activate" type="submit" class="btn" value="[% loc('Activate two-factor authentication') %]">
+ [% END %]
+ [% END %]
+ </p>
+
+<h2>[% loc('Token') %]</h2>
+
<input type="hidden" name="token" value="[% csrf_token %]">
[% IF existing_token %]
@@ -50,17 +76,15 @@ INCLUDE 'header.html', title = loc('Security'), bodyclass = 'fullwidthpage'
<p>
<input name="generate_token" type="submit" class="btn" value="[% existing_token ? loc('Replace token') : loc('Generate token') %]">
- [% IF c.user.is_superuser %]
- <input name="toggle_2fa" type="submit" class="btn" value="[% has_2fa ? loc('Deactivate two-factor authentication') : loc('Activate two-factor authentication') %]">
- [% END %]
</p>
-</form>
[% IF existing_token %]
<p>
[% loc('If you generate a new token the existing token will no longer work.') %]
</p>
[% END %]
+
+</form>
[% END %]
[% INCLUDE 'footer.html' %]
diff --git a/templates/web/base/common_header_tags.html b/templates/web/base/common_header_tags.html
index e29d96655..6edcc63a4 100644
--- a/templates/web/base/common_header_tags.html
+++ b/templates/web/base/common_header_tags.html
@@ -1,6 +1,13 @@
[% SET start = c.config.ADMIN_BASE_URL IF admin %]
<meta http-equiv="content-type" content="text/html; charset=utf-8">
+<link rel="manifest" href="/.well-known/manifest.webmanifest">
+[% IF manifest_theme %]
+ <meta name='theme-color' content='[% manifest_theme.theme_colour %]'>
+ [% FOREACH icon IN manifest_theme.icons %]
+ <link rel="apple-touch-icon" sizes="[% icon.sizes %]" href="[% icon.src %]">
+ [% END %]
+[% END %]
[% IF csrf_token %]
<meta content="[% csrf_token %]" name="csrf-token" />
@@ -15,6 +22,14 @@
(function(a){a=a.documentElement;a.className=a.className.replace(/\bno-js\b/,"js");var b=-1<a.className.indexOf("ie8");b=Modernizr.mq("(min-width: 48em)")||b?"desktop":"mobile";"IntersectionObserver"in window&&(a.className+=" lazyload");"mobile"==b&&(a.className+=' mobile[% " map-fullscreen only-map map-reporting" IF page == "around" %]')})(document);
</script>
+<script nonce="[% csp_nonce %]">
+if ('serviceWorker' in navigator) {
+ window.addEventListener('load', function() {
+ navigator.serviceWorker.register('/service-worker.js');
+ });
+}
+</script>
+
[% IF robots %]
<meta name="robots" content="[% robots %]">
[% ELSIF c.config.STAGING_SITE %]
@@ -23,10 +38,7 @@
[% INCLUDE 'header_rss.html' %]
-<title>
- [% "$title :: " | html IF title %]
- [% site_name -%]
-</title>
+[% INCLUDE 'header/title.html' %]
[% IF bodyclass.match('frontpage') %]
<link rel="prefetch" href="[% version('/js/validation_rules.js') %]">
diff --git a/templates/web/base/common_scripts.html b/templates/web/base/common_scripts.html
index fd7011763..b8c4db343 100644
--- a/templates/web/base/common_scripts.html
+++ b/templates/web/base/common_scripts.html
@@ -39,8 +39,14 @@ IF c.user_exists AND (c.user.from_body OR c.user.is_superuser);
version('/jslib/jquery-1.7.2.min.js'),
version('/cobrands/fixmystreet/staff.js')
);
+ IF bodyclass.match('mappage') AND c.cobrand.suggest_duplicates AND NOT login_success AND NOT oauth_need_email;
+ scripts.push(
+ version('/js/duplicates.js')
+ );
+ END;
IF c.user.has_body_permission_to('planned_reports');
scripts.push(
+ version('/vendor/idb-keyval-iife.min.js'),
version('/cobrands/fixmystreet/offline.js'),
);
END;
@@ -68,6 +74,7 @@ END;
IF admin;
scripts.push(
version('/cobrands/fixmystreet/admin.js'),
+ version('/vendor/html5sortable.min.js'),
);
END;
diff --git a/templates/web/base/contact/enquiry/index.html b/templates/web/base/contact/enquiry/index.html
new file mode 100644
index 000000000..c88ca221e
--- /dev/null
+++ b/templates/web/base/contact/enquiry/index.html
@@ -0,0 +1,79 @@
+[% INCLUDE 'header.html',
+ bodyclass = 'twothirdswidthpage',
+ title = loc('General Enquiry')
+%]
+
+<form method="post" action="/contact/enquiry/submit" class="validate" enctype="multipart/form-data">
+ <input type="hidden" name="token" value="[% csrf_token %]">
+ <input type="hidden" name="submit_problem" value="1">
+ <fieldset>
+ [% INCLUDE 'errors.html' %]
+
+ <label for="form_name">[% loc('Your name') %]</label>
+ [% IF field_errors.name %]
+ <div class="form-error">[% field_errors.name %]</div>
+ [% END %]
+ <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>
+ [% 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">
+
+ <div class="form-group">
+ <label for="form_phone">[% loc('Your phone number') %]</label>
+ <span class="required-text required-text--optional">[% loc('optional') %]</span>
+ <input type="text" class="form-control extra.phone" name="extra.phone" id="form_phone" value="[% report.user.phone | html %]" size="30">
+ </div>
+
+ <label for="form_category">[% loc('Subject') %]</label>
+ [% IF field_errors.category %]
+ <div class="form-error">[% field_errors.category %]</div>
+ [% END %]
+ <select class="form-control required" name="category" id="category">
+ <option value="">[% loc('-- Please select --') %]</option>
+ [% FOREACH contact IN contacts %]
+ <option value="[% contact.category | html %]" [% "selected" IF report.category == contact.category %]>[% contact.category | html %]</option>
+ [% END %]
+ </select>
+
+ <label for="form_detail">[% loc('Message') %]</label>
+ [% IF field_errors.detail %]
+ <div class="form-error">[% field_errors.detail %]</div>
+ [% END %]
+ <textarea class="form-control required" name="detail" id="form_detail" rows="7" cols="50">[% report.detail | html %]</textarea>
+
+ <input type="hidden" name="upload_fileid" value="[% upload_fileid %]">
+ <label for="form_photo">
+ [% loc('Photos/Documents') %]
+ </label>
+
+ [% IF field_errors.photo %]
+ <p class='form-error'>[% field_errors.photo %]</p>
+ [% END %]
+
+ <div id="form_photos">
+ [% IF upload_fileid OR report.get_extra_metadata('enquiry_files').keys.count %]
+ <p>[% loc('You have already attached files to this report. Note that you can attach a maximum of 3 to this report (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 %]
+
+ [% IF report.get_extra_metadata('enquiry_files') %]
+ [% FOREACH id IN report.get_extra_metadata('enquiry_files').values %]
+ [% id %]<br />
+ [% END %]
+ <input type="hidden" name="enquiry_files" value="[% enquiry_files | html %]" />
+ [% END %]
+ [% END %]
+ <p><input type="file" name="photo1" id="form_photo"></p>
+ <p><input type="file" name="photo2" id="form_photo2"></p>
+ <p><input type="file" name="photo3" id="form_photo3"></p>
+ </div>
+
+ <input class="final-submit green-btn" type="submit" value="[% loc('Send') %]">
+
+ </fieldset></form>
+
+[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/base/contact/enquiry/submit.html b/templates/web/base/contact/enquiry/submit.html
new file mode 100644
index 000000000..050fd31a9
--- /dev/null
+++ b/templates/web/base/contact/enquiry/submit.html
@@ -0,0 +1 @@
+[% INCLUDE 'contact/submit.html' %]
diff --git a/templates/web/base/contact/index.html b/templates/web/base/contact/index.html
index 85fa40f89..05a24160f 100644
--- a/templates/web/base/contact/index.html
+++ b/templates/web/base/contact/index.html
@@ -12,7 +12,11 @@
[% IF c.cobrand.moniker == 'fixmystreet' %]
<h1>FixMyStreet technical support</h1>
[% ELSE %]
-<h1>[% loc('Contact the team') %]</h1>
+ [% TRY %]
+ [% INCLUDE 'contact/_heading.html' %]
+ [% CATCH file %]
+ <h1>[% loc('Contact the team') %]</h1>
+ [% END %]
[% END %]
<form method="post" action="/contact/submit" class="validate">
@@ -92,7 +96,7 @@
<div class="form-group">
<label for="form_phone">[% loc('Your phone number') %]</label>
- <span class="required-text required-text--optional">optional</span>
+ <span class="required-text required-text--optional">[% loc('optional') %]</span>
<input type="text" class="form-control extra.phone" name="extra.phone" id="form_phone" value="" size="30">
</div>
diff --git a/templates/web/bromley/about/heatmap-list.html b/templates/web/base/dashboard/heatmap-list.html
index e04df8581..d736a11f4 100644
--- a/templates/web/bromley/about/heatmap-list.html
+++ b/templates/web/base/dashboard/heatmap-list.html
@@ -2,7 +2,7 @@
[% INCLUDE column problems = five_newest %]
<h3>Five most recent commented reports<br>
-<small>Not from yourself or Confirm</small>
+<small>Not from yourself/backend</small>
</h3>
[% INCLUDE column problems = five_commented %]
diff --git a/templates/web/bromley/about/heatmap.html b/templates/web/base/dashboard/heatmap.html
index 0cb8bfb1b..ca4d02926 100755
--- a/templates/web/bromley/about/heatmap.html
+++ b/templates/web/base/dashboard/heatmap.html
@@ -1,12 +1,15 @@
[%
- map_js.push(version('/cobrands/bromley/HeatmapLayer.js'));
+ map_js.push(
+ '/vendor/HeatmapLayer.js',
+ '/cobrands/fixmystreet/density-map.js',
+ );
PROCESS "maps/${map.type}.html";
SET bodyclass = 'mappage';
INCLUDE 'header.html',
title = tprintf(loc('%s - Summary reports'), body.name)
%]
-[% map_html %]
+[% map_html | safe %]
</div>
<div id="map_sidebar">
@@ -18,7 +21,9 @@
<div class="full-width">
-[% INCLUDE "reports/_list-filters.html", use_form_wrapper = 1 %]
+[% INCLUDE "reports/_list-filters.html", use_form_wrapper = 1 heatmap=1 %]
+
+<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 %]">
@@ -35,14 +40,14 @@ In wards <select class="form-control js-multiple" multiple id="wards" name="ward
</div>
<p class="segmented-control segmented-control--radio">
- <input type="radio" name="heatmap" id="heatmap_yes" value="Yes">
+ <input type="radio" name="heatmap" id="heatmap_yes" value="Yes" checked>
<label class="btn" for="heatmap_yes">Heatmap</label>
- <input type="radio" name="heatmap" id="heatmap_no" value="No" checked>
+ <input type="radio" name="heatmap" id="heatmap_no" value="No">
<label class="btn" for="heatmap_no">Pin map</label>
</p>
<div id="js-reports-list">
- [% INCLUDE 'about/heatmap-list.html' %]
+ [% INCLUDE 'dashboard/heatmap-list.html' %]
</div>
</div>
diff --git a/templates/web/base/dashboard/index.html b/templates/web/base/dashboard/index.html
index c90823d37..5ac414bde 100644
--- a/templates/web/base/dashboard/index.html
+++ b/templates/web/base/dashboard/index.html
@@ -38,9 +38,10 @@
<p>
<label for="category">[% loc('Category:') %]</label>
<select class="form-control" name="category" id="category"><option value=''>[% loc('All') %]</option>
- [% FOR cat IN contacts %]
+ [% BLOCK category_option %]
<option value='[% cat.category | html %]'[% ' selected' IF category == cat.category %]>[% cat.category_display | html %]</option>
[% END %]
+ [%~ INCLUDE 'report/new/_category_select.html' category_options=contacts ~%]
</select>
</p>
diff --git a/templates/web/base/debug_footer.html b/templates/web/base/debug_footer.html
deleted file mode 100644
index a1b7fc155..000000000
--- a/templates/web/base/debug_footer.html
+++ /dev/null
@@ -1,40 +0,0 @@
-[% IF c.config.STAGING_SITE and c.config.SHOW_DEBUG %]
-
-<hr style="clear: both;">
-
-<ul>
- <li>cobrand.moniker: [% c.cobrand.moniker %]</li>
- <li>additional_template_paths: [% additional_template_paths.join(', ') || '--empty--' %]</li>
- <li>lang_code: [% lang_code %]</li>
- <li>user.id: [% c.user.id || '--not logged in--' %]</li>
-</ul>
-
-<style type="text/css">
- #overrides_form {
- font-size: 80%;
- }
- #overrides_form label {
- float: left;
- text-align: right;
- padding-right: 0.5em;
- width: 12em;
- }
-
-</style>
-
-<!-- Use a post so that we don't clutter up the url -->
-<form action="" method="post" id="overrides_form" name="overrides_form">
-
- <label for="_override_clear_all">Clear all overrides:</label>
- <input type="checkbox" name="_override_clear_all" id="_override_clear_all" value="1"><br>
-
- [% FOREACH k IN ['cobrand_moniker', 'lang'] %]
- <label for="override_[% k %]">[% k %]:</label>
- <input type="text" name="_override_[% k %]" id="override_[% k %]" value="[% c.get_override(k)%]"><br>
- [% END %]
-
- <label>&nbsp;</label><input type="submit" value="Change overrides">
-</form>
-
-[% END %]
-
diff --git a/templates/web/base/debug_header.html b/templates/web/base/debug_header.html
index 92ccbc357..222878871 100644
--- a/templates/web/base/debug_header.html
+++ b/templates/web/base/debug_header.html
@@ -1,5 +1,5 @@
-[% IF c.config.STAGING_SITE and c.config.SHOW_DEBUG %]
- <p class="dev-site-notice">
- [% loc("This is a developer site; things might break at any time, and the database will be periodically deleted.") %]
- </p>
+[% IF c.config.STAGING_SITE and !c.config.STAGING_FLAGS.hide_staging_banner ~%]
+ <div class="dev-site-notice">
+ [% loc("Staging site") %]
+ </div>
[% END %]
diff --git a/templates/web/base/defect_type/format.html b/templates/web/base/defect_type/format.html
deleted file mode 100644
index 3c0781501..000000000
--- a/templates/web/base/defect_type/format.html
+++ /dev/null
@@ -1,9 +0,0 @@
-[%
-# This template can be overridden by cobrands if they've added extra fields
-# to the DefectType model (e.g Cobrand::Oxfordshire->defect_type_extra_fields)
-# which should be used to represent this DefectType
-# to the user in the inspect form.
-~%]
-[% MACRO defect_type_format BLOCK ~%]
-[%~ defect_type.name | html ~%]
-[%~ END %] \ No newline at end of file
diff --git a/templates/web/base/errors/generic.html b/templates/web/base/errors/generic.html
index 241b310de..6d4acccf8 100755
--- a/templates/web/base/errors/generic.html
+++ b/templates/web/base/errors/generic.html
@@ -1,12 +1,13 @@
-[% INCLUDE 'header.html', bodyclass = 'fullwidthpage', title = loc('Error') %]
+[% DEFAULT title = loc('Error') %]
+[% INCLUDE 'header.html', bodyclass = 'fullwidthpage', title = title %]
[% IF csrf_token ~%]
<input type="hidden" name="token" value="[% csrf_token %]">
[% END ~%]
<div class="confirmation-header confirmation-header--failure">
- <h1>[% loc('Error') %]</h1>
- <p>[% message %]</p>
+ <h1>[% title %]</h1>
+ <p>[% message | safe %]</p>
</div>
[% INCLUDE 'footer.html' %]
diff --git a/templates/web/base/footer.html b/templates/web/base/footer.html
index e2bdbb01a..e2bdbb01a 100755..100644
--- a/templates/web/base/footer.html
+++ b/templates/web/base/footer.html
diff --git a/templates/web/base/header.html b/templates/web/base/header.html
index 7f423ff9e..b3d77b3a6 100644
--- a/templates/web/base/header.html
+++ b/templates/web/base/header.html
@@ -4,12 +4,9 @@
# SET html_att = html_att _ ' dir="rtl"';
-%]
<!doctype html>
-<!--[if IE 8]> <html class="no-js ie8"[% html_att %]><![endif]-->
-<!--[if IE 9]> <html class="no-js ie9"[% html_att %]><![endif]-->
-<!--[if gt IE 9]><!--><html class="no-js"[% html_att %]
-[% IF appcache ~%]
- manifest="/offline/appcache.manifest"
-[%~ END %]><!--<![endif]-->
+<!--[if IE 8]> <html class="no-js ie8"[% html_att | safe %]><![endif]-->
+<!--[if IE 9]> <html class="no-js ie9"[% html_att | safe %]><![endif]-->
+<!--[if gt IE 9]><!--><html class="no-js"[% html_att | safe %]><!--<![endif]-->
<head>
<meta name="viewport" content="initial-scale=1.0">
@@ -26,15 +23,14 @@
[% TRY %][% PROCESS 'set_body_class.html' %][% CATCH file %][% END %]
<body class="[% bodyclass | html IF bodyclass %]">
+ [% INCLUDE 'debug_header.html' %]
[% TRY %][% PROCESS 'before_wrapper.html' %][% CATCH file %][% END %]
<div class="wrapper">
<div class="table-cell">
[% INCLUDE 'header_site.html' %]
- [% pre_container_extra %]
+ [% pre_container_extra | safe %]
<div class="container">
<div class="content[% " $mainclass" | html IF mainclass %]" role="main">
-
- <!-- [% INCLUDE 'debug_header.html' %] -->
diff --git a/templates/web/base/header/css.html b/templates/web/base/header/css.html
index 219369465..a5d2580e8 100644
--- a/templates/web/base/header/css.html
+++ b/templates/web/base/header/css.html
@@ -8,4 +8,4 @@
<![endif]-->
<link rel="stylesheet" href="[% version('/vendor/OpenLayers/theme/default/style.css') %]">
-[% extra_css %]
+[% extra_css | safe %]
diff --git a/templates/web/base/header/title.html b/templates/web/base/header/title.html
new file mode 100644
index 000000000..f3ff5119c
--- /dev/null
+++ b/templates/web/base/header/title.html
@@ -0,0 +1,4 @@
+<title>
+ [% tprintf('%s :: ', title) IF title %]
+ [% site_name -%]
+</title>
diff --git a/templates/web/base/header_opengraph.html b/templates/web/base/header_opengraph.html
index 8cda4c717..6d2b55fed 100644
--- a/templates/web/base/header_opengraph.html
+++ b/templates/web/base/header_opengraph.html
@@ -1,5 +1,5 @@
<meta property="og:url" content="[% c.cobrand.base_url %][% c.req.uri.path %]">
- <meta property="og:title" content="[% title || site_name | html %]">
+ <meta property="og:title" content="[% title || site_name %]">
<meta property="og:site_name" content="[% site_name %]">
[% IF c.req.uri.path == '/' %]<meta property="og:description" content="[% loc('Report, view, and discuss local street-related problems.') %]">[% END %]
<meta property="og:type" content="website">
diff --git a/templates/web/base/header_opengraph_image.html b/templates/web/base/header_opengraph_image.html
index 7ec1aabb0..4cd106fc8 100644
--- a/templates/web/base/header_opengraph_image.html
+++ b/templates/web/base/header_opengraph_image.html
@@ -1,4 +1,13 @@
+ [% IF problem.photo %]
+ [% photo = problem.photos.first %]
+ [% data = problem.get_first_image_og %]
+ <meta property="og:image" content="[% c.cobrand.base_url %][% photo.url_og %]">
+ <meta property="og:image:type" content="[% data.content_type %]">
+ <meta property="og:image:width" content="[% data.width %]">
+ <meta property="og:image:height" content="[% data.height %]">
+ [% ELSE %]
<meta property="og:image" content="[% c.cobrand.base_url %]/cobrands/fixmystreet/images/fms-og_image.jpg">
<meta property="og:image:type" content="image/jpeg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
+ [% END %]
diff --git a/templates/web/base/js/translation_strings.html b/templates/web/base/js/translation_strings.html
index 881f6ecb9..2eb652c1f 100644
--- a/templates/web/base/js/translation_strings.html
+++ b/templates/web/base/js/translation_strings.html
@@ -3,105 +3,108 @@ var fixmystreet = fixmystreet || {};
fixmystreet.password_minimum_length = [% c.cobrand.password_minimum_length %];
translation_strings = {
- update: '[% loc('Please enter a message') | replace("'", "\\'") %]',
+ update: '[% loc('Please enter a message', "JS") %]',
+ error: '[% loc('Error', "JS") %]',
title: {
- required: '[% loc('Please enter a subject') | replace("'", "\\'") %]',
- maxlength: '[% loc('Summaries are limited to {0} characters in length. Please shorten your summary') | replace("'", "\\'") %]'
+ required: '[% loc('Please enter a subject', "JS") %]',
+ maxlength: '[% loc('Summaries are limited to {0} characters in length. Please shorten your summary', "JS") %]',
+ notEmail: '[% loc('Please make sure you are not including an email address', "JS") %]'
},
detail: {
- required: '[% loc('Please enter some details') | replace("'", "\\'") %]',
- maxlength: '[% loc('Reports are limited to {0} characters in length. Please shorten your report') | replace("'", "\\'") %]',
+ required: '[% loc('Please enter some details', "JS") %]',
+ maxlength: '[% loc('Reports are limited to {0} characters in length. Please shorten your report', "JS") %]',
},
name: {
- required: '[% loc('Please enter your name') | replace("'", "\\'") %]',
- validName: '[% loc('Please enter your full name, councils need this information – if you do not wish your name to be shown on the site, untick the box below') | replace("'", "\\'") %]'
+ required: '[% loc('Please enter your name', "JS") %]',
+ validName: '[% loc('Please enter your full name, councils need this information – if you do not wish your name to be shown on the site, untick the box below', "JS") %]'
},
- category: '[% loc('Please choose a category') | replace("'", "\\'") %]',
+ category: '[% loc('Please choose a category', "JS") %]',
rznvy: {
- required: '[% loc('Please enter your email') | replace("'", "\\'") %]',
- email: '[% loc('Please enter a valid email') | replace("'", "\\'") %]'
+ required: '[% loc('Please enter your email', "JS") %]',
+ email: '[% loc('Please enter a valid email', "JS") %]'
},
email: {
- required: '[% loc('Please enter your email') | replace("'", "\\'") %]',
- email: '[% loc('Please enter a valid email') | replace("'", "\\'") %]'
+ required: '[% loc('Please enter your email', "JS") %]',
+ email: '[% loc('Please enter a valid email', "JS") %]'
},
password_sign_in: {
- required: '[% loc('Please enter a password') | replace("'", "\\'") %]'
+ required: '[% loc('Please enter a password', "JS") %]'
},
password_register: {
- short: '[% tprintf(loc('Please make sure your password is at least %d characters long'), c.cobrand.password_minimum_length) | replace("'", "\\'") %]',
+ short: '[% tprintf(loc('Please make sure your password is at least %d characters long', "JS"), c.cobrand.password_minimum_length) %]',
},
phone: {
- required: '[% loc('Please enter your phone number') | replace("'", "\\'") %]'
+ required: '[% loc('Please enter your phone number', "JS") %]'
},
- fms_extra_title: '[% loc('Please enter your title') | replace("'", "\\'") %]',
- first_name: '[% loc('Please enter your first name') | replace("'", "\\'") %]',
- last_name: '[% loc('Please enter your second name') | replace("'", "\\'") %]',
- right_place: '[% loc('Right place?') | replace("'", "\\'") %]',
- try_again: '[% loc('Try again') | replace("'", "\\'") %]',
- place_pin_on_map: '[% loc('Place pin on map') | replace("'", "\\'") %]',
- back: '[% loc('Back') | replace("'", "\\'") %]',
- how_to_send: '[% loc('How to send successful reports') | replace("'", "\\'") %]',
- more_details: '[% loc('Details') | replace("'", "\\'") %]',
+ fms_extra_title: '[% loc('Please enter your title', "JS") %]',
+ first_name: '[% loc('Please enter your first name', "JS") %]',
+ last_name: '[% loc('Please enter your second name', "JS") %]',
+ right_place: '[% loc('Reposition if needed, then hit Continue', "JS") %]',
+ try_again: '[% loc('Try again', "JS") %]',
+ place_pin_on_map: '[% loc('Place pin on map', "JS") %]',
+ back: '[% loc('Back', "JS") %]',
+ how_to_send: '[% loc('How to send successful reports', "JS") %]',
+ more_details: '[% loc('Details', "JS") %]',
- this_report: '[% loc('This report') | replace("'", "\\'") %]',
- this_is_the_problem: '[% loc('This is the problem') | replace("'", "\\'") %]',
+ this_report: '[% loc('This report', "JS") %]',
+ this_is_the_problem: '[% loc('This is the problem', "JS") %]',
- or: '[% loc(' or ') | replace("'", "\\'") %]',
+ or: '[% loc(' or ', "JS") %]',
- geolocation_declined: '[% loc('You declined; please fill in the box above') | replace("'", "\\'") %]',
- geolocation_no_position: '[% loc('Could not look up location') | replace("'", "\\'") %]',
- geolocation_no_result: '[% loc('No result returned') | replace("'", "\\'") %]',
- geolocation_unknown: '[% loc('Unknown error') | replace("'", "\\'") %]',
+ geolocation_declined: '[% loc('You declined; please fill in the box above', "JS") %]',
+ geolocation_no_position: '[% loc('Could not look up location', "JS") %]',
+ geolocation_no_result: '[% loc('No result returned', "JS") %]',
+ geolocation_unknown: '[% loc('Unknown error', "JS") %]',
- correct_position: '[% loc('Right place?') | replace("'", "\\'") %]',
+ correct_position: '[% loc('Right place?', "JS") %]',
- reporting_a_problem: '[% loc('Reporting a problem') | replace("'", "\\'") %]',
- ok: '[% loc('OK') | replace("'", "\\'") %]',
- map: '[% loc('MAP') | replace("'", "\\'") %]',
+ reporting_a_problem: '[% loc('Reporting a problem', "JS") %]',
+ ok: '[% loc('Continue', "JS") %]',
+ map: '[% loc('MAP', "JS") %]',
- map_map: '[% loc('Map') | replace("'", "\\'") %]',
- map_satellite: '[% loc('Satellite') | replace("'", "\\'") %]',
+ map_map: '[% loc('Map', "JS") %]',
+ map_satellite: '[% loc('Satellite', "JS") %]',
- expand_map: '[% loc('Expand map') | replace("'", "\\'") %]',
- collapse_map: '[% loc('Collapse map') | replace("'", "\\'") %]',
+ expand_map: '[% loc('Expand map', "JS") %]',
+ collapse_map: '[% loc('Collapse map', "JS") %]',
- permalink: '[% loc('Permalink') | replace("'", "\\'") %]',
+ filter: '[% loc('Filter', "JS") %]',
- show_pins: '[% loc('Show pins') | replace("'", "\\'") %]',
- hide_pins: '[% loc('Hide pins') | replace("'", "\\'") %]',
+ show_pins: '[% loc('Show pins', "JS") %]',
+ hide_pins: '[% loc('Hide pins', "JS") %]',
- upload_max_files_exceeded: '[% loc ('Sorry! You’ve hit the limit of images that can be attached to one report.') | replace("'", "\\'") %]',
- upload_default_message: '[% loc ('Drag and drop photos here or <u>click to upload</u>') | replace("'", "\\'") %]',
- upload_cancel_confirmation: '[% loc ('Are you sure you want to cancel this upload?') | replace("'", "\\'") %]',
- upload_invalid_file_type: '[% loc ('Please upload an image only') | replace("'", "\\'") %]',
+ upload_max_files_exceeded: '[% loc('Sorry! You’ve hit the limit of images that can be attached to one report.', "JS") %]',
+ upload_default_message: '[% loc('Drag photos here or <u>browse photos</u>', "JS") %]',
+ upload_default_message_mobile: '[% loc('<u>Take or choose existing photo</u>', "JS") %]',
+ upload_cancel_confirmation: '[% loc('Are you sure you want to cancel this upload?', "JS") %]',
+ upload_invalid_file_type: '[% loc('Please upload an image only', "JS") %]',
[% IF c.config.SMS_AUTHENTICATION ~%]
- login_with_email: '[% loc('Log in with email/text') | replace("'", "\\'") %]',
+ login_with_email: '[% loc('Log in with email/text', "JS") %]',
[% ELSE ~%]
- login_with_email: '[% loc('Log in with email') | replace("'", "\\'") %]',
+ login_with_email: '[% loc('Log in with email', "JS") %]',
[% END ~%]
report_a_problem_btn: {
- default: '[% loc('Report a problem') | replace("'", "\\'") %]',
- here: '[% loc('Report a problem here') | replace("'", "\\'") %]',
- another: '[% loc('Report another problem here') | replace("'", "\\'") %]'
+ default: '[% loc('Report a problem', "JS") %]',
+ here: '[% loc('Report a problem here', "JS") %]',
+ another: '[% loc('Report another problem here', "JS") %]'
},
offline: {
- your_reports: '[% loc('Your offline reports') | replace("'", "\\'") %]',
- update_saved: '[% loc('Your update has been saved offline for submission when back online.') | replace("'", "\\'") %]',
- update_data_saved: '[% loc('Offline update data saved') | replace("'", "\\'") %]',
- clear_data: '[% loc('Clear offline data') | replace("'", "\\'") %]',
- are_you_sure: '[% loc('Are you sure?') | replace("'", "\\'") %]',
- data_cleared: '[% loc('Offline data cleared') | replace("'", "\\'") %]',
- reports_saved: '[% loc('Reports saved offline.') | replace("'", "\\'") %]',
- saving_reports: '[% loc('Saving reports offline', "This is followed by a progress count, e.g. 3/5") | replace("'", "\\'") %]',
- you_are_offline: '[% loc('You are offline') | replace("'", "\\'") %]',
- N_saved: '[% loc('<span>%s</span> saved.') | replace("'", "\\'") %]',
- saved_to_submit: '[% loc('You have <a id="oFN" href=""><span>%s</span> saved to submit</a>.') | replace("'", "\\'") %]',
- update_single: '[% loc('update') | replace("'", "\\'") %]',
- update_plural: '[% loc('updates') | replace("'", "\\'") %]'
+ your_reports: '[% loc('Your offline reports', "JS") %]',
+ update_saved: '[% loc('Your update has been saved offline for submission when back online.', "JS") %]',
+ update_data_saved: '[% loc('Offline update data saved', "JS") %]',
+ clear_data: '[% loc('Clear offline data', "JS") %]',
+ are_you_sure: '[% loc('Are you sure?', "JS") %]',
+ data_cleared: '[% loc('Offline data cleared', "JS") %]',
+ reports_saved: '[% loc('Reports saved offline.', "JS") %]',
+ saving_reports: '[% loc('Saving reports offline', "This is followed by a progress count, e.g. 3/5", "JS") %]',
+ you_are_offline: '[% loc('You are offline', "JS") %]',
+ N_saved: '[% loc('<span>%s</span> saved.', "JS") %]',
+ saved_to_submit: '[% loc('You have <a id="oFN" href=""><span>%s</span> saved to submit</a>.', "JS") %]',
+ update_single: '[% loc('update', "JS") %]',
+ update_plural: '[% loc('updates', "JS") %]'
}
};
[% END %]
diff --git a/templates/web/base/main_nav.html b/templates/web/base/main_nav.html
index 189630902..1c253fd01 100644
--- a/templates/web/base/main_nav.html
+++ b/templates/web/base/main_nav.html
@@ -4,11 +4,11 @@
SET ul_class="nav-menu nav-menu--main" UNLESS ul_class.defined;
%]
[% BLOCK navitem ~%]
- <li [% liattrs %]>
+ <li [% liattrs | safe %]>
[%~ IF c.req.uri.path == uri AND NOT always_url ~%]
- <span [% attrs %]>[% label %]</span>
+ <span [% attrs | safe %]>[% label %]</span>
[%~ ELSE ~%]
- <a href="[% uri %][% suffix IF suffix %]" [% attrs %]>[% label %]</a>
+ <a href="[% uri %][% suffix IF suffix %]" [% attrs | safe %]>[% label %]</a>
[%~ END ~%]
</li>
[%~ END %]
diff --git a/templates/web/base/main_nav_items.html b/templates/web/base/main_nav_items.html
index 75fdecd9d..02999d492 100644
--- a/templates/web/base/main_nav_items.html
+++ b/templates/web/base/main_nav_items.html
@@ -1,12 +1,4 @@
-[%~ IF problem ~%]
- [%~ INCLUDE navitem uri='/report/new?longitude=' _ problem.longitude _ '&amp;latitude=' _ problem.latitude label=loc('Report another problem here') attrs='class="report-a-problem-btn"' ~%]
-[%~ ELSIF latitude AND longitude ~%]
- [%~ INCLUDE navitem uri='/report/new?longitude=' _ longitude _ '&amp;latitude=' _ latitude label=loc('Report a problem here') attrs='class="report-a-problem-btn"' ~%]
-[%~ ELSIF homepage_template ~%]
- [%~ INCLUDE navitem uri='/report' label=loc('Report a problem') attrs='class="report-a-problem-btn"' ~%]
-[%~ ELSE ~%]
- [%~ INCLUDE navitem uri='/' label=loc('Report a problem') attrs='class="report-a-problem-btn"' ~%]
-[%~ END ~%]
+[% INCLUDE 'navigation/_report.html' %]
[%~ IF c.user_exists ~%]
[%~ INCLUDE navitem uri='/my' label=loc('Your account') ~%]
@@ -18,23 +10,7 @@
[%~ INCLUDE navitem always_url=1 uri='/my/planned' label=loc('Shortlist') ~%]
[%~ END ~%]
-
-[%~ UNLESS hide_all_reports_link ~%]
- [%~
- IF c.user_exists AND c.user.categories.size;
- categories = c.user.categories_string | uri;
- cat_suffix = "?filter_category=" _ categories;
- END;
-
- reports_uri = '/reports';
- IF body_name;
- body_name = body_name | uri;
- reports_uri = "${reports_uri}/${body_name}";
- END;
-
- INCLUDE navitem uri=reports_uri label=loc('All reports') suffix=cat_suffix;
- ~%]
-[%~ END ~%]
+[%~ INCLUDE 'navigation/_all_reports.html' ~%]
[%~
IF pc;
diff --git a/templates/web/base/maps/google-ol.html b/templates/web/base/maps/google-ol.html
index 8e0690f9d..47c940129 100644
--- a/templates/web/base/maps/google-ol.html
+++ b/templates/web/base/maps/google-ol.html
@@ -6,7 +6,7 @@
[% INCLUDE maps/openlayers.html %]
[% UNLESS around_page %]
<p class="sub-map-links" id="sub_map_links">
- [% map_sub_links %]
+ [% map_sub_links | safe %]
</p>
[% END %]
[% END %]
diff --git a/templates/web/base/maps/noscript_map.html b/templates/web/base/maps/noscript_map.html
index 8418c4eb8..0b7431148 100644
--- a/templates/web/base/maps/noscript_map.html
+++ b/templates/web/base/maps/noscript_map.html
@@ -1,23 +1,23 @@
[% SET start = c.config.ADMIN_BASE_URL IF admin -%]
<div class="noscript">
<div id="[% nsm_prefix %]drag">
- <[% map.img_type %]
+ <[% map.img_type | safe %]
alt="NW map tile" id="[% nsm_prefix %]t2.2"
name="tile_[% map.x_tile - 1 %].[% map.y_tile - 1 %]"
src="[% map.tiles.0 %]"
style="top:0; left:0;">
- <[% map.img_type %]
+ <[% map.img_type | safe %]
alt="NE map tile" id="[% nsm_prefix %]t2.3"
name="tile_[% map.x_tile %].[% map.y_tile - 1 %]"
src="[% map.tiles.1 %]"
style="top:0px; left:256px;">
<br>
- <[% map.img_type %]
+ <[% map.img_type | safe %]
alt="SW map tile" id="[% nsm_prefix %]t3.2"
name="tile_[% map.x_tile - 1 %].[% map.y_tile %]"
src="[% map.tiles.2 %]"
style="top:256px; left:0;">
- <[% map.img_type %]
+ <[% map.img_type | safe %]
alt="SE map tile" id="[% nsm_prefix %]t3.3"
name="tile_[% map.x_tile %].[% map.y_tile %]"
src="[% map.tiles.3 %]"
diff --git a/templates/web/base/maps/noscript_map_base_wmx.html b/templates/web/base/maps/noscript_map_base_wmx.html
new file mode 100644
index 000000000..45de9926e
--- /dev/null
+++ b/templates/web/base/maps/noscript_map_base_wmx.html
@@ -0,0 +1,18 @@
+<div class="noscript">
+ <div id="[% nsm_prefix %]drag">
+ [%- FOR row IN map.tiles -%]
+ [%- FOR tile IN row -%]
+ [%- top_px = tile.row_offset * map.tile_size -%]
+ [%- left_px = tile.col_offset * map.tile_size %]
+ <[% map.img_type | safe %]
+ alt="[% tile.alt %]"
+ id="[% nsm_prefix %]t[% tile.dotted_id %]"
+ name="tile_[% tile.dotted_id %]"
+ src="[% tile.src %]"
+ style="width: [% map.tile_size %]px; top: [% top_px %]px; left: [% left_px %]px">
+ [%- END -%]
+ [% END %]
+ </div>
+ <div id="[% nsm_prefix %]pins">[% FOR pin IN map.pins %][% INCLUDE 'maps/pin.html' %][% END %]</div>
+ [% INCLUDE 'maps/_compass.html' %]
+</div>
diff --git a/templates/web/base/maps/openlayers.html b/templates/web/base/maps/openlayers.html
index 2f748cb19..f4c78767c 100644
--- a/templates/web/base/maps/openlayers.html
+++ b/templates/web/base/maps/openlayers.html
@@ -6,6 +6,9 @@
<input type="hidden" name="zoom" value="[% map.zoom %]">
<div id="js-map-data"
+[%- IF c.config.STAGING_SITE %]
+ data-staging=1
+[%- END %]
[%- UNLESS c.cobrand.call_hook('hide_areas_on_reports') %]
data-area="[% map.area.join(',') %]"
[%- END %]
@@ -33,9 +36,13 @@
<div id="map_box" aria-hidden="true">
[% pre_map %]
<div id="map">
- [% INCLUDE 'maps/noscript_map.html' js = 1 %]
+ [% IF noscript_map_template == 'maps/noscript_map_base_wmx.html' %]
+ [% INCLUDE 'maps/noscript_map_base_wmx.html' js = 1 %]
+ [% ELSE %]
+ [% INCLUDE 'maps/noscript_map.html' js = 1 %]
+ [% END %]
</div>
[% IF map.copyright %]
- <div class="olControlAttribution" style="position: absolute;">[% map.copyright %]</div>
+ <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...">
diff --git a/templates/web/base/maps/wms.html b/templates/web/base/maps/wms.html
new file mode 100644
index 000000000..93fcb95dd
--- /dev/null
+++ b/templates/web/base/maps/wms.html
@@ -0,0 +1,4 @@
+[% map_html = BLOCK %]
+[% INCLUDE maps/openlayers.html noscript_map_template = 'maps/noscript_map_base_wmx.html' %]
+[% INCLUDE maps/wms_config.html %]
+[% END %]
diff --git a/templates/web/base/maps/wms_config.html b/templates/web/base/maps/wms_config.html
new file mode 100644
index 000000000..f7fe3510c
--- /dev/null
+++ b/templates/web/base/maps/wms_config.html
@@ -0,0 +1,13 @@
+<script nonce="[% csp_nonce %]">
+ var fixmystreet = window.fixmystreet || {};
+ fixmystreet.wms_config = {
+ 'map_projection': '[% map.map_projection %]',
+ 'tile_urls': [% map.tile_urls | safe %],
+ 'tile_size': [% map.tile_size %],
+ 'layer_names': [% map.layer_names | safe %],
+ 'wms_version': '[% map.wms_version %]',
+ 'format': '[% map.format %]',
+ 'scales': [% map.scales | safe %],
+ 'requestEncoding': "REST"
+ };
+</script>
diff --git a/templates/web/base/maps/wmts.html b/templates/web/base/maps/wmts.html
new file mode 100644
index 000000000..25c9065a3
--- /dev/null
+++ b/templates/web/base/maps/wmts.html
@@ -0,0 +1,4 @@
+[% map_html = BLOCK %]
+[% INCLUDE maps/openlayers.html noscript_map_template = 'maps/noscript_map_base_wmx.html' %]
+[% INCLUDE maps/wmts_config.html %]
+[% END %]
diff --git a/templates/web/base/maps/wmts_config.html b/templates/web/base/maps/wmts_config.html
index 0b80a055b..680de57e3 100644
--- a/templates/web/base/maps/wmts_config.html
+++ b/templates/web/base/maps/wmts_config.html
@@ -3,12 +3,12 @@
fixmystreet.wmts_config = {
'map_projection': '[% map.map_projection %]',
'tile_dpi': [% map.tile_dpi %],
- 'tile_urls': [% map.tile_urls %],
+ 'tile_urls': [% map.tile_urls | safe %],
'tile_suffix': '[% map.tile_suffix %]',
- 'layer_names': [% map.layer_names %],
+ 'layer_names': [% map.layer_names | safe %],
'layer_style': '[% map.layer_style %]',
'matrix_set': '[% map.matrix_set %]',
- 'scales': [% map.scales %],
+ 'scales': [% map.scales | safe %],
'origin_x': [% map.origin_x %],
'origin_y': [% map.origin_y %]
};
diff --git a/templates/web/base/my/my.html b/templates/web/base/my/my.html
index 64ddb768e..04c5b6941 100644
--- a/templates/web/base/my/my.html
+++ b/templates/web/base/my/my.html
@@ -6,7 +6,7 @@
%]
[% IF problems.size %]
- [% map_html %]
+ [% map_html | safe %]
</div>
<div id="map_sidebar">
<div id="side">
@@ -34,7 +34,7 @@ li .my-account-buttons a {
<ul>
<li>[% loc('Name:') %] [% c.user.name %]
<li>[% loc('Email:') %] [% c.user.email OR '-' %]
- <p class="my-account-buttons">
+ <p class="my-account-buttons my-account-buttons--email">
[% IF NOT c.user.email %]
<a href="/auth/change_email">[% loc('Add') %]</a>
[% ELSIF c.user.email_verified %]
@@ -60,13 +60,17 @@ li .my-account-buttons a {
</ul>
<p class="my-account-buttons">
- <a href="/auth/change_password">
- [%~ IF c.user.password ~%]
- [% loc('Change password') %]
- [%~ ELSE ~%]
- [% loc('Set password') %]
- [%~ END ~%]
+ [% IF c.session.oauth.change_password_uri %]
+ <a class="change-password" href="[% c.session.oauth.change_password_uri | html %]">[% loc('Change password') %]</a>
+ [% ELSE %]
+ <a class="change-password" href="/auth/change_password">
+ [%~ IF c.user.password ~%]
+ [% loc('Change password') %]
+ [%~ ELSE ~%]
+ [% loc('Set password') %]
+ [%~ END ~%]
</a>
+ [% END %]
[% IF c.user AND (c.user.from_body OR c.user.is_superuser) %]
<a href="/auth/generate_token">[% loc('Security') %]</a>
[% END %]
diff --git a/templates/web/base/my/planned.html b/templates/web/base/my/planned.html
index 366a554d9..d5fcc48ae 100644
--- a/templates/web/base/my/planned.html
+++ b/templates/web/base/my/planned.html
@@ -6,7 +6,7 @@
%]
[% IF problems.size %]
- [% map_html %]
+ [% map_html | safe %]
</div>
<div id="map_sidebar">
<div id="side">
diff --git a/templates/web/base/navigation/_all_reports.html b/templates/web/base/navigation/_all_reports.html
new file mode 100644
index 000000000..3f2aa6bbc
--- /dev/null
+++ b/templates/web/base/navigation/_all_reports.html
@@ -0,0 +1,13 @@
+[%~
+ IF c.user_exists AND c.user.from_body AND ( c.user.categories.size OR c.user.area_ids.size );
+ reports_uri = '/my/inspector_redirect';
+ ELSE;
+ reports_uri = '/reports';
+ IF c.cobrand.council_area;
+ body_name = c.cobrand.council_area | uri;
+ reports_uri = "${reports_uri}/${body_name}";
+ END;
+ END;
+
+ INCLUDE navitem uri=reports_uri label=loc('All reports');
+~%]
diff --git a/templates/web/base/navigation/_report.html b/templates/web/base/navigation/_report.html
new file mode 100644
index 000000000..c00c29585
--- /dev/null
+++ b/templates/web/base/navigation/_report.html
@@ -0,0 +1,9 @@
+[%~ IF problem AND NOT problem.non_public ~%]
+ [%~ INCLUDE navitem uri='/report/new?longitude=' _ problem.longitude _ '&latitude=' _ problem.latitude label=loc('Report another problem here') attrs='class="report-a-problem-btn"' ~%]
+[%~ ELSIF latitude AND longitude ~%]
+ [%~ INCLUDE navitem uri='/report/new?longitude=' _ longitude _ '&latitude=' _ latitude label=loc('Report a problem here') attrs='class="report-a-problem-btn"' ~%]
+[%~ ELSIF homepage_template ~%]
+ [%~ INCLUDE navitem uri='/report' label=loc('Report a problem') attrs='class="report-a-problem-btn"' ~%]
+[%~ ELSE ~%]
+ [%~ INCLUDE navitem uri='/' label=loc('Report a problem') attrs='class="report-a-problem-btn"' ~%]
+[%~ END ~%]
diff --git a/templates/web/base/offline/appcache.html b/templates/web/base/offline/fallback.html
index ed48b7a00..b8e1ee9b9 100644
--- a/templates/web/base/offline/appcache.html
+++ b/templates/web/base/offline/fallback.html
@@ -1,11 +1,9 @@
[% SET bodyclass = "fullwidthpage offlinepage" ~%]
-[% INCLUDE 'header.html' appcache = 1 %]
+[% INCLUDE 'header.html' %]
-<h1>[% loc('Internet glitch') %]</h1>
+<h1>[% loc('Offline') %]</h1>
-<p>[% loc('Sorry, we don’t have a good enough connection to fetch that page, or the
-page wasn’t found or there was a server error. Please try again later.') %]
-</p>
+<p>[% loc('Sorry, we don’t have a good enough connection to fetch that page.') %]</p>
<ul class="item-list item-list--reports" id="offline_list"></ul>
diff --git a/templates/web/base/offline/manifest.html b/templates/web/base/offline/manifest.html
deleted file mode 100644
index 93d26cb94..000000000
--- a/templates/web/base/offline/manifest.html
+++ /dev/null
@@ -1,16 +0,0 @@
-CACHE MANIFEST
-
-[% PROCESS 'common_scripts.html' ~%]
-
-CACHE:
-[% version('/cobrands/' _ c.cobrand.asset_moniker _ '/base.css') %]
-[% version('/cobrands/' _ c.cobrand.asset_moniker _ '/layout.css') %]
-[% FOR script IN scripts ~%]
- [%- script %]
-[% END %]
-
-NETWORK:
-*
-
-FALLBACK:
-/ [% version('../templates/web/base/offline/appcache.html', '/offline/appcache') %]
diff --git a/templates/web/base/offline/service_worker.html b/templates/web/base/offline/service_worker.html
new file mode 100644
index 000000000..3c480f9b1
--- /dev/null
+++ b/templates/web/base/offline/service_worker.html
@@ -0,0 +1,104 @@
+[%
+SET bodyclass = "offlinepage"; # For selection of scripts
+PROCESS 'common_scripts.html';
+SET offline_html = version('../templates/web/base/offline/fallback.html', '/offline/fallback');
+SET scripts_seen = {};
+
+~%]
+
+importScripts('[% version('/vendor/idb-keyval-iife.min.js') %]');
+
+const requiredOffline = [
+ "[% version('/cobrands/' _ c.cobrand.asset_moniker _ '/base.css') %]",
+ "[% version('/cobrands/' _ c.cobrand.asset_moniker _ '/layout.css') %]",
+ "[% version('/vendor/OpenLayers/theme/default/style.css') %]",
+ "[% version('/vendor/fancybox/jquery.fancybox-1.3.4.css') %]",
+ [%
+ FOR script IN scripts;
+ NEXT IF scripts_seen.${script};
+ scripts_seen.${script} = 1;
+ ~%]
+ "[%- script %]",
+ [% END %]
+ "[% offline_html %]"
+];
+
+const staticCache = 'static';
+// const pageCache = 'pages';
+
+addEventListener('install', function(evt) {
+ evt.waitUntil(precache());
+});
+
+async function precache() {
+ const cache = await caches.open(staticCache);
+ return cache.addAll(requiredOffline);
+}
+
+addEventListener('fetch', fetchEvent => {
+ const request = fetchEvent.request;
+ const url = new URL(request.url);
+
+ if (url.origin !== location.origin) {
+ return;
+ }
+
+ // Handle inspection form submission if offline...
+ if (request.method === 'POST' && RegExp('/report/\\d+$').test(url)) {
+ fetchEvent.respondWith(async function() {
+ const fetchPromise = fetch(request.clone());
+ try {
+ return await fetchPromise;
+ }
+ 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 data = await idbKeyval.get('offlineData') || { cachedReports: {}, forms: [] };
+ var forms = data.forms;
+ if (!forms.length || formData != forms[forms.length - 1][1]) {
+ forms.push([request.url, formData]);
+ }
+ return idbKeyval.set('offlineData', data);
+ }());
+
+ return Response.redirect('/my/planned?saved=1');
+ };
+ }());
+ }
+
+ if (request.method !== "GET") {
+ return;
+ }
+
+ fetchEvent.respondWith(async function() {
+ if (request.mode === 'navigate') {
+ const fetchPromise = fetch(request);
+
+// For now, only save pages manually for inspectors
+// fetchEvent.waitUntil(async function() {
+// const responseCopy = (await fetchPromise).clone();
+// const cache = await caches.open(pageCache);
+// await responseCopy.ok ? cache.put(request, responseCopy) : cache.delete(request);
+// }());
+
+ try {
+ return await fetchPromise;
+ }
+ catch {
+ let cached = await caches.match(request) || await caches.match("[% offline_html %]");
+ return cached || offlineResponse();
+ }
+ } else {
+ const responseFromCache = await caches.match(request);
+ return responseFromCache || fetch(request);
+ }
+ }());
+});
+
+var offlineResponse = () =>
+ new Response('Service Unavailable', { status: 503, statusText: 'Service Unavailable', headers: { 'Content-Type': 'text/html' }});
diff --git a/templates/web/base/pagination.html b/templates/web/base/pagination.html
index 3b7bdc0b2..a52632a25 100644
--- a/templates/web/base/pagination.html
+++ b/templates/web/base/pagination.html
@@ -1,5 +1,5 @@
-[% IF pager.total_entries > 1 %]
- <p class="pagination" data-page="[% pager.current_page %]">
+[% IF pager AND pager.total_entries > 1 %]
+ <p class="pagination" data-page="[% pager.current_page | html %]">
[% IF pager.previous_page %]
<a class="prev" href="[% c.uri_with({ $param => pager.previous_page, ajax => undefined }) %][% '#' _ hash IF hash %]">[% loc('Previous') %]</a>
[% END %]
diff --git a/templates/web/base/questionnaire/index.html b/templates/web/base/questionnaire/index.html
index 4b6ce82f9..36123013f 100644
--- a/templates/web/base/questionnaire/index.html
+++ b/templates/web/base/questionnaire/index.html
@@ -5,7 +5,7 @@
INCLUDE 'header.html', title = loc('Questionnaire');
%]
-[% map_html %]
+[% map_html | safe %]
</div>
@@ -23,7 +23,9 @@
[% IF errors %]
<ul class="error questionnaire-errors">
-<li>[% errors.join("</li>\n<li>") %]</li>
+ [% FOR error IN errors %]
+ <li>[% error %]</li>
+ [% END %]
</ul>
[% END %]
diff --git a/templates/web/base/report/_inspect.html b/templates/web/base/report/_inspect.html
index fa79d9912..771942b16 100644
--- a/templates/web/base/report/_inspect.html
+++ b/templates/web/base/report/_inspect.html
@@ -1,6 +1,3 @@
-[% extra_js = [
- version('/js/duplicates.js'),
-] -%]
[% permissions = c.user.permissions(problem) %]
[% second_column = BLOCK -%]
<div id="side-inspect">
@@ -11,60 +8,7 @@
<form name="report_inspect_form" id="report_inspect_form" method="post" action="[% c.uri_for( '/report', problem.id ) %]" class="validate">
- <div class="inspect-section">
- <p style="float: right">
- <label for="non_public">[% loc('Private') %]</label>
- <input type="checkbox" id="non_public" name="non_public" value="1"[% ' checked' IF problem.non_public %]>
- </p>
- <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) %]
- (<a href="[% c.uri_for_action( "admin/report_edit", problem.id ) %]">[% loc('admin') %]</a>)
- [% END %]
- </p>
- [% IF permissions.report_inspect AND problem.user.phone %]
- <p>
- <strong>[% loc('Phone Reporter:') %]</strong>
- <a href="tel:[% problem.user.phone | html %]">[% problem.user.phone_display | html %]</a>
- </p>
- [% END %]
- <p>
- [% SET local_coords = problem.local_coords; %]
- [% IF local_coords %]
- <strong>[% loc('Easting/Northing:') %]</strong>
- <span id="problem_easting">[% local_coords.0 %]</span>,
- <span id="problem_northing">[% local_coords.1 %]</span>
- [% ELSE %]
- <strong>[% loc('Latitude/Longitude:') %]</strong>
- <span id="problem_latitude">[% problem.latitude %]</span>,
- <span id="problem_longitude">[% problem.longitude %]</span>
- [% END %]
- <input type="hidden" name="longitude" value="[% problem.longitude %]">
- <input type="hidden" name="latitude" value="[% problem.latitude %]">
- </p>
- [% IF problem.nearest_address() %]
- <p>
- <strong>[% loc('Nearest calculated address:') %]</strong>
- [% problem.nearest_address() %]
- </p>
- [% END %]
- <p>
- <a target="_blank" href="https://www.google.com/maps/dir/?api=1&destination=[% problem.latitude %],[% problem.longitude %]" class="btn btn--block btn--navigate">[% loc('Navigate to this problem') %]</a>
- </p>
- <p>
- <a href="#" class="btn btn--block btn--geolocate">[% loc('Set to my current location') %]</a>
- </p>
- [% IF permissions.report_reject %]
- [% TRY %]
- [% INCLUDE 'report/_inspect_reject_button.html' %]
- [% CATCH file %]
- <p>
- <a href="[% c.uri_for( '/contact', { id => problem.id, reject => 1 } ) %]" class="btn btn--block">[% loc('Reject report') %]</a>
- </p>
- [% END %]
- [% END %]
- </div>
+ [% INCLUDE 'report/inspect/information.html' %]
[% IF permissions.report_edit_category OR permissions.report_inspect %]
<div class="inspect-section">
@@ -80,43 +24,16 @@
<p data-category="[% cat_name | html %]"
[%~ IF cat_name != problem.category %] class="hidden"[% END %]
data-priorities='[% priorities_by_category.$cat_name | html %]'
- data-defect-types='[% category_defect_types.$cat_name | html %]'
data-templates='[% templates_by_category.$cat_name | html %]'>
- [% IF cat_name == problem.category %]
- [% INCLUDE 'report/new/category_extras_fields.html' metas=category_extras.$cat_name hide_notices=1 show_hidden=1 %]
- [% ELSE %]
- [% INCLUDE 'report/new/category_extras_fields.html' report_meta='' metas=category_extras.$cat_name hide_notices=1 show_hidden=1 %]
- [% END %]
+ [% INCLUDE 'report/new/category_extras_fields.html' metas=category_extras.$cat_name hide_notices=1 show_hidden=1 %]
</p>
[% END %]
[% IF permissions.report_inspect %]
- [% PROCESS 'defect_type/format.html' %]
- <p>
- <label for="defect_type">[% loc('Defect type') %]</label>
- <select id="defect_type" name="defect_type" class="form-control">
- <option value=""[% ' selected' IF NOT problem.defect_type %]>-</option>
- [% FOREACH defect_type IN problem.defect_types %]
- <option[% ' selected' IF problem.defect_type_id == defect_type.id %] value="[% defect_type.id %]">[% defect_type_format() %]</option>
- [% END %]
- </select>
- </p>
-
<p>
<label for="state">[% loc('State') %]</label>
[% INCLUDE 'report/inspect/state_groups_select.html' %]
</p>
- [% IF permissions.report_instruct AND NOT problem.get_extra_metadata('inspected') %]
- <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">
- <label class="btn" for="raise_defect_yes">[% loc('Yes') %]</label>
- <input type="radio" name="raise_defect" id="raise_defect_no" value="0">
- <label class="btn" for="raise_defect_no">[% loc('No') %]</label>
- </p>
- </div>
- [% 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>
@@ -143,65 +60,14 @@
[% IF permissions.report_edit_priority OR permissions.report_inspect %]
<div class="inspect-section">
- <p>
- <label for="problem_priority">[% loc('Priority') %]</label>
- <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>
- [% 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>
- <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 %]
- <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>
- [% END %]
-
+ [% INCLUDE 'report/inspect/extra_details.html' %]
</div>
[% END %]
<div class="inspect-section">
[% IF permissions.report_inspect %]
- <p>
- <label class="label-containing-checkbox">
- <input type="checkbox" name="include_update" value="1" class="js-toggle-public-update" checked>
- [% loc('Save with a public update') %]
- </label>
- </p>
- <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>
- [% END %]
-
- [% IF problem.get_extra_metadata('inspected') %]
- [% IF problem.whensent %]
- <p>[% loc("<strong>Note:</strong> This report has been sent onwards for action. Any changes made won't be passed on.") %]</p>
- [% ELSE %]
- <p>[% loc("<strong>Note:</strong> This report hasn't yet been sent onwards for action. Any changes made may not be passed on.") %]</p>
- [% END %]
- [% TRY %][% INCLUDE 'report/_inspect_extra_info.html' %][% CATCH file %][% END %]
+ [% INCLUDE 'report/inspect/public_update.html' %]
[% END %]
<p>
diff --git a/templates/web/base/report/_item.html b/templates/web/base/report/_item.html
index 200c690a6..4d74b3be9 100644
--- a/templates/web/base/report/_item.html
+++ b/templates/web/base/report/_item.html
@@ -22,15 +22,23 @@
[% IF shortlist %]
[% item_extra_class = "item-list__item--indented item-list__item--act-and-sort" %]
[% item_action = BLOCK %]
- [% item_action %]
+ [% item_action | safe %]
<input type="submit" name="shortlist-up" value="[% loc('Up one') %]" title="[% loc('Up one') %]" class="item-list__item__shortlist-up" [% IF loop.first %]disabled[% END %]>
<input type="submit" name="shortlist-down" value="[% loc('Down one') %]" title="[% loc('Down one') %]" class="item-list__item__shortlist-down" [% IF loop.last %]disabled[% END %]>
[% END %]
[% END %]
+[%~ TRY ~%]
+ [% PROCESS 'report/_item_extra_class.html' %]
+[%~ CATCH file ~%]
+[%~ END ~%]
+
<li class="item-list__item item-list--reports__item [% item_extra_class %]"
data-report-id="[% problem.id | html %]" data-lastupdate="[% problem.lastupdate %]" id="report-[% problem.id | html %]">
<a href="[% c.cobrand.relative_url_for_report( problem ) %][% problem.url %]">
+ [% TRY ~%]
+ [% 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="">
[% END %]
@@ -39,6 +47,8 @@
[% CATCH file %]
<h3 class="item-list__heading">[% problem.title | html %]</h3>
[% END %]
+ [% END ~%]
+
[% IF c.user.has_permission_to('report_inspect', problem.bodies_str_ids) %]
<div class="item-list__description">[% problem.detail | html %]</div>
[% END %]
@@ -98,12 +108,12 @@
[%# We don't want to output shortlist on report page (in duplicate list) %]
[% ELSIF page == 'around' ~%]
[%# The around page list is already contained within the new report form %]
- [% item_action.replace('("shortlist-[^"]*)', '$1-' _ problem.id) %]
+ [% item_action.replace('("shortlist-[^"]*)', '$1-' _ problem.id) | safe %]
[% ELSE ~%]
<form method="post" action="/my/planned/change">
<input type="hidden" name="id" value="[% problem.id %]">
<input type="hidden" name="token" value="[% csrf_token %]">
- [% item_action %]
+ [% item_action | safe %]
</form>
[% END ~%]
[% END %]
diff --git a/templates/web/base/report/_item_expandable.html b/templates/web/base/report/_item_expandable.html
index 7723ed54a..fad935407 100644
--- a/templates/web/base/report/_item_expandable.html
+++ b/templates/web/base/report/_item_expandable.html
@@ -44,10 +44,15 @@
[% INCLUDE 'report/_main_sent_info.html' %]
[% INCLUDE 'report/photo.html' object=problem %]
[% full_detail %]
+ [% IF inline_maps %]
+ <div class="duplicate-map">
+ <img src="/report/[% problem.id %]/map?inline_duplicate=1" alt="" />
+ </div>
+ [% END %]
</div>
<div class="item-list__item--expandable__actions">
- <button class="btn btn--small js-toggle-expansion" data-more="[% loc('Read more') %]" data-less="[% loc('Read less') %]">[% loc('Read more') %]</button>
+ <button type="button" class="btn btn--small js-toggle-expansion" data-more="[% loc('Read more') %]" data-less="[% loc('Read less') %]">[% loc('Read more') %]</button>
</div>
</li>
diff --git a/templates/web/base/report/_main.html b/templates/web/base/report/_main.html
index e4612cc4a..9a498c619 100644
--- a/templates/web/base/report/_main.html
+++ b/templates/web/base/report/_main.html
@@ -48,7 +48,7 @@ can_moderate_title = c.user.can_moderate_title(problem, can_moderate)
[% END %]
[% FOR error IN moderate_errors %]
- <p class="form-error js-moderation-error">[% error %]</p>
+ <p class="form-error js-moderation-error">[% error | safe %]</p>
[% END %]
[% IF can_moderate_title %]
diff --git a/templates/web/base/report/_updates_disallowed_message.html b/templates/web/base/report/_updates_disallowed_message.html
new file mode 100644
index 000000000..de2e36382
--- /dev/null
+++ b/templates/web/base/report/_updates_disallowed_message.html
@@ -0,0 +1,5 @@
+<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>
diff --git a/templates/web/base/report/display.html b/templates/web/base/report/display.html
index ade6b808e..f08df931d 100644
--- a/templates/web/base/report/display.html
+++ b/templates/web/base/report/display.html
@@ -3,14 +3,14 @@
PROCESS "report/photo-js.html";
PROCESS "maps/${map.type}.html";
- problem_title = problem.title_safe _ ' - ' _ loc('Viewing a problem');
+ problem_title = tprintf('%s - %s', problem.title_safe, loc('Viewing a problem'));
INCLUDE 'header.html'
title = problem_title
rss = [ tprintf(loc('Updates to this problem, %s', "%s is the site name"), site_name), "/rss/$problem.id" ]
robots = 'index, nofollow';
%]
-[% map_html %]
+[% map_html | safe %]
</div>
<div id="map_sidebar">
@@ -66,7 +66,7 @@
</div>
- [% second_column %]
+ [% second_column | safe %]
[% IF two_column_sidebar %]
</div>
diff --git a/templates/web/base/report/display_tools.html b/templates/web/base/report/display_tools.html
index 4ba8c8b2c..e16ffcb2c 100644
--- a/templates/web/base/report/display_tools.html
+++ b/templates/web/base/report/display_tools.html
@@ -1,5 +1,6 @@
<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 ) %]
<li><form method="post" action="/report/[% problem.id %]/delete" id="remove-from-site-form">
<input type="hidden" name="token" value="[% csrf_token %]">
@@ -10,12 +11,13 @@
c.cobrand.moniker == 'fixmystreet' ? 'Unsuitable?' : loc('Report abuse')
%]</a></li>
[% END %]
- [% IF NOT problem.extra.closed_updates AND c.cobrand.moniker != 'zurich' %]
- <li><a rel="nofollow" id="key-tool-report-updates" class="feed js-feed" href="[% c.uri_for( '/alert/subscribe', { id => problem.id } ) %]">[% loc('Get updates' ) %]</a></li>
+ [% IF c.cobrand.moniker != 'zurich' %]
+ <li><a rel="nofollow" id="key-tool-report-updates" class="feed" href="[% c.uri_for( '/alert/subscribe', { id => problem.id } ) %]">[% loc('Get updates' ) %]</a></li>
[% END %]
[% IF c.cobrand.moniker == 'fixmystreet' %]
<li><a rel="nofollow" id="key-tool-report-share" class="share" href="#report-share">[% loc('Share') %]</a></li>
[% END %]
+ [% END %]
[% IF c.cobrand.moniker == 'zurich' %]
<li><a class="chevron" id="key-tool-problems-nearby" href="[% c.uri_for( '/around', { lat => latitude, lon => longitude } ) %]">[% loc( 'Problems on the map' ) %]</a></li>
[% ELSE %]
@@ -44,7 +46,15 @@
[% loc('Receive email when updates are left on this problem.' ) %]</p>
<fieldset>
[% IF c.user_exists %]
- <input class="green-btn" type="submit" name="alert" value="[% loc('Subscribe') %]">
+ [% IF c.user.has_permission_to("contribute_as_another_user", problem.bodies_str_ids) %]
+ <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">
+ <input class="green-btn" type="submit" name="alert" value="[% loc('Subscribe') %]">
+ </div>
+ [% ELSE %]
+ <input class="green-btn" type="submit" name="alert" value="[% loc('Subscribe') %]">
+ [% END %]
[% ELSE %]
<label for="alert_rznvy">[% loc('Your email') %]</label>
<div class="form-txt-submit-box">
diff --git a/templates/web/base/report/form/user.html b/templates/web/base/report/form/user.html
index 6381d2928..1c941a302 100644
--- a/templates/web/base/report/form/user.html
+++ b/templates/web/base/report/form/user.html
@@ -5,21 +5,41 @@
[% loc('Next:') %] [% loc('Tell us about you') %]
</h2>
[% IF c.user_exists OR NOT c.cobrand.social_auth_enabled %]
- <button class="btn btn--block hidden-nojs js-new-report-user-show">[% loc('Continue') %]</button>
+ <button type="button" class="btn btn--block hidden-nojs js-new-report-user-show">[% loc('Continue') %]</button>
[% ELSE %]
[% IF c.config.FACEBOOK_APP_ID %]
- <button name="facebook_sign_in" id="facebook_sign_in" value="facebook_sign_in" class="btn btn--block btn--social btn--facebook">
+ <button name="social_sign_in" id="facebook_sign_in" value="facebook" class="btn btn--block btn--social btn--facebook">
<img alt="" src="/i/facebook-icon-32.png" width="17" height="32">
[% loc('Log in with Facebook') %]
</button>
[% END %]
+ [% IF c.cobrand.feature('oidc_login') %]
+ <button name="social_sign_in" id="oidc_sign_in" value="oidc" class="btn btn--block btn--social btn--oidc">
+ [% tprintf(loc('Login with %s'), c.cobrand.feature('oidc_login').display_name) %]
+ </button>
+ [% END %]
[% IF c.config.TWITTER_KEY %]
- <button name="twitter_sign_in" id="twitter_sign_in" value="twitter_sign_in" class="btn btn--block btn--social btn--twitter">
+ <button name="social_sign_in" id="twitter_sign_in" value="twitter" class="btn btn--block btn--social btn--twitter">
<img alt="" src="/i/twitter-icon-32.png" width="17" height="32">
[% loc('Log in with Twitter') %]
</button>
[% END %]
- <button class="btn btn--block hidden-nojs js-new-report-user-show">[% loc('Log in with email') %]</button>
+ <button type="button" class="btn btn--block hidden-nojs js-new-report-user-show">[% loc('Log in with email') %]</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/base/report/form/user_loggedout_by_email.html b/templates/web/base/report/form/user_loggedout_by_email.html
index 4ae3db868..33526cc46 100644
--- a/templates/web/base/report/form/user_loggedout_by_email.html
+++ b/templates/web/base/report/form/user_loggedout_by_email.html
@@ -25,11 +25,7 @@
</div>
[% END %]
- [% IF c.cobrand.social_auth_enabled AND NOT email_required %]
- [% PROCESS 'report/form/user_loggedout_email.html' name='username_register' required=0 %]
- [% ELSE %]
- [% PROCESS 'report/form/user_loggedout_email.html' name='username_register' required=1 %]
- [% END %]
+ [% PROCESS 'report/form/user_loggedout_email.html' name='username_register' %]
[% IF type != 'update' AND c.config.SMS_AUTHENTICATION %]
[% UNLESS c.cobrand.call_hook('disable_phone_number_entry') %]
diff --git a/templates/web/base/report/form/user_loggedout_by_email_heading.html b/templates/web/base/report/form/user_loggedout_by_email_heading.html
index 6aa90c2fd..221b75101 100644
--- a/templates/web/base/report/form/user_loggedout_by_email_heading.html
+++ b/templates/web/base/report/form/user_loggedout_by_email_heading.html
@@ -1,13 +1,13 @@
[% IF c.config.SMS_AUTHENTICATION %]
[% IF type == 'update' %]
- <h5 class="hidden-js">[% loc('<strong>No</strong> Let me confirm my update by email/text') %]</h5>
+ <h3 class="hidden-js">[% loc('<strong>No</strong> Let me confirm my update by email/text') %]</h3>
[% ELSE %]
- <h5 class="hidden-js">[% loc('<strong>No</strong> Let me confirm my report by email/text') %]</h5>
+ <h3 class="hidden-js">[% loc('<strong>No</strong> Let me confirm my report by email/text') %]</h3>
[% END %]
[% ELSE %]
[% IF type == 'update' %]
- <h5 class="hidden-js">[% loc('<strong>No</strong> Let me confirm my update by email') %]</h5>
+ <h3 class="hidden-js">[% loc('<strong>No</strong> Let me confirm my update by email') %]</h3>
[% ELSE %]
- <h5 class="hidden-js">[% loc('<strong>No</strong> Let me confirm my report by email') %]</h5>
+ <h3 class="hidden-js">[% loc('<strong>No</strong> Let me confirm my report by email') %]</h3>
[% END %]
[% END %]
diff --git a/templates/web/base/report/form/user_loggedout_email.html b/templates/web/base/report/form/user_loggedout_email.html
index c32691eb4..9f631987b 100644
--- a/templates/web/base/report/form/user_loggedout_email.html
+++ b/templates/web/base/report/form/user_loggedout_email.html
@@ -15,6 +15,5 @@
[% END %]
<input type="[% username_type %]" name="username" id="form_[% name %]"
value="[% username_value | html %]"
- [% IF required %]required[% END %]
class="form-control required">
<!-- /user_loggedout_email.html -->
diff --git a/templates/web/base/report/form/user_loggedout_password.html b/templates/web/base/report/form/user_loggedout_password.html
index 02cfc9525..4b8611fcb 100644
--- a/templates/web/base/report/form/user_loggedout_password.html
+++ b/templates/web/base/report/form/user_loggedout_password.html
@@ -1,18 +1,14 @@
<!-- user_loggedout_password.html -->
<div id="form_sign_in_yes" class="form-box hidden-js js-new-report-sign-in-shown">
- <h5 class="hidden-js">[% loc('<strong>Yes</strong> I have a password') %]</h5>
+ <h3 class="hidden-js">[% loc('<strong>Yes</strong> I have a password') %]</h3>
<p class="hidden-nojs">
[% loc('No account?') %]
<a class="js-new-report-hide-sign-in" href="#">[% loc('Fill in your details manually.') %]</a>
</p>
- [% IF c.cobrand.social_auth_enabled %]
- [% PROCESS 'report/form/user_loggedout_email.html' name='username_sign_in' required=0 %]
- [% ELSE %]
- [% PROCESS 'report/form/user_loggedout_email.html' name='username_sign_in' required=1 %]
- [% END %]
+ [% PROCESS 'report/form/user_loggedout_email.html' name='username_sign_in' %]
<label for="password_sign_in">[% loc('Your password') %]</label>
[% IF field_errors.password %]
diff --git a/templates/web/base/report/inspect/_extra_details_field.html b/templates/web/base/report/inspect/_extra_details_field.html
new file mode 100644
index 000000000..6a0dfaeec
--- /dev/null
+++ b/templates/web/base/report/inspect/_extra_details_field.html
@@ -0,0 +1,10 @@
+<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 %]
+ <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>
diff --git a/templates/web/base/report/inspect/extra_details.html b/templates/web/base/report/inspect/extra_details.html
new file mode 100644
index 000000000..7777e9a78
--- /dev/null
+++ b/templates/web/base/report/inspect/extra_details.html
@@ -0,0 +1,23 @@
+<p>
+ <label for="problem_priority">[% loc('Priority') %]</label>
+ <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>
+ [% 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
new file mode 100644
index 000000000..b81b37543
--- /dev/null
+++ b/templates/web/base/report/inspect/information.html
@@ -0,0 +1,56 @@
+ <div class="inspect-section">
+ <p style="float: right">
+ <label for="non_public">[% loc('Private') %]</label>
+ <input type="checkbox" id="non_public" name="non_public" value="1"[% ' checked' IF problem.non_public %]>
+ </p>
+ <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) %]
+ (<a href="[% c.uri_for_action( 'admin/reports/edit', [ problem.id ] ) %]">[% loc('admin') %]</a>)
+ [% END %]
+ </p>
+ [% IF permissions.report_inspect AND problem.user.phone %]
+ <p>
+ <strong>[% loc('Phone Reporter:') %]</strong>
+ <a href="tel:[% problem.user.phone | html %]">[% problem.user.phone_display | html %]</a>
+ </p>
+ [% END %]
+ <p>
+ [% SET local_coords = problem.local_coords; %]
+ [% IF local_coords %]
+ <strong>[% loc('Easting/Northing:') %]</strong>
+ <span id="problem_easting">[% local_coords.0 %]</span>,
+ <span id="problem_northing">[% local_coords.1 %]</span>
+ [% ELSE %]
+ <strong>[% loc('Latitude/Longitude:') %]</strong>
+ <span id="problem_latitude">[% problem.latitude %]</span>,
+ <span id="problem_longitude">[% problem.longitude %]</span>
+ [% END %]
+ <input type="hidden" name="longitude" value="[% problem.longitude %]">
+ <input type="hidden" name="latitude" value="[% problem.latitude %]">
+ </p>
+ [% IF problem.nearest_address() %]
+ <p>
+ <strong>[% loc('Nearest calculated address:') %]</strong>
+ [% problem.nearest_address() %]
+ </p>
+ [% END %]
+ <p>
+ <a target="_blank" href="https://www.google.com/maps/dir/?api=1&destination=[% problem.latitude %],[% problem.longitude %]" class="btn btn--block btn--navigate">[% loc('Navigate to this problem') %]</a>
+ </p>
+ [% UNLESS no_relocate %]
+ <p>
+ <a href="#" class="btn btn--block btn--geolocate">[% loc('Set to my current location') %]</a>
+ </p>
+ [% END %]
+ [% IF permissions.report_reject %]
+ [% TRY %]
+ [% INCLUDE 'report/_inspect_reject_button.html' %]
+ [% CATCH file %]
+ <p>
+ <a href="[% c.uri_for( '/contact', { id => problem.id, reject => 1 } ) %]" class="btn btn--block">[% loc('Reject report') %]</a>
+ </p>
+ [% END %]
+ [% END %]
+ </div>
diff --git a/templates/web/base/report/inspect/public_update.html b/templates/web/base/report/inspect/public_update.html
new file mode 100644
index 000000000..be07d7b89
--- /dev/null
+++ b/templates/web/base/report/inspect/public_update.html
@@ -0,0 +1,14 @@
+[% IF NOT public_update_defaulted.defined %]
+ [% public_update_defaulted = 1 %]
+[% END %]
+ <p>
+ <label class="label-containing-checkbox">
+ <input type="checkbox" name="include_update" value="1" class="js-toggle-public-update"[% ' checked' IF public_update_defaulted %]>
+ [% loc('Save with a public update') %]
+ </label>
+ </p>
+ <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>
diff --git a/templates/web/base/report/new/_category_select.html b/templates/web/base/report/new/_category_select.html
new file mode 100644
index 000000000..d5aa9842b
--- /dev/null
+++ b/templates/web/base/report/new/_category_select.html
@@ -0,0 +1,13 @@
+[%~ IF category_groups.size ~%]
+ [%~ FOREACH group IN category_groups ~%]
+ [% IF group.name %]<optgroup label="[% group.name %]">[% END %]
+ [%~ FOREACH cat IN group.categories ~%]
+ [% INCLUDE category_option %]
+ [%~ END ~%]
+ [% IF group.name %]</optgroup>[% END %]
+ [%~ END =%]
+[%~ ELSE ~%]
+ [%~ FOREACH cat IN category_options ~%]
+ [% INCLUDE category_option %]
+ [%~ END =%]
+[%~ END ~%]
diff --git a/templates/web/base/report/new/category.html b/templates/web/base/report/new/category.html
index ec53263ca..b5bfd0251 100644
--- a/templates/web/base/report/new/category.html
+++ b/templates/web/base/report/new/category.html
@@ -1,3 +1,4 @@
+[% TRY %][% PROCESS 'report/new/_form_labels.html' %][% CATCH file %][% END ~%]
[%
# If only one option, pre-select that as if it were already selected. This
# carries through to the category_extras template because this template is
@@ -8,10 +9,10 @@ END
~%]
[% IF category_options.size OR category_groups.size ~%]
[%~ BLOCK category_option ~%]
- [% cat_op_lc = cat_op.category | lower =%]
- <option value='[% cat_op.category | html %]'[% ' selected' IF report.category == cat_op.category || category_lc == cat_op_lc ~%]
- >[% IF loop.first %][% cat_op.category_display %][% ELSE %][% cat_op.category_display | html %][% END %]
- [%~ IF cat_op.get_extra_metadata('help_text') %] ([% cat_op.get_extra_metadata('help_text') %])[% END ~%]
+ [% cat_lc = cat.category | lower =%]
+ <option value='[% cat.category | html %]'[% ' selected' IF report.category == cat.category || category_lc == cat_lc ~%]
+ >[% 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>
[%~ END ~%]
@@ -19,27 +20,15 @@ END
category_lc = category | lower;
END; ~%]
<label for='form_category' id="form_category_label">
- [%~ loc('Category') ~%]
+ [%~ form_category_label OR loc('Category') ~%]
</label>[% =%]
- <select class="validCategory form-control[% IF category_groups.size %] js-grouped-select[% END %]" name="category" id="form_category"
+ <select required class="validCategory form-control[% IF category_groups.size %] js-grouped-select[% END %]" name="category" id="form_category"
[%~ IF c.user.from_body =%]
[%~ prefill_report = ( c.cobrand.prefill_report_fields_for_inspector && inspector ) || c.user.has_body_permission_to('report_prefill') %]
data-body="[% c.user.from_body.name %]" data-prefill="[% prefill_report %]"
[%~ END ~%]
- required>
- [%~ IF category_groups.size ~%]
- [%~ FOREACH group IN category_groups ~%]
- [% IF group.name %]<optgroup label="[% group.name %]">[% END %]
- [%~ FOREACH cat_op IN group.categories ~%]
- [% INCLUDE category_option %]
- [%~ END ~%]
- [% IF group.name %]</optgroup>[% END %]
- [%~ END =%]
- [%~ ELSE ~%]
- [%~ FOREACH cat_op IN category_options ~%]
- [% INCLUDE category_option %]
- [%~ END =%]
- [%~ END ~%]
+ >
+ [%~ INCLUDE 'report/new/_category_select.html' ~%]
</select>
[%~ IF category_groups.size ~%]
<label id="form_subcategory_label" class="hidden">
diff --git a/templates/web/base/report/new/category_extras.html b/templates/web/base/report/new/category_extras.html
index c7bdad94d..9b4149119 100644
--- a/templates/web/base/report/new/category_extras.html
+++ b/templates/web/base/report/new/category_extras.html
@@ -1,5 +1,6 @@
-[% SET default_list = [] %][% FOR b IN bodies_to_list.values %][% default_list.push(b.name) %][% END %]
+[% SET default_list = [] %][% FOR b IN bodies_to_list.values %][% default_list.push(b.cobrand_name) %][% END %]
[% DEFAULT list_of_names = default_list %]
+[% category = mark_safe(category) %]
<div id="category_meta">
[%- IF unresponsive.$category %]
@@ -9,14 +10,16 @@
[%- IF category_extras.$category.size %]
[% UNLESS category_extras_hidden.$category %]
- <div class="extra-category-questions">
- <h2 class="form-section-heading">[% category %]</h2>
- <p class="form-section-description">
- [% tprintf(
- loc('Help <strong>%s</strong> resolve your problem quicker, by providing some extra detail. This extra information will not be published online.'),
- list_of_names.join( '</strong>' _ loc(' or ') _ '<strong>' )
- ); %]
- </p>
+ <div class="extra-category-questions">
+ [% UNLESS category_extras_notices.$category %]
+ <h2 class="visuallyhidden form-section-heading">[% loc('Extra details') %]</h2>
+ <p class="form-section-description">
+ [% tprintf(
+ loc('Help <strong>%s</strong> resolve your problem quicker, by providing some extra detail. This extra information will not be published online.'),
+ mark_safe(list_of_names.join( '</strong>' _ loc(' or ') _ '<strong>' ))
+ ); %]
+ </p>
+ [% END %]
[% INCLUDE 'report/new/category_extras_fields.html' metas=category_extras.$category %]
</div>
[% ELSE %]
diff --git a/templates/web/base/report/new/category_extras_fields.html b/templates/web/base/report/new/category_extras_fields.html
index dd5c3911d..2c728481c 100644
--- a/templates/web/base/report/new/category_extras_fields.html
+++ b/templates/web/base/report/new/category_extras_fields.html
@@ -1,6 +1,6 @@
[%- FOR meta IN metas %]
[%- meta_name = meta.code -%]
- [%- x_meta_name = 'x' _ meta.code # For report_meta and field_erros lookup, as TT hides codes starting "_" -%]
+ [%- x_meta_name = 'x' _ meta.code # For report_meta and field_errors lookup, as TT hides codes starting "_" -%]
[% IF c.cobrand.category_extra_hidden(meta) AND NOT show_hidden %]
@@ -8,7 +8,7 @@
[% ELSIF meta.variable != 'false' || NOT hide_notices %]
- <label for="[% cat_prefix %]form_[% meta_name %]">[% meta.description %]</label>
+ <label for="[% cat_prefix %]form_[% meta_name %]">[% (meta.description OR meta.code) | safe %]</label>
[% TRY %][% INCLUDE 'report/new/_category_extra_field_notice.html' %][% CATCH file %][% END %]
[% IF field_errors.$x_meta_name %]
<p class='form-error'>[% field_errors.$x_meta_name %]</p>
diff --git a/templates/web/base/report/new/category_wrapper.html b/templates/web/base/report/new/category_wrapper.html
index 33c6813f9..a5e0e3556 100644
--- a/templates/web/base/report/new/category_wrapper.html
+++ b/templates/web/base/report/new/category_wrapper.html
@@ -1,6 +1,6 @@
<div id="form_category_row">
[% IF js %]
- <label for="form_category">[% loc('Category') %]</label>
+ <label for="form_category">[% form_category_label OR loc('Category') %]</label>
<select class="validCategory form-control" name="category" id="form_category"
[%~ IF c.user.from_body =%]
[%~ prefill_report = c.cobrand.prefill_report_fields_for_inspector || c.user.has_body_permission_to('report_prefill') %]
@@ -19,10 +19,16 @@
[% PROCESS "report/new/duplicate_suggestions.html" %]
-<div id="js-post-category-messages" class="js-hide-if-invalid-category">
+[% IF disable_form_message %]
+<div id="js-category-stopper" class="box-warning" role="alert" aria-live="assertive">
+ [% disable_form_message | safe %]
+</div>
+[% ELSE %]
+<div id="js-post-category-messages" class="js-hide-if-invalid-category_extras">
[%# This section includes 'Pick an asset' text, roadworks info, extra category questions %]
[%- IF category_extras OR report_extra_fields %]
[% PROCESS "report/new/category_extras.html" %]
[%- END %]
</div>
+[% END %]
diff --git a/templates/web/base/report/new/councils_text.html b/templates/web/base/report/new/councils_text.html
index 5f4b113ca..9b3d6fce7 100644
--- a/templates/web/base/report/new/councils_text.html
+++ b/templates/web/base/report/new/councils_text.html
@@ -1,4 +1,5 @@
[% FILTER collapse %]
+[% category = mark_safe(category) %]
[% IF unresponsive.$category OR unresponsive.ALL OR bodies_to_list.size == 0 %]
[% tprintf(
loc('These will be published online for others to see, in accordance with our <a href="%s">privacy policy</a>.'),
diff --git a/templates/web/base/report/new/councils_text_all.html b/templates/web/base/report/new/councils_text_all.html
index d39288765..08e27e8b3 100644
--- a/templates/web/base/report/new/councils_text_all.html
+++ b/templates/web/base/report/new/councils_text_all.html
@@ -1,13 +1,23 @@
-[% SET default_list = [] %][% FOR b IN bodies_to_list.values %][% default_list.push(b.name) %][% END %]
+[% SET default_list = [] %][% FOR b IN bodies_to_list.values %][% default_list.push(b.cobrand_name) %][% END %]
[% DEFAULT list_of_names = default_list %]
+[% category = mark_safe(category) %]
<p>
-[%
+[% UNLESS non_public_categories.$category;
+
tprintf(
loc('These will be sent to <strong>%s</strong> and also published online for others to see, in accordance with our <a href="%s">privacy policy</a>.'),
- list_of_names.join( '</strong>' _ loc(' or ') _ '<strong>' ), c.cobrand.privacy_policy_url
+ mark_safe(list_of_names.join( '</strong>' _ loc(' or ') _ '<strong>' )), c.cobrand.privacy_policy_url
+ );
+
+ELSE;
+
+ tprintf(
+ loc('These will be sent to <strong>%s</strong> but not published online.'),
+ mark_safe(list_of_names.join( '</strong>' _ loc(' or ') _ '<strong>' ))
);
-%]
+
+END %]
[% TRY %][% INCLUDE 'report/new/councils_extra_text.html' %][% CATCH file %][% END %]
</p>
diff --git a/templates/web/base/report/new/councils_text_private.html b/templates/web/base/report/new/councils_text_private.html
index cab38c97e..80bcfed74 100644
--- a/templates/web/base/report/new/councils_text_private.html
+++ b/templates/web/base/report/new/councils_text_private.html
@@ -1,4 +1,5 @@
[% FILTER collapse %]
+[% category = mark_safe(category) %]
[% IF unresponsive.$category OR unresponsive.ALL OR bodies_to_list.size == 0 %]
[% loc('These details will never be shown online without your permission.') %]
[% ELSE %]
diff --git a/templates/web/base/report/new/duplicate_suggestions.html b/templates/web/base/report/new/duplicate_suggestions.html
index 582ba58e9..bd86eb883 100644
--- a/templates/web/base/report/new/duplicate_suggestions.html
+++ b/templates/web/base/report/new/duplicate_suggestions.html
@@ -1,9 +1,9 @@
-[% IF c.cobrand.suggest_duplicates %]
+[% IF c.cobrand.suggest_duplicates AND NOT login_success AND NOT oauth_need_email %]
[% extra_js.push(
version('/js/duplicates.js'),
) -%]
<div id="js-duplicate-reports" class="duplicate-report-suggestions hidden">
- <button class="duplicate-report-suggestions__close js-hide-duplicate-suggestions">[% loc('Close') %]</button>
+ <button type="button" class="duplicate-report-suggestions__close js-hide-duplicate-suggestions">[% loc('Close') %]</button>
<h2 class="form-section-heading">[% loc('Already been reported?') %]</h2>
<div class="form-section-description">
[% IF c.cobrand.is_council %]
@@ -14,7 +14,7 @@
</div>
<ul class="item-list"></ul>
- <button class="btn btn--block js-hide-duplicate-suggestions">[% loc('Continue – report a new problem') %]</button>
+ <button type="button" class="btn btn--block js-hide-duplicate-suggestions">[% loc('Continue – report a new problem') %]</button>
</div>
<div class="js-template-get-updates hidden">
<div id="alerts" class="get-updates js-alert-list">
@@ -29,7 +29,15 @@
<input type="hidden" name="token" value="[% csrf_token %]" disabled>
<input type="hidden" name="type" value="updates" disabled>
[% IF c.user_exists %]
- <input type="submit" value="[% loc('Get updates') %]" class="btn btn--block" id="alert_email_button">
+ [% IF c.user.has_permission_to('contribute_as_another_user', bodies_ids) %]
+ <label for="rznvy_input">[% loc('Email') %]</label>
+ <div class="form-txt-submit-box">
+ <input type="email" class="form-control" name="rznvy" id="rznvy_input" aria-described-by="rznvy_hint" disabled>
+ <input type="submit" value="[% loc('Get updates') %]" class="btn" id="alert_email_button">
+ </div>
+ [% ELSE %]
+ <input type="submit" value="[% loc('Get updates') %]" class="btn btn--block" id="alert_email_button">
+ [% END %]
[% ELSE %]
<label for="rznvy_input">[% loc('Your email') %]</label>
<div class="form-txt-submit-box">
diff --git a/templates/web/base/report/new/fill_in_details.html b/templates/web/base/report/new/fill_in_details.html
index fa7aabce3..8db096c96 100644
--- a/templates/web/base/report/new/fill_in_details.html
+++ b/templates/web/base/report/new/fill_in_details.html
@@ -30,7 +30,7 @@
<input type="hidden" name="longitude" id="fixmystreet.longitude" value="[% longitude | html %]">
[% IF report.used_map %]
- [% map_html %]
+ [% map_html | safe %]
</div>
<div id="map_sidebar">
<div id="side-form">
diff --git a/templates/web/base/report/new/fill_in_details_form.html b/templates/web/base/report/new/fill_in_details_form.html
index c9bb2bf87..3954e1e43 100644
--- a/templates/web/base/report/new/fill_in_details_form.html
+++ b/templates/web/base/report/new/fill_in_details_form.html
@@ -1,4 +1,4 @@
-<h1>[% loc('Report your problem') %]</h1>
+[% PROCESS 'report/new/form_heading.html' %]
<div class="js-new-report-user-hidden">
@@ -26,7 +26,7 @@
<p class="form-error">[% loc('Sorry, we could not log you in. Please fill in the form below.') %]</p>
[% END %]
-[% sidebar_html %]
+[% sidebar_html | safe %]
[% INCLUDE 'errors.html' %]
diff --git a/templates/web/buckinghamshire/front/footer-marketing.html b/templates/web/base/report/new/form_after_heading.html
index e69de29bb..e69de29bb 100644
--- a/templates/web/buckinghamshire/front/footer-marketing.html
+++ b/templates/web/base/report/new/form_after_heading.html
diff --git a/templates/web/base/report/new/form_heading.html b/templates/web/base/report/new/form_heading.html
index e69de29bb..bd61baa95 100644
--- a/templates/web/base/report/new/form_heading.html
+++ b/templates/web/base/report/new/form_heading.html
@@ -0,0 +1 @@
+<h1>[% loc('Report your problem') %]</h1>
diff --git a/templates/web/base/report/new/form_public_councils_text.html b/templates/web/base/report/new/form_public_councils_text.html
new file mode 100644
index 000000000..a4cd5db49
--- /dev/null
+++ b/templates/web/base/report/new/form_public_councils_text.html
@@ -0,0 +1,11 @@
+[% BLOCK public_councils_text %]
+<h2 class="form-section-heading js-hide-if-private-category">[% loc( 'Public details' ) %]</h2>
+<h2 class="form-section-heading form-section-heading--private js-hide-if-public-category hidden-js">[% loc( 'Report details' ) %]</h2>
+<div class="form-section-description" id="js-councils_text">
+ [% IF js %]
+ [% PROCESS 'report/new/councils_text_all.html' list_of_names = [ loc('the local council') ] %]
+ [% ELSE %]
+ [% PROCESS 'report/new/councils_text.html' %]
+ [% END %]
+</div>
+[% END %]
diff --git a/templates/web/base/report/new/form_report.html b/templates/web/base/report/new/form_report.html
index 39e29c723..3b28d4aa7 100644
--- a/templates/web/base/report/new/form_report.html
+++ b/templates/web/base/report/new/form_report.html
@@ -1,23 +1,35 @@
+[% SET form_show_category_only = NOT category || field_errors.category || disable_form_message || have_disable_qn_to_answer %]
+[% TRY %][% PROCESS 'report/new/_form_labels.html' %][% CATCH file %][% END %]
+
<!-- report/new/form_report.html -->
-[% INCLUDE 'report/new/form_heading.html' %]
+[% INCLUDE 'report/new/form_after_heading.html' %]
[% IF field_errors.bodies %]
<p class='form-error'>[% field_errors.bodies %]</p>
[% END %]
+[% PROCESS 'report/new/form_public_councils_text.html' %]
+[% IF public_councils_text_at_top %]
+ [% INCLUDE public_councils_text %]
+[% END %]
+
[% PROCESS "report/new/category_wrapper.html" %]
[% TRY %][% PROCESS 'report/new/after_category.html' %][% CATCH file %][% END %]
-<div class="js-hide-if-invalid-category">
-[% TRY %][% PROCESS 'report/new/_form_labels.html' %][% CATCH file %][% END %]
- <h2 class="form-section-heading">[% loc( 'Public details' ) %]</h2>
- <div class="form-section-description" id="js-councils_text">
- [% IF js %]
- [% PROCESS 'report/new/councils_text_all.html' list_of_names = [ loc('the local council') ] %]
- [% ELSE %]
- [% PROCESS 'report/new/councils_text.html' %]
- [% END %]
+[% IF form_show_category_only %]
+ <div class="hidden-js">
+ <input class="btn btn--primary btn--block btn--final" type="submit" name="submit_category_part_only" value="[% loc('Submit') %]">
</div>
+ [% SET field_required = '' %]
+[% ELSE %]
+ [% SET field_required = ' required' %]
+[% END %]
+
+<div class="js-hide-if-invalid-category[% ' hidden-nojs' IF form_show_category_only %]">
+
+ [% UNLESS public_councils_text_at_top %]
+ [% INCLUDE public_councils_text %]
+ [% END %]
[% INCLUDE 'report/new/form_title.html' %]
@@ -66,7 +78,7 @@
<p class='form-error'>[% field_errors.detail %]</p>
[% END %]
- <textarea class="form-control" rows="7" cols="26" name="detail" id="form_detail" [% IF form_detail_placeholder %]aria-describedby="detail-hint"[% END %] required>[% report.detail | html %]</textarea>
+ <textarea class="form-control" rows="7" cols="26" name="detail" id="form_detail" [% IF form_detail_placeholder %]aria-describedby="detail-hint"[% END %][% field_required %]>[% report.detail | html %]</textarea>
[% TRY %][% PROCESS 'report/new/inline-tips.html' %][% CATCH file %][% END %]
diff --git a/templates/web/base/report/new/form_title.html b/templates/web/base/report/new/form_title.html
index b436092d8..423a0cf0e 100644
--- a/templates/web/base/report/new/form_title.html
+++ b/templates/web/base/report/new/form_title.html
@@ -5,4 +5,4 @@
[% IF field_errors.title %]
<p class='form-error'>[% field_errors.title %]</p>
[% END %]
-<input class="form-control" type="text" value="[% report.title | html %]" name="title" id="form_title" aria-describedby="title-hint" required>
+<input class="form-control" type="text" value="[% report.title | html %]" name="title" id="form_title" aria-describedby="title-hint"[% field_required %] autocomplete="off">
diff --git a/templates/web/base/report/new/form_user.html b/templates/web/base/report/new/form_user.html
index 2292ed78b..73e1b5d33 100644
--- a/templates/web/base/report/new/form_user.html
+++ b/templates/web/base/report/new/form_user.html
@@ -1,7 +1,7 @@
<!-- report/new/form_user.html -->
-<div class="js-hide-if-invalid-category">
+<div class="js-hide-if-invalid-category[% ' hidden-nojs' IF form_show_category_only %]">
- [% PROCESS 'report/form/user.html' %]
+ [% PROCESS 'report/form/user.html' type='report' %]
<div class="hidden-js js-new-report-user-shown">
<div class="hidden-nojs form-section-preview">
@@ -10,7 +10,7 @@
<strong class="js-form-section-preview" data-source="#form_title"></strong>
<span class="js-form-section-preview" data-source="#form_detail"></span>
</p>
- <button class="btn btn--block js-new-report-user-hide">[% loc('Edit report details') %]</button>
+ <button type="button" class="btn btn--block js-new-report-user-hide">[% loc('Edit report details') %]</button>
</div>
[% IF c.user_exists %]
diff --git a/templates/web/base/report/new/form_user_loggedin.html b/templates/web/base/report/new/form_user_loggedin.html
index 37f0c6f0b..0d259e695 100644
--- a/templates/web/base/report/new/form_user_loggedin.html
+++ b/templates/web/base/report/new/form_user_loggedin.html
@@ -6,9 +6,9 @@
[% INCLUDE form_as %]
</div>
[% ELSE %]
- [% can_contribute_as_another_user = c.user.has_permission_to("contribute_as_another_user", bodies.keys) %]
- [% can_contribute_as_anonymous_user = c.user.has_permission_to("contribute_as_anonymous_user", bodies.keys) %]
- [% can_contribute_as_body = c.user.from_body AND c.user.has_permission_to("contribute_as_body", bodies.keys) %]
+ [% can_contribute_as_another_user = c.user.has_permission_to("contribute_as_another_user", bodies_ids) %]
+ [% can_contribute_as_anonymous_user = c.user.has_permission_to("contribute_as_anonymous_user", bodies_ids) %]
+ [% can_contribute_as_body = c.user.from_body AND c.user.has_permission_to("contribute_as_body", bodies_ids) %]
[% IF can_contribute_as_another_user OR can_contribute_as_anonymous_user OR can_contribute_as_body %]
[% INCLUDE form_as %]
[% END %]
@@ -25,7 +25,7 @@
<option value="another_user">[% loc('Another user') %]</option>
[% END %]
[% IF js || can_contribute_as_body %]
- <option value="body" [% c.user.from_body AND ( c.user.has_body_permission_to('planned_reports') || c.user.has_body_permission_to('default_to_body') ) ? 'selected' : '' %]>[% c.user.from_body.name %]</option>
+ <option value="body" [% c.user.from_body AND ( c.user.has_body_permission_to('planned_reports') || c.user.has_body_permission_to('default_to_body') ) ? 'selected' : '' %]>[% c.user.from_body.cobrand_name %]</option>
[% END %]
</select>
[% END %]
@@ -61,9 +61,11 @@
<input class="form-control" type="text" value="[% report.user.email | html %]" name="email" id="form_email">
[% END %]
-[% IF c.user.has_permission_to("report_inspect", bodies.keys) OR c.user.has_permission_to("report_mark_private", bodies.keys) %]
+[% 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 %]>
+ <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 %]>
<label class="inline" for="form_non_public">[% loc('Private') %] </label>
</div>
[% END %]
diff --git a/templates/web/base/report/new/login_success_form.html b/templates/web/base/report/new/login_success_form.html
index 5038c6beb..32c414bda 100644
--- a/templates/web/base/report/new/login_success_form.html
+++ b/templates/web/base/report/new/login_success_form.html
@@ -1,8 +1,8 @@
-<h1>[% loc('Report your problem') %]</h1>
+[% PROCESS 'report/new/form_heading.html' %]
<p class='form-success'>[% loc('You have successfully signed in; please check and confirm your details are accurate:') %]</p>
-[% sidebar_html %]
+[% sidebar_html | safe %]
[% INCLUDE 'errors.html' %]
@@ -13,6 +13,7 @@
[% ELSE %]
[% PROCESS "report/form/user_loggedout.html" type='report' object=report %]
[% END %]
- [% PROCESS 'report/new/form_report.html' %]
+ [% 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') %]">
</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 5b4622cda..a0adbe563 100644
--- a/templates/web/base/report/new/oauth_email_form.html
+++ b/templates/web/base/report/new/oauth_email_form.html
@@ -1,11 +1,11 @@
-<h1>[% loc('Report your problem') %]</h1>
+[% PROCESS 'report/new/form_heading.html' %]
<p class="form-error">
[% loc('Please note your report has <strong>not yet been sent</strong>.') %]
[% loc('We need your email address, please give it below.') %]
</p>
-[% sidebar_html %]
+[% sidebar_html | safe %]
[% INCLUDE 'errors.html' %]
@@ -17,5 +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') %]">
</div>
</fieldset>
diff --git a/templates/web/base/report/new/report_import.html b/templates/web/base/report/new/report_import.html
index f2ead081b..f68e21301 100644
--- a/templates/web/base/report/new/report_import.html
+++ b/templates/web/base/report/new/report_import.html
@@ -2,6 +2,8 @@
<h1>External import</h1>
+[% INCLUDE 'errors.html' %]
+
<p>You may inject problem reports into FixMyStreet programatically using this
simple interface. Upon receipt, an email will be sent to the address given,
with a link the user must click in order to check the details of their report,
@@ -14,12 +16,14 @@ line each starting with <samp>ERROR:</samp>.
<p>You may submit the following information by POST to this URL
(i.e. <samp>[% c.uri_for('/import') %]</samp> ):</p>
+[% IF NOT errors AND NOT c.req.params.web %]
<style type="text/css" media="screen">
input {
/* Hide the form elements - they are just here for simpler testing */
- display: none;
+ display: none !important;
}
</style>
+[% END %]
<form method="POST" action="/import" enctype="multipart/form-data">
@@ -28,66 +32,76 @@ line each starting with <samp>ERROR:</samp>.
<dd>
<em>Required</em>.
Name of application/service using this interface.
- <input type="text" name="service" />
+ <input type="text" name="service" value="[% input.service %]">
</dd>
<dt>id</dt>
<dd>
Unique ID of a user/device, for possible future use.<br>
<small>(e.g. used by Flickr import to know which accounts to look at)</small>
- <input type="text" name="id" />
+ <input type="text" name="id" value="[% input.id %]">
</dd>
<dt>subject</dt>
<dd>
<em>Required</em>. Subject of problem report.
- <input type="text" name="subject" />
+ <input type="text" name="subject" value="[% input.subject %]">
</dd>
<dt>detail</dt>
<dd>
Main body and details of problem report.
- <input type="text" name="detail" />
+ <input type="text" name="detail" value="[% input.detail %]">
</dd>
<dt>name</dt>
<dd>
<em>Required</em>. Name of problem reporter.
- <input type="text" name="name" />
+ <input type="text" name="name" value="[% input.name %]">
</dd>
<dt>email</dt>
<dd>
<em>Required</em>. Email address of problem reporter.
- <input type="text" name="email" />
+ <input type="text" name="email" value="[% input.email %]">
</dd>
<dt>phone</dt>
<dd>
Telephone number of problem reporter.
- <input type="text" name="phone" />
+ <input type="text" name="phone" value="[% input.phone %]">
</dd>
<dt>easting / northing</dt>
<dt>lat / lon</dt>
<dd>
Location of problem report. You can either supply eastings/northings, or WGS84 latitude/longitude.
- <input type="text" name="easting" />
- <input type="text" name="northing" />
- <input type="text" name="lat" />
- <input type="text" name="lon" />
+ <input type="text" name="easting" value="[% input.easting %]">
+ <input type="text" name="northing" value="[% input.northing %]">
+ <input type="text" name="lat" value="[% input.lat %]">
+ <input type="text" name="lon" value="[% input.lon %]">
</dd>
+ [% IF c.cobrand.allow_photo_upload %]
+ <input type="hidden" name="upload_fileid" value="[% upload_fileid %]">
+ [% IF upload_fileid %]
+ [% FOREACH id IN upload_fileid.split(',') %]
+ <img align="right" src="/photo/temp.[% id %]" alt="">
+ [% END %]
+ [% END %]
+
<dt>photo</dt>
<dd>
- Photo of problem (JPEG only).
+ Photo of problem.
<input type="file" name="photo" />
</dd>
+ [% END %]
+
</dl>
-<input type="hidden" name="web" value="0">
-<input type="submit" />
+<input type="hidden" name="web" value="[% c.req.params.web ? 1 : 0 %]">
+<input type="submit" value="[% loc('Submit') %]">
</form>
-[% INCLUDE 'footer.html' %] \ No newline at end of file
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/base/report/update-form-wrapper.html b/templates/web/base/report/update-form-wrapper.html
index 3a75036cc..a46207a3c 100644
--- a/templates/web/base/report/update-form-wrapper.html
+++ b/templates/web/base/report/update-form-wrapper.html
@@ -1,12 +1,21 @@
[% UNLESS c.cobrand.updates_disallowed(problem) %]
+
+ [% IF NOT c.user_exists AND problem.non_public # Came via other-reported token or similar %]
+ <p>[% tprintf(loc('To provide an update, please <a href="%s">sign in</a>.'), '/auth?r=report/' _ problem.id) %]</p>
+
+ [% ELSE %]
+
[% IF two_column_sidebar %]
- <button class="btn btn--provide-update js-provide-update hidden-nojs">[% loc('Provide an update') %]</button>
+ <button type="button" class="btn btn--provide-update js-provide-update hidden-nojs">[% loc('Provide an update') %]</button>
<div class="hidden-js">
[% END %]
[% INCLUDE 'report/update-form.html' %]
[% IF two_column_sidebar %]
</div>
[% END %]
+
+ [% END %]
+
[% ELSE %]
[% TRY %][% INCLUDE 'report/_updates_disallowed_message.html' %][% CATCH file %][% END %]
[% END %]
diff --git a/templates/web/base/report/update-form.html b/templates/web/base/report/update-form.html
index afa110280..d235455ed 100644
--- a/templates/web/base/report/update-form.html
+++ b/templates/web/base/report/update-form.html
@@ -1,5 +1,5 @@
[% allow_creation = (!c.cobrand.only_authed_can_create || (c.user && c.user.from_body)) AND NOT c.cobrand.updates_disallowed(problem) %]
-[% RETURN IF NOT allow_creation OR problem.extra.closed_updates %]
+[% RETURN IF NOT allow_creation %]
<div id="update_form">
[% IF NOT login_success AND NOT oauth_need_email %]
@@ -24,6 +24,7 @@
[% IF login_success %]
[% PROCESS "report/update/form_user_loggedin.html" %]
[% INCLUDE 'report/update/form_update.html' %]
+ <hr>
[% ELSIF oauth_need_email %]
<div id="form_sign_in">
[% PROCESS "report/form/user_loggedout_by_email.html" object=update type='update' valid_class='validNameU' email_required=1 %]
diff --git a/templates/web/base/report/update/form_user.html b/templates/web/base/report/update/form_user.html
index d9a181e26..92120271f 100644
--- a/templates/web/base/report/update/form_user.html
+++ b/templates/web/base/report/update/form_user.html
@@ -1,11 +1,11 @@
<!-- report/update/form_user.html -->
-[% PROCESS 'report/form/user.html' %]
+[% PROCESS 'report/form/user.html' type='update' %]
<div class="hidden-js js-new-report-user-shown">
<div class="hidden-nojs form-section-preview">
<h2 class="form-section-heading">[% loc('Your update') %]</h2>
<p class="js-form-section-preview" data-source="#form_update"></p>
- <button class="btn btn--block js-new-report-user-hide">[% loc('Edit your update') %]</button>
+ <button type="button" class="btn btn--block js-new-report-user-hide">[% loc('Edit your update') %]</button>
</div>
[% IF c.user_exists %]
diff --git a/templates/web/base/report/updates.html b/templates/web/base/report/updates.html
index 817cc7eb4..93bae4d64 100644
--- a/templates/web/base/report/updates.html
+++ b/templates/web/base/report/updates.html
@@ -6,6 +6,9 @@
[%- END %]
[%- NEXT %]
[%- END %]
+[%- IF update.get_extra_metadata('triage_report') == 1 AND ( NOT c.user OR ( NOT c.user.from_body AND NOT c.user.is_superuser ) ) %]
+ [%- NEXT %]
+[%- END %]
[% INCLUDE 'report/update.html' %]
[% END %]
diff --git a/templates/web/base/reports/_list-filter-status.html b/templates/web/base/reports/_list-filter-status.html
new file mode 100644
index 000000000..6fa998fc1
--- /dev/null
+++ b/templates/web/base/reports/_list-filter-status.html
@@ -0,0 +1,45 @@
+[% SET show_all_states = c.cobrand.filter_show_all_states OR (c.user_exists AND (c.user.is_superuser OR c.user.belongs_to_body(body.id))) %]
+
+<select class="form-control js-multiple" name="status" id="statuses" multiple
+ data-all="[% loc('All') %]"
+ [% IF show_all_states %]
+ [% options = [];
+ FOR group IN filter_states; FOR state IN group.1;
+ NEXT IF state == 'hidden';
+ SET state = 'fixed' IF state == 'fixed - council';
+ options.push(state);
+ END; END
+ %]
+ data-all-options='["[% options.join('", "') %]"]'
+ [%~ ELSE ~%]
+ [%~ IF has_fixed_state ~%]
+ data-all-options='["open","closed","fixed"]'
+ [%~ ELSE ~%]
+ data-all-options='["open","closed"]'
+ [%~ END ~%]
+ [%~ END ~%]
+ [% INCLUDE 'reports/_status_filter_options.html' %]
+ >
+ [% IF c.user_exists AND c.user.has_body_permission_to('planned_reports') AND !shortlist AND !heatmap %]
+ <option value="shortlisted"[% ' selected' IF filter_status.shortlisted %]>[% loc('Shortlisted') %]</option>
+ <option value="unshortlisted"[% ' selected' IF filter_status.unshortlisted %]>[% loc('Unshortlisted') %]</option>
+ [% END %]
+ [% IF c.user_exists AND ( c.user.has_body_permission_to('report_inspect') OR c.user.has_body_permission_to('report_mark_private') ) %]
+ <option value="non_public"[% ' selected' IF filter_status.non_public %]>[% loc('Private only') %]</option>
+ [% END %]
+ [% IF show_all_states %]
+ [% FOR group IN filter_states %]
+ [% FOR state IN group.1 %]
+ [% NEXT IF state == 'hidden' %]
+ [% SET state = 'fixed' IF state == 'fixed - council' ~%]
+ <option value="[% state %]"[% ' selected' IF filter_status.$state %]>[% prettify_state(state, 1) %]</option>
+ [% END %]
+ [% END %]
+ [% ELSE %]
+ <option value="open"[% ' selected' IF filter_status.open %]>[% prettify_state('confirmed') %]</option>
+ <option value="closed"[% ' selected' IF filter_status.closed %]>[% prettify_state('closed') %]</option>
+ [% IF has_fixed_state %]
+ <option value="fixed"[% ' selected' IF filter_status.fixed %]>[% prettify_state('fixed') %]</option>
+ [% END %]
+ [% END %]
+</select>
diff --git a/templates/web/base/reports/_list-filters-sort.html b/templates/web/base/reports/_list-filters-sort.html
new file mode 100644
index 000000000..c5911e716
--- /dev/null
+++ b/templates/web/base/reports/_list-filters-sort.html
@@ -0,0 +1,14 @@
+<p class="report-list-filters">
+ <label for="sort">[% loc('Sort by') %]</label>
+ <select class="form-control" name="sort" id="sort">
+ [% IF shortlist %]
+ <option value="shortlist"[% ' selected' IF sort_key == 'shortlist' %]>[% loc('Manual order') %]</option>
+ [% END %]
+ <option value="created-desc"[% ' selected' IF sort_key == 'created-desc' %]>[% loc('Newest') %]</option>
+ <option value="created-asc"[% ' selected' IF sort_key == 'created-asc' %]>[% loc('Oldest') %]</option>
+ <option value="updated-desc"[% ' selected' IF sort_key == 'updated-desc' %]>[% loc('Recently updated') %]</option>
+ <option value="updated-asc"[% ' selected' IF sort_key == 'updated-asc' %]>[% loc('Least recently updated') %]</option>
+ <option value="comments-desc"[% ' selected' IF sort_key == 'comments-desc' %]>[% loc('Most commented') %]</option>
+ </select>
+ <input type="submit" name="filter_update" value="[% loc('Go') %]">
+</p>
diff --git a/templates/web/base/reports/_list-filters.html b/templates/web/base/reports/_list-filters.html
index b898817fc..f5d1faa65 100644
--- a/templates/web/base/reports/_list-filters.html
+++ b/templates/web/base/reports/_list-filters.html
@@ -1,59 +1,28 @@
-[% SET show_all_states = c.cobrand.filter_show_all_states OR (c.user_exists AND (c.user.is_superuser OR c.user.belongs_to_body(body.id))) %]
-[% select_status = BLOCK %]
- <select class="form-control js-multiple" name="status" id="statuses" multiple
- data-all="[% loc('All') %]"
- [% IF show_all_states %]
- [% options = [];
- FOR group IN filter_states; FOR state IN group.1;
- NEXT IF state == 'hidden';
- SET state = 'fixed' IF state == 'fixed - council';
- options.push(state);
- END; END
- %]
- data-all-options='["[% options.join('", "') %]"]'
- [%~ ELSE ~%]
- [%~ IF has_fixed_state ~%]
- data-all-options='["open","closed","fixed"]'
- [%~ ELSE ~%]
- data-all-options='["open","closed"]'
- [%~ END ~%]
- [%~ END ~%]
- [% INCLUDE 'reports/_status_filter_options.html' %]
- >
- [% IF c.user_exists AND c.user.has_body_permission_to('planned_reports') AND !shortlist %]
- <option value="shortlisted"[% ' selected' IF filter_status.shortlisted %]>[% loc('Shortlisted') %]</option>
- <option value="unshortlisted"[% ' selected' IF filter_status.unshortlisted %]>[% loc('Unshortlisted') %]</option>
- [% END %]
- [% IF c.user_exists AND ( c.user.has_body_permission_to('report_inspect') OR c.user.has_body_permission_to('report_mark_private') ) %]
- <option value="non_public"[% ' selected' IF filter_status.non_public %]>[% loc('Private only') %]</option>
- [% END %]
- [% IF show_all_states %]
- [% FOR group IN filter_states %]
- [% FOR state IN group.1 %]
- [% NEXT IF state == 'hidden' %]
- [% SET state = 'fixed' IF state == 'fixed - council' ~%]
- <option value="[% state %]"[% ' selected' IF filter_status.$state %]>[% prettify_state(state, 1) %]</option>
- [% END %]
- [% END %]
- [% ELSE %]
- <option value="open"[% ' selected' IF filter_status.open %]>[% prettify_state('confirmed') %]</option>
- <option value="closed"[% ' selected' IF filter_status.closed %]>[% prettify_state('closed') %]</option>
- [% IF has_fixed_state %]
- <option value="fixed"[% ' selected' IF filter_status.fixed %]>[% prettify_state('fixed') %]</option>
- [% END %]
- [% END %]
- </select>
+[% select_status = PROCESS 'reports/_list-filter-status.html' %]
+
+[% 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 ) ) %]>
+ [% cat.category_display %]
+ [%~ IF cat.get_extra_metadata('help_text') %] ([% cat.get_extra_metadata('help_text') %])[% END ~%]
+ </option>
+ [% END %]
[% END %]
+
[% select_category = BLOCK %]
[% IF filter_categories.size %]
+ [% SET filter_group = c.get_param('filter_group') %]
<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 %]
- [%~ IF cat.get_extra_metadata('help_text') %] ([% cat.get_extra_metadata('help_text') %])[% END ~%]
- </option>
+ [% IF category_groups %]
+ [% FOR group IN category_groups %]
+ <optgroup label="[% group.name %]">
+ [% INCLUDE category_options categories=group.categories %]
+ </optgroup>
[% END %]
+ [% ELSE %]
+ [% INCLUDE category_options categories=filter_categories %]
+ [% END %]
</select>
[% ELSE %]
[% loc('Everything') %]
@@ -67,24 +36,12 @@
[% END %]
<p class="report-list-filters">
- [% tprintf(loc('<label for="statuses">Show</label> %s reports <label for="filter_categories">about</label> %s', "The first %s is a dropdown of all/fixed/etc, the second is a dropdown of categories"), select_status, select_category) %]
+ [% tprintf(loc('<label for="statuses">Show</label> %s reports <label for="filter_categories">about</label> %s', "The first %s is a dropdown of all/fixed/etc, the second is a dropdown of categories"), mark_safe(select_status), mark_safe(select_category)) %]
<input type="submit" name="filter_update" value="[% loc('Go') %]">
</p>
- <p class="report-list-filters">
- <label for="sort">[% loc('Sort by') %]</label>
- <select class="form-control" name="sort" id="sort">
- [% IF shortlist %]
- <option value="shortlist"[% ' selected' IF sort_key == 'shortlist' %]>[% loc('Manual order') %]</option>
- [% END %]
- <option value="created-desc"[% ' selected' IF sort_key == 'created-desc' %]>[% loc('Newest') %]</option>
- <option value="created-asc"[% ' selected' IF sort_key == 'created-asc' %]>[% loc('Oldest') %]</option>
- <option value="updated-desc"[% ' selected' IF sort_key == 'updated-desc' %]>[% loc('Recently updated') %]</option>
- <option value="updated-asc"[% ' selected' IF sort_key == 'updated-asc' %]>[% loc('Least recently updated') %]</option>
- <option value="comments-desc"[% ' selected' IF sort_key == 'comments-desc' %]>[% loc('Most commented') %]</option>
- </select>
- <input type="submit" name="filter_update" value="[% loc('Go') %]">
- </p>
+ [% PROCESS 'reports/_list-filters-sort.html' %]
+
[% IF page == 'around' %]
<p id="show_old_reports_wrapper" class="report-list-filters[% ' hidden' UNLESS num_old_reports > 0 %]">
<label for="show_old_reports">[% loc('Show older reports') %]</label>
diff --git a/templates/web/base/reports/_rss.html b/templates/web/base/reports/_rss.html
index fdb833315..4bb30c274 100644
--- a/templates/web/base/reports/_rss.html
+++ b/templates/web/base/reports/_rss.html
@@ -1,8 +1,11 @@
<div class="shadow-wrap">
<ul id="key-tools">
<li><a rel="nofollow" id="key-tool-updates-area" class="feed" href="[% rss_url %]">[%
- IF c.cobrand.moniker == 'bromley' AND thing == 'council';
- 'Get updates of reports in Bromley';
+ SET monikers = ['bromley','hounslow'];
+ IF monikers.grep(c.cobrand.moniker).size AND thing == 'council';
+ 'Get updates of reports in ' _ c.cobrand.moniker.ucfirst;
+ ELSIF c.cobrand.moniker == 'isleofwight';
+ 'Get updates of reports on the Isle of Wight';
ELSIF c.cobrand.moniker == 'bromley';
'Get updates of reports in this ward';
ELSIF c.cobrand.is_council;
diff --git a/templates/web/base/reports/body.html b/templates/web/base/reports/body.html
index 8be72d632..d723a7992 100755
--- a/templates/web/base/reports/body.html
+++ b/templates/web/base/reports/body.html
@@ -1,9 +1,16 @@
+[% 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 %]
+
[% IF ward %]
- [% name = "$ward.name, $body.name"
+ [% name = "$ward.name, $body_name"
thing = loc('ward')
%]
[% ELSE %]
- [% name = body.name
+ [% name = body_name
thing = loc('council')
%]
[% END %]
@@ -25,7 +32,7 @@
rss = [ tprintf(loc('Problems within %s, %s', "First %s is the body name, second %s the site name"), name, site_name), rss_url ]
%]
-[% map_html %]
+[% map_html | safe %]
[% IF c.user && c.user.has_body_permission_to('planned_reports') %]
<p class="sub-map-links" id="sub_map_links">
@@ -41,15 +48,15 @@
<h1 id="reports_heading">
[% ward.name %]
</h1>
- <a href="[% body_url %]">[% body.name %]</a>
+ <a href="[% body_url %]">[% body_name %]</a>
[% ELSIF wards %]
<h1 id="reports_heading">
[% FOREACH w IN wards %][% w.name %][% IF NOT loop.last %], [% END %][% END %]
</h1>
- <a href="[% body_url %]">[% body.name %]</a>
+ <a href="[% body_url %]">[% body_name %]</a>
[% ELSE %]
<h1 id="reports_heading">
- [% body.name %]
+ [% body_name %]
</h1>
[% END %]
diff --git a/templates/web/base/reports/index.html b/templates/web/base/reports/index.html
index dfb99f089..dcad59dad 100755
--- a/templates/web/base/reports/index.html
+++ b/templates/web/base/reports/index.html
@@ -25,7 +25,7 @@
<h2>[% loc('All time') %]</h2>
<div class="labelled-line-chart">
<canvas id="chart-all-reports" width="600" height="300"
- data-labels="[&quot;[% problem_periods.join('&quot;,&quot;') %]&quot;]"
+ data-labels="[[% FOR period IN problem_periods %]&quot;[% period %]&quot;[% IF NOT loop.last %],[% END %][% END %]]"
data-values-reports="[[% problems_reported_by_period.join(',') %]]"
data-values-fixed="[[% problems_fixed_by_period.join(',') %]]"
></canvas>
diff --git a/templates/web/base/status/stats.html b/templates/web/base/status/stats.html
index 02f9de904..90904abaa 100644
--- a/templates/web/base/status/stats.html
+++ b/templates/web/base/status/stats.html
@@ -2,7 +2,6 @@
[%-
total_problems_live = total_problems_live | format_number;
- total_problems_users = total_problems_users | format_number;
comments_confirmed = (comments.confirmed || 0) | format_number;
alerts_1 = alerts.1 | format_number;
alerts_0 = alerts.0 | format_number;
@@ -17,6 +16,7 @@
<ul>
<li>[% tprintf( loc('<strong>%s</strong> live problems'), decode(total_problems_live) ) %]
[% IF admin_include_users %]
+ [% total_problems_users = total_problems_users | format_number ~%]
[% tprintf( loc('from %s different users'), decode(total_problems_users) ) %]
[% END %]
</li>
diff --git a/templates/web/bathnes/admin/bodies/_category_field.html b/templates/web/bathnes/admin/bodies/_category_field.html
new file mode 100644
index 000000000..6497e3511
--- /dev/null
+++ b/templates/web/bathnes/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/bathnes/before_wrapper.html b/templates/web/bathnes/before_wrapper.html
new file mode 100644
index 000000000..8da680a9f
--- /dev/null
+++ b/templates/web/bathnes/before_wrapper.html
@@ -0,0 +1,6 @@
+[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
+<!-- Google Tag Manager (noscript) -->
+<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NTQSP7S"
+height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
+<!-- End Google Tag Manager (noscript) -->
+[% END %]
diff --git a/templates/web/bathnes/footer_extra_js.html b/templates/web/bathnes/footer_extra_js.html
index 8113befc9..e46e103e8 100644
--- a/templates/web/bathnes/footer_extra_js.html
+++ b/templates/web/bathnes/footer_extra_js.html
@@ -1,3 +1,9 @@
-[% scripts.push(
- version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js'),
-) %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
+[%~
+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);
+ scripts.push(
+ version('/cobrands/bathnes/staff.js'),
+ );
+END
+%]
diff --git a/templates/web/bathnes/report/new/roads_message.html b/templates/web/bathnes/report/new/roads_message.html
new file mode 100644
index 000000000..3060f16da
--- /dev/null
+++ b/templates/web/bathnes/report/new/roads_message.html
@@ -0,0 +1,7 @@
+<div id="js-roads-responsibility" class="box-warning hidden">
+ <strong>Not maintained by Bath &amp; North East Somerset Council</strong>
+ <div id="js-not-a-road" class="hidden js-responsibility-message">
+ <p>The location you have selected doesn't appear to be on <span class="js-roads-asset" data-original="a road">a road</span> that Bath &amp; North East Somerset Council maintain.</p>
+ <p>Please select <span class="js-roads-asset" data-original="a road">a road</span> on which to make a report.</p>
+ </div>
+</div>
diff --git a/templates/web/bathnes/tracking_code.html b/templates/web/bathnes/tracking_code.html
index 386b42e0e..d7ad4679c 100644
--- a/templates/web/bathnes/tracking_code.html
+++ b/templates/web/bathnes/tracking_code.html
@@ -1,6 +1,6 @@
[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-418184-9"></script>
-<script>
+<script nonce="[% csp_nonce %]">
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
@@ -8,8 +8,18 @@
gtag('config', 'UA-418184-9');
</script>
+<!-- Google Tag Manager -->
+<script nonce="[% csp_nonce %]">
+(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
+new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
+j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
+'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
+})(window,document,'script','dataLayer','GTM-NTQSP7S');</script>
+<!-- End Google Tag Manager -->
+
<!-- Hotjar Tracking Code for www.bathnes.gov.uk -->
-<script> (function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:909367,hjsv:6}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); </script>
+<script nonce="[% csp_nonce %]">
+(function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:909367,hjsv:6}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); </script>
[% ELSE %]
<!-- Tracking code not inserted as "[% c.config.BASE_URL %]" not "https://www.fixmystreet.com" -->
[% END %]
diff --git a/templates/web/bexley/around/intro.html b/templates/web/bexley/around/intro.html
new file mode 100644
index 000000000..8110e5347
--- /dev/null
+++ b/templates/web/bexley/around/intro.html
@@ -0,0 +1,2 @@
+ <h1>[% loc('Report, view, or discuss local problems') %]</h1>
+ <h2>[% loc('(like graffiti, potholes, broken paving slabs, or street lighting)') %]</h2>
diff --git a/templates/web/bexley/email_sent.html b/templates/web/bexley/email_sent.html
new file mode 100644
index 000000000..6677f65de
--- /dev/null
+++ b/templates/web/bexley/email_sent.html
@@ -0,0 +1,38 @@
+[% INCLUDE 'header.html', bodyclass = 'fullwidthpage', title = loc('Create a report') %]
+
+<div class="confirmation-header confirmation-header--inbox">
+
+ <h1>[% loc("Nearly done! Now check your email&hellip;") %]</h1>
+
+ <p>
+ [% IF email_type == 'problem' %]
+ [% loc("Click the link in our confirmation email to publish your problem.") %]
+ [% ELSIF email_type == 'update' %]
+ [% loc("Click the link in our confirmation email to publish your update.") %]
+ [% ELSIF email_type == 'alert' %]
+ [% loc("Click the link in our confirmation email to activate your alert.") %]
+ [% END %]
+ </p>
+
+ [% TRY %][% INCLUDE '_email_sent_extra.html' %][% CATCH file %][% END %]
+
+ <p>
+ [% loc("Can&rsquo;t find our email? Check your spam folder&nbsp;&ndash; that&rsquo;s the solution 99% of the time.") %]
+ </p>
+
+ <p style="border: 0.1em solid rgb(252, 13, 27); padding: 0.5em;">
+ <strong>While we find ourselves in these unprecedented times.</strong>
+ All issues reported on Bexley’s FixMyStreet system will continue to be
+ actioned to keep our roads safe for critical workers to be able to continue
+ to support the London Borough of Bexley and its residents. We may take
+ longer to respond to you while we concentrate on getting issues resolved in
+ priority order and within available resources. Non-urgent defects may also
+ take longer than normal to fix. We will continue to serve you the best that
+ we can but urge everyone not to make journeys unless absolutely necessary
+ and not report to anything that is not urgent. Thank you for
+ your&nbsp;understanding.
+ </p>
+
+</div>
+
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/bexley/footer_extra_js.html b/templates/web/bexley/footer_extra_js.html
new file mode 100644
index 000000000..7369f7147
--- /dev/null
+++ b/templates/web/bexley/footer_extra_js.html
@@ -0,0 +1 @@
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 tfl=1 %]
diff --git a/templates/web/bexley/front/pre-steps.html b/templates/web/bexley/front/pre-steps.html
new file mode 100644
index 000000000..d8fe7dec1
--- /dev/null
+++ b/templates/web/bexley/front/pre-steps.html
@@ -0,0 +1,12 @@
+<p style="border: 0.3em solid rgb(252, 13, 27); padding: 2em; font-size: 1.2em;">
+<strong>While we find ourselves in these unprecedented times.</strong>
+ All issues reported on Bexley’s FixMyStreet system will continue to be
+ actioned to keep our roads safe for critical workers to be able to continue
+ to support the London Borough of Bexley and its residents. We may take
+ longer to respond to you while we concentrate on getting issues resolved in
+ priority order and within available resources. Non-urgent defects may also
+ take longer than normal to fix. We will continue to serve you the best that
+ we can but urge everyone not to make journeys unless absolutely necessary
+ and not report to anything that is not urgent. Thank you for your
+ understanding.
+</p>
diff --git a/templates/web/bexley/header_extra.html b/templates/web/bexley/header_extra.html
new file mode 100644
index 000000000..c5b1dcc6e
--- /dev/null
+++ b/templates/web/bexley/header_extra.html
@@ -0,0 +1 @@
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,400i,700">
diff --git a/templates/web/bexley/header_logo.html b/templates/web/bexley/header_logo.html
new file mode 100644
index 000000000..f0f9b2cc8
--- /dev/null
+++ b/templates/web/bexley/header_logo.html
@@ -0,0 +1,2 @@
+ <a href="https://www.bexley.gov.uk" id="site-logo">London Borough of Bexley</a>
+ <a href="/" id="report-cta" title="[%- loc('Report a problem') -%]">[%- loc('Report') -%]</a>
diff --git a/templates/web/bexley/main_nav_items.html b/templates/web/bexley/main_nav_items.html
new file mode 100644
index 000000000..1398f8640
--- /dev/null
+++ b/templates/web/bexley/main_nav_items.html
@@ -0,0 +1,31 @@
+[% INCLUDE 'navigation/_report.html' %]
+[%~ INCLUDE 'navigation/_all_reports.html' ~%]
+
+[%~
+ IF pc;
+ pc_uri = pc | uri;
+ pc_suffix = "/list?pc=" _ pc_uri;
+ END;
+
+ INCLUDE navitem uri='/alert' label=loc('Local alerts') suffix=pc_suffix;
+~%]
+
+[%~ INCLUDE navitem uri='/faq' label=loc('Help') ~%]
+
+[%~ UNLESS hide_privacy_link ~%]
+ [%~ INCLUDE navitem uri=c.cobrand.privacy_policy_url label=loc('Privacy') liattrs='class="nav-menu__item--privacy"' ~%]
+[%~ END ~%]
+
+[%~ IF c.user_exists ~%]
+ [%~ INCLUDE navitem uri='/my' label=loc('Your account') ~%]
+[%~ ELSE ~%]
+ [%~ INCLUDE navitem uri='/auth' label=loc('Sign in') ~%]
+[%~ END ~%]
+
+[%~ IF c.user_exists AND c.user.has_body_permission_to('planned_reports') ~%]
+ [%~ INCLUDE navitem always_url=1 uri='/my/planned' label=loc('Shortlist') ~%]
+[%~ END ~%]
+
+[%~ IF c.user_exists AND c.cobrand.admin_allow_user(c.user) ~%]
+ [%~ INCLUDE navitem uri='/admin' label=loc('Admin') ~%]
+[%~ END ~%]
diff --git a/templates/web/bexley/tokens/_extras_confirm.html b/templates/web/bexley/tokens/_extras_confirm.html
new file mode 100644
index 000000000..345c8a52e
--- /dev/null
+++ b/templates/web/bexley/tokens/_extras_confirm.html
@@ -0,0 +1,12 @@
+<p style="border: 0.1em solid rgb(252, 13, 27); padding: 0.5em;">
+ <strong>While we find ourselves in these unprecedented times.</strong>
+ All issues reported on Bexley’s FixMyStreet system will continue to be
+ actioned to keep our roads safe for critical workers to be able to continue
+ to support the London Borough of Bexley and its residents. We may take
+ longer to respond to you while we concentrate on getting issues resolved in
+ priority order and within available resources. Non-urgent defects may also
+ take longer than normal to fix. We will continue to serve you the best that
+ we can but urge everyone not to make journeys unless absolutely necessary
+ and not report to anything that is not urgent. Thank you for
+ your&nbsp;understanding.
+</p>
diff --git a/templates/web/bexley/tracking_code.html b/templates/web/bexley/tracking_code.html
new file mode 100644
index 000000000..dff0b4607
--- /dev/null
+++ b/templates/web/bexley/tracking_code.html
@@ -0,0 +1,15 @@
+[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
+<script nonce="[% csp_nonce %]">
+(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ga('create', 'UA-96119487-1', 'auto');
+ga('set', 'anonymizeIp', true);
+ga('send', 'pageview');
+
+</script>
+[% ELSE %]
+<!-- Tracking code not inserted as "[% c.config.BASE_URL %]" not "https://www.fixmystreet.com" -->
+[% END %]
diff --git a/templates/web/borsetshire/auth/_general_top.html b/templates/web/borsetshire/auth/_general_top.html
index 0af3737e8..3ab3c39bc 100644
--- a/templates/web/borsetshire/auth/_general_top.html
+++ b/templates/web/borsetshire/auth/_general_top.html
@@ -5,16 +5,16 @@ different types of user we’ve set up on this demo site:
<ul id='demo-user-list' class="clearfix">
<li>
-<button class="btn" data-email="user@example.org">Normal user</button>
+<button type="button" class="btn" data-email="user@example.org">Normal user</button>
<span>A local resident who has created reports and updates on the site.</span>
<li>
-<button class="btn" data-email="cs@example.org">Customer service</button>
+<button type="button" class="btn" data-email="cs@example.org">Customer service</button>
<span>A customer service staff member, who can create and moderate existing reports.</span>
<li>
-<button class="btn" data-email="inspector@example.org">Inspector</button>
+<button type="button" class="btn" data-email="inspector@example.org">Inspector</button>
<span>An inspector staff member, who can inspect reports and create shortlists.</span>
<li>
-<button class="btn" data-email="super@example.org">Super user</button>
+<button type="button" class="btn" data-email="super@example.org">Super user</button>
<span>A superuser staff member, who can do all the above, plus also edit users, templates, and priorities in the Admin screen.</span>
</ul>
diff --git a/templates/web/borsetshire/front/footer-marketing.html b/templates/web/borsetshire/front/footer-marketing.html
index 41a815e65..2a4305c81 100644
--- a/templates/web/borsetshire/front/footer-marketing.html
+++ b/templates/web/borsetshire/front/footer-marketing.html
@@ -2,5 +2,5 @@
<h2>FixMyStreet Pro</h2>
<p class="lead">The one-stop street reporting service for councils.</p>
<p>Integrate FixMyStreet with your council system for smooth, end-to-end report fullfilment.</p>
- <p><a href="https://www.fixmystreet.com/pro/" class="btn">Learn more</a></p>
+ <p><a href="https://www.fixmystreet.com/pro/" class="btn">Learn more about Pro</a></p>
</div>
diff --git a/templates/web/bristol/footer.html b/templates/web/bristol/footer.html
deleted file mode 100644
index 794dbe457..000000000
--- a/templates/web/bristol/footer.html
+++ /dev/null
@@ -1,23 +0,0 @@
- </div><!-- .content role=main -->
- </div><!-- .container -->
- </div><!-- .table-cell -->
-
- <div class="nav-wrapper">
- <div class="container">
- [% INCLUDE "main_nav.html" body_name=c.cobrand.council_area %]
- </div>
- </div>
- </div> <!-- .wrapper -->
-
- [% IF pagefooter %]
- <div class="bristol_footer">
- <footer role="contentinfo" class="clearfix">
- [% INCLUDE 'front/footer-marketing.html' %]
- </footer>
- </div>
- [% END %]
-
- [% INCLUDE 'common_footer_tags.html' %]
-
-</body>
-</html>
diff --git a/templates/web/bristol/front/footer-marketing.html b/templates/web/bristol/footer_extra.html
index 11d051b2c..6aa1d5493 100644
--- a/templates/web/bristol/front/footer-marketing.html
+++ b/templates/web/bristol/footer_extra.html
@@ -1,3 +1,6 @@
+<div class="bristol_footer">
+ <footer role="contentinfo" class="clearfix">
+
<div class="span8">
<div id="footer-logo">
<p>
@@ -51,3 +54,6 @@
<a href="https://www.bristol.gov.uk/about-our-website/copyright">Copyright&nbsp;© 2015 Bristol City Council</a>
</div>
</div>
+
+ </footer>
+</div>
diff --git a/templates/web/bristol/footer_extra_js.html b/templates/web/bristol/footer_extra_js.html
index 1742a55e2..3965c9d1e 100644
--- a/templates/web/bristol/footer_extra_js.html
+++ b/templates/web/bristol/footer_extra_js.html
@@ -1,5 +1 @@
-[% scripts.push(
- version('/vendor/OpenLayers.Projection.OrdnanceSurvey.js')
- version('/cobrands/fixmystreet-uk-councils/js.js'),
- version('/cobrands/highways/assets.js'),
-) %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 ~%]
diff --git a/templates/web/bristol/maps/bristol.html b/templates/web/bristol/maps/bristol.html
deleted file mode 100644
index 1dcc82635..000000000
--- a/templates/web/bristol/maps/bristol.html
+++ /dev/null
@@ -1,4 +0,0 @@
-[% map_html = BLOCK %]
-[% INCLUDE maps/openlayers.html %]
-[% INCLUDE maps/wmts_config.html %]
-[% END %]
diff --git a/templates/web/bristol/maps/noscript_map.html b/templates/web/bristol/maps/noscript_map.html
deleted file mode 100644
index 987aa76a6..000000000
--- a/templates/web/bristol/maps/noscript_map.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<div class="noscript square-map__outer">
- <div class="square-map__inner">
- <div id="[% nsm_prefix %]drag">
- [%- FOR row IN map.tiles -%]
- [%- FOR tile IN row -%]
- [%- top_px = tile.row_offset * map.tile_size -%]
- [%- left_px = tile.col_offset * map.tile_size %]
- <[% map.img_type %]
- class="square-map__tile"
- alt="[% tile.alt %]"
- id="[% nsm_prefix %]t[% tile.dotted_id %]"
- name="tile_[% tile.dotted_id %]"
- src="[% tile.src %]"
- style="width: [% 100 / map.cols %]%; height: auto; float: left;">
- [%- END -%]
- [% END %]
- </div>
- <div id="[% nsm_prefix %]pins">[% FOR pin IN map.pins %][% INCLUDE pin %][% END %]</div>
- [% INCLUDE 'maps/_compass.html' %]
- </div>
-</div>
-
-[% BLOCK pin %]
-[%
- SET pin_top = pin.py / ( map.tile_size * map.rows ) * 100;
- SET pin_left = pin.px / ( map.tile_size * map.cols ) * 100;
- # -24px half of 48px wide image, -64px all of 64px tall image
- INCLUDE 'maps/pin.html'
- pin_style = 'top:' _ pin_top _ '%; left:' _ pin_left _ '%; position:absolute; margin-left:-24px; margin-top:-64px;'
-%]
-[% END %]
-
diff --git a/templates/web/bristol/report/_updates_disallowed_message.html b/templates/web/bristol/report/_updates_disallowed_message.html
new file mode 100644
index 000000000..32b160d5f
--- /dev/null
+++ b/templates/web/bristol/report/_updates_disallowed_message.html
@@ -0,0 +1,6 @@
+<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 } )
+ ) %]
+ Please reference <b>[% problem.id %]</b> in your new report if it is an update on this one.
+</p>
diff --git a/templates/web/bristol/tracking_code.html b/templates/web/bristol/tracking_code.html
index a8fefe229..af3c9aa66 100644
--- a/templates/web/bristol/tracking_code.html
+++ b/templates/web/bristol/tracking_code.html
@@ -1,6 +1,6 @@
[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
-<script>
+<script nonce="[% csp_nonce %]">
!function(b,r,i,s,t,o,l){b.GoogleAnalyticsObject=i;b[i]||(b[i]=function(){
(b[i].q=b[i].q||[]).push(arguments)});b[i].l=+new Date;o=r.createElement(s);
l=r.getElementsByTagName(s)[0];o.src=t;l.parentNode.insertBefore(o,l)}
diff --git a/templates/web/bromley/footer.html b/templates/web/bromley/footer.html
index 5ac94ba83..914ba3ace 100644
--- a/templates/web/bromley/footer.html
+++ b/templates/web/bromley/footer.html
@@ -9,7 +9,7 @@
<div class="nav-wrapper">
<div class="container">
- [% INCLUDE "main_nav.html" body_name=c.cobrand.council_area hide_privacy_link=1 %]
+ [% INCLUDE "main_nav.html" hide_privacy_link=1 %]
</div>
</div>
</div> <!-- .wrapper -->
diff --git a/templates/web/bromley/footer_extra_js.html b/templates/web/bromley/footer_extra_js.html
index 27eb438ca..c3bad670c 100644
--- a/templates/web/bromley/footer_extra_js.html
+++ b/templates/web/bromley/footer_extra_js.html
@@ -1,10 +1,10 @@
[% scripts.push(
version('/jslib/jquery-1.7.2.min.js'),
version('/cobrands/bromley/a-z-nav.js'),
- version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js'),
) %]
+[% PROCESS 'footer_extra_js_base.html' cobrand_js=1 validation=1 tfl=1 %]
[% IF bodyclass.match('mappage');
scripts.push(
- version('/cobrands/bromley/js.js'),
+ version('/cobrands/bromley/map.js'),
);
END %]
diff --git a/templates/web/bromley/front/pre-steps.html b/templates/web/bromley/front/pre-steps.html
index a5523c862..ebe7154c1 100644
--- a/templates/web/bromley/front/pre-steps.html
+++ b/templates/web/bromley/front/pre-steps.html
@@ -1,3 +1,11 @@
+<p style="padding: 1em; background: #fff; border: 3px solid #235e1c; border-radius: 5px;">
+Please note that during the current covid-19 pandemic it will not be possible
+for us to action or respond to all reports within the normal timeframes. We
+are working hard to ensure key services are maintained and focusing on high
+priority issues in the first instance.
+<a href="https://www.bromley.gov.uk/news/article/1551/coronavirus_covid-19_–_what_you_need_to_know">Further information on our services during the covid-19 pandemic</a>.
+</p>
+
<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
diff --git a/templates/web/bromley/navigation/_report.html b/templates/web/bromley/navigation/_report.html
new file mode 100644
index 000000000..07b865cf9
--- /dev/null
+++ b/templates/web/bromley/navigation/_report.html
@@ -0,0 +1,11 @@
+[%~ INCLUDE navitem uri='https://www.bromley.gov.uk/news/article/1551/coronavirus_covid-19_%E2%80%93_what_you_need_to_know' label='Coronavirus update' ~%]
+
+[%~ IF problem AND NOT problem.non_public ~%]
+ [%~ INCLUDE navitem uri='/report/new?longitude=' _ problem.longitude _ '&latitude=' _ problem.latitude label=loc('Report another problem here') attrs='class="report-a-problem-btn"' ~%]
+[%~ ELSIF latitude AND longitude ~%]
+ [%~ INCLUDE navitem uri='/report/new?longitude=' _ longitude _ '&latitude=' _ latitude label=loc('Report a problem here') attrs='class="report-a-problem-btn"' ~%]
+[%~ ELSIF homepage_template ~%]
+ [%~ INCLUDE navitem uri='/report' label=loc('Report a problem') attrs='class="report-a-problem-btn"' ~%]
+[%~ ELSE ~%]
+ [%~ INCLUDE navitem uri='/' label=loc('Report a problem') attrs='class="report-a-problem-btn"' ~%]
+[%~ END ~%]
diff --git a/templates/web/bromley/report/form/user_loggedout_email.html b/templates/web/bromley/report/form/user_loggedout_email.html
index 78b4a0044..8aad16289 100644
--- a/templates/web/bromley/report/form/user_loggedout_email.html
+++ b/templates/web/bromley/report/form/user_loggedout_email.html
@@ -18,5 +18,4 @@
[% END %]
<input type="[% username_type %]" name="username" id="form_[% name %]"
value="[% username_value | html %]"
- [% IF required %]required[% END %]
class="form-control required">
diff --git a/templates/web/bromley/report/update/form_user.html b/templates/web/bromley/report/update/form_user.html
index c8df54c46..de151d91b 100644
--- a/templates/web/bromley/report/update/form_user.html
+++ b/templates/web/bromley/report/update/form_user.html
@@ -1,11 +1,11 @@
<!-- report/update/form_user.html -->
-[% PROCESS 'report/form/user.html' %]
+[% PROCESS 'report/form/user.html' type='update' %]
<div class="hidden-js js-new-report-user-shown">
<div class="hidden-nojs form-section-preview">
<h2 class="form-section-heading">[% loc('Your update') %]</h2>
<p class="js-form-section-preview" data-source="#form_update"></p>
- <button class="btn btn--block js-new-report-user-hide">[% loc('Edit your update') %]</button>
+ <button type="button" class="btn btn--block js-new-report-user-hide">[% loc('Edit your update') %]</button>
</div>
[% IF c.user_exists %]
diff --git a/templates/web/buckinghamshire/about/faq-en-gb.html b/templates/web/buckinghamshire/about/faq-en-gb.html
index c703b556a..20449abe2 100755
--- a/templates/web/buckinghamshire/about/faq-en-gb.html
+++ b/templates/web/buckinghamshire/about/faq-en-gb.html
@@ -8,34 +8,29 @@
<dt>What is this site?</dt>
<dd>FixMyStreet Bucks is a site to allow people to make reports to
- Buckinghamshire County Council, and view, or discuss local issues they’ve
+ Buckinghamshire Council, and view, or discuss local issues they’ve
found, by simply locating them on a map.</dd>
<dt>What sort of problems should I report with FixMyStreet?</dt>
<dd>FixMyStreet Bucks is primarily for reporting things which are
<strong>broken or damaged or dumped, and need fixing, or clearing</strong>, such as:
<ul>
+ <li>Abandoned vehicles
<li>Flooding
+ <li>Flytipping or litter
<li>Grit bins
<li>Rubbish or flytipping
<li>Potholes
+ <li>Street cleaning, such as broken glass in a cycle lane
<li>Street signs and traffic lights
<li>Unlit lampposts
</ul>
- We may send some reports to the relevant District Council especially for:
- <ul>
- <li>Abandoned vehicles
- <li>Flytipping or litter
- <li>Streetcleaning, such as broken glass in a cycle lane
- </ul>
</dd>
<dt>What isn’t FixMyStreet for?</dt>
<dd>FixMyStreet is not a way of getting in touch with Buckinghamshire
- County Council for all issues – please use this site only for problems
- such as the above. We often route problem reports to the Parish and District
- council, so using this site for other matters may result in a delay in
- your report getting to the right department.
+ Council for all issues – please use this site only for problems
+ such as the above.
<p><strong>You will need to contact the relevant authority directly for problems such as</strong>:
<ul><li>Anti-social behaviour
@@ -46,7 +41,7 @@
<li>Complaining about your neighbours
<li>Joy riding, drug taking, animal cruelty, or other criminal activity should be reported to the Police Service.
</ul>
- <p>Complaints about Buckinghamshire County Council can be sent <a href="https://www.buckscc.gov.uk/services/contact-and-complaints/compliments-complaints-and-suggestions/">via this form</a>.
+ <p>Complaints about Buckinghamshire Council can be sent <a href="https://www.buckscc.gov.uk/services/contact-and-complaints/compliments-complaints-and-suggestions/">via this form</a>.
</dd>
<dt>How do I use the site?</dt>
@@ -55,7 +50,7 @@
own by clicking on the map at the location of the problem.</dd>
<dt>How are the problems solved?</dt>
- <dd>They are reported to us at Buckinghamshire County Council who will
+ <dd>They are reported to us at Buckinghamshire Council who will
resolve the problem the way we normally would.</dd>
<dt>Is it free?</dt>
diff --git a/templates/web/buckinghamshire/footer.html b/templates/web/buckinghamshire/footer.html
deleted file mode 100644
index 81553e00e..000000000
--- a/templates/web/buckinghamshire/footer.html
+++ /dev/null
@@ -1,23 +0,0 @@
- </div><!-- .content role=main -->
- </div><!-- .container -->
- </div><!-- .table-cell -->
-
- <div class="nav-wrapper">
- <div class="container">
- [% INCLUDE "main_nav.html" body_name=c.cobrand.council_area %]
- </div>
- </div>
- </div> <!-- .wrapper -->
-
- [% IF pagefooter %]
- <div class="bucks_footer">
- <footer role="contentinfo" class="clearfix">
- [% INCLUDE 'front/footer-marketing.html' %]
- </footer>
- </div>
- [% END %]
-
- [% INCLUDE 'common_footer_tags.html' %]
-
-</body>
-</html>
diff --git a/templates/web/buckinghamshire/footer_extra_js.html b/templates/web/buckinghamshire/footer_extra_js.html
index 8113befc9..9132ead25 100644
--- a/templates/web/buckinghamshire/footer_extra_js.html
+++ b/templates/web/buckinghamshire/footer_extra_js.html
@@ -1,3 +1 @@
-[% scripts.push(
- version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js'),
-) %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
diff --git a/templates/web/buckinghamshire/front/pre-steps.html b/templates/web/buckinghamshire/front/pre-steps.html
new file mode 100644
index 000000000..4728bff2f
--- /dev/null
+++ b/templates/web/buckinghamshire/front/pre-steps.html
@@ -0,0 +1,7 @@
+<p style="margin: -1em -1em 1em; padding: 20px 30px; 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
+in addressing your report and hope that you will understand in the
+circumstances.
+</p>
diff --git a/templates/web/buckinghamshire/header_logo.html b/templates/web/buckinghamshire/header_logo.html
index 2808d8782..39a298488 100644
--- a/templates/web/buckinghamshire/header_logo.html
+++ b/templates/web/buckinghamshire/header_logo.html
@@ -1,2 +1,2 @@
- <a href="http://www.buckscc.gov.uk/" id="site-logo"><strong>Buckinghamshire</strong> County Council</a>
+ <a href="http://www.buckscc.gov.uk/" id="site-logo"><strong>Buckinghamshire</strong> Council</a>
<a href="/" id="report-cta" title="[%- loc('Report a problem') -%]">[%- loc('Report') -%]</a>
diff --git a/templates/web/buckinghamshire/report/new/form_heading.html b/templates/web/buckinghamshire/report/new/form_after_heading.html
index 81bff156a..81bff156a 100644
--- a/templates/web/buckinghamshire/report/new/form_heading.html
+++ b/templates/web/buckinghamshire/report/new/form_after_heading.html
diff --git a/templates/web/buckinghamshire/report/new/roads_message.html b/templates/web/buckinghamshire/report/new/roads_message.html
index c195f6b52..3d9d95b31 100644
--- a/templates/web/buckinghamshire/report/new/roads_message.html
+++ b/templates/web/buckinghamshire/report/new/roads_message.html
@@ -1,19 +1,19 @@
<div id="js-roads-responsibility" class="box-warning hidden">
- <strong>Not maintained by Buckinghamshire County Council</strong>
+ <strong>Not maintained by Buckinghamshire Council</strong>
<div id="js-not-council-road" class="hidden js-responsibility-message">
- <p>The selected road is not maintained by Buckinghamshire County Council;
+ <p>The selected road is not maintained by Buckinghamshire Council;
to find out who owns this land/road please contact the Land Registry at
<a href="https://www.gov.uk/search-property-information-land-registry">https://www.gov.uk/search-property-information-land-registry</a>.
</p>
</div>
<div id="js-not-council-road-other" class="hidden js-responsibility-message">
- <p>The selected road is not maintained by Buckinghamshire County Council,
+ <p>The selected road is not maintained by Buckinghamshire Council,
but by a neighbouring council. Please move your pin slightly, to the
other side of the border.
</p>
</div>
<div id="js-not-council-road-he" class="hidden js-responsibility-message">
- <p>The selected road is not maintained by Buckinghamshire County Council,
+ <p>The selected road is not maintained by Buckinghamshire Council,
but by Highways England. Please follow this link to
<a class="js-update-coordinates" href="https://www.fixmystreet.com/report/new?latitude=[% latitude |html %]&amp;longitude=[% longitude | html %]">FixMyStreet</a> to continue reporting your issue here.
</p>
diff --git a/templates/web/buckinghamshire/tracking_code.html b/templates/web/buckinghamshire/tracking_code.html
index 2af08af09..070ef2dfc 100644
--- a/templates/web/buckinghamshire/tracking_code.html
+++ b/templates/web/buckinghamshire/tracking_code.html
@@ -1,7 +1,8 @@
[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
<!-- Google Tag Manager -->
-<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
+<script nonce="[% csp_nonce %]">
+(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
diff --git a/templates/web/cheshireeast/about/faq-en-gb.html b/templates/web/cheshireeast/about/faq-en-gb.html
new file mode 100644
index 000000000..8f791819e
--- /dev/null
+++ b/templates/web/cheshireeast/about/faq-en-gb.html
@@ -0,0 +1,56 @@
+[% INCLUDE 'header.html', title = loc('Help'), bodyclass = 'twothirdswidthpage' %]
+
+[% INCLUDE 'about/_sidebar.html' %]
+
+<h1>Cheshire East FixMyStreet</h1>
+
+<p>We are working with FixMyStreet to help people report or see reports of local issues, by simply locating them on a map.</p>
+
+<p>You can use Cheshire East’s FixMyStreet to report Highways issues like potholes or broken street lights.</p>
+
+<p>Use our <a href="https://www.cheshireeast.gov.uk/environment/street_cleansing_and_litter/street_cleansing_and_litter.aspx">Street Cleansing</a> pages to report other issues which require fixing, cleaning or clearing, such as:</p>
+
+<ul>
+ <li>Abandoned vehicles
+ <li>Dog Fouling
+ <li>Flyposting or graffiti
+ <li>Fly tipping or litter
+</ul>
+
+ <p>See our webpages to report problems <strong>such as</strong>:</p>
+
+ <ul>
+ <li><a href="https://www.cheshireeast.gov.uk/environment/community_safety/anti-social_behaviour/anti-social_behaviour.aspx">Anti-social behaviour</a>
+ <li><a href="http://www.cheshireeast.gov.uk/contact">Any urgent or emergency problems</a>
+ <li><a href="https://www.cheshireeast.gov.uk/environment/environmental_health/noise_nuisance/noise_nuisance.aspx">Noise pollution or barking dogs</a>
+ <li><a href="https://www.cheshireeast.gov.uk/environment/environmental_health/local_air_quality/air_pollution_complaints/air_pollution_complaints.aspx">Fires and smoke/smell pollution</a>
+ <li><a href="http://www.cheshireeast.gov.uk/bins">Missing wheelie bins or recycling boxes or missed rubbish collections</a>
+ <li><a href="http://www.cheshireeast.gov.uk/contact">Complaining about the authority</a>
+ </ul>
+
+ <h2>How to use our FixMyStreet pages</h2>
+
+<p>After entering a location, you are presented with a map of that area. You can view problems already reported in that area, or report others yourself by clicking on the map at the location of the problem.
+
+<h3>Problems zoom out on the reporting map</h3>
+
+<p>We want to keep FixMyStreet locally focused, so we restrict the ability to move radically between areas.
+
+<h3>Inappropriate content</h3>
+
+<p>Cheshire East Council and FixMyStreet are not responsible for the content and accuracy of material submitted by its users. We reserve the right to edit or remove any reports or updates which we consider to be inappropriate upon being informed by a user of the site.
+
+<h2>Development of FixMyStreet</h2>
+
+<p>The FixMyStreet service was built by <a href="https://www.mysociety.org/">mySociety</a>.
+
+<p>The software behind this site is open source, and available to you mainly under the GNU Affero GPL software license.
+You can <a href="https://github.com/mysociety/fixmystreet">download the source
+ code</a> and help us develop it. You’re welcome to use it in your own
+ projects, although you must also make available the source code to any such
+ projects. <a href="https://www.fixmystreet.com/">FixMyStreet.com</a> is the
+ original code installation, in the UK.</dd>
+
+</dl>
+
+[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/cheshireeast/about/privacy.html b/templates/web/cheshireeast/about/privacy.html
new file mode 100644
index 000000000..396b34b7e
--- /dev/null
+++ b/templates/web/cheshireeast/about/privacy.html
@@ -0,0 +1,362 @@
+[% 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/alert/_index_text.html b/templates/web/cheshireeast/alert/_index_text.html
new file mode 100644
index 000000000..321a0b85c
--- /dev/null
+++ b/templates/web/cheshireeast/alert/_index_text.html
@@ -0,0 +1,16 @@
+<p>
+We offer a variety of RSS feeds and email alerts for local problems, including
+alerts for all reported problems within a particular ward, or all reported
+problems within a certain distance of a particular location.
+</p>
+
+[% IF location_error %]
+ <div class="error">[% location_error | safe %]</div>
+[% ELSE %]
+ [% INCLUDE 'errors.html' %]
+[% END %]
+
+<p>
+To find out what local alerts we have for you, enter your Cheshire East
+postcode or street name and area:
+</p>
diff --git a/templates/web/cheshireeast/alert/_list_rss_local.html b/templates/web/cheshireeast/alert/_list_rss_local.html
new file mode 100644
index 000000000..ed1fd78ff
--- /dev/null
+++ b/templates/web/cheshireeast/alert/_list_rss_local.html
@@ -0,0 +1,10 @@
+ <p id="rss_local">
+ <a href="[% rss_feed_uri %]" class="alerts-rss-link">
+ <img src="/i/feed.png" width="16" height="16" title="[% loc('RSS feed of nearby problems') %]" alt="[% loc('RSS feed') %]">
+ </a>
+ <label class="label-containing-checkbox" for="[% rss_feed_id %]">
+ <input type="radio" name="feed" id="[% rss_feed_id %]" value="[% rss_feed_id %]"[% IF rss_feed_id == selected_feed || selected_feed == '' %] checked[% END %]>
+ [% tprintf( loc('Reported problems within %.1fkm of %s'), population_radius, name_of_location ) %]
+ [% loc('(covers roughly 200,000 people)') %]
+ </label>
+ </p>
diff --git a/templates/web/cheshireeast/around/intro.html b/templates/web/cheshireeast/around/intro.html
new file mode 100644
index 000000000..857593ebd
--- /dev/null
+++ b/templates/web/cheshireeast/around/intro.html
@@ -0,0 +1,2 @@
+<h1>Report or view local issues</h1>
+<p>(for example potholes, broken street lights, faulty traffic lights)</p>
diff --git a/templates/web/cheshireeast/email_sent.html b/templates/web/cheshireeast/email_sent.html
new file mode 100644
index 000000000..7fcfb2d14
--- /dev/null
+++ b/templates/web/cheshireeast/email_sent.html
@@ -0,0 +1,25 @@
+[% INCLUDE 'header.html', bodyclass = 'fullwidthpage', title = loc('Create a report') %]
+
+<div class="confirmation-header confirmation-header--inbox">
+
+ <h1>[% loc("Nearly done! Now check your email&hellip;") %]</h1>
+
+ <p>
+ [% IF email_type == 'problem' %]
+ Click the link in our confirmation email to publish this problem.
+ [% ELSIF email_type == 'update' %]
+ [% loc("Click the link in our confirmation email to publish your update.") %]
+ [% ELSIF email_type == 'alert' %]
+ [% loc("Click the link in our confirmation email to activate your alert.") %]
+ [% END %]
+ </p>
+
+ [% TRY %][% INCLUDE '_email_sent_extra.html' %][% CATCH file %][% END %]
+
+ <p>
+ [% loc("Can&rsquo;t find our email? Check your spam folder&nbsp;&ndash; that&rsquo;s the solution 99% of the time.") %]
+ </p>
+
+</div>
+
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/cheshireeast/footer_extra.html b/templates/web/cheshireeast/footer_extra.html
new file mode 100644
index 000000000..9ccbde871
--- /dev/null
+++ b/templates/web/cheshireeast/footer_extra.html
@@ -0,0 +1,8 @@
+<footer class="ce-footer">
+ <div class="container">
+ <ul>
+ <li><a href="https://www.cheshireeast.gov.uk/council_and_democracy/council_information/website_information/help_and_accessibility.aspx">Help and accessibility</a>
+ <li><a href="https://www.cheshireeast.gov.uk/council_and_democracy/council_information/website_information/website_information.aspx">Website information, privacy and cookies</a>
+ </ul>
+ </div>
+</footer>
diff --git a/templates/web/cheshireeast/footer_extra_js.html b/templates/web/cheshireeast/footer_extra_js.html
new file mode 100644
index 000000000..9132ead25
--- /dev/null
+++ b/templates/web/cheshireeast/footer_extra_js.html
@@ -0,0 +1 @@
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
diff --git a/templates/web/cheshireeast/front/pre-steps.html b/templates/web/cheshireeast/front/pre-steps.html
new file mode 100644
index 000000000..e39a500e3
--- /dev/null
+++ b/templates/web/cheshireeast/front/pre-steps.html
@@ -0,0 +1,6 @@
+<p style="margin: -1em -1em 1em; padding: 1em; background-color: #ffa100; color: #000;">
+At this time, we request that members of the public only report highway issues
+that present a danger or hazard to highway users, or could impact directly on a
+property or business, by calling us on 0300 123 5020. We would request that any
+other issues are not reported at this time.
+</p>
diff --git a/templates/web/cheshireeast/header_extra.html b/templates/web/cheshireeast/header_extra.html
new file mode 100644
index 000000000..11afd4167
--- /dev/null
+++ b/templates/web/cheshireeast/header_extra.html
@@ -0,0 +1,13 @@
+<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,700&display=swap">
+
+[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
+<script async src="https://www.googletagmanager.com/gtag/js?id=UA-10804167-1"></script>
+<script nonce="[% csp_nonce %]">
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+ gtag('config', 'UA-10804167-1');
+</script>
+[% ELSE %]
+<!-- Tracking code not inserted as "[% c.config.BASE_URL %]" not "https://www.fixmystreet.com" -->
+[% END %]
diff --git a/templates/web/cheshireeast/header_logo.html b/templates/web/cheshireeast/header_logo.html
new file mode 100644
index 000000000..701f47588
--- /dev/null
+++ b/templates/web/cheshireeast/header_logo.html
@@ -0,0 +1,2 @@
+ <a href="https://www.cheshireeast.gov.uk" id="site-logo">Cheshire East Council home page</a>
+ <a href="/" id="report-cta" title="[%- loc('Report a problem') -%]">[%- loc('Report') -%]</a>
diff --git a/templates/web/cheshireeast/report/_council_sent_info.html b/templates/web/cheshireeast/report/_council_sent_info.html
new file mode 100644
index 000000000..1963020bc
--- /dev/null
+++ b/templates/web/cheshireeast/report/_council_sent_info.html
@@ -0,0 +1,17 @@
+[% SET duration_clause = problem.duration_string(c) %]
+[% IF duration_clause || problem.whensent %]
+ <p class="council_sent_info">
+ [%- IF problem.whensent %]
+ [%- IF duration_clause %]
+ [%- external_ref_clause = tprintf(loc('Council ref:&nbsp;%s'), problem.id) %]
+ [%- ELSE %]
+ [%- external_ref_clause = tprintf(loc('%s ref:&nbsp;%s'), problem.external_body, problem.id) %]
+ [%- END %]
+ [%- END -%]
+ [% duration_clause %]
+ [%- IF external_ref_clause %]
+ [%- IF duration_clause %]. [% END %]
+ <strong>[% external_ref_clause %].</strong>
+ [%- END %]
+ </p>
+[% END %]
diff --git a/templates/web/cheshireeast/report/new/_form_labels.html b/templates/web/cheshireeast/report/new/_form_labels.html
new file mode 100644
index 000000000..1897a5ff2
--- /dev/null
+++ b/templates/web/cheshireeast/report/new/_form_labels.html
@@ -0,0 +1,4 @@
+[%
+SET form_title = 'Location of the problem';
+SET form_title_placeholder = 'Exact location, including any landmarks';
+%]
diff --git a/templates/web/cheshireeast/report/new/councils_text_all.html b/templates/web/cheshireeast/report/new/councils_text_all.html
new file mode 100644
index 000000000..d4bafdb3f
--- /dev/null
+++ b/templates/web/cheshireeast/report/new/councils_text_all.html
@@ -0,0 +1,4 @@
+<p>
+ We publish these details online for others to see, in accordance with our
+ <a href="/privacy">privacy policy</a>.
+</p>
diff --git a/templates/web/cheshireeast/report/new/form_after_heading.html b/templates/web/cheshireeast/report/new/form_after_heading.html
new file mode 100644
index 000000000..3958b32b3
--- /dev/null
+++ b/templates/web/cheshireeast/report/new/form_after_heading.html
@@ -0,0 +1,7 @@
+<p>
+ If the issue is dangerous or an emergency, call us on
+ <a href="tel:03001235020"><strong>0300 123 5020</strong></a>
+ between 08:30 and 17:00 Monday to Friday or on
+ <a href="tel:03001235025"><strong>0300 123 5025</strong></a>
+ at any other time.
+</p>
diff --git a/templates/web/cheshireeast/report/new/form_heading.html b/templates/web/cheshireeast/report/new/form_heading.html
new file mode 100644
index 000000000..cbd0dcce4
--- /dev/null
+++ b/templates/web/cheshireeast/report/new/form_heading.html
@@ -0,0 +1 @@
+<h1>Report the problem</h1>
diff --git a/templates/web/cheshireeast/report/new/roads_message.html b/templates/web/cheshireeast/report/new/roads_message.html
new file mode 100644
index 000000000..e30e6aea9
--- /dev/null
+++ b/templates/web/cheshireeast/report/new/roads_message.html
@@ -0,0 +1,10 @@
+<div id="js-roads-responsibility" class="box-warning hidden">
+ <strong>Not maintained by Cheshire East Highways</strong>
+ <div id="js-not-a-road" class="hidden js-responsibility-message">
+ <p>Cheshire East Highways is not responsible for this location;
+ to find out who is responsible visit
+ <a href="https://www.gov.uk/search-property-information-land-registry">https://www.gov.uk/search-property-information-land-registry</a>.
+ </p>
+ </div>
+</div>
+
diff --git a/templates/web/cheshireeast/tokens/confirm_problem.html b/templates/web/cheshireeast/tokens/confirm_problem.html
new file mode 100644
index 000000000..26d8abcef
--- /dev/null
+++ b/templates/web/cheshireeast/tokens/confirm_problem.html
@@ -0,0 +1,39 @@
+[% INCLUDE 'header.html', bodyclass = 'fullwidthpage', title = loc('Confirmation') %]
+
+<div class="confirmation-header">
+
+ <h1>Thank you for your report</h1>
+
+ <p><a href="[% c.cobrand.relative_url_for_report( report ) %][% report.url %]">[% report.title %]</a>
+
+ [% IF c.cobrand.owns_problem( report ) %]
+ <p>Your reference for this report is [% report.id %], please quote it in any enquiries.</p>
+ [% ELSE %]
+ <p>
+ We don&rsquo;t handle this type of problem, so have passed it on to:
+ </p>
+ <p>
+ <b>[% report.body %]</b>
+ </p>
+ <p>
+ You can follow this problem on <a href="[% c.cobrand.relative_url_for_report( report ) %][% report.url %]">FixMyStreet.com</a>.
+ </p>
+ [% END %]
+
+ <p class="box-warning">If the issue is dangerous or an emergency, call us on
+ <a href="tel:03001235020"><strong>0300 123 5020</strong></a>
+ between 08:30 and 17:00 Monday to Friday, or on
+ <a href="tel:03001235025"><strong>0300 123 5025</strong></a>
+ at any other time, quoting your reference number [% report.id %].</p>
+
+ <p class="confirmation-again">
+ <a href="/report/new?latitude=[% report.latitude %]&amp;longitude=[% report.longitude %]" class="btn btn-primary">
+ [% loc('Report another problem here') %]
+ </a>
+ </p>
+
+ <p><a href="https://www.cheshireeast.gov.uk/">Council homepage</a></p>
+
+</div>
+
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/cheshireeast/tokens/confirm_update.html b/templates/web/cheshireeast/tokens/confirm_update.html
new file mode 100644
index 000000000..6e63298a0
--- /dev/null
+++ b/templates/web/cheshireeast/tokens/confirm_update.html
@@ -0,0 +1,22 @@
+[% INCLUDE 'header.html', bodyclass = 'fullwidthpage', title = loc('Confirmation');
+
+DEFAULT problem = update.problem;
+IF update;
+ SET problem_url = update.url;
+ELSE;
+ SET problem_url = problem.url;
+END;
+
+%]
+
+<div class="confirmation-header">
+
+ <h1>Thank you for updating this issue</h1>
+
+ <h2><a href="[% problem_url %]">[% problem.title %]</a></h2>
+
+ <p><a href="https://www.cheshireeast.gov.uk/">Council homepage</a></p>
+
+</div>
+
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/eastherts/footer.html b/templates/web/eastherts/footer.html
deleted file mode 100644
index e8a54e462..000000000
--- a/templates/web/eastherts/footer.html
+++ /dev/null
@@ -1,54 +0,0 @@
- </div><!-- .content role=main -->
- </div><!-- .container -->
- </div><!-- .table-cell -->
-
- <div class="nav-wrapper">
- <div class="container">
- [% INCLUDE "main_nav.html" body_name=c.cobrand.council_area %]
- </div>
- </div>
- </div> <!-- .wrapper -->
-
- [% IF pagefooter %]
- <div class="footer clearfix">
- <div class="container">
- <div class="footer__left"><img src="https://www.eastherts.gov.uk/image/29958/EastHertsLogo-Footer/original.png" width="250" height="75" alt="EastHertsLogo-Footer" title="EastHertsLogo-Footer" class="footer__logo" />
- <div class="footer__socialmedia">
-
- <a href="https://www.facebook.com" rel="external" title="Facebook"><img src="https://www.eastherts.gov.uk/image/29956/Facebook/original.png" width="40" height="40" alt="Facebook" title="Facebook" />
- </a>
-
- <a href="https://www.twitter.com" rel="external" title="Twitter"><img src="https://www.eastherts.gov.uk/image/29959/Twitter/original.png" width="40" height="40" alt="Twitter" title="Twitter" />
- </a><img src="https://www.eastherts.gov.uk/image/29957/RSS/original.png" width="40" height="40" alt="RSS" title="RSS" />
- </div>
- </div>
- <div class="footer__right">
- <div class="footer__navigation">
- <ul>
- <li class="footer__navitem"><a href="https://www.eastherts.gov.uk/article/34224/Site-map" class="footer__navlink">Site map</a>
- </li>
- <li class="footer__navitem"><a href="/article/34226/Terms--Conditions" class="footer__navlink">Terms & Conditions</a>
- </li>
- <li class="footer__navitem"><a href="https://www.eastherts.gov.uk/article/34230/Privacy--Cookies" class="footer__navlink">Privacy & Cookies</a>
- </li>
- <li class="footer__navitem"><a href="https://www.eastherts.gov.uk/article/34378/Privacy-Data-Protection-and-Fraud-Prevention" class="footer__navlink">Privacy, Data Protection and Fraud Prevention</a>
- </li>
- <li class="footer__navitem"><a href="https://www.eastherts.gov.uk/article/34376/Comments-Compliments-and-Complaints" class="footer__navlink" accesskey="7">Comments, Compliments and Complaints</a>
- </li>
- </ul>
- </div>
- <div class="footer__copyright">
- <p>&copy; 2017 mySociety</p>
- </div>
- <div class="footer__goss">
- <a href="https://www.fixmystreet.com/pro/">Powered by FixMyStreet</a>
- </div>
- </div>
- </div>
- </div>
- [% END %]
-
- [% INCLUDE 'common_footer_tags.html' %]
-
-</body>
-</html>
diff --git a/templates/web/eastherts/footer_extra.html b/templates/web/eastherts/footer_extra.html
new file mode 100644
index 000000000..3722ea99f
--- /dev/null
+++ b/templates/web/eastherts/footer_extra.html
@@ -0,0 +1,29 @@
+<footer class="eh-footer">
+ <div class="container">
+
+ <p class="eh-footer__copyright">© East Herts District Council</p>
+
+ <nav role="navigation" aria-labelledby="block-eastherts-footer-menu" class="eh-footer__nav">
+ <h2 class="visuallyhidden" id="block-eastherts-footer-menu">Footer menu</h2>
+ <ul>
+ <li>
+ <a href="https://www.eastherts.gov.uk/accessibility">Accessibility</a>
+ </li>
+ <li>
+ <a href="https://www.eastherts.gov.uk/contactus">Contact Us</a>
+ </li>
+ <li>
+ <a href="https://www.eastherts.gov.uk/information-requests/data-protection">Data Protection</a>
+ </li>
+ <li>
+ <a href="https://www.eastherts.gov.uk/information-requests/data-protection/privacy-cookies">Privacy &amp; Cookies</a>
+ </li>
+ </ul>
+ </nav>
+
+ <a href="https://www.eastherts.gov.uk" title="Home" rel="home" class="eh-footer__logo">
+ <img src="https://www.eastherts.gov.uk/themes/custom/eastherts/logo.svg" alt="Home">
+ </a>
+
+ </div>
+</footer>
diff --git a/templates/web/eastherts/header_site.html b/templates/web/eastherts/header_site.html
index 5f1f4965e..2271dc259 100644
--- a/templates/web/eastherts/header_site.html
+++ b/templates/web/eastherts/header_site.html
@@ -1,37 +1,10 @@
-<div class="toputils">
+<header class="eh-header">
<div class="container">
- <a href="[% c.cobrand.base_url IF admin %]/" id="report-cta" title="[%- loc('Report a problem') -%]">[%- loc('Report') -%]</a>
- <a href="#main-nav" id="nav-link">Main Navigation</a>
- <!-- <a href="https://www.eastherts.gov.uk/article/34246/Search">Search</a> -->
-
- <div class="toputils__right desk-only">
- <div class="toputils__nav">
- <ul class="toputils__navlist">
- <li><a href="/article/34210/Accessibility" class="toputils__navitem">Accessibility</a>
- </li>
- <li><a href="/article/34212/A-Z-of-Services" class="toputils__navitem">A-Z of Services</a>
- </li>
- <li><a href="/article/34377/Contact-us" class="toputils__navitem">Contact us</a>
- </li>
- </ul>
- </div>
- </div>
- </div>
-</div>
-
-<header id="site-header" role="banner">
- <div class="container">
- <a href="[% c.cobrand.base_url IF admin %]/" id="site-logo">[% site_name %]</a>
- <div class="mainmenu desk-only">
- <ul class="mainmenu__list">
- <li class="footer__navitem"><a href="http://www.eastherts.gov.uk/residents" class="mainmenu__item">Residents</a></li>
- <li class="footer__navitem"><a href="http://www.eastherts.gov.uk/business" class="mainmenu__item">Business</a></li>
- <li class="footer__navitem"><a href="http://www.eastherts.gov.uk/council" class="mainmenu__item">Your Council</a></li>
- <li class="footer__navitem"><a href="http://www.eastherts.gov.uk/news" class="mainmenu__item">News</a></li>
- </ul>
- </div>
- <div class="searchcontrol desk-only">
- <a href="https://www.eastherts.gov.uk/article/34246/Search" class="searchcontrol__expandtoggle">Search</a>
- </div>
+ <a href="https://www.eastherts.gov.uk/" class="eh-header__logo">East Herts District Council</a>
+ <a href="#main-nav" class="eh-header__nav-link">Main Navigation</a>
+ <form class="eh-header__form" action="https://www.eastherts.gov.uk/search/content" method="get">
+ <input class="eh-header__search" type="text" placeholder="Search and discover help, advice and information" name="search" size="30" maxlength="128">
+ <button class="eh-header__button" type="submit" value="Search"><i></i> <span>Search</span></button>
+ </form>
</div>
</header>
diff --git a/templates/web/fiksgatami/header.html b/templates/web/fiksgatami/header.html
index 2d0f163e7..a0fd63626 100644
--- a/templates/web/fiksgatami/header.html
+++ b/templates/web/fiksgatami/header.html
@@ -19,6 +19,8 @@
[% TRY %][% PROCESS 'set_body_class.html' %][% CATCH file %][% END %]
<body class="[% bodyclass | html IF bodyclass %]">
+ [% INCLUDE 'debug_header.html' %]
+
<div class="wrapper">
<div class="table-cell">
<header id="site-header" role="banner">
@@ -28,9 +30,7 @@
</div>
</header>
- [% pre_container_extra %]
+ [% pre_container_extra | safe %]
<div class="container">
<div class="content[% " $mainclass" | html IF mainclass %]" role="main">
-
- <!-- [% INCLUDE 'debug_header.html' %] -->
diff --git a/templates/web/fiksgatami/nn/footer.html b/templates/web/fiksgatami/nn/footer.html
index 519a8c3f5..01b41728d 100644
--- a/templates/web/fiksgatami/nn/footer.html
+++ b/templates/web/fiksgatami/nn/footer.html
@@ -30,7 +30,6 @@
</div>
</div>
-<!-- [% INCLUDE 'debug_footer.html' %] -->
</div> <!-- .wrapper -->
</body>
</html>
diff --git a/templates/web/fixamingata/about/accessibility.html b/templates/web/fixamingata/about/accessibility.html
new file mode 100644
index 000000000..05e95c918
--- /dev/null
+++ b/templates/web/fixamingata/about/accessibility.html
@@ -0,0 +1,112 @@
+[% INCLUDE 'header.html', title => 'Tillgänglighetsredogörelse', bodyclass => 'twothirdswidthpage' %]
+
+<h2>Tillgänglighet för FixaMinGata</h2>
+<p>
+ <a href="https://sambruk.se">Föreningen Sambruk</a> står bakom den här webbplatsen.
+ Vi vill att så många som möjligt ska kunna använda webbplatsen. Det här dokumentet
+ beskriver hur FixaMinGata uppfyller lagen om tillgänglighet till digital offentlig
+ service, eventuella kända tillgänglighetsproblem och hur du kan rapportera brister
+ till oss så att vi kan åtgärda dem.
+</p>
+<p>
+ FixaMinGata omfattas av lagen om tillgänglighet från och med 23 september 2020,
+ men vi vill förstås göra vad vi kan redan nu.
+</p>
+
+<h3>Hur tillgänglig är webbplatsen?</h3>
+<p>
+ Vi är medvetna om att delar av webbplatsen inte är helt tillgängliga. Se avsnittet
+ om innehåll som inte är tillgängligt nedan för mer information.
+</p>
+
+<h3>Vad kan du göra om du inte kan använda delar av webbplatsen?</h3>
+<p>
+ Om du behöver innehåll från FixaMinGata som inte är tillgängligt för dig, men som är
+ undantaget från lagens tillämpningsområde enligt beskrivning nedan, kan du
+ <a href="/contact">meddela oss</a>.
+</p>
+<p>
+ Svarstiden är normalt två arbetsdagar.
+</p>
+<p>
+ Du kan också kontakta oss på följande sätt:
+</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>
+<p>
+ Vi strävar hela tiden efter att förbättra webbplatsens tillgänglighet. Om du upptäcker
+ problem som inte är beskrivna på den här sidan, eller om du anser att vi inte uppfyller
+ lagens krav, <a href="/contact">meddela oss</a> så att vi får
+ veta att problemet finns.
+</p>
+<!-- TODO: add 2020-09-23
+ <h3>Tillsyn</h3>
+<p>
+ Myndigheten för digital förvaltning har ansvaret för tillsyn för lagen om tillgänglighet
+ till digital offentlig service. Om du inte är nöjd med hur vi hanterar dina synpunkter
+ kan du <a href="https://www.digg.se/utveckling--innovation/digital-tillganglighet/anmal-bristande-tillganglighet">
+ kontakta Myndigheten för digital förvaltning</a> och påtala det.
+</p>
+-->
+<h3>Teknisk information om webbplatsens tillgänglighet</h3>
+<p>
+ Den här webbplatsen är delvis förenlig med lagen om tillgänglighet till digital
+ offentlig service, på grund av de brister som beskrivs nedan.
+</p>
+
+<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>
+ <li>Ikoner som visar status för ärenden särskiljs endast med färg.</li>
+</ul>
+<p>
+ Vår ambition är att ha åtgärdat alla kända tillgänglighetsproblem senast den 23 september 2020.
+</p>
+<!--
+ <h4>Oskäligt betungande anpassning</h4>
+<p>
+ Föreningen Sambruk åberopar undantag för oskäligt betungande anpassning enligt 12 § lagen om tillgänglighet till digital offentlig service för nedanstående innehåll.
+</p>
+-->
+<h4>Innehåll som inte omfattas av lagen</h4>
+<p>
+ Det innehåll som beskrivs här är inte fullt tillgängligt, men undantas enligt 9 § lagen om tillgänglighet till digital offentlig service.
+</p>
+<ul>
+ <li>Kartfunktionen.</li>
+</ul>
+<h3>Hur vi testat webbplatsen</h3>
+<p>
+ Vi har gjort en självskattning (intern testning) av FixaMinGata.
+</p>
+<p>
+ Senaste bedömningen gjordes den 6 oktober 2019.
+</p>
+<!-- TODO: add 2020-09-23?
+ <p>
+ <a href="https://example.com/method">Granskningsmetod</a>
+ </p>
+<p>
+ <a href="https://example.com/report">Granskningsrapport</a>
+</p>
+-->
+<p>
+ Redogörelsen uppdaterades senast den 6 oktober 2019.
+</p>
+
+[% INCLUDE 'footer.html' pagefooter = 'yes' %]
+
+
diff --git a/templates/web/fixamingata/about/council.html b/templates/web/fixamingata/about/council.html
index 94564c51f..165c91a46 100755
--- a/templates/web/fixamingata/about/council.html
+++ b/templates/web/fixamingata/about/council.html
@@ -30,7 +30,7 @@
<li>Om felrapporter från invånarna ska skickas via epost till kommunen, meddela om det är samma adress för samtliga kategorier eller om olika kategorier ska skickas till olika adresser.</li>
<li>Prata med och informera de anställda som kommer att ta emot och arbeta med felrapporter. Säkerställ att alla är medvetna om hur kommunen arbetar med inkomna felrapporter och vikten av att inrapporterade fel också rapporteras som åtgärdade.</li>
<li>Bjud in de anställda att vara med i den första testen av systemet så att de som vill kan testa att rapportera fel och följa upp ärenden. Det kan ske under ett par veckor innan systemet driftsätts, för att ge personalen möjlighet att bli komfortabel med systemet.</li>
- <li>Prata med kommunens informationsansvarige eller motsvarande för att länka till FixaMinGata från kommunens hemsida. Logotyper för FixaMinGata kan hämtas <a href="http://www.sambruk.se/projektnatverk/fixamingata/projektdokument.4.7b34e07a139d0d50e8b23cb.html?folder=19.7b34e07a139d0d50e8b23b1&sv.url=12.7b34e07a139d0d50e8b23d1">här</a>.</li>
+ <li>Prata med kommunens informationsansvarige eller motsvarande för att länka till FixaMinGata från kommunens hemsida. Logotyper för FixaMinGata kan hämtas <a href="/static/FMG-Logotyp.zip">här</a>.</li>
<li>Följ upp löpande med de personer som tar emot felrapporter. Du kan också ta hjälp av den <a href="/reports">statistik</a> som publiceras i FixaMinGata för att se vilka problem som rapporteras, samt om de markeras som åtgärdade.</li>
</ul>
diff --git a/templates/web/fixamingata/about/faq-sv.html b/templates/web/fixamingata/about/faq-sv.html
index 116a7fdb7..62721d381 100755
--- a/templates/web/fixamingata/about/faq-sv.html
+++ b/templates/web/fixamingata/about/faq-sv.html
@@ -6,8 +6,9 @@
<li><a href="#faq">Vanliga frågor</a></li>
<li><a href="#practical">Praktiska frågor</a></li>
<li><a href="#organisation">Organisation</a></li>
- <li><a href="#pul">Personuppgiftsombud</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>
</ul>
</aside>
</div>
@@ -53,6 +54,8 @@
<dd>Den här e-tjänsten används gratis för att rapportera problem. Tjänsten tillhandahålls av <a href="http://sambruk.se/">Föreningen Sambruk</a>, en förening för kommunal samverkan kring e-tjänster. Totalt ingår runt 100 kommuner och landsting i Sambruk.</dd>
<dt>Kan jag använda FixaMinGata på min mobil?</dt>
<dd>FixaMinGata fungerar både i din mobil (storleken på skärmen anpassas automatiskt) och dator. Alternativt laddas appen FixaMinGata ner på Google Play eller App Store.</dd>
+ <dt>Hur tillgänglig är tjänsten?</dt>
+ <dd>Läs gärna vår <a href="/about/accessibility">tillgänglighetsredogörelse</a>.</dd>
</dl>
<h2><a name="practical"></a>Praktiska frågor</h2>
@@ -71,10 +74,10 @@
<dd>Programvaran bakom den här tjänsten är öppen programvara och tillgänglig under Affero GPL (AGPL). Du kan <a href="http://github.com/mysociety/fixmystreet">ladda ner</a> källkoden och hjälpa oss utveckla den. Du är också välkommen att använda den i dina egna projekt!</dd>
</dl>
-<h2><a name="pul"></a>Personuppgiftsombud</h2>
+<h2><a name="pul"></a>Dataskyddsombud</h2>
<dl>
- <dt>Vem är personuppgiftsombud för FixaMinGata?</dt>
- <dd>Personuppgiftsombud är Britta Sandblom som du kan kontakta via vårt <a href="/contact">kontaktformulär.</a></dd>
+ <dt>Vem är dataskyddsombud för FixaMinGata?</dt>
+ <dd>Dataskyddsombud är Britta Sandblom som du kan kontakta via vårt <a href="/contact">kontaktformulär.</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 88b0b90cd..c734711f9 100755
--- a/templates/web/fixamingata/about/privacy.html
+++ b/templates/web/fixamingata/about/privacy.html
@@ -6,7 +6,7 @@
<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">Personuppgiftsombud</a></li>
+ <li><a href="/faq#pul">Dataskyddsombud</a></li>
<li><strong>Offentlighet och kakor</strong></li>
</ul>
</aside>
@@ -18,7 +18,7 @@
<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>
<p><strong>Laglig grund för behandling av personuppgifter</strong><br>FixaMinGata.se behandlar all data, inklusive personuppgifter, baserat på Dataskyddsförordningens Artikel 6.1f - Behandlingen är nödvändig för ändamål som rör den personuppgiftsansvariges eller en tredje parts berättigade intressen.</p>
<p>&nbsp;</p>
-<p><a href="http://www.datainspektionen.se/dataskyddsreformen/dataskyddsforordningen/">Dataskyddsförordning</a>en</p>
+<p><a href="http://www.datainspektionen.se/dataskyddsreformen/dataskyddsforordningen/">Dataskyddsförordningen</a></p>
<p>Förordningen innehåller regler om hur personuppgifter får behandlas. Förordningen gäller i alla EU:s medlemsländer och ersätter nationella regler, som till exempel Personuppgiftslagen i Sverige.</p>
<p>Dataskyddsförordningens syfte är dels att skydda enskildas grundläggande rättigheter och friheter, särskilt deras rätt till skydd av personuppgifter och dels att skapa en enhetlig och likvärdig nivå för skyddet av personuppgifter inom EU, så att det fria flödet av uppgifter inom unionen inte hindras.</p>
<p>En tillsynsmyndighet i varje EU-land ska övervaka att de som behandlar personuppgifter följer dataskyddsförordningen. Tillsynsmyndigheten ska vara fullständigt oberoende i utförandet av sina uppgifter och utövandet av sina befogenheter. I Sverige föreslås <u>Datainspektionen</u> få det uppdraget.</p>
@@ -28,7 +28,7 @@
<p>För att Du som rapportör ska kunna rapportera ärenden behandlas och lagras personuppgifter i samband med skapande av konto. Inrapporterade ärenden kommer avidentifieras tre månader efter den senaste aktiviteten i ärendet. Det innebär att eventuella personuppgifter i ärendet kommer att raderas, medan uppgifterna om ärendet kan vara av allmänt intresse och kommer att finnas kvar som underlag för forskning, statistik o dyl. Konton som inte använts på 12 månader kommer att raderas och när Du återigen ska rapportera behöver ett nytt konto skapas.</p>
<dl>
<dt>Hur behandlas mina personuppgifter?</dt>
- <dd>Din e-postadress och namn lagras i vår databas. Du har rätt att begära att få ta del av de uppgifter som finns registrerade om dig, begära rättning av uppgifter eller att uppgifter ska raderas genom att kontakta vårt personuppgiftsombud.<p>Konton som inte använts på 12 månader kommer att raderas.</p></dd>
+ <dd>Din e-postadress och namn lagras i vår databas. Du har rätt att begära att få ta del av de uppgifter som finns registrerade om dig, begära rättning av uppgifter eller att uppgifter ska raderas genom att kontakta vårt dataskyddsombud.<p>Konton som inte använts på 12 månader kommer att raderas.</p></dd>
<dt>Hur behandlas min information hos FixaMinGata?</dt>
<dd>Vi kommer att visa en rapports ärende och information publikt, dock inte visa din e-postadress eller ditt namn, om du inte samtycker till detta. Lösta ärenden kommer att avidentifieras tre månader efter den senaste aktiviteten i ärendet (se ovan).</dd>
<dt>Hur behandlas min information hos kommunen?</dt>
@@ -42,12 +42,12 @@
<dt>Kommer ni att skicka spam?</dt>
<dd>Aldrig. Vi kommer att skicka ett e-postmeddelande till dig om någon lämnar en uppdatering på ett problem som du rapporterat, och fyra veckor efter din rapportering skickas ett frågeformulär. Vi kommer endast att skicka e-postmeddelande som relaterar till ditt problem.</dd>
<dt>Borttag av information, bilder e dyl.</dt>
- <dd>Om du laddar upp bilder och annan information kring ett problem, bör du vara försiktig så att inte personer, bilar eller andra uppgifter som kan identifiera en annan person följer med.<p>Begäran om radering av personuppgift sker genom att kontakta vårt personuppgiftsombud.</p></dd>
+ <dd>Om du laddar upp bilder och annan information kring ett problem, bör du vara försiktig så att inte personer, bilar eller andra uppgifter som kan identifiera en annan person följer med.<p>Begäran om radering av personuppgift sker genom att kontakta vårt dataskyddsombud.</p></dd>
</dl>
<h2>Kakor</h2>
<p>S k kakor används för att ge en användare tillgång till olika funktioner. För att göra tjänsten lättare och mer användbara skickas små datafiler till din dator eller mobiltelefon. Dessa kallas för kakor och de flesta webbplatser använder dem. Informationen används för att, till exempel, komma ihåg tidigare inloggning, och för att mäta hur tjänsten används som underlag för förbättringar.</p>
-<p><a href="http://www.pts.se/sv/Bransch/Regler/Lagar/Lag-om-elektronisk-kommunikation/Cookies-kakor/">Läs mer om kakor och hur du kan hantera dem på Post- och telestyrelsens webbplats.</a></p>
+<p><a href="https://pts.se/sv/bransch/regler/lagar/lag-om-elektronisk-kommunikation/kakor-cookies">Läs mer om kakor och hur du kan hantera dem på Post- och telestyrelsens webbplats.</a></p>
<p>Nedan visas en lista med kakor som tjänsten använder.</p>
<table class="nicetable">
<tr>
diff --git a/templates/web/fixamingata/footer.html b/templates/web/fixamingata/footer.html
deleted file mode 100644
index ad4d6c4a6..000000000
--- a/templates/web/fixamingata/footer.html
+++ /dev/null
@@ -1,33 +0,0 @@
- [% IF pagefooter %]
- <footer role="contentinfo">
- [% INCLUDE 'front/footer-marketing.html' %]
- </footer>
- [% END %]
- </div><!-- .content role=main -->
- </div><!-- .container -->
- </div><!-- .table-cell -->
-
- <div class="nav-wrapper">
- <div class="container">
- <div id="main-nav" role="navigation">
- <ul class="nav-menu nav-menu--main">
- <li><[% IF c.req.uri.path == '/' %]span[% ELSE %]a href="/"[% END %] class="report-a-problem-btn"
- >[% loc("Report a problem") %]</[% c.req.uri.path == '/' ? 'span' : 'a' %]></li>[%
- %]<li><[% IF c.req.uri.path == '/my' %]span[% ELSE %]a href="/my"[% END
- %]>[% c.user_exists ? loc("Your account") : loc("Sign in") %]</[% c.req.uri.path == '/my' ? 'span' : 'a' %]></li>[%
- %]<li><[% IF c.req.uri.path == '/reports' %]span[% ELSE %]a href="/reports"[% END
- %]>[% loc("All reports") %]</[% c.req.uri.path == '/reports' ? 'span' : 'a' %]></li>[%
- %]<li><[% IF c.req.uri.path == '/alert' %]span[% ELSE %]a href="/alert[% pc ? '/list?pc=' : '' %][% pc | uri %]"[% END
- %]>[% loc("Local alerts") %]</[% c.req.uri.path == '/alert' ? 'span' : 'a' %]></li>[%
- %]<li><[% IF c.req.uri.path == '/faq' %]span[% ELSE %]a href="/faq"[% END
- %]>[% loc("Help") %]</[% c.req.uri.path == '/faq' ? 'span' : 'a' %]></li>
- </ul>
- </div>
- </div>
- </div>
- </div> <!-- .wrapper -->
-
- [% INCLUDE 'common_footer_tags.html' %]
-</body>
-
-</html>
diff --git a/templates/web/fixamingata/footer_extra.html b/templates/web/fixamingata/footer_extra.html
new file mode 100644
index 000000000..260b3af2f
--- /dev/null
+++ b/templates/web/fixamingata/footer_extra.html
@@ -0,0 +1,28 @@
+<footer class="fmg-footer">
+ <div class="container">
+ <div id="footer-mobileapps">
+ <!--
+ <h4></h4>
+ <p>
+ </p>
+ -->
+ </div>
+
+ <div id="footer-help">
+ <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>
+ </li>
+ <li>
+ <h4>Är du en utvecklare?</h4>
+ <p>[% loc('Would you like to contribute to FixMyStreet? Our code is open source and <a href="https://fixmystreet.org">available at fixmystreet.org</a>.') %]</p>
+ </li>
+ <li>
+ <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>
+ </ul>
+ </div>
+ </div>
+</footer>
diff --git a/templates/web/fixamingata/front/footer-marketing.html b/templates/web/fixamingata/front/footer-marketing.html
index a597ae85a..f8c497a22 100644
--- a/templates/web/fixamingata/front/footer-marketing.html
+++ b/templates/web/fixamingata/front/footer-marketing.html
@@ -1,26 +1,3 @@
- <div class="tablewrapper bordered">
- <div id="footer-mobileapps">
- <!--
- <h4></h4>
- <p>
- </p>
- -->
- </div>
-
- <div id="footer-help">
- <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>
- </li>
- <li>
- <h4>Är du en utvecklare?</h4>
- <p>[% loc('Would you like to contribute to FixMyStreet? Our code is open source and <a href="https://fixmystreet.org">available at fixmystreet.org</a>.') %]</p>
- </li>
- <li>
- <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="/kommun">Läs mer om FixaMinGata för kommuner</a>.</p>
- </li>
- </ul>
- </div>
+ <div class="tablewrapper bordered footer-marketing">
+ <div style="padding-bottom: 32px;"><a href="https://play.google.com/store/apps/details?id=se.sambruk.fixamingata"><img alt="FixaMinGata på Google Play" src="/cobrands/fixamingata/images/google_play_logo.png" style="height: 32px; width: 108px;"></a><a href="http://appstore.com/fixamingata"><img alt="FixaMinGata på App Store" src="/cobrands/fixamingata/images/itunes_store_logo.png" style="height: 32px; margin-left: 16px; width: 108px;"></a><a href="https://twitter.com/FixaMinGata"><img alt="FixaMinGata på Twitter" src="/cobrands/fixamingata/images/icon-twitter-black.png" style="height: 32px; margin-left: 16px; width: 32px;"></a><a href="https://www.facebook.com/FixaMinGata"><img alt="FixaMinGata på Facebook" src="/cobrands/fixamingata/images/icon-facebook-black.png" style="height: 32px; padding-left: 16px; width: 32px;"></a></div>
</div>
diff --git a/templates/web/fixamingata/front/recent.html b/templates/web/fixamingata/front/recent.html
deleted file mode 100644
index 4cff9eba9..000000000
--- a/templates/web/fixamingata/front/recent.html
+++ /dev/null
@@ -1,21 +0,0 @@
- [%
- recent_photos = c.cobrand.recent_photos('front', 5);
- %]
-
- <div id="front-recently">
- <div style="padding-bottom: 32px;"><a href="https://play.google.com/store/apps/details?id=se.sambruk.fixamingata"><img alt="FixaMinGata på Google Play" src="/cobrands/fixamingata/images/google_play_logo.png" style="height: 32px; width: 108px;"></a><a href="http://appstore.com/fixamingata"><img alt="FixaMinGata på App Store" src="/cobrands/fixamingata/images/itunes_store_logo.png" style="height: 32px; margin-left: 16px; width: 108px;"></a><a href="https://twitter.com/FixaMinGata"><img alt="FixaMinGata på Twitter" src="/cobrands/fixamingata/images/icon-twitter-black.png" style="height: 32px; margin-left: 16px; width: 32px;"></a><a href="https://www.facebook.com/FixaMinGata"><img alt="FixaMinGata på Facebook" src="/cobrands/fixamingata/images/icon-facebook-black.png" style="height: 32px; padding-left: 16px; width: 32px;"></a></div>
- [% IF recent_photos.size %]
- <h2>
- [% loc('Recently reported problems') %]
- </h2>
-
- <section class="full-width">
- <ul class="item-list item-list--reports">
- [% FOREACH problem IN recent_photos %]
- [% INCLUDE 'report/_item.html', no_fixed = 1 %]
- [% END %]
- </ul>
- </section>
-
- [% END %]
- </div>
diff --git a/templates/web/fixamingata/front/tips.html b/templates/web/fixamingata/front/tips.html
index 11a9abfc2..cfa2c36f7 100644
--- a/templates/web/fixamingata/front/tips.html
+++ b/templates/web/fixamingata/front/tips.html
@@ -1,8 +1,8 @@
<div style="padding-top: 20px;">
<h2>Så här enkelt används FixaMinGata</h2>
- <video controls poster="/cobrands/fixamingata/videos/poster.jpg" style="width: 100%;">
- <source src="/cobrands/fixamingata/videos/fixamingata.webm" type="video/webm">
- <source src="/cobrands/fixamingata/videos/fixamingata.mp4" type="video/mp4">
+ <video controls poster="/static/poster2019.png" style="width: 100%;">
+ <source src="/static/FMG2019.mp4" type="video/mp4">
+ <track label="Svenska" kind="subtitles" srclang="sv" src="/static/sv.vtt">
Din webbläsare kan tyvärr inte spela upp videoklippet.
</video>
</div>
diff --git a/templates/web/fixamingata/header_opengraph_image.html b/templates/web/fixamingata/header_opengraph_image.html
index 7a681484a..6bf3d5b01 100644
--- a/templates/web/fixamingata/header_opengraph_image.html
+++ b/templates/web/fixamingata/header_opengraph_image.html
@@ -1,4 +1,13 @@
+ [% IF problem.photo %]
+ [% photo = problem.photos.first %]
+ [% data = problem.get_first_image_og %]
+ <meta property="og:image" content="[% c.cobrand.base_url %][% photo.url_og %]">
+ <meta property="og:image:type" content="[% data.content_type %]">
+ <meta property="og:image:width" content="[% data.width %]">
+ <meta property="og:image:height" content="[% data.height %]">
+ [% ELSE %]
<meta property="og:image" content="[% c.cobrand.base_url %]/cobrands/fixamingata/images/fms-og_image.jpg">
<meta property="og:image:type" content="image/jpeg">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
+ [% END %]
diff --git a/templates/web/fixamingata/open311/index.html b/templates/web/fixamingata/open311/index.html
deleted file mode 100644
index 6e86a933b..000000000
--- a/templates/web/fixamingata/open311/index.html
+++ /dev/null
@@ -1,143 +0,0 @@
-[% INCLUDE 'header.html', title => 'Open311' %]
-
-<h1>[% loc('Open311 API for the mySociety FixMyStreet server') %]</h1>
-
-[% IF error %]
-<p>[% tprintf( loc('Note: <strong>%s</strong>'), error ) %]</p>
-[% END %]
-
-<p>[% loc('At the moment only searching for and looking at reports work.') %]</p>
-<p>[% loc('This API implementation is work in progress and not yet stabilized. It will change without warnings in the future.') %]</p>
-
-<ul>
-<li><a rel="nofollow" href="http://www.open311.org/">[% loc('Open311 initiative web page') %]</a></li>
-<li><a rel="nofollow" href="http://wiki.open311.org/GeoReport_v2">[% loc('Open311 specification') %]</a></li>
-</ul>
-
-<p>[% tprintf( loc('At most %d requests are returned in each query. The returned requests are ordered by requested_datetime, so to get all requests, do several searches with rolling start_date and end_date.'), c.config.OPEN311_LIMIT ) %]</p>
-
-<p>[% loc('The following Open311 v2 attributes are returned for each request: service_request_id, description, lat, long, media_url, status, requested_datetime, updated_datetime, service_code and service_name.') %]</p>
-
-<p>[% loc('In addition, the following attributes that are not part of the Open311 v2 specification are returned: agency_sent_datetime, title (also returned as part of description), interface_used, comment_count, requestor_name (only present if requestor allowed the name to be shown on this site).') %]</p>
-
-<p>[% loc('The Open311 v2 attribute agency_responsible is used to list the administrations that received the problem report, which is not quite the way the attribute is defined in the Open311 v2 specification.') %]</p>
-
-<p>[% tprintf( loc('With request searches, it is also possible to search for agency_responsible to limit the requests to those sent to a single administration. The search term is the administration ID provided by <a href="%s">MaPit</a>.'), c.config.MAPIT_URL ) %]</p>
-
-<p>[% loc('Examples:') %]</p>
-
-<ul>
-
-[% jurisdiction_id = 'fixamingata.se' %]
-[% examples = [
- {
- url = c.cobrand.base_url _ "/open311/v2/discovery.xml?jurisdiction_id=$jurisdiction_id",
- info = 'discovery-information',
- },
- {
- url = c.cobrand.base_url _ "/open311/v2/services.xml?jurisdiction_id=$jurisdiction_id",
- info = 'Lista alla feltyper, t ex Trasig lampa, hål i gatan osv',
- },
- {
- url = c.cobrand.base_url _ "/open311/v2/services.xml?jurisdiction_id=$jurisdiction_id&lat=59&long=18",
- info = 'Lista feltyper för WGS84 koordinater latityd 59 longityd 18',
- },
- {
- url = c.cobrand.base_url _ "/open311/v2/requests/1.xml?jurisdiction_id=$jurisdiction_id",
- info = 'Felrapport nummer 1',
- },
- {
- url = c.cobrand.base_url _ "/open311/v2/requests.xml?jurisdiction_id=$jurisdiction_id&status=open&agency_responsible=37&end_date=2013-04-10",
- info = 'Alla öppna felrapporter innan 2013-04-10 för Stockholm (kommun-id 37)',
- },
- {
- url = c.cobrand.base_url _ "/open311/v2/requests.xml?jurisdiction_id=$jurisdiction_id&status=open&agency_responsible=37|38",
- info = 'Alla öppna felrapporter för Stockholm (id 37) och Järfälla (id 38)',
- },
- {
- url = c.cobrand.base_url _ "/open311/v2/requests.xml?jurisdiction_id=$jurisdiction_id&service_code=Hål i gatan",
- info = "Alla felrapporter av typen 'Hål i gatan'",
- },
- {
- url = c.cobrand.base_url _ "/open311/v2/requests.xml?jurisdiction_id=$jurisdiction_id&status=closed",
- info = 'Alla stängda felrapporter',
- },
-] %]
-[% FOREACH examples %]
- <li><a href="[% url %]">[% info %]</a>
- <br>[% url | html %]</li>
-[% END %]
-
-</ul>
-
-<h2>Searching</h2>
-
-<p>The following search parameters can be used:</p>
-
-<dl>
-
-<dt>service_request_id</dt>
-<dd>Search for numeric ID of specific request.
- Using this is identical to asking for a individual request using
- the /requests/number.format URL.</dd>
-<dt>service_code</dt>
-<dd>Search for the given category / service type string.</dd>
-
-<dt>status</dt>
-<dd>Search for open or closed (fixed) requests.</dd>
-
-<dt>start_date<dt>
-<dd>Only return requests with requested_datetime set after or at the
- date and time specified. The format is YYYY-MM-DDTHH:MM:SS+TZ:TZ.</dd>
-
-<dt>end_date<dt>
-<dd>Only return requests with requested_datetime set before the date
- and time specified. Same format as start_date.</dd>
-
-<dt>agency_responsible</dt>
-<dd>ID of government body receiving the request. Several IDs can be
- specified with | as a separator.</dd>
-
-<dt>interface_used<dt>
-<dd>Name / identifier of interface used.</dd>
-
-<dt>has_photo<dt>
-<dd>Search for entries with or without photos. Use value 'true' to
-only get requests created with images, and 'false' to get those
-created without images.</dd>
-
-<dt>max_requests</dt>
-<dd>Max number of requests to return from the search. If it is larger
-than the site specific max_requests value specified in the discovery
-call, the value provided is ignored.</dd>
-
-<dl>
-
-<p>The search result might look like this:</p>
-
-<pre>[% "
- <requests>
- <request>
- <agency_responsible>
- <recipient>Stockholm</recipient>
- </agency_responsible>
- <agency_sent_datetime>2012-11-16T10:35:12,534712Z</agency_sent_datetime>
- <description>Test: Test</description>
- <detail>Test</detail>
- <interface_used>Web interface</interface_used>
- <lat>59.336044310435</lat>
- <long>18.05058735521</long>
- <requested_datetime>2012-11-16T10:31:30,702990Z</requested_datetime>
- <requestor_name>Jonas Öberg</requestor_name>
- <service_code>Trasig gatubelysning</service_code>
- <service_name>Trasig gatubelysning</service_name>
- <service_request_id>10</service_request_id>
- <status>open</status>
- <title>Test</title>
- <updated_datetime>2012-11-16T10:35:12,534712Z</updated_datetime>
- </request>
- </requests>
-" | html %]</pre>
-
-[% INCLUDE 'footer.html' %]
-
diff --git a/templates/web/fixamingata/report/updates-sidebar-notes.html b/templates/web/fixamingata/report/updates-sidebar-notes.html
index bb75bd1f1..e228ffff5 100644
--- a/templates/web/fixamingata/report/updates-sidebar-notes.html
+++ b/templates/web/fixamingata/report/updates-sidebar-notes.html
@@ -1 +1 @@
-<p>[% loc( 'Your information will only be used in accordance with our <a href="/privacy">privacy policy</a>' ) %]</p>
+<p>[% tprintf( loc( 'Your information will only be used in accordance with our <a href="%s">privacy policy</a>' ), c.cobrand.privacy_policy_url ) %]</p>
diff --git a/templates/web/fixmystreet-uk-councils/about/privacy.html b/templates/web/fixmystreet-uk-councils/about/privacy.html
index d9668ae7d..e7ef6b377 100644
--- a/templates/web/fixmystreet-uk-councils/about/privacy.html
+++ b/templates/web/fixmystreet-uk-councils/about/privacy.html
@@ -354,7 +354,7 @@ United Kingdom<br>
</p>
-<h2>Cookies</h2>
+<h2 id="cookies">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
diff --git a/templates/web/fixmystreet-uk-councils/footer_extra_js.html b/templates/web/fixmystreet-uk-councils/footer_extra_js.html
index 76451344b..09f2bf87d 100644
--- a/templates/web/fixmystreet-uk-councils/footer_extra_js.html
+++ b/templates/web/fixmystreet-uk-councils/footer_extra_js.html
@@ -1,12 +1 @@
-[% scripts.push(
- version('/cobrands/fixmystreet-uk-councils/js.js'),
-) %]
-[%~
-IF bodyclass.match('mappage');
- scripts.push(
- version('/vendor/OpenLayers.Projection.OrdnanceSurvey.js'),
- version('/cobrands/fixmystreet/assets.js'),
- version('/cobrands/highways/assets.js'),
- );
-END
-%]
+[% PROCESS 'footer_extra_js_base.html' highways=1 ~%]
diff --git a/templates/web/fixmystreet-uk-councils/footer_extra_js_base.html b/templates/web/fixmystreet-uk-councils/footer_extra_js_base.html
new file mode 100644
index 000000000..58e2872e3
--- /dev/null
+++ b/templates/web/fixmystreet-uk-councils/footer_extra_js_base.html
@@ -0,0 +1,29 @@
+[%
+IF bodyclass.match('mappage');
+ scripts.push(
+ version('/cobrands/fixmystreet-uk-councils/js.js'),
+ version('/vendor/OpenLayers.Projection.OrdnanceSurvey.js'),
+ version('/cobrands/fixmystreet/assets.js'),
+ );
+ IF validation;
+ scripts.push(
+ version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js'),
+ );
+ END;
+ IF cobrand_js;
+ scripts.push(
+ version('/cobrands/' _ c.cobrand.moniker _ '/assets.js'),
+ );
+ END;
+ IF highways;
+ scripts.push(
+ version('/cobrands/highways/assets.js'),
+ );
+ END;
+ IF tfl;
+ scripts.push(
+ version('/cobrands/tfl/assets.js'),
+ );
+ END;
+END
+~%]
diff --git a/templates/web/fixmystreet-uk-councils/report/_item_photo_title.html b/templates/web/fixmystreet-uk-councils/report/_item_photo_title.html
new file mode 100644
index 000000000..7f18b14c3
--- /dev/null
+++ b/templates/web/fixmystreet-uk-councils/report/_item_photo_title.html
@@ -0,0 +1,5 @@
+[% IF problem.cobrand == 'tfl' %]
+ <h3 class="item-list__heading admin-offsite-link">[% problem.category | html %] problem</h3>
+[% ELSE %]
+ [% THROW file 'Not found' %]
+[% END %]
diff --git a/templates/web/fixmystreet-uk-councils/report/_updates_disallowed_message.html b/templates/web/fixmystreet-uk-councils/report/_updates_disallowed_message.html
new file mode 100644
index 000000000..3a2dda03e
--- /dev/null
+++ b/templates/web/fixmystreet-uk-councils/report/_updates_disallowed_message.html
@@ -0,0 +1,17 @@
+[% cfg = c.cobrand.feature("updates_allowed") ~%]
+[% IF cfg.match('reporter') AND (NOT cfg.match('open') OR problem.is_open) %]
+ <p>
+ Only the original reporter may leave updates.
+ [% IF NOT c.user_exists %]
+ If you made the original report please
+ <a href="/auth?r=report/[% problem.id %]">log in</a>
+ to leave an update.
+ [% END %]
+ </p>
+[% 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/fixmystreet-uk-councils/report/banner.html b/templates/web/fixmystreet-uk-councils/report/banner.html
new file mode 100644
index 000000000..6c917e7ac
--- /dev/null
+++ b/templates/web/fixmystreet-uk-councils/report/banner.html
@@ -0,0 +1,22 @@
+[% USE date %]
+
+[% BLOCK banner %]
+ <div class="banner banner--[% id %]">
+ <p>
+ <img src="[% c.cobrand.path_to_pin_icons _ 'pin-' _ c.cobrand.pin_colour(problem, 'report') _ '.png' %]" alt="" class="pin">
+ [% text %]
+ </p>
+ </div>
+[% END %]
+
+[% IF problem.is_fixed %]
+ [% INCLUDE banner, id = 'fixed', text = loc('Fixed') %]
+[% END %]
+
+[% IF problem.is_closed %]
+ [% INCLUDE banner, id = 'closed', text = loc('Closed') %]
+[% END %]
+
+[% IF problem.is_in_progress %]
+ [% INCLUDE banner, id = 'progress', text = loc('In progress') %]
+[% END %]
diff --git a/templates/web/fixmystreet-uk-councils/report/form/user_name.html b/templates/web/fixmystreet-uk-councils/report/form/user_name.html
new file mode 100644
index 000000000..695e6a48a
--- /dev/null
+++ b/templates/web/fixmystreet-uk-councils/report/form/user_name.html
@@ -0,0 +1,8 @@
+<!-- user_name.html -->
+<label for="form_name">Full name</label>
+[% IF field_errors.name %]
+ <p class='form-error'>[% field_errors.name %]</p>
+[% END %]
+<input type="text" class="form-control [% valid_class OR 'validName' %] js-form-name [% extra_class %]"
+ value="[% object.name || c.user.name | html %]" name="name" id="form_name">
+<!-- /user_name.html -->
diff --git a/templates/web/fixmystreet-uk-councils/report/new/roads_message.html b/templates/web/fixmystreet-uk-councils/report/new/roads_message.html
new file mode 100644
index 000000000..dbed24eed
--- /dev/null
+++ b/templates/web/fixmystreet-uk-councils/report/new/roads_message.html
@@ -0,0 +1,5 @@
+<div id="js-roads-responsibility" class="box-warning hidden">
+ <div id="js-not-an-asset" class="hidden js-responsibility-message">
+ <p>Please select <span class="js-roads-asset" data-original="an item">an item</span> from the map on which to make a report.</p>
+ </div>
+</div>
diff --git a/templates/web/fixmystreet.com/about/faq-en-gb.html b/templates/web/fixmystreet.com/about/faq-en-gb.html
index f5f3019ea..039dc7c98 100755
--- a/templates/web/fixmystreet.com/about/faq-en-gb.html
+++ b/templates/web/fixmystreet.com/about/faq-en-gb.html
@@ -60,7 +60,7 @@ browser – it should work well.
<dd>
<ol>
<li>Start at the <a href="/">homepage</a> and type in your postcode or a place
-name. Not sure where you are? Pick ‘locate me automatically’.
+name. Not sure where you are? Pick ‘use my location’.
<li>Put the pin in the map to show exactly where the problem is, and type in a
description of the issue. Then send.
<li>Check your email inbox for our confirmation mail, click on the link, and
diff --git a/templates/web/fixmystreet.com/about/posters.html b/templates/web/fixmystreet.com/about/posters.html
index c4cf16cd4..073b36b3b 100644
--- a/templates/web/fixmystreet.com/about/posters.html
+++ b/templates/web/fixmystreet.com/about/posters.html
@@ -82,10 +82,10 @@
<h2 id="web">Website Badge</h2>
-<p class="badge-preview">[% badge %]</p>
+<p class="badge-preview">[% badge | safe %]</p>
<p>Copy and paste the text below to add this badge to your site:</p>
-<textarea class="badge-code js-click-select">[% badge | html %]</textarea>
+<textarea class="badge-code js-click-select">[% badge %]</textarea>
<p><small>(thanks to Lincolnshire Council for the image)</small></p>
<h2 id="print">Printed Materials</h2>
diff --git a/templates/web/fixmystreet.com/footer_extra_js.html b/templates/web/fixmystreet.com/footer_extra_js.html
index cb570a169..289e230e7 100644
--- a/templates/web/fixmystreet.com/footer_extra_js.html
+++ b/templates/web/fixmystreet.com/footer_extra_js.html
@@ -6,12 +6,19 @@ IF bodyclass.match('mappage');
scripts.push( version('/cobrands/fixmystreet/assets.js') );
scripts.push( version('/cobrands/fixmystreet-uk-councils/alloy.js') );
scripts.push( version('/cobrands/bathnes/assets.js') );
+ scripts.push( version('/cobrands/bexley/assets.js') );
scripts.push( version('/cobrands/bristol/assets.js') );
scripts.push( version('/cobrands/bromley/assets.js') );
scripts.push( version('/cobrands/buckinghamshire/assets.js') );
+ scripts.push( version('/cobrands/cheshireeast/assets.js') );
+ scripts.push( version('/cobrands/eastsussex/assets.js') );
+ scripts.push( version('/cobrands/isleofwight/assets.js') );
scripts.push( version('/cobrands/lincolnshire/assets.js') );
scripts.push( version('/cobrands/northamptonshire/assets.js') );
- scripts.push( version('/cobrands/oxfordshire/assets.js') );
+ scripts.push( version('/cobrands/hounslow/assets.js') );
+ scripts.push( version('/cobrands/westminster/assets.js') );
+ scripts.push( version('/cobrands/peterborough/assets.js') );
+ scripts.push( version('/cobrands/tfl/assets.js') );
scripts.push( version('/cobrands/highways/assets.js') );
scripts.push( version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js') );
scripts.push(
diff --git a/templates/web/fixmystreet.com/front/footer-marketing.html b/templates/web/fixmystreet.com/front/footer-marketing.html
index c5812cccf..e1cc180ed 100644
--- a/templates/web/fixmystreet.com/front/footer-marketing.html
+++ b/templates/web/fixmystreet.com/front/footer-marketing.html
@@ -3,7 +3,7 @@
<h2>Go Pro</h2>
<p class="lead">Integrate FixMyStreet Pro with your council system for smooth, end-to-end report fullfilment.</p>
<p>How much could <em>you</em> save?</p>
- <p><a href="/pro/" class="btn">Learn more</a></p>
+ <p><a href="/pro/" class="btn">Learn more about Pro</a></p>
</div>
<div class="fms-pro-promo__stats">
<h2>Free statistics for councils</h2>
diff --git a/templates/web/fixmystreet.com/header/css.html b/templates/web/fixmystreet.com/header/css.html
index 00ec6befa..96ecde092 100644
--- a/templates/web/fixmystreet.com/header/css.html
+++ b/templates/web/fixmystreet.com/header/css.html
@@ -11,7 +11,7 @@
<![endif]-->
<!--[if gte IE 9]><!-->
<style id="critical">
-[% critical %]
+[% critical | safe %]
</style>
<noscript><link rel="stylesheet" href="[% base_css %]"></noscript>
@@ -34,4 +34,4 @@ document.getElementById('preload_base_css').onload = function(){this.onload=null
<link rel="stylesheet" href="[% layout_css %]">
<![endif]-->
-[% extra_css %]
+[% extra_css | safe %]
diff --git a/templates/web/fixmystreet.com/header_extra.html b/templates/web/fixmystreet.com/header_extra.html
index 5292d4804..12d9fe9d4 100644
--- a/templates/web/fixmystreet.com/header_extra.html
+++ b/templates/web/fixmystreet.com/header_extra.html
@@ -10,7 +10,6 @@
<link rel="canonical" href="https://www.fixmystreet.com[% c.req.uri.path_query %]">
[% END %]
-<meta name='theme-color' content='#ffd000'>
<link rel="Shortcut Icon" type="image/x-icon" href="/cobrands/fixmystreet.com/favicon.ico">
[% INCLUDE 'tracking_code.html' %]
diff --git a/templates/web/fixmystreet.com/report/_item_photo_title.html b/templates/web/fixmystreet.com/report/_item_photo_title.html
new file mode 100644
index 000000000..7f18b14c3
--- /dev/null
+++ b/templates/web/fixmystreet.com/report/_item_photo_title.html
@@ -0,0 +1,5 @@
+[% IF problem.cobrand == 'tfl' %]
+ <h3 class="item-list__heading admin-offsite-link">[% problem.category | html %] problem</h3>
+[% ELSE %]
+ [% THROW file 'Not found' %]
+[% END %]
diff --git a/templates/web/fixmystreet.com/report/_updates_disallowed_message.html b/templates/web/fixmystreet.com/report/_updates_disallowed_message.html
new file mode 100644
index 000000000..d2d9cf83b
--- /dev/null
+++ b/templates/web/fixmystreet.com/report/_updates_disallowed_message.html
@@ -0,0 +1,17 @@
+[% cfg = c.cobrand.updates_disallowed_config(problem).0 ~%]
+[% IF cfg.match('reporter') AND (NOT cfg.match('open') OR problem.is_open) %]
+ <p>
+ Only the original reporter may leave updates.
+ [% IF NOT c.user_exists %]
+ If you made the original report please
+ <a href="/auth?r=report/[% problem.id %]">log in</a>
+ to leave an update.
+ [% END %]
+ </p>
+[% 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/fixmystreet.com/report/banner.html b/templates/web/fixmystreet.com/report/banner.html
index 8f6ea19c1..620a09c39 100644
--- a/templates/web/fixmystreet.com/report/banner.html
+++ b/templates/web/fixmystreet.com/report/banner.html
@@ -19,7 +19,7 @@
[% IF NOT problem.to_body_named('Bromley') %]
- [% IF problem.is_open AND date.now - problem.lastupdate.epoch > 8 * 7 * 24 * 60 * 60 %]
+ [% IF problem.send_method_used != 'Open311' AND problem.is_open AND date.now - problem.lastupdate.epoch > 8 * 7 * 24 * 60 * 60 %]
[% INCLUDE banner, id = 'unknown', text = loc('Unknown') %]
[% ELSIF problem.is_in_progress %]
[% INCLUDE banner, id = 'progress', text = loc('In progress') %]
diff --git a/templates/web/fixmystreet.com/report/new/_form_labels.html b/templates/web/fixmystreet.com/report/new/_form_labels.html
new file mode 100644
index 000000000..670031dee
--- /dev/null
+++ b/templates/web/fixmystreet.com/report/new/_form_labels.html
@@ -0,0 +1,9 @@
+[% IF bodies_to_list.values.0.name == 'Cheshire East Council' %]
+<p class="box-warning">
+Message from Cheshire East Council: “At this time, we request that members of
+the public only report highway issues that present a danger or hazard to
+highway users, or could impact directly on a property or business, by calling
+us on 0300 123 5020. We would request that any other issues are not reported at
+this time.”
+</p>
+[% END ~%]
diff --git a/templates/web/fixmystreet.com/report/new/roads_message.html b/templates/web/fixmystreet.com/report/new/roads_message.html
index f6a5d903a..6d1243354 100644
--- a/templates/web/fixmystreet.com/report/new/roads_message.html
+++ b/templates/web/fixmystreet.com/report/new/roads_message.html
@@ -13,20 +13,10 @@
</p>
</div>
<div id="js-not-a-road" class="hidden js-responsibility-message">
- <p>The location you have selected doesn't appear to be on a road.</p>
- <p>Please select a road on which to make a report.</p>
+ <p>The location you have selected doesn't appear to be on <span class="js-roads-asset" data-original="a road">a road</span>.</p>
+ <p>Please select <span class="js-roads-asset" data-original="a road">a road</span> on which to make a report.</p>
</div>
<div id="js-not-an-asset" class="hidden js-responsibility-message">
- <p>Please select <span id="js-roads-asset">an item</span> from the map on which to make a report.</p>
- </div>
- <div id="js-not-a-speedhump" class="hidden js-responsibility-message">
- <p>Please select <b>a speed hump</b> from the map on which to make a report.</p>
- </div>
- <div id="js-not-a-ped-barrier" class="hidden js-responsibility-message">
- <p>Please select <b>a pedestrian barrier</b> from the map on which to make a report.</p>
- </div>
- <div id="js-not-a-prow" class="hidden js-responsibility-message">
- <p>The location you have selected doesn't appear to be on a right of way.</p>
- <p>Please select a right of way on which to make a report.</p>
+ <p>Please select <span class="js-roads-asset" data-original="an item">an item</span> from the map on which to make a report.</p>
</div>
</div>
diff --git a/templates/web/fixmystreet.com/report/update/form_state_checkbox.html b/templates/web/fixmystreet.com/report/update/form_state_checkbox.html
new file mode 100644
index 000000000..16ae59bc8
--- /dev/null
+++ b/templates/web/fixmystreet.com/report/update/form_state_checkbox.html
@@ -0,0 +1,19 @@
+[% RETURN IF problem.to_body_named('TfL') OR problem.to_body_named('Hounslow') %]
+
+[% IF (problem.is_fixed OR problem.is_closed) AND ((c.user_exists AND c.user.id == problem.user_id) OR alert_to_reporter) %]
+
+ <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>
+ [% ELSE %]
+ <label class="inline" for="form_reopen">[% loc('This problem has not been fixed') %]</label>
+ [% END %]
+
+[% ELSIF !problem.is_fixed AND has_fixed_state %]
+
+ <div class="checkbox-group">
+ <input type="checkbox" name="fixed" id="form_fixed" value="1"[% ' checked' IF update.mark_fixed %]>
+ <label class="inline" for="form_fixed">[% loc('This problem has been fixed') %]</label>
+ </div>
+
+[% END %]
diff --git a/templates/web/fixmystreet.com/reports/_body_gone.html b/templates/web/fixmystreet.com/reports/_body_gone.html
index 5a8232110..d65a8e44b 100755
--- a/templates/web/fixmystreet.com/reports/_body_gone.html
+++ b/templates/web/fixmystreet.com/reports/_body_gone.html
@@ -1,3 +1,4 @@
+[% RETURN IF body.name == 'Highways England' # Covers no areas but does exist %]
<p id="unknown" class="alert">This council no longer exists.
[% IF body.name.match('Antrim|Newtownabbey') %]
Its area is now covered by <a href="/reports/Antrim+and+Newtownabbey">Antrim and Newtownabbey Borough Council</a>.
diff --git a/templates/web/fixmystreet.com/reports/cobrand_stats.html b/templates/web/fixmystreet.com/reports/cobrand_stats.html
index 8b9e57c05..623c85386 100644
--- a/templates/web/fixmystreet.com/reports/cobrand_stats.html
+++ b/templates/web/fixmystreet.com/reports/cobrand_stats.html
@@ -1,6 +1,6 @@
[% UNLESS c.req.params.show_wards %]
<div class="full-width area-reports-dashboard-cta">
<strong>New for council staff</strong>
- <p>Don’t miss our stats dashboard, only available to council staff. Access detailed reports and statistics — for free. <a href="/about/council-dashboard/">Log in here.</a></p>
+ <p>Don’t miss our stats dashboard, only available to council staff. Access detailed reports and statistics — for free. <a href="[% body_url %]/summary">Log in here.</a></p>
</div>
[% END %]
diff --git a/templates/web/fixmystreet.com/reports/summary.html b/templates/web/fixmystreet.com/reports/summary.html
index de340e5fd..70f7c10d1 100644
--- a/templates/web/fixmystreet.com/reports/summary.html
+++ b/templates/web/fixmystreet.com/reports/summary.html
@@ -70,7 +70,7 @@
<select class="form-control" id="area" name="area">
<option value="">[% body.name %]</option>
[% FOR w IN children.values.sort('name') %]
- <option value="[% w.id %]"[% ' selected' IF w.id == ward %]>[% w.name %]</option>
+ <option value="[% w.id %]"[% ' selected' IF w.id == ward.0 %]>[% w.name %]</option>
[% END %]
</select>
</p>
diff --git a/templates/web/fixmystreet.com/tracking_code.html b/templates/web/fixmystreet.com/tracking_code.html
index 419a01088..6142a2b0c 100644
--- a/templates/web/fixmystreet.com/tracking_code.html
+++ b/templates/web/fixmystreet.com/tracking_code.html
@@ -5,7 +5,7 @@
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
-ga('create', 'UA-660910-4', {'cookieDomain': '.fixmystreet.com'});
+ga('create', 'UA-660910-4', {'storage': 'none'});
ga('set', 'anonymizeIp', true);
[% IF created_report %]
ga('require', 'ecommerce');
diff --git a/templates/web/greenwich/footer.html b/templates/web/greenwich/footer.html
deleted file mode 100644
index 7cc4f185c..000000000
--- a/templates/web/greenwich/footer.html
+++ /dev/null
@@ -1,20 +0,0 @@
- [% IF pagefooter %]
- <footer role="contentinfo">
- [% INCLUDE 'front/footer-marketing.html' %]
- </footer>
- [% END %]
- </div><!-- .content role=main -->
- </div><!-- .container -->
- </div><!-- .table-cell -->
-
- <div class="nav-wrapper">
- <div class="container">
- [% INCLUDE "main_nav.html" body_name=c.cobrand.council_name %]
- </div>
- </div>
- </div> <!-- .wrapper -->
-
- [% INCLUDE 'common_footer_tags.html' %]
-
-</body>
-</html>
diff --git a/templates/web/greenwich/footer_extra_js.html b/templates/web/greenwich/footer_extra_js.html
new file mode 100644
index 000000000..8cbe4c48f
--- /dev/null
+++ b/templates/web/greenwich/footer_extra_js.html
@@ -0,0 +1 @@
+[% PROCESS 'footer_extra_js_base.html' highways=1 tfl=1 %]
diff --git a/templates/web/greenwich/header_logo.html b/templates/web/greenwich/header_logo.html
index cfe485af1..a38e166a9 100644
--- a/templates/web/greenwich/header_logo.html
+++ b/templates/web/greenwich/header_logo.html
@@ -15,4 +15,4 @@
<li><a href="/">FixMyStreet</a></li>
</ul>
- [% INCLUDE "main_nav.html" body_name=c.cobrand.council_name hide_privacy_link=1 ul_id="fms-menu-desktop" ul_class="" omit_wrapper=1 %]
+ [% INCLUDE "main_nav.html" hide_privacy_link=1 ul_id="fms-menu-desktop" ul_class="" omit_wrapper=1 %]
diff --git a/templates/web/hart/footer.html b/templates/web/hart/footer.html
index 5a53fb978..15ed6611c 100644
--- a/templates/web/hart/footer.html
+++ b/templates/web/hart/footer.html
@@ -6,7 +6,7 @@
<div class="nav-wrapper clearfix">
<div class="container container--hart">
- [% INCLUDE "main_nav.html" body_name=c.cobrand.council_area ul_class="nav-menu nav-menu--first" hide_privacy_link=1 %]
+ [% INCLUDE "main_nav.html" ul_class="nav-menu nav-menu--first" hide_privacy_link=1 %]
</div>
<div class="container">
<div id="main-nav--hart" role="navigation">
@@ -31,76 +31,9 @@
</li>
</ul>
</div>
- <div class="sign-in">
- [% IF c.user_exists %]
- <p>
- [% tprintf(loc('Hi %s'), c.user.name || c.user.email) %]
- <a href="/auth/sign_out">[% loc('sign out') %]</a>
- </p>
- [% END %]
- </div>
</div>
</div>
- <footer id="hart-footer">
- <div id="footer-inner" class="container">
- <div id="footer-row-1" class="clearfix row">
- <p class="desk-only">
- <strong>©</strong>
- <a href="http://www.hart.gov.uk/disclaimer" title="More information on the Disclaimer" class="hart">Hart District Council</a>
- <a href="http://www.gov.uk/" title="GOV.UK">GOV.UK</a>
- </p>
- <ul id="footer-nav">
- <li> <a href="http://www.hart.gov.uk/Accessibility">Accessibility</a> </li>
- <li class="mob-only"> <a href="http://www.gov.uk/" title="GOV.UK">GOV.UK</a> </li>
- <li> <a href="http://www.hart.gov.uk/privacy">Privacy</a> </li>
- <li class="mob-only"> <a href="http://www3.basingstoke.gov.uk/ccmwa/chat/a6f6143d-407f-4f99-b673-6feb98b54815">Web Chat</a> </li>
- <li class="mob-only"> <a href="https://www.hart.gov.uk/contact-us">Contact us</a> </li>
- <li class="mob-only"> <a href="https://www.hart.gov.uk/feedback">Feedback</a> </li>
- <li class="mob-only bottom"> <a href="https://www.hart.gov.uk/user/login?current=node/1">Login</a> </li>
- <li class="mob-only bottom"> <a href="https://www.hart.gov.uk/user/register">Register</a> </li>
- </ul>
- </div>
- <div id="footer-row-2" class="clearfix row">
- <ul id="footer-images">
- <li>
- <a href="https://www.facebook.com/HartDistrictCouncil">
- <img alt="Facebook" src="/cobrands/hart/facebook-logo.png" style="width: 50px; height: 50px;">
- </a>
- </li>
- <li>
- <a href="https://twitter.com/HartCouncil">
- <img alt="Twitter" src="/cobrands/hart/twitter-logo.png" style="width: 50px; height: 50px;">
- </a>
- </li>
- <li>
- <a href="https://www.youtube.com/channel/UCtkLOTkot4Z24Mr9C4I3t-A">
- <img alt="YouTube" src="/cobrands/hart/youtube-logo.png" style="width: 50px; height: 50px;">
- </a>
- </li>
- <li>
- <a href="https://www.instagram.com/hartcouncil/">
- <img alt="Instagram" src="/cobrands/hart/instagram-logo.png" style="width: 50px; height: 50px;">
- </a>
- </li>
- <li class="web-chat">
- <a href="http://www3.basingstoke.gov.uk/ccmwa/chat/a6f6143d-407f-4f99-b673-6feb98b54815">
- <span class="desk-only">Web Chat</span>
- <img alt="Web chat" src="/cobrands/hart/chat.png" style="height: 50px; width: 50px;">
- </a>
- </li>
- </ul>
- </div>
- <div id="footer-row-3" class="clearfix row">
- <p class="mob-only">
- <strong>©</strong>
- <a href="http://www.hart.gov.uk/disclaimer" title="More information on the Disclaimer" class="hart">Hart District Council</a>
- </p>
- <a href="https://www.fixmystreet.com/pro/">Powered by <img src="/cobrands/hart/fms-logo.png" alt="FixMyStreet" style="height:20px;"></a>
- </div>
- </div>
- </footer>
-
[% INCLUDE 'common_footer_tags.html' %]
</div>
diff --git a/templates/web/hart/footer_extra.html b/templates/web/hart/footer_extra.html
new file mode 100644
index 000000000..5e9db575f
--- /dev/null
+++ b/templates/web/hart/footer_extra.html
@@ -0,0 +1,58 @@
+<footer id="hart-footer">
+ <div id="footer-inner" class="container">
+ <div id="footer-row-1" class="clearfix row">
+ <p class="desk-only">
+ <strong>©</strong>
+ <a href="http://www.hart.gov.uk/disclaimer" title="More information on the Disclaimer" class="hart">Hart District Council</a>
+ <a href="http://www.gov.uk/" title="GOV.UK">GOV.UK</a>
+ </p>
+ <ul id="footer-nav">
+ <li> <a href="http://www.hart.gov.uk/Accessibility">Accessibility</a> </li>
+ <li class="mob-only"> <a href="http://www.gov.uk/" title="GOV.UK">GOV.UK</a> </li>
+ <li> <a href="http://www.hart.gov.uk/privacy">Privacy</a> </li>
+ <li class="mob-only"> <a href="http://www3.basingstoke.gov.uk/ccmwa/chat/a6f6143d-407f-4f99-b673-6feb98b54815">Web Chat</a> </li>
+ <li class="mob-only"> <a href="https://www.hart.gov.uk/contact-us">Contact us</a> </li>
+ <li class="mob-only"> <a href="https://www.hart.gov.uk/feedback">Feedback</a> </li>
+ <li class="mob-only bottom"> <a href="https://www.hart.gov.uk/user/login?current=node/1">Login</a> </li>
+ <li class="mob-only bottom"> <a href="https://www.hart.gov.uk/user/register">Register</a> </li>
+ </ul>
+ </div>
+ <div id="footer-row-2" class="clearfix row">
+ <ul id="footer-images">
+ <li>
+ <a href="https://www.facebook.com/HartDistrictCouncil">
+ <img alt="Facebook" src="/cobrands/hart/facebook-logo.png" style="width: 50px; height: 50px;">
+ </a>
+ </li>
+ <li>
+ <a href="https://twitter.com/HartCouncil">
+ <img alt="Twitter" src="/cobrands/hart/twitter-logo.png" style="width: 50px; height: 50px;">
+ </a>
+ </li>
+ <li>
+ <a href="https://www.youtube.com/channel/UCtkLOTkot4Z24Mr9C4I3t-A">
+ <img alt="YouTube" src="/cobrands/hart/youtube-logo.png" style="width: 50px; height: 50px;">
+ </a>
+ </li>
+ <li>
+ <a href="https://www.instagram.com/hartcouncil/">
+ <img alt="Instagram" src="/cobrands/hart/instagram-logo.png" style="width: 50px; height: 50px;">
+ </a>
+ </li>
+ <li class="web-chat">
+ <a href="http://www3.basingstoke.gov.uk/ccmwa/chat/a6f6143d-407f-4f99-b673-6feb98b54815">
+ <span class="desk-only">Web Chat</span>
+ <img alt="Web chat" src="/cobrands/hart/chat.png" style="height: 50px; width: 50px;">
+ </a>
+ </li>
+ </ul>
+ </div>
+ <div id="footer-row-3" class="clearfix row">
+ <p class="mob-only">
+ <strong>©</strong>
+ <a href="http://www.hart.gov.uk/disclaimer" title="More information on the Disclaimer" class="hart">Hart District Council</a>
+ </p>
+ <a href="https://www.fixmystreet.com/pro/">Powered by <img src="/cobrands/hart/fms-logo.png" alt="FixMyStreet" style="height:20px;"></a>
+ </div>
+ </div>
+</footer>
diff --git a/templates/web/hart/header.html b/templates/web/hart/header.html
index a375fdb7d..09c775454 100644
--- a/templates/web/hart/header.html
+++ b/templates/web/hart/header.html
@@ -20,6 +20,8 @@
[% TRY %][% PROCESS 'set_body_class.html' %][% CATCH file %][% END %]
<body class="[% bodyclass | html IF bodyclass %]">
+ [% INCLUDE 'debug_header.html' %]
+
<div class="wrapper">
<div class="table-cell">
<header id="site-header" role="banner">
@@ -34,9 +36,7 @@
</div>
</header>
- [% pre_container_extra %]
+ [% pre_container_extra | safe %]
<div class="container">
<div class="content[% " $mainclass" | html IF mainclass %]" role="main">
-
- <!-- [% INCLUDE 'debug_header.html' %] -->
diff --git a/templates/web/highwaysengland/around/_postcode_form_examples.html b/templates/web/highwaysengland/around/_postcode_form_examples.html
new file mode 100644
index 000000000..5ffb7339a
--- /dev/null
+++ b/templates/web/highwaysengland/around/_postcode_form_examples.html
@@ -0,0 +1,2 @@
+<p class="form-hint" id="pc-hint">[% tprintf('eg ‘%s’ or ‘%s’', c.cobrand.example_places) %]</p>
+<p class="form-hint"><em>If you have previously made a report then please enter your reference, for example FMS1234567, into the search box to locate the latest status.</em></p>
diff --git a/templates/web/highwaysengland/around/intro.html b/templates/web/highwaysengland/around/intro.html
new file mode 100644
index 000000000..5eb114e53
--- /dev/null
+++ b/templates/web/highwaysengland/around/intro.html
@@ -0,0 +1,5 @@
+ <h1>Report a problem <span>on our network</span></h1>
+ <div class="front-blurb">
+ <p>We work hard to make sure our network of motorways and major A-roads is in good condition, minimising disruption for our customers.</p>
+ <p>We carry out regular inspections and maintenance activities, but we also want to hear from you if you spot something wrong with our roads or any of the assets alongside them. This could be anything from a broken sign or barrier, to litter, overgrown vegetation or potholes.</p>
+ </div>
diff --git a/templates/web/highwaysengland/footer_extra.html b/templates/web/highwaysengland/footer_extra.html
new file mode 100644
index 000000000..904ef4297
--- /dev/null
+++ b/templates/web/highwaysengland/footer_extra.html
@@ -0,0 +1,6 @@
+<footer class="site-footer">
+ <div class="container">
+ <a href="https://highwaysengland.co.uk/" class="site-logo">Highways England</a>
+ <a href="https://www.fixmystreet.com/pro" class="powered-by-fms">Powered by FixMyStreet Pro</a>
+ </div>
+</footer>
diff --git a/templates/web/highwaysengland/footer_extra_js.html b/templates/web/highwaysengland/footer_extra_js.html
new file mode 100644
index 000000000..376386db2
--- /dev/null
+++ b/templates/web/highwaysengland/footer_extra_js.html
@@ -0,0 +1,9 @@
+[%
+IF bodyclass.match('mappage');
+ scripts.push( version('/cobrands/fixmystreet/assets.js') );
+ scripts.push( version('/cobrands/highwaysengland/assets.js') );
+ scripts.push(
+ version('/vendor/OpenLayers.Projection.OrdnanceSurvey.js'),
+ );
+END;
+%]
diff --git a/templates/web/lincolnshire/front/footer-marketing.html b/templates/web/highwaysengland/front/footer-marketing.html
index e69de29bb..e69de29bb 100644
--- a/templates/web/lincolnshire/front/footer-marketing.html
+++ b/templates/web/highwaysengland/front/footer-marketing.html
diff --git a/templates/web/highwaysengland/header_extra.html b/templates/web/highwaysengland/header_extra.html
new file mode 100644
index 000000000..d9e042da6
--- /dev/null
+++ b/templates/web/highwaysengland/header_extra.html
@@ -0,0 +1,4 @@
+<link rel="stylesheet" href="https://use.typekit.net/lgn8iyw.css">
+<link rel="shortcut icon" href="/cobrands/highwaysengland/HE_Fav-144x144.jpg">
+
+[% INCLUDE 'tracking_code.html' %]
diff --git a/templates/web/highwaysengland/header_logo.html b/templates/web/highwaysengland/header_logo.html
new file mode 100644
index 000000000..1a7c70956
--- /dev/null
+++ b/templates/web/highwaysengland/header_logo.html
@@ -0,0 +1,2 @@
+ <a href="https://highwaysengland.co.uk/" id="site-logo">Highways England</a>
+ <a href="/" id="report-cta" title="[%- loc('Report a problem') -%]">[%- loc('Report') -%]</a>
diff --git a/templates/web/fixamingata/header_opengraph.html b/templates/web/highwaysengland/header_opengraph.html
index 7d09d6009..d5030ede8 100644
--- a/templates/web/fixamingata/header_opengraph.html
+++ b/templates/web/highwaysengland/header_opengraph.html
@@ -1,6 +1,6 @@
<meta property="og:url" content="[% c.cobrand.base_url %][% c.req.uri.path %]">
<meta property="og:title" content="[% title || site_name %]">
<meta property="og:site_name" content="[% site_name %]">
- [% IF c.req.uri.path == '/' %]<meta property="og:description" content="Rapportera, visa, eller diskutera lokala problem.">[% END %]
+ [% IF c.req.uri.path == '/' %]<meta property="og:description" content="We carry out regular inspections and maintenance activities, but we also want to hear from you if you spot something wrong with our roads or any of the assets alongside them.">[% END %]
<meta property="og:type" content="website">
[% INCLUDE 'header_opengraph_image.html' %]
diff --git a/templates/web/highwaysengland/header_opengraph_image.html b/templates/web/highwaysengland/header_opengraph_image.html
new file mode 100644
index 000000000..8284cd83f
--- /dev/null
+++ b/templates/web/highwaysengland/header_opengraph_image.html
@@ -0,0 +1,13 @@
+ [% IF problem.photo %]
+ [% photo = problem.photos.first %]
+ [% data = problem.get_first_image_og %]
+ <meta property="og:image" content="[% c.cobrand.base_url %][% photo.url_og %]">
+ <meta property="og:image:type" content="[% data.content_type %]">
+ <meta property="og:image:width" content="[% data.width %]">
+ <meta property="og:image:height" content="[% data.height %]">
+ [% ELSE %]
+ <meta property="og:image" content="[% c.cobrand.base_url %]/cobrands/highwaysengland/facebook-og-image.jpg">
+ <meta property="og:image:type" content="image/jpeg">
+ <meta property="og:image:width" content="1200">
+ <meta property="og:image:height" content="630">
+ [% END %]
diff --git a/templates/web/highwaysengland/header_site.html b/templates/web/highwaysengland/header_site.html
new file mode 100644
index 000000000..e1f104f14
--- /dev/null
+++ b/templates/web/highwaysengland/header_site.html
@@ -0,0 +1,14 @@
+<header id="site-header" role="banner">
+ <div class="container">
+ [% INCLUDE 'header_logo.html' %]
+ <a href="#main-nav" id="nav-link">Main Navigation</a>
+ </div>
+</header>
+
+[% IF c.req.uri.path == '/' %]
+ <div class="front-warning">
+ <div class="container">
+ Please don&rsquo;t endanger your safety to make a report to us, only do so from a safe location
+ </div>
+ </div>
+[% END %]
diff --git a/templates/web/highwaysengland/index-steps.html b/templates/web/highwaysengland/index-steps.html
new file mode 100644
index 000000000..10cb208f1
--- /dev/null
+++ b/templates/web/highwaysengland/index-steps.html
@@ -0,0 +1,13 @@
+<h2>How to report a problem</h2>
+
+<ol class="big-numbers">
+ <li>[% question %]</li>
+ <li>Locate the problem on a map of the area</li>
+ <li>Enter details of the problem</li>
+ <li>We will investigate</li>
+</ol>
+
+<section class="full-width">
+[% INCLUDE "front/stats.html" %]
+[% TRY %][% INCLUDE "front/tips.html" %][% CATCH file %][% END %]
+</section>
diff --git a/templates/web/highwaysengland/main_nav_items.html b/templates/web/highwaysengland/main_nav_items.html
new file mode 100644
index 000000000..82106bdb1
--- /dev/null
+++ b/templates/web/highwaysengland/main_nav_items.html
@@ -0,0 +1,21 @@
+[% INCLUDE 'navigation/_report.html' %]
+
+[%~ IF c.user_exists ~%]
+ [%~ INCLUDE navitem uri='/my' label=loc('Your account') ~%]
+[%~ END ~%]
+
+[%~ IF c.user_exists AND c.user.has_body_permission_to('planned_reports') ~%]
+ [%~ INCLUDE navitem always_url=1 uri='/my/planned' label=loc('Shortlist') ~%]
+[%~ END ~%]
+
+[%~ INCLUDE 'navigation/_all_reports.html' ~%]
+
+[%~ INCLUDE navitem uri='/faq' label=loc('Help') ~%]
+
+[%~ UNLESS hide_privacy_link ~%]
+ [%~ INCLUDE navitem uri=c.cobrand.privacy_policy_url label=loc('Privacy') liattrs='class="nav-menu__item--privacy"' ~%]
+[%~ END ~%]
+
+[%~ IF c.user_exists AND c.cobrand.admin_allow_user(c.user) ~%]
+ [%~ INCLUDE navitem uri='/admin' label=loc('Admin') ~%]
+[%~ END ~%]
diff --git a/templates/web/highwaysengland/report/form/user.html b/templates/web/highwaysengland/report/form/user.html
new file mode 100644
index 000000000..1167f1f9a
--- /dev/null
+++ b/templates/web/highwaysengland/report/form/user.html
@@ -0,0 +1,6 @@
+<!-- report/form/user.html -->
+<div class="js-new-report-user-hidden form-section-preview form-section-preview--next">
+ <button name="report_anonymously" value="yes" class="btn btn--block js-new-report-submit">Report anonymously</button>
+ <small>No personal details will be stored.</small>
+</div>
+<!-- /report/form/user.html -->
diff --git a/templates/web/highwaysengland/report/form/user_loggedout.html b/templates/web/highwaysengland/report/form/user_loggedout.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/highwaysengland/report/form/user_loggedout.html
diff --git a/templates/web/highwaysengland/report/new/_form_labels.html b/templates/web/highwaysengland/report/new/_form_labels.html
new file mode 100644
index 000000000..09d41fce9
--- /dev/null
+++ b/templates/web/highwaysengland/report/new/_form_labels.html
@@ -0,0 +1,5 @@
+[%
+SET form_title = 'Summarise the problem and location';
+SET form_title_placeholder = 'eg ‘Obscured road sign by the northbound M1 junction 23 exit’';
+SET form_detail_placeholder = 'eg ‘This road sign has been obscured for two months and…’';
+%]
diff --git a/templates/web/highwaysengland/report/new/councils_text_all.html b/templates/web/highwaysengland/report/new/councils_text_all.html
new file mode 100644
index 000000000..58c3cfe4f
--- /dev/null
+++ b/templates/web/highwaysengland/report/new/councils_text_all.html
@@ -0,0 +1,17 @@
+<p>
+[% category = mark_safe(category) %]
+[% UNLESS non_public_categories.$category;
+
+ tprintf(
+ 'These will be sent to us and also published online for others to see, in line with our <a href="%s">privacy policy</a>.',
+ c.cobrand.privacy_policy_url
+ );
+
+ELSE;
+
+ 'These will be sent to us but not published online.';
+
+END %]
+
+[% TRY %][% INCLUDE 'report/new/councils_extra_text.html' %][% CATCH file %][% END %]
+</p>
diff --git a/templates/web/highwaysengland/report/new/form_heading.html b/templates/web/highwaysengland/report/new/form_heading.html
new file mode 100644
index 000000000..fea1c1772
--- /dev/null
+++ b/templates/web/highwaysengland/report/new/form_heading.html
@@ -0,0 +1,2 @@
+<h1>Report a problem on our road network</h1>
+
diff --git a/templates/web/highwaysengland/report/new/form_user_loggedin.html b/templates/web/highwaysengland/report/new/form_user_loggedin.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/highwaysengland/report/new/form_user_loggedin.html
diff --git a/templates/web/highwaysengland/report/new/inline-tips.html b/templates/web/highwaysengland/report/new/inline-tips.html
new file mode 100644
index 000000000..ff0ef42f8
--- /dev/null
+++ b/templates/web/highwaysengland/report/new/inline-tips.html
@@ -0,0 +1,13 @@
+<label for="where_hear">How did you hear about us?</label>
+
+[%~ SET where_hear = report.get_extra_metadata('where_hear') %]
+<select class="form-control" name="where_hear" id="where_hear">
+<option value="">[% loc('-- Pick an option --') %]</option>
+<option value="Facebook"[% ' selected' IF 'Facebook' == where_hear %]>Facebook</option>
+<option value="Search engine"[% ' selected' IF 'Search engine' == where_hear %]>Search engine</option>
+<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="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
new file mode 100644
index 000000000..e75a0a01b
--- /dev/null
+++ b/templates/web/highwaysengland/report/new/roads_message.html
@@ -0,0 +1,17 @@
+<div id="js-roads-responsibility" class="box-warning hidden">
+ <div id="js-not-he-road" class="hidden js-responsibility-message">
+ <strong>Not maintained by us</strong>
+ <p>The selected location is not maintained by us.
+ 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>
+
+ <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
+ <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>
+</div>
diff --git a/templates/web/highwaysengland/report/new/sidebar.html b/templates/web/highwaysengland/report/new/sidebar.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/highwaysengland/report/new/sidebar.html
diff --git a/templates/web/highwaysengland/report/new/top_message.html b/templates/web/highwaysengland/report/new/top_message.html
new file mode 100644
index 000000000..98bbd2cd3
--- /dev/null
+++ b/templates/web/highwaysengland/report/new/top_message.html
@@ -0,0 +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.
+</div>
diff --git a/templates/web/highwaysengland/report/update/form_state_checkbox.html b/templates/web/highwaysengland/report/update/form_state_checkbox.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/highwaysengland/report/update/form_state_checkbox.html
diff --git a/templates/web/highwaysengland/report/updates-sidebar-notes.html b/templates/web/highwaysengland/report/updates-sidebar-notes.html
new file mode 100644
index 000000000..d73ae72e9
--- /dev/null
+++ b/templates/web/highwaysengland/report/updates-sidebar-notes.html
@@ -0,0 +1,3 @@
+<p>
+ [% tprintf( 'Your information will only be used in line with our <a href="%s">privacy policy</a>', c.cobrand.privacy_policy_url ) %]
+</p>
diff --git a/templates/web/highwaysengland/site-name.html b/templates/web/highwaysengland/site-name.html
new file mode 100644
index 000000000..03c0091cd
--- /dev/null
+++ b/templates/web/highwaysengland/site-name.html
@@ -0,0 +1 @@
+Highways England Report a problem
diff --git a/templates/web/highwaysengland/tokens/confirm_problem.html b/templates/web/highwaysengland/tokens/confirm_problem.html
new file mode 100644
index 000000000..311902b24
--- /dev/null
+++ b/templates/web/highwaysengland/tokens/confirm_problem.html
@@ -0,0 +1,21 @@
+[% INCLUDE 'header.html', bodyclass = 'fullwidthpage', title = loc('Confirmation') %]
+
+<div class="confirmation-header">
+
+ <h1><a href="[% c.cobrand.relative_url_for_report( report ) %][% report.url %]">[% report.title %]</a></h1>
+
+ <p>Thank you for submitting your report.<br>Reference: <strong>FMS[% report.id %]</strong>.</p>
+ <p>We aim to respond within 3 working days.</p>
+ <p>Please be aware that, for your privacy, we will not respond to you directly.</p>
+ <p>If you’d like to view the status of your report, or check for updates, then please visit
+ <a href="[% c.cobrand.relative_url_for_report( report ) %][% report.url %]">the report page</a>.</p>
+
+ <p class="confirmation-again">
+ <a href="/report/new?latitude=[% report.latitude %]&amp;longitude=[% report.longitude %]" class="btn btn-primary">
+ [% loc('Report another problem here') %]
+ </a>
+ </p>
+
+</div>
+
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/highwaysengland/tracking_code.html b/templates/web/highwaysengland/tracking_code.html
new file mode 100644
index 000000000..ff705d264
--- /dev/null
+++ b/templates/web/highwaysengland/tracking_code.html
@@ -0,0 +1,15 @@
+[% 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-159819528-1"></script>
+<script>
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+
+ gtag('config', 'UA-159819528-1');
+</script>
+
+[% ELSE %]
+<!-- Tracking code not inserted ("[% c.config.BASE_URL %]" != "https://www.fixmystreet.com") -->
+[% END %]
diff --git a/templates/web/hounslow/about/mapterms.html b/templates/web/hounslow/about/mapterms.html
new file mode 100644
index 000000000..04c0aeb09
--- /dev/null
+++ b/templates/web/hounslow/about/mapterms.html
@@ -0,0 +1,24 @@
+[% INCLUDE header.html
+ title = 'Map Terms and Conditions'
+%]
+
+<h1>Map Terms and Conditions</h1>
+
+<ul>
+ <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;
+ </li>
+ <li>
+ II. You are not permitted to copy, sub-license, distribute, sell or
+ otherwise make available the Licensed Data to third parties in any form;
+ and
+ </li>
+ <li>
+ III. Third party rights to enforce the terms of this licence shall be
+ reserved to OS.
+ </li>
+</ul>
+[% INCLUDE footer.html %]
+
diff --git a/templates/web/hounslow/footer_extra_js.html b/templates/web/hounslow/footer_extra_js.html
new file mode 100644
index 000000000..081ec3a12
--- /dev/null
+++ b/templates/web/hounslow/footer_extra_js.html
@@ -0,0 +1,8 @@
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 tfl=1 %]
+[%
+IF bodyclass.match('mappage');
+ scripts.push(
+ version('/cobrands/hounslow/js.js'),
+ );
+END
+%]
diff --git a/templates/web/hounslow/header_extra.html b/templates/web/hounslow/header_extra.html
new file mode 100644
index 000000000..8a977495f
--- /dev/null
+++ b/templates/web/hounslow/header_extra.html
@@ -0,0 +1 @@
+[% INCLUDE 'tracking_code.html' %]
diff --git a/templates/web/hounslow/header_logo.html b/templates/web/hounslow/header_logo.html
new file mode 100644
index 000000000..50d896496
--- /dev/null
+++ b/templates/web/hounslow/header_logo.html
@@ -0,0 +1,2 @@
+ <a href="http://www.hounslowhighways.org" id="site-logo">Hounslow Highways</a>
+ <a href="/" id="report-cta" title="[%- loc('Report a problem') -%]">[%- loc('Report') -%]</a>
diff --git a/templates/web/hounslow/main_nav_items.html b/templates/web/hounslow/main_nav_items.html
new file mode 100644
index 000000000..68c1d9000
--- /dev/null
+++ b/templates/web/hounslow/main_nav_items.html
@@ -0,0 +1,34 @@
+[% INCLUDE 'navigation/_report.html' %]
+
+[%~ IF c.user_exists ~%]
+ [%~ INCLUDE navitem uri='/my' label=loc('Your account') ~%]
+[%~ ELSE ~%]
+ [%~ INCLUDE navitem uri='/auth' label=loc('Sign in') ~%]
+[%~ END ~%]
+
+[%~ IF c.user_exists AND c.user.has_body_permission_to('planned_reports') ~%]
+ [%~ INCLUDE navitem always_url=1 uri='/my/planned' label=loc('Shortlist') ~%]
+[%~ END ~%]
+
+[%~ INCLUDE 'navigation/_all_reports.html' ~%]
+
+[%~
+ IF pc;
+ pc_uri = pc | uri;
+ pc_suffix = "/list?pc=" _ pc_uri;
+ END;
+
+ INCLUDE navitem uri='/alert' label=loc('Local alerts') suffix=pc_suffix;
+~%]
+
+[%~ INCLUDE navitem uri='/contact/enquiry' label=loc('Contact') ~%]
+
+[%~ INCLUDE navitem uri='/faq' label=loc('Help') ~%]
+
+[%~ UNLESS hide_privacy_link ~%]
+ [%~ INCLUDE navitem uri=c.cobrand.privacy_policy_url label=loc('Privacy') liattrs='class="nav-menu__item--privacy"' ~%]
+[%~ END ~%]
+
+[%~ IF c.user_exists AND c.cobrand.admin_allow_user(c.user) ~%]
+ [%~ INCLUDE navitem uri='/admin' label=loc('Admin') ~%]
+[%~ END ~%]
diff --git a/templates/web/hounslow/report/_council_sent_info.html b/templates/web/hounslow/report/_council_sent_info.html
new file mode 100644
index 000000000..921f17f5f
--- /dev/null
+++ b/templates/web/hounslow/report/_council_sent_info.html
@@ -0,0 +1,12 @@
+[% 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) %]
+[% IF duration_clause || can_display_external_id %]
+ <p class="council_sent_info">
+ [% duration_clause %]
+ [%- IF can_display_external_id %]
+ [%- external_ref_clause = tprintf('Reference:&nbsp;%s', problem.external_id) %]
+ [%- IF duration_clause %]. [% END %]
+ <strong>[% external_ref_clause %].</strong>
+ [%- END %]
+ </p>
+[% END %]
diff --git a/templates/web/hounslow/report/new/_form_labels.html b/templates/web/hounslow/report/new/_form_labels.html
new file mode 100644
index 000000000..971715fa8
--- /dev/null
+++ b/templates/web/hounslow/report/new/_form_labels.html
@@ -0,0 +1,3 @@
+[%
+SET form_title = 'Summarise the problem and location';
+%] \ No newline at end of file
diff --git a/templates/web/hounslow/report/new/after_photo.html b/templates/web/hounslow/report/new/after_photo.html
new file mode 100644
index 000000000..e8fac0d2a
--- /dev/null
+++ b/templates/web/hounslow/report/new/after_photo.html
@@ -0,0 +1,8 @@
+<div class="description_tips" aria-label="Tips for perfect photos">
+ <ul class="do">
+ <li>To help us locate the problem, include both a close-up and a wide shot</li>
+ </ul>
+ <ul class="dont">
+ <li>Avoid personal information</li>
+ </ul>
+</div>
diff --git a/templates/web/hounslow/report/new/top_message.html b/templates/web/hounslow/report/new/top_message.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/hounslow/report/new/top_message.html
diff --git a/templates/web/hounslow/report/update/form_state_checkbox.html b/templates/web/hounslow/report/update/form_state_checkbox.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/hounslow/report/update/form_state_checkbox.html
diff --git a/templates/web/hounslow/report/updates-sidebar-notes.html b/templates/web/hounslow/report/updates-sidebar-notes.html
new file mode 100644
index 000000000..606595fc6
--- /dev/null
+++ b/templates/web/hounslow/report/updates-sidebar-notes.html
@@ -0,0 +1,10 @@
+<p class="box-warning">
+[% IF problem.is_open %]
+ <strong>Please note: If the problem has worsened, please open a new report instead of updating this one.</strong>
+[% ELSE %]
+ If this problem is still ongoing, please open a new report instead of updating this one.
+[% END %]
+</p>
+<p>
+ [% loc( 'Your information will only be used in accordance with our <a href="/privacy">privacy policy</a>.' ) %]
+</p>
diff --git a/templates/web/hounslow/tokens/_confirm_problem_council_id.html b/templates/web/hounslow/tokens/_confirm_problem_council_id.html
new file mode 100644
index 000000000..703fbd1b6
--- /dev/null
+++ b/templates/web/hounslow/tokens/_confirm_problem_council_id.html
@@ -0,0 +1,2 @@
+<h2>Your issue has been sent.</h2>
+<p>You will receive an email with a reference number for this report soon, please quote it in any enquiries.</p>
diff --git a/templates/web/hounslow/tracking_code.html b/templates/web/hounslow/tracking_code.html
new file mode 100644
index 000000000..067fb1a58
--- /dev/null
+++ b/templates/web/hounslow/tracking_code.html
@@ -0,0 +1,15 @@
+[% 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-136557400-1"></script>
+<script nonce="[% csp_nonce %]">
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+
+ gtag('config', 'UA-136557400-1');
+</script>
+
+[% ELSE %]
+<!-- Tracking code not inserted as "[% c.config.BASE_URL %]" not "https://www.fixmystreet.com" -->
+[% END %]
diff --git a/templates/web/isleofwight/about/mapterms.html b/templates/web/isleofwight/about/mapterms.html
new file mode 100644
index 000000000..04c0aeb09
--- /dev/null
+++ b/templates/web/isleofwight/about/mapterms.html
@@ -0,0 +1,24 @@
+[% INCLUDE header.html
+ title = 'Map Terms and Conditions'
+%]
+
+<h1>Map Terms and Conditions</h1>
+
+<ul>
+ <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;
+ </li>
+ <li>
+ II. You are not permitted to copy, sub-license, distribute, sell or
+ otherwise make available the Licensed Data to third parties in any form;
+ and
+ </li>
+ <li>
+ III. Third party rights to enforce the terms of this licence shall be
+ reserved to OS.
+ </li>
+</ul>
+[% INCLUDE footer.html %]
+
diff --git a/templates/web/isleofwight/footer_extra_js.html b/templates/web/isleofwight/footer_extra_js.html
new file mode 100644
index 000000000..a7cea7811
--- /dev/null
+++ b/templates/web/isleofwight/footer_extra_js.html
@@ -0,0 +1,6 @@
+[% PROCESS 'footer_extra_js_base.html' cobrand_js=1 %]
+[% IF bodyclass.match('mappage');
+ scripts.push(
+ version('/cobrands/isleofwight/js.js'),
+ );
+END %]
diff --git a/templates/web/isleofwight/header_extra.html b/templates/web/isleofwight/header_extra.html
new file mode 100644
index 000000000..8a977495f
--- /dev/null
+++ b/templates/web/isleofwight/header_extra.html
@@ -0,0 +1 @@
+[% INCLUDE 'tracking_code.html' %]
diff --git a/templates/web/isleofwight/header_logo.html b/templates/web/isleofwight/header_logo.html
new file mode 100644
index 000000000..e563007a7
--- /dev/null
+++ b/templates/web/isleofwight/header_logo.html
@@ -0,0 +1,2 @@
+<a href="http://www.islandroads.com" id="site-logo">Island Roads</a>
+<a href="/" id="report-cta" title="[%- loc('Report a problem') -%]">[%- loc('Report') -%]</a>
diff --git a/templates/web/isleofwight/main_nav_items.html b/templates/web/isleofwight/main_nav_items.html
new file mode 100644
index 000000000..396be469d
--- /dev/null
+++ b/templates/web/isleofwight/main_nav_items.html
@@ -0,0 +1,36 @@
+[% INCLUDE 'navigation/_report.html' %]
+
+[%~ IF c.user_exists ~%]
+ [%~ INCLUDE navitem uri='/my' label=loc('Your account') ~%]
+[%~ ELSE ~%]
+ [%~ INCLUDE navitem uri='/auth' label=loc('Sign in') ~%]
+[%~ END ~%]
+
+[%~ IF c.user_exists AND c.user.has_body_permission_to('planned_reports') ~%]
+ [%~ INCLUDE navitem always_url=1 uri='/my/planned' label=loc('Shortlist') ~%]
+[%~ END ~%]
+
+[%~ IF c.user_exists AND c.user.has_body_permission_to('triage') ~%]
+ [%~ INCLUDE navitem always_url=1 uri='/admin/triage' label=loc('Awaiting triage') ~%]
+[%~ END ~%]
+
+[%~ INCLUDE 'navigation/_all_reports.html' ~%]
+
+[%~
+ IF pc;
+ pc_uri = pc | uri;
+ pc_suffix = "/list?pc=" _ pc_uri;
+ END;
+
+ INCLUDE navitem uri='/alert' label=loc('Local alerts') suffix=pc_suffix;
+~%]
+
+[%~ INCLUDE navitem uri='/faq' label=loc('Help') ~%]
+
+[%~ UNLESS hide_privacy_link ~%]
+ [%~ INCLUDE navitem uri=c.cobrand.privacy_policy_url label=loc('Privacy') liattrs='class="nav-menu__item--privacy"' ~%]
+[%~ END ~%]
+
+[%~ IF c.user_exists AND c.cobrand.admin_allow_user(c.user) ~%]
+ [%~ INCLUDE navitem uri='/admin' label=loc('Admin') ~%]
+[%~ END ~%]
diff --git a/templates/web/isleofwight/report/_council_sent_info.html b/templates/web/isleofwight/report/_council_sent_info.html
new file mode 100644
index 000000000..d9edac902
--- /dev/null
+++ b/templates/web/isleofwight/report/_council_sent_info.html
@@ -0,0 +1,17 @@
+[% SET duration_clause = problem.duration_string(c) %]
+[% IF duration_clause || problem.can_display_external_id %]
+ <p class="council_sent_info">
+ [%- IF problem.can_display_external_id %]
+ [%- IF duration_clause %]
+ [%- external_ref_clause = tprintf('Enquiry ref:&nbsp;%s', problem.external_id) %]
+ [%- ELSE %]
+ [%- external_ref_clause = tprintf(loc('%s ref:&nbsp;%s'), problem.external_body, problem.external_id) %]
+ [%- END %]
+ [%- END -%]
+ [% duration_clause %]
+ [%- IF external_ref_clause %]
+ [%- IF duration_clause %]. [% END %]
+ <strong>[% external_ref_clause %].</strong>
+ [%- END %]
+ </p>
+[% END %]
diff --git a/templates/web/isleofwight/report/_item_heading.html b/templates/web/isleofwight/report/_item_heading.html
new file mode 100644
index 000000000..90010a548
--- /dev/null
+++ b/templates/web/isleofwight/report/_item_heading.html
@@ -0,0 +1,7 @@
+[%
+ SET title = problem.title;
+ IF c.req.uri.path == '/';
+ title = problem.category_display;
+ END;
+%]
+<h3 class="item-list__heading">[% title %]</h3>
diff --git a/templates/web/isleofwight/report/inspect.html b/templates/web/isleofwight/report/inspect.html
new file mode 100644
index 000000000..6cecff926
--- /dev/null
+++ b/templates/web/isleofwight/report/inspect.html
@@ -0,0 +1,10 @@
+[%
+ SET bodyclass = 'mappage with-actions';
+ SET two_column_sidebar = 1;
+ IF problem.state == 'for triage';
+ PROCESS 'admin/triage/_inspect.html';
+ ELSE;
+ PROCESS 'report/_inspect.html';
+ END;
+ INCLUDE 'report/display.html'
+%]
diff --git a/templates/web/isleofwight/report/new/_form_labels.html b/templates/web/isleofwight/report/new/_form_labels.html
new file mode 100644
index 000000000..a666ab0a3
--- /dev/null
+++ b/templates/web/isleofwight/report/new/_form_labels.html
@@ -0,0 +1,3 @@
+[%
+SET form_title = 'Summarise the problem and location';
+%]
diff --git a/templates/web/isleofwight/report/new/councils_extra_text.html b/templates/web/isleofwight/report/new/councils_extra_text.html
new file mode 100644
index 000000000..28001a171
--- /dev/null
+++ b/templates/web/isleofwight/report/new/councils_extra_text.html
@@ -0,0 +1 @@
+Any reports which are deemed to be inappropriate or offensive will be removed from the site.
diff --git a/templates/web/isleofwight/tokens/_confirm_problem_council_id.html b/templates/web/isleofwight/tokens/_confirm_problem_council_id.html
new file mode 100644
index 000000000..703fbd1b6
--- /dev/null
+++ b/templates/web/isleofwight/tokens/_confirm_problem_council_id.html
@@ -0,0 +1,2 @@
+<h2>Your issue has been sent.</h2>
+<p>You will receive an email with a reference number for this report soon, please quote it in any enquiries.</p>
diff --git a/templates/web/isleofwight/tracking_code.html b/templates/web/isleofwight/tracking_code.html
new file mode 100644
index 000000000..bfbffd384
--- /dev/null
+++ b/templates/web/isleofwight/tracking_code.html
@@ -0,0 +1,16 @@
+[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
+
+<script nonce="[% csp_nonce %]">
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
+
+ ga('create', 'UA-136557400-2', 'auto');
+ ga('send', 'pageview');
+
+</script>
+
+[% ELSE %]
+<!-- Tracking code not inserted as "[% c.config.BASE_URL %]" not "https://www.fixmystreet.com" -->
+[% END %]
diff --git a/templates/web/lincolnshire/footer_extra_js.html b/templates/web/lincolnshire/footer_extra_js.html
index 8113befc9..9132ead25 100644
--- a/templates/web/lincolnshire/footer_extra_js.html
+++ b/templates/web/lincolnshire/footer_extra_js.html
@@ -1,3 +1 @@
-[% scripts.push(
- version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js'),
-) %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
diff --git a/templates/web/lincolnshire/tracking_code.html b/templates/web/lincolnshire/tracking_code.html
index ec19eba44..7933f08a1 100644
--- a/templates/web/lincolnshire/tracking_code.html
+++ b/templates/web/lincolnshire/tracking_code.html
@@ -1,7 +1,8 @@
[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
<!-- Google Tag Manager -->
-<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
+<script nonce="[% csp_nonce %]">
+(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
diff --git a/templates/web/northamptonshire/footer_extra_js.html b/templates/web/northamptonshire/footer_extra_js.html
index c17d2777e..fbd33dd11 100644
--- a/templates/web/northamptonshire/footer_extra_js.html
+++ b/templates/web/northamptonshire/footer_extra_js.html
@@ -1,11 +1,7 @@
[%
IF bodyclass.match('mappage');
scripts.push(
- version('/cobrands/fixmystreet/assets.js'),
version('/cobrands/fixmystreet-uk-councils/alloy.js'),
- version('/vendor/OpenLayers.Projection.OrdnanceSurvey.js'),
- version('/cobrands/northamptonshire/assets.js'),
- version('/cobrands/highways/assets.js'),
- version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js'),
);
END %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
diff --git a/templates/web/northamptonshire/index-steps.html b/templates/web/northamptonshire/index-steps.html
new file mode 100644
index 000000000..6ee7b96b3
--- /dev/null
+++ b/templates/web/northamptonshire/index-steps.html
@@ -0,0 +1,18 @@
+<h2>[% loc('How to report a problem') %]</h2>
+
+<ol class="big-numbers">
+ <li>[% question %]</li>
+ <li>[% loc('Locate the problem on a map of the area') %]</li>
+ <li>
+ Enter details of the problem.<br>
+ Please enter a single problem per enquiry.<br>
+ The first item described will be taken as the enquiry
+ </li>
+ <li>Confirm the report and [% c.cobrand.council_name %] will investigate</li>
+</ol>
+
+<section class="full-width">
+[% INCLUDE "front/stats.html" %]
+[% TRY %][% INCLUDE "front/tips.html" %][% CATCH file %][% END %]
+</section>
+
diff --git a/templates/web/northamptonshire/report/_council_sent_info.html b/templates/web/northamptonshire/report/_council_sent_info.html
index a82de72f7..6329c51ad 100644
--- a/templates/web/northamptonshire/report/_council_sent_info.html
+++ b/templates/web/northamptonshire/report/_council_sent_info.html
@@ -1,7 +1,7 @@
[% SET duration_clause = problem.duration_string(c) %]
[% IF duration_clause || problem.whensent %]
<p class="council_sent_info">
- [%- IF problem.whensent %]
+ [%- IF problem.whensent AND NOT c.cobrand.is_defect(problem) %]
[%- external_ref_clause = tprintf(loc('ref:&nbsp;%s'), problem.id) %]
[%- END -%]
[% duration_clause %]
diff --git a/templates/web/northamptonshire/report/new/roads_message.html b/templates/web/northamptonshire/report/new/roads_message.html
index a6185a668..0394a9c5c 100644
--- a/templates/web/northamptonshire/report/new/roads_message.html
+++ b/templates/web/northamptonshire/report/new/roads_message.html
@@ -1,19 +1,10 @@
<div id="js-roads-responsibility" class="box-warning hidden">
<div id="js-not-an-asset" class="hidden js-responsibility-message">
- <p>Please select <span id="js-roads-asset">an item</span> from the map on which to make a report.</p>
- </div>
- <div id="js-not-a-speedhump" class="hidden js-responsibility-message">
- <p>Please select <b>a speed hump</b> from the map on which to make a report.</p>
- </div>
- <div id="js-not-a-ped-barrier" class="hidden js-responsibility-message">
- <p>Please select <b>a pedestrian barrier</b> from the map on which to make a report.</p>
- </div>
- <div id="js-not-a-prow" class="hidden js-responsibility-message">
- <p>The location you have selected doesn't appear to be on a right of way.</p>
- <p>Please select a right of way on which to make a report.</p>
+ <p>Please select <span class="js-roads-asset" data-original="an item">an item</span> from the map on which to make a report.</p>
</div>
<div id="js-not-a-road" class="hidden js-responsibility-message">
- <p>The location you have selected doesn't appear to be on a road.</p>
- <p>Please select a road on which to make a report.</p>
+ <p>This area is not under the responsibility of Northamptonshire
+ County Council and therefore we are unable to accept reports in
+ this area / street.</p>
</div>
</div>
diff --git a/templates/web/northamptonshire/tracking_code.html b/templates/web/northamptonshire/tracking_code.html
index 421e20cab..4e1dc5884 100644
--- a/templates/web/northamptonshire/tracking_code.html
+++ b/templates/web/northamptonshire/tracking_code.html
@@ -1,6 +1,6 @@
[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-70376243-1"></script>
-<script>
+<script nonce="[% csp_nonce %]">
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
diff --git a/templates/web/oxfordshire/_email_sent_extra.html b/templates/web/oxfordshire/_email_sent_extra.html
deleted file mode 100644
index f01c2d5fb..000000000
--- a/templates/web/oxfordshire/_email_sent_extra.html
+++ /dev/null
@@ -1,2 +0,0 @@
-[% DEFAULT problem = report %]
-[% IF problem %][% INCLUDE '_response_time.html' %][% END %]
diff --git a/templates/web/oxfordshire/_response_time.html b/templates/web/oxfordshire/_response_time.html
deleted file mode 100644
index c3cb5fdfa..000000000
--- a/templates/web/oxfordshire/_response_time.html
+++ /dev/null
@@ -1,14 +0,0 @@
-[% IF c.cobrand.problem_response_days(problem) == 'emergency' %]
- <p>
- Thank you for contacting Oxfordshire County Council [% problem.category %], unfortunately we are currently only available to respond to emergency situations which may have an impact on the health and safety of members of the public, these will be dealt with within a 24 hour period.<br />
- Reported faults will continue to be registered on our management system and these will be tackled in coming months.
- </p>
-[% ELSIF c.cobrand.problem_response_days(problem) > 0 %]
- <p>
- Problems in the
- [% problem.category %]
- category are generally responded to within
- [% c.cobrand.problem_response_days(problem) %]
- working days.
- </p>
-[% END %]
diff --git a/templates/web/oxfordshire/admin/user-form-extra-fields.html b/templates/web/oxfordshire/admin/user-form-extra-fields.html
index 4109a3075..c7697fa35 100644
--- a/templates/web/oxfordshire/admin/user-form-extra-fields.html
+++ b/templates/web/oxfordshire/admin/user-form-extra-fields.html
@@ -1,15 +1,6 @@
<li>
<div class="admin-hint">
<p>
- [% loc("Reports from users with high enough reputation will be sent immediately without requiring inspection. Each category's threshold can be managed on its edit page. Users earn reputation when a report they have made is marked as inspected by inspectors.") %]
- </p>
- </div>
- [% loc('Reputation:') %] [% user.get_extra_metadata('reputation') %]
-</li>
-
-<li>
- <div class="admin-hint">
- <p>
[% loc(
"The user's initials are used when sending inspections to Exor.
Only inspectors need to have this field filled in.")
diff --git a/templates/web/oxfordshire/around/_postcode_form_examples.html b/templates/web/oxfordshire/around/_postcode_form_examples.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/oxfordshire/around/_postcode_form_examples.html
diff --git a/templates/web/oxfordshire/around/_postcode_submit_button.html b/templates/web/oxfordshire/around/_postcode_submit_button.html
new file mode 100644
index 000000000..e06579b0f
--- /dev/null
+++ b/templates/web/oxfordshire/around/_postcode_submit_button.html
@@ -0,0 +1 @@
+<input type="submit" [% attr | safe %] value="Find">
diff --git a/templates/web/oxfordshire/around/postcode_form.html b/templates/web/oxfordshire/around/postcode_form.html
index f598f1f98..9f7e9e763 100644
--- a/templates/web/oxfordshire/around/postcode_form.html
+++ b/templates/web/oxfordshire/around/postcode_form.html
@@ -10,20 +10,30 @@
<form action="[% c.uri_for('/around') %]" method="get" name="postcodeForm" id="postcodeForm" class="js-geolocate">
<label for="pc">[% question %]:</label>
+ [% INCLUDE 'around/_postcode_form_examples.html' %]
<div>
- <input type="text" name="pc" value="[% pc | html %]" id="pc" size="10" maxlength="200" placeholder="[% tprintf(loc('e.g. ‘%s’ or ‘%s’'), c.cobrand.example_places) %]" required>
- <input type="submit" value="[% loc('Find') %]" id="sub">
+ <input type="text" name="pc" value="[% pc | html %]" id="pc" size="10" maxlength="200" placeholder="[% tprintf(loc('e.g. ‘%s’ or ‘%s’'), c.cobrand.example_places) %]" required aria-describedby="pc-hint">
+ [% INCLUDE 'around/_postcode_submit_button.html' attr='id="sub"' %]
</div>
[% IF partial_token %]
<input type="hidden" name="partial" value="[% partial_token.token %]">
[% END %]
- [% IF c.user_exists AND c.user.categories.size %]
- <input type="hidden" name="filter_category" value="[% c.user.categories.join(",") | html %]">
+ [% IF c.get_param('filter_category') OR c.get_param('filter_group') %]
+ <input type="hidden" name="filter_category" value="[% c.get_param('filter_category') | html %]">
+ <input type="hidden" name="filter_group" value="[% c.get_param('filter_group') | html %]">
+ [% ELSIF c.user_exists AND c.user.categories.size %]
+ <input type="hidden" name="filter_category" value="[% c.user.categories_string | html %]">
[% END %]
</form>
- <a href="[% c.uri_for('/around') %]" id="geolocate_link">[% loc('Or locate me automatically') %]</a>
+ [%~ SET link_params = {
+ geolocate = 1
+ };
+ IF c.get_param('filter_category'); link_params.filter_category = c.get_param('filter_category'); END;
+ IF c.get_param('filter_group'); link_params.filter_group = c.get_param('filter_group'); END;
+ %]
+ <a href="[% c.uri_for('/around', link_params) | html %]" id="geolocate_link">[% loc('Or use my location') %]</a>
[% UNLESS possible_location_matches %]
[% INCLUDE 'around/_postcode_form_post.html' %]
diff --git a/templates/web/oxfordshire/defect_type/format.html b/templates/web/oxfordshire/defect_type/format.html
deleted file mode 100644
index 9cbf2d873..000000000
--- a/templates/web/oxfordshire/defect_type/format.html
+++ /dev/null
@@ -1,4 +0,0 @@
-[% MACRO defect_type_format BLOCK ~%]
-[%~ defect_type.get_extra_metadata('defect_code') | html %] - [% defect_type.get_extra_metadata('activity_code') | html %]
-([% defect_type.name | html %])
-[%~ END %] \ No newline at end of file
diff --git a/templates/web/oxfordshire/footer.html b/templates/web/oxfordshire/footer.html
index c9c02bb5d..c96c21d00 100644
--- a/templates/web/oxfordshire/footer.html
+++ b/templates/web/oxfordshire/footer.html
@@ -4,27 +4,11 @@
<div class="nav-wrapper">
<div class="container">
- <div id="main-nav" role="navigation">
- [% INCLUDE "main_nav.html" body_name=c.cobrand.council_area omit_wrapper=1 hide_privacy_link=1 %]
- </div>
+ [% INCLUDE "main_nav.html" hide_privacy_link=1 %]
</div>
</div>
</div> <!-- .wrapper -->
- <footer class="occlss-page-footer" id="occlss-footer">
- <div class="occlss-wrapper occlss-page-footer__wraper">
- <div class="occlss-layout occlss-layout--gutter-s">
- <div class="occlss-layout__col s-cms-content-footer">
- <h4>Oxfordshire County Council</h4>
- <p>County Hall, New Road, Oxford, OX1 1ND</p>
- <p><a href="/privacy">Privacy and cookies</a></p>
- </div>
- </div>
- </div>
- </footer>
-
-</div> <!-- oxford-wrapper -->
-
[% INCLUDE 'common_footer_tags.html' %]
</body>
diff --git a/templates/web/oxfordshire/footer_extra.html b/templates/web/oxfordshire/footer_extra.html
new file mode 100644
index 000000000..e8830fc95
--- /dev/null
+++ b/templates/web/oxfordshire/footer_extra.html
@@ -0,0 +1,13 @@
+ <footer class="occlss-page-footer" id="occlss-footer">
+ <div class="occlss-wrapper occlss-page-footer__wraper">
+ <div class="occlss-layout occlss-layout--gutter-s">
+ <div class="occlss-layout__col s-cms-content-footer">
+ <h4>Oxfordshire County Council</h4>
+ <p>County Hall, New Road, Oxford, OX1 1ND</p>
+ <p><a href="/privacy">Privacy and cookies</a></p>
+ </div>
+ </div>
+ </div>
+ </footer>
+
+</div> <!-- oxford-wrapper -->
diff --git a/templates/web/oxfordshire/footer_extra_js.html b/templates/web/oxfordshire/footer_extra_js.html
index 24ec8486a..88fc006e7 100644
--- a/templates/web/oxfordshire/footer_extra_js.html
+++ b/templates/web/oxfordshire/footer_extra_js.html
@@ -1,12 +1 @@
-[%
-IF bodyclass.match('mappage');
- scripts.push(
- version('/cobrands/fixmystreet/assets.js'),
- version('/vendor/OpenLayers.Projection.OrdnanceSurvey.js'),
- version('/cobrands/oxfordshire/js.js'),
- version('/cobrands/oxfordshire/assets.js'),
- version('/cobrands/highways/assets.js'),
- version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js'),
- );
-END;
-%]
+[% PROCESS 'footer_extra_js_base.html' highways=1 validation=1 %]
diff --git a/templates/web/oxfordshire/header.html b/templates/web/oxfordshire/header.html
index eaf601b1b..72cba2aec 100644
--- a/templates/web/oxfordshire/header.html
+++ b/templates/web/oxfordshire/header.html
@@ -1,10 +1,7 @@
<!doctype html>
<!--[if IE 8]> <html class="no-js ie8" lang="[% lang_code %]"><![endif]-->
<!--[if IE 9]> <html class="no-js ie9" lang="[% lang_code %]"><![endif]-->
-<!--[if gt IE 9]><!--><html class="no-js" lang="[% lang_code %]"
-[% IF appcache ~%]
- manifest="/offline/appcache.manifest"
-[%~ END %]><!--<![endif]-->
+<!--[if gt IE 9]><!--><html class="no-js" lang="[% lang_code %]"><!--<![endif]-->
<head>
<meta name="viewport" content="initial-scale=1.0">
@@ -20,6 +17,8 @@
</head>
<body class="[% bodyclass | html IF bodyclass %]">
+ [% INCLUDE 'debug_header.html' %]
+
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-NT76GJ5"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
@@ -38,9 +37,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<div class="nav-spacer"></div>
- [% pre_container_extra %]
+ [% pre_container_extra | safe %]
<div class="container">
<div class="content[% " $mainclass" | html IF mainclass %]" role="main">
-
- <!-- [% INCLUDE 'debug_header.html' %] -->
diff --git a/templates/web/oxfordshire/main_nav.html b/templates/web/oxfordshire/main_nav.html
index f7bc619e2..1d052de34 100644
--- a/templates/web/oxfordshire/main_nav.html
+++ b/templates/web/oxfordshire/main_nav.html
@@ -4,8 +4,8 @@
SET ul_class="nav-menu nav-menu--main" UNLESS ul_class.defined;
%]
[% BLOCK navitem ~%]
- <li [% liattrs %]>
- <a href="[% uri %][% suffix IF suffix %]" [% attrs %]>[% label %]</a>
+ <li [% liattrs | safe %]>
+ <a href="[% uri %][% suffix IF suffix %]" [% attrs | safe %]>[% label %]</a>
</li>
[%~ END %]
diff --git a/templates/web/oxfordshire/main_nav_items.html b/templates/web/oxfordshire/main_nav_items.html
index 6c45bd785..8ebe48450 100644
--- a/templates/web/oxfordshire/main_nav_items.html
+++ b/templates/web/oxfordshire/main_nav_items.html
@@ -10,23 +10,7 @@
[%~ INCLUDE navitem always_url=1 uri='/my/planned' label=loc('Shortlist') ~%]
[%~ END ~%]
-
-[%~ UNLESS hide_all_reports_link ~%]
- [%~
- IF c.user_exists AND c.user.categories.size;
- categories = c.user.categories.join(",") | uri;
- cat_suffix = "?filter_category=" _ categories;
- END;
-
- reports_uri = '/reports';
- IF body_name;
- body_name = body_name | uri;
- reports_uri = "${reports_uri}/${body_name}";
- END;
-
- INCLUDE navitem uri=reports_uri label=loc('All reports') suffix=cat_suffix;
- ~%]
-[%~ END ~%]
+[%~ INCLUDE 'navigation/_all_reports.html' ~%]
[%~
IF pc;
@@ -40,7 +24,7 @@
[%~ INCLUDE navitem uri='/faq' label=loc('Help') ~%]
[%~ UNLESS hide_privacy_link ~%]
- [%~ INCLUDE navitem uri='/privacy' label=loc('Privacy') liattrs='class="nav-menu__item--privacy"' ~%]
+ [%~ INCLUDE navitem uri=c.cobrand.privacy_policy_url label=loc('Privacy') liattrs='class="nav-menu__item--privacy"' ~%]
[%~ END ~%]
[%~ IF c.user_exists AND c.cobrand.admin_allow_user(c.user) ~%]
diff --git a/templates/web/oxfordshire/report/_council_sent_info.html b/templates/web/oxfordshire/report/_council_sent_info.html
index 4e534c517..8b742cb2e 100644
--- a/templates/web/oxfordshire/report/_council_sent_info.html
+++ b/templates/web/oxfordshire/report/_council_sent_info.html
@@ -9,7 +9,5 @@
</h3>
[% END %]
- [% INCLUDE '_response_time.html' %]
-
</div>
[% END %]
diff --git a/templates/web/oxfordshire/report/_inspect_extra_info.html b/templates/web/oxfordshire/report/_inspect_extra_info.html
deleted file mode 100644
index 6151d79ae..000000000
--- a/templates/web/oxfordshire/report/_inspect_extra_info.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<p><small>
-RDI sent:
-[% IF problem.get_extra_metadata('rdi_processed') %]
- [% problem.get_extra_metadata('rdi_processed') %]
-[% ELSE %]
- <strong>not yet sent</strong>
-[% END %]
-</small></p>
diff --git a/templates/web/oxfordshire/report/new/councils_text_all.html b/templates/web/oxfordshire/report/new/councils_text_all.html
index a8c81f39e..38459b059 100644
--- a/templates/web/oxfordshire/report/new/councils_text_all.html
+++ b/templates/web/oxfordshire/report/new/councils_text_all.html
@@ -1,5 +1,11 @@
+[% category = mark_safe(category) %]
<p>
All the information you provide here will be sent to the
- <strong>relevant department</strong>. The summary and description
- will also be made public, plus your name if you give us permission.
+ [% # NB this empty class attribute is so fixmystreet.update_public_councils_text
+ # doesn't clobber the text by matching on the <strong>. %]
+ <strong class="">relevant department</strong>.
+ [% UNLESS non_public_categories.$category %]
+ The summary and description
+ will also be made public, plus your name if you give us permission.
+ [% END %]
</p>
diff --git a/templates/web/oxfordshire/report/new/form_heading.html b/templates/web/oxfordshire/report/new/form_after_heading.html
index a561c7efb..a561c7efb 100644
--- a/templates/web/oxfordshire/report/new/form_heading.html
+++ b/templates/web/oxfordshire/report/new/form_after_heading.html
diff --git a/templates/web/oxfordshire/tokens/_extras_confirm.html b/templates/web/oxfordshire/tokens/_extras_confirm.html
deleted file mode 100644
index 5fdcd3bfd..000000000
--- a/templates/web/oxfordshire/tokens/_extras_confirm.html
+++ /dev/null
@@ -1 +0,0 @@
-[% INCLUDE '_response_time.html' problem=report %]
diff --git a/templates/web/oxfordshire/tracking_code.html b/templates/web/oxfordshire/tracking_code.html
index 14afb5de0..43b0e37c5 100644
--- a/templates/web/oxfordshire/tracking_code.html
+++ b/templates/web/oxfordshire/tracking_code.html
@@ -1,7 +1,8 @@
[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
<!-- Google Tag Manager -->
-<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
+<script nonce="[% csp_nonce %]">
+(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
diff --git a/templates/web/peterborough/about/faq-en-gb.html b/templates/web/peterborough/about/faq-en-gb.html
new file mode 100755
index 000000000..3835b71b7
--- /dev/null
+++ b/templates/web/peterborough/about/faq-en-gb.html
@@ -0,0 +1,97 @@
+[% INCLUDE 'header.html', title = loc('Frequently Asked Questions'), bodyclass = 'twothirdswidthpage' %]
+
+[% INCLUDE 'about/_sidebar.html' %]
+
+<h1><a name="faq"></a>[% loc('Frequently Asked Questions') %]</h1>
+
+<dl>
+
+ <dt>What is this site?</dt>
+ <dd>[% site_name %] is a site to help people report to their
+ local authority, view, or discuss local issues they&rsquo;ve found, by
+ simply locating them on a map.</dd>
+
+ <dt>How do I get in touch with [% site_name %]?</dt>
+ <dd>Here&rsquo;s the FixMyStreet <a href="/contact">contact page</a>.</dd>
+
+ <dt>How do I contact Peterborough City Council?</dt>
+ <dd>Here’s the <a href="https://www.peterborough.gov.uk/contact-us/">Peterborough City Council contact page</a>.</dd>
+
+
+ <dt>What sort of problems should I report with [% site_name %]?</dt>
+ <dd>This depends upon the precise purpose of [% site_name %];
+ in the UK, FixMyStreet is primarily for reporting things which are
+ <strong>broken or dirty or damaged or dumped, and need fixing, cleaning
+ or clearing</strong>, such as:
+ <ul>
+ <li>Streetcleaning, such as broken glass in a cycle lane
+ <li>Unlit lampposts
+ <li>Potholes
+ </ul>
+ </dd>
+
+ <dt>What isn&rsquo;t [% site_name %] for?</dt>
+ <dd>[% site_name %] is not a way of getting in touch with your
+ authority for all issues &ndash; please use this site only for problems
+ such as the above. We often route problem reports via cleansing services or
+ highways and so using this site for other matters may result in a delay in
+ your report getting to the right department. <strong>You will need to
+ contact your authority directly for problems such as</strong>:
+
+ <ul><li>Anti-social behaviour
+ <li>Any urgent or emergency problems
+ <li>Noise pollution or barking dogs
+ <li>Fires and smoke/smell pollution
+ <li>Missing wheelie bins or recycling boxes or missed rubbish collections
+ <li>Proposals for speed bumps/ CCTV/ pedestrian crossings/ new road layouts/ etc.
+ <li>Complaining about your neighbours
+ <li>Complaining about the authority
+ <li>Joy riding, drug taking, animal cruelty, or other criminal activity
+ </ul>
+ <p>Authorities often have direct hotlines for these sorts of issues.</p>
+ </dd>
+
+ <p>Please check the <a href="https://www.peterborough.gov.uk/forms/report/">Peterborough City Council reporting page</a> for more details about these services.</p>
+
+ <dt>How do I use the site?</dt>
+ <dd>After entering a location, you are presented with a map of that area.
+ You can view problems already reported in that area, or report ones of your
+ own by clicking on the map at the location of the problem.</dd>
+
+ <dt>How are the problems solved?</dt>
+ <dd>They are reported to the relevant authority by email. The authority can
+ then resolve the problem the way they normally would. Alternatively, you
+ can discuss the problem on the website with others, and then together lobby
+ the authority to fix it, or fix it directly yourselves.</dd>
+
+ <dt>Is it free?</dt>
+ <dd>The site is free to use, yes. The FixMyStreet Platform is maintained by
+ a registered charity, so if you want to make a contribution,
+ <a href="https://www.mysociety.org/donate/">please do</a>.</dd>
+
+ <dt>Can I use [% site_name %] on my mobile?</dt>
+ <dd>
+ <p>The [% site_name %] website will already work on your mobile
+ phone, adapting to the size of your screen automatically.</p>
+ </dd>
+</dl>
+
+<h2><a name="practical"></a>Practical Questions</h2>
+
+<dl>
+ <dt>Do you remove silly or illegal content?</dt>
+ <dd>[% site_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.</dd>
+
+ <dt>Why can&rsquo;t I zoom out more on the reporting map?</dt>
+ <dd>We want to keep [% site_name %] locally focused, so restrict
+ the ability to move radically between areas. The map on Your Reports will
+ let you see all the reports you&rsquo;ve made, wherever they are. If
+ you&rsquo;re from the authority then the emailed version of the problem
+ report might also contain the closest road or postcode to the pin on the
+ map.</dd>
+</dl>
+
+[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/peterborough/alert/_index_text.html b/templates/web/peterborough/alert/_index_text.html
new file mode 100644
index 000000000..1c7f025c5
--- /dev/null
+++ b/templates/web/peterborough/alert/_index_text.html
@@ -0,0 +1,19 @@
+<p>
+[% site_name %] provide RSS feeds and email alerts for local
+problems, including alerts for all problems within a particular ward, or all
+problems within a certain distance of a particular location.
+</p>
+
+[% IF location_error %]
+ <div class="error">[% location_error | safe %]</div>
+[% ELSE %]
+ [% INCLUDE 'errors.html' %]
+[% END %]
+
+<p>
+[% IF c.cobrand.is_council %]
+[% tprintf(loc('To find out what local alerts we have for you, please enter your %s postcode or street name and area:'), c.cobrand.council_area) %]
+[% ELSE %]
+[% loc('To find out what local alerts we have for you, please enter your postcode or street name and area' ) %]
+[% END %]
+</p>
diff --git a/templates/web/peterborough/around/intro.html b/templates/web/peterborough/around/intro.html
new file mode 100644
index 000000000..8d6d5e54a
--- /dev/null
+++ b/templates/web/peterborough/around/intro.html
@@ -0,0 +1,2 @@
+<h1>Report local problems</h1>
+<h2>Report a problem on a street in your area and see other reported issues.</h2>
diff --git a/templates/web/peterborough/before_wrapper.html b/templates/web/peterborough/before_wrapper.html
new file mode 100644
index 000000000..506eafae4
--- /dev/null
+++ b/templates/web/peterborough/before_wrapper.html
@@ -0,0 +1,6 @@
+[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
+<!-- Google Tag Manager (noscript) -->
+<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=UA-144500283-1"
+height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
+<!-- End Google Tag Manager (noscript) -->
+[% END %]
diff --git a/templates/web/peterborough/footer_extra.html b/templates/web/peterborough/footer_extra.html
new file mode 100644
index 000000000..8beed2837
--- /dev/null
+++ b/templates/web/peterborough/footer_extra.html
@@ -0,0 +1,31 @@
+[% IF bodyclass.match('frontpage') %]
+<div class="container">
+Reports which contain inappropriate, abusive or offensive language are not
+acceptable. You should not include any personal information about yourself or
+anyone else in your report. Peterborough City Council and its partners will
+moderate reports if made aware. Reports may be removed, anonymised or marked as
+private. We accept no liability or responsibility for the failure of
+individuals to abide by this statement or our privacy policy, these individuals
+may be contacted or blocked from using the site.
+</div>
+[% END %]
+
+<footer class="pboro-footer">
+ <ul>
+ <li><a href="https://www.peterborough.gov.uk/accessibility/">
+ Accessibility
+ </a></li>
+ <li><a href="/about/privacy">
+ Privacy policy
+ </a></li>
+ <li><a href="/about/privacy#cookies">
+ Cookies
+ </a></li>
+ <li><a href="https://www.peterborough.gov.uk/disclaimer/">
+ Disclaimer
+ </a></li>
+ <li><a href="https://www.peterborough.gov.uk/contact-us/">
+ Contact us
+ </a></li>
+ </ul>
+</div>
diff --git a/templates/web/peterborough/footer_extra_js.html b/templates/web/peterborough/footer_extra_js.html
new file mode 100644
index 000000000..9132ead25
--- /dev/null
+++ b/templates/web/peterborough/footer_extra_js.html
@@ -0,0 +1 @@
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 validation=1 %]
diff --git a/templates/web/peterborough/front/pre-steps.html b/templates/web/peterborough/front/pre-steps.html
new file mode 100644
index 000000000..5973c83d2
--- /dev/null
+++ b/templates/web/peterborough/front/pre-steps.html
@@ -0,0 +1,8 @@
+<p class="covid-banner">
+ <strong>Please note:</strong>
+ during the Coronavirus (COVID-19) pandemic it will not be possible for us to
+ action or respond to all reports within regular time-frames. While we are
+ working hard to ensure key services are maintained and focusing on high
+ priority issues, you can
+ <a href="https://www.peterborough.gov.uk/healthcare/public-health/coronavirus/coronavirus-covid-19-overview">find advice and information on our services online</a>.
+</p>
diff --git a/templates/web/peterborough/header/title.html b/templates/web/peterborough/header/title.html
new file mode 100644
index 000000000..b4f0e9ba4
--- /dev/null
+++ b/templates/web/peterborough/header/title.html
@@ -0,0 +1,4 @@
+<title>
+ [% "$title :: " | html IF title %]
+ Report a problem
+</title>
diff --git a/templates/web/peterborough/header_extra.html b/templates/web/peterborough/header_extra.html
new file mode 100644
index 000000000..2dc38b336
--- /dev/null
+++ b/templates/web/peterborough/header_extra.html
@@ -0,0 +1,3 @@
+[% INCLUDE 'tracking_code.html' %]
+<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:900,400,700,300,100">
+<link rel="shortcut icon" type="image/x-icon" href="/cobrands/peterborough/favicon.ico">
diff --git a/templates/web/peterborough/header_logo.html b/templates/web/peterborough/header_logo.html
new file mode 100644
index 000000000..dbb0f51f4
--- /dev/null
+++ b/templates/web/peterborough/header_logo.html
@@ -0,0 +1,2 @@
+ <a href="https://www.peterborough.gov.uk/" id="site-logo">Peterborough City Council</a>
+ <a href="/" id="report-cta" title="[%- loc('Report a problem') -%]">[%- loc('Report') -%]</a>
diff --git a/templates/web/peterborough/index-steps.html b/templates/web/peterborough/index-steps.html
new file mode 100644
index 000000000..13d8c8961
--- /dev/null
+++ b/templates/web/peterborough/index-steps.html
@@ -0,0 +1,13 @@
+<h2>[% loc('How to report a problem') %]</h2>
+
+<ol class="big-numbers">
+ <li>[% question %]</li>
+ <li>[% loc('Locate the problem on a map') %]</li>
+ <li>[% loc('Enter more details of the problem') %]</li>
+ <li>Confirm your report and [% c.cobrand.council_name %] will investigate</li>
+</ol>
+
+<section class="full-width">
+[% INCLUDE "front/stats.html" %]
+[% TRY %][% INCLUDE "front/tips.html" %][% CATCH file %][% END %]
+</section>
diff --git a/templates/web/peterborough/report/_council_sent_info.html b/templates/web/peterborough/report/_council_sent_info.html
new file mode 100644
index 000000000..1963020bc
--- /dev/null
+++ b/templates/web/peterborough/report/_council_sent_info.html
@@ -0,0 +1,17 @@
+[% SET duration_clause = problem.duration_string(c) %]
+[% IF duration_clause || problem.whensent %]
+ <p class="council_sent_info">
+ [%- IF problem.whensent %]
+ [%- IF duration_clause %]
+ [%- external_ref_clause = tprintf(loc('Council ref:&nbsp;%s'), problem.id) %]
+ [%- ELSE %]
+ [%- external_ref_clause = tprintf(loc('%s ref:&nbsp;%s'), problem.external_body, problem.id) %]
+ [%- END %]
+ [%- END -%]
+ [% duration_clause %]
+ [%- IF external_ref_clause %]
+ [%- IF duration_clause %]. [% END %]
+ <strong>[% external_ref_clause %].</strong>
+ [%- END %]
+ </p>
+[% END %]
diff --git a/templates/web/peterborough/tracking_code.html b/templates/web/peterborough/tracking_code.html
new file mode 100644
index 000000000..ba375683d
--- /dev/null
+++ b/templates/web/peterborough/tracking_code.html
@@ -0,0 +1,15 @@
+[% 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-144500283-1"></script>
+<script nonce="[% csp_nonce %]">
+ window.dataLayer = window.dataLayer || [];
+ function gtag(){dataLayer.push(arguments);}
+ gtag('js', new Date());
+
+ gtag('config', 'UA-144500283-1');
+</script>
+
+[% ELSE %]
+<!-- Tracking code not inserted as "[% c.config.BASE_URL %]" not "https://www.fixmystreet.com" -->
+[% END %]
diff --git a/templates/web/rutland/footer_extra_js.html b/templates/web/rutland/footer_extra_js.html
index 8113befc9..88fc006e7 100644
--- a/templates/web/rutland/footer_extra_js.html
+++ b/templates/web/rutland/footer_extra_js.html
@@ -1,3 +1 @@
-[% scripts.push(
- version('/cobrands/fixmystreet-uk-councils/council_validation_rules.js'),
-) %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 validation=1 %]
diff --git a/templates/web/rutland/front/footer-marketing.html b/templates/web/rutland/front/footer-marketing.html
index f6418e54d..f6418e54d 100755..100644
--- a/templates/web/rutland/front/footer-marketing.html
+++ b/templates/web/rutland/front/footer-marketing.html
diff --git a/templates/web/stevenage/footer.html b/templates/web/stevenage/footer.html
index 149ad171b..bf7608899 100644
--- a/templates/web/stevenage/footer.html
+++ b/templates/web/stevenage/footer.html
@@ -64,7 +64,7 @@
<div class="nav-wrapper">
<div class="container">
- [% INCLUDE "main_nav.html" body_name=c.cobrand.council_area hide_privacy_link=1 %]
+ [% INCLUDE "main_nav.html" hide_privacy_link=1 %]
</div>
</div>
</div>
diff --git a/templates/web/stevenage/header.html b/templates/web/stevenage/header.html
index 0fe6dfed1..052a27dfc 100644
--- a/templates/web/stevenage/header.html
+++ b/templates/web/stevenage/header.html
@@ -16,6 +16,8 @@
</head>
<body class="[% bodyclass | html IF bodyclass %]">
+ [% INCLUDE 'debug_header.html' %]
+
<div class="wrapper">
<div class="table-cell">
<header id="site-header">
@@ -24,9 +26,7 @@
<a href="#main-nav" id="nav-link">Main Navigation</a>
</div>
</header>
- [% pre_container_extra %]
+ [% pre_container_extra | safe %]
<div class="container">
<div class="content[% " $mainclass" | html IF mainclass %]" role="main">
-
- <!-- [% INCLUDE 'debug_header.html' %] -->
diff --git a/templates/web/stevenage/tracking_code.html b/templates/web/stevenage/tracking_code.html
index e7c2bafd6..0bee01d73 100644
--- a/templates/web/stevenage/tracking_code.html
+++ b/templates/web/stevenage/tracking_code.html
@@ -1,6 +1,6 @@
[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
-<script>
+<script nonce="[% csp_nonce %]">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
diff --git a/templates/web/tfl/about/faq-en-gb.html b/templates/web/tfl/about/faq-en-gb.html
new file mode 100755
index 000000000..c01d98bb5
--- /dev/null
+++ b/templates/web/tfl/about/faq-en-gb.html
@@ -0,0 +1,77 @@
+[% INCLUDE 'header.html', title = 'Help with Street care', bodyclass = 'twothirdswidthpage' %]
+
+<h1>Help with Street care</h1>
+
+<p>Our Street care tool lets you to tell us about problems you see on the
+streets of London such as roadworks, damaged traffic lights, and other street
+defects. It’s the quickest and easiest way to report an issue to us.</p>
+
+<p>You can report problems with:</p>
+
+<ul>
+ <li>Bus stops and shelters</li>
+ <li>Graffiti and flyposting</li>
+ <li>Hoardings and scaffolding</li>
+ <li>Litter</li>
+ <li>Mobile cranes</li>
+ <li>Roadworks</li>
+ <li>Road, cycleway and footway defects – potholes</li>
+ <li>Street lights and traffic lights</li>
+ <li>Trees</li>
+</ul>
+
+<p>To report other issues, you can visit our
+<a href="https://tfl.gov.uk/help-and-contact/">website to find out how to contact us</a>.
+</p>
+
+<p>Only use Street care for problems such as those listed above, otherwise
+there will be a delay in your report getting to the right department.</p>
+
+<h2>How to report a problem</h2>
+
+<p>Enter a postcode or location and you’ll see a map of that area. You can view
+problems already reported in that area, or report ones of your own by clicking
+on the map at the location of the problem.</p>
+
+<p>Once you submit your report, it will be sent to the relevant team at
+Transport for London who will then investigate and respond.</p>
+
+<p>The tool is free to use, and works on most devices including mobile
+phones.</p>
+
+<h2>Technical support</h2>
+
+<p>If you are experiencing any technical issues with the ‘Street care’ tool
+please let us know using our
+<a href="https://tfl.gov.uk/help-and-contact/">contact page</a>.</p>
+
+<h2>Responding to your problem</h2>
+
+<p>We’ll aim to resolve your issue within the timescale we give you, this will
+depend on the type of issue. However, it may take us a little longer than
+planned in periods such as bad weather or large unplanned events.<p>
+
+<h2>How we manage London’s roads</h2>
+
+<p>Managing London's road network is shared between Transport for London,
+Highways England, and the 32 London boroughs, plus the City of London.</p>
+
+<ul>
+ <li>We manage the 580 km of the Transport for London Road Network (the TLRN sometimes called 'red routes')</li>
+ <li>We also are responsible for the maintenance, management and operation of the Capital's traffic lights, bus stops and the majority of bus shelters</li>
+ <li>Highways England manages the national motorway network, including the M25, M1, M4 and M11</li>
+</ul>
+
+<h2>Cookies</h2>
+
+<p>A cookie is a piece of text that a website transfers to your computer's hard
+disk so it can remember who you are. Cookies are generally used to monitor how
+a website is used and improve your online experience. They do not give us
+access to the rest of your computer and are not used to identify you
+personally.</p>
+
+<p><a href="https://tfl.gov.uk/corporate/privacy-and-cookies/cookies">View a
+ list of the main cookies we set</a>, what they are used for and how to
+manage and delete them.</p>
+
+[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/tfl/around/_postcode_form_examples.html b/templates/web/tfl/around/_postcode_form_examples.html
new file mode 100644
index 000000000..57d5fce2f
--- /dev/null
+++ b/templates/web/tfl/around/_postcode_form_examples.html
@@ -0,0 +1,3 @@
+<p class="form-hint" id="pc-hint">
+[% tprintf('e.g. ‘%s’ or ‘%s’', c.cobrand.example_places) %]
+or ‘FMS1234567’</p>
diff --git a/templates/web/tfl/around/intro.html b/templates/web/tfl/around/intro.html
new file mode 100644
index 000000000..51557dd1e
--- /dev/null
+++ b/templates/web/tfl/around/intro.html
@@ -0,0 +1,2 @@
+<h1>[% loc('Report a problem on a street') %]</h1>
+<h2>[% loc('Report a problem on a street in London or look at and discuss problems that have already been reported.') %]</h2>
diff --git a/templates/web/tfl/contact/_footer.html b/templates/web/tfl/contact/_footer.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/tfl/contact/_footer.html
diff --git a/templates/web/tfl/contact/_heading.html b/templates/web/tfl/contact/_heading.html
new file mode 100644
index 000000000..a33ed8f0b
--- /dev/null
+++ b/templates/web/tfl/contact/_heading.html
@@ -0,0 +1 @@
+<h1>Contact street care</h1>
diff --git a/templates/web/tfl/email_sent.html b/templates/web/tfl/email_sent.html
new file mode 100644
index 000000000..581ff2b61
--- /dev/null
+++ b/templates/web/tfl/email_sent.html
@@ -0,0 +1,25 @@
+[% INCLUDE 'header.html', bodyclass = 'fullwidthpage', title = loc('Create a report') %]
+
+<div class="confirmation-header confirmation-header--inbox">
+
+ <h1>[% loc("Nearly done! Now check your email&hellip;") %]</h1>
+
+ <p>
+ [% IF email_type == 'problem' %]
+ We’ve sent you a confirmation email. Click the link to publish your problem.
+ [% ELSIF email_type == 'update' %]
+ We’ve sent you a confirmation email. Click the link to publish your update.
+ [% ELSIF email_type == 'alert' %]
+ We’ve sent you a confirmation email. Click the link to activate your alert.
+ [% END %]
+ </p>
+
+ [% TRY %][% INCLUDE '_email_sent_extra.html' %][% CATCH file %][% END %]
+
+ <p>
+ [% loc("Can&rsquo;t find our email? Check your spam folder&nbsp;&ndash; that&rsquo;s the solution 99% of the time.") %]
+ </p>
+
+</div>
+
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/lincolnshire/footer.html b/templates/web/tfl/footer.html
index 69ab0b51e..c96c21d00 100644
--- a/templates/web/lincolnshire/footer.html
+++ b/templates/web/tfl/footer.html
@@ -4,19 +4,11 @@
<div class="nav-wrapper">
<div class="container">
- [% INCLUDE "main_nav.html" body_name=c.cobrand.council_area %]
+ [% INCLUDE "main_nav.html" hide_privacy_link=1 %]
</div>
</div>
</div> <!-- .wrapper -->
- [% IF pagefooter %]
- <div>
- <footer role="contentinfo">
- [% INCLUDE 'front/footer-marketing.html' %]
- </footer>
- </div>
- [% END %]
-
[% INCLUDE 'common_footer_tags.html' %]
</body>
diff --git a/templates/web/tfl/footer_extra.html b/templates/web/tfl/footer_extra.html
new file mode 100644
index 000000000..b3f23f3a2
--- /dev/null
+++ b/templates/web/tfl/footer_extra.html
@@ -0,0 +1,11 @@
+<div id="footer" role="contentinfo">
+ <div class="container">
+ <div class="terms-and-conditions-menu" role="navigation" aria-labelledby="site-structure-heading">
+ <h2 id="site-structure-heading" class="visuallyhidden">Site structure and legal information</h2>
+ <ul>
+ <li><a href="https://tfl.gov.uk/corporate/terms-and-conditions/website">Terms &amp; conditions </a></li><li><a href="https://tfl.gov.uk/corporate/privacy-and-cookies/reporting-street-problems">Privacy &amp; cookies</a></li><li><a href="https://tfl.gov.uk/corporate/website-accessibility/">Website accessibility</a></li>
+ </ul>
+ </div>
+ </div>
+</div>
+
diff --git a/templates/web/tfl/footer_extra_js.html b/templates/web/tfl/footer_extra_js.html
new file mode 100644
index 000000000..af38a5286
--- /dev/null
+++ b/templates/web/tfl/footer_extra_js.html
@@ -0,0 +1,18 @@
+[% scripts.push(
+ version('/jslib/jquery-1.7.2.min.js'),
+) %]
+[% PROCESS 'footer_extra_js_base.html' highways=1 cobrand_js=1 %]
+[%~
+IF bodyclass.match('mappage');
+ scripts.push(
+ version('/cobrands/tfl/js.js'),
+ );
+END
+%]
+[%~
+IF c.user_exists AND ((c.user.from_body AND c.user.from_body.name == 'TfL') OR c.user.is_superuser);
+ scripts.push(
+ version('/cobrands/tfl/staff.js'),
+ );
+END
+%]
diff --git a/templates/web/tfl/front/pre-steps.html b/templates/web/tfl/front/pre-steps.html
new file mode 100644
index 000000000..9a740c692
--- /dev/null
+++ b/templates/web/tfl/front/pre-steps.html
@@ -0,0 +1,13 @@
+<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/header_extra.html b/templates/web/tfl/header_extra.html
new file mode 100644
index 000000000..8a977495f
--- /dev/null
+++ b/templates/web/tfl/header_extra.html
@@ -0,0 +1 @@
+[% INCLUDE 'tracking_code.html' %]
diff --git a/templates/web/tfl/header_site.html b/templates/web/tfl/header_site.html
new file mode 100644
index 000000000..48759eff4
--- /dev/null
+++ b/templates/web/tfl/header_site.html
@@ -0,0 +1,13 @@
+<header id="site-header" role="banner">
+ <div class="container clearfix">
+ <div class="logo">
+ <a href="https://tfl.gov.uk/">
+ <span id="site-logo">Transport for London</span>
+ </a>
+ </div>
+ <div class="top-row-extras">
+ <a href="#main-nav"><span>Menu</span><span class="arrow">&nbsp;</span></a>
+ <a href="/" title="Report a problem"><span>Report</span></a>
+ </div>
+ </div>
+</header>
diff --git a/templates/web/tfl/index-steps.html b/templates/web/tfl/index-steps.html
new file mode 100644
index 000000000..a66ac8654
--- /dev/null
+++ b/templates/web/tfl/index-steps.html
@@ -0,0 +1,14 @@
+<h2>[% loc('How to report a problem') %]</h2>
+
+<ol class="big-numbers">
+ <li>[% question %]</li>
+ <li>Tell us where it is on the map</li>
+ <li>[% loc('Enter details of the problem') %]</li>
+ <li>Confirm the report and we will investigate</li>
+</ol>
+
+<section class="full-width">
+[% INCLUDE "front/stats.html" %]
+[% TRY %][% INCLUDE "front/tips.html" %][% CATCH file %][% END %]
+</section>
+
diff --git a/templates/web/tfl/report/_council_sent_info.html b/templates/web/tfl/report/_council_sent_info.html
new file mode 100644
index 000000000..ef6cca079
--- /dev/null
+++ b/templates/web/tfl/report/_council_sent_info.html
@@ -0,0 +1,17 @@
+[% SET duration_clause = problem.duration_string(c) %]
+[% IF duration_clause || problem.whensent %]
+ <p class="council_sent_info">
+ [%- IF problem.whensent %]
+ [%- IF duration_clause %]
+ [%- external_ref_clause = tprintf(loc('TfL ref:&nbsp;FMS%s'), problem.id) %]
+ [%- ELSE %]
+ [%- external_ref_clause = tprintf(loc('%s ref:&nbsp;%s'), problem.external_body, problem.id) %]
+ [%- END %]
+ [%- END -%]
+ [% duration_clause %]
+ [%- IF external_ref_clause %]
+ [%- IF duration_clause %]. [% END %]
+ <strong>[% external_ref_clause %].</strong>
+ [%- END %]
+ </p>
+[% END %]
diff --git a/templates/web/tfl/report/_item_extra_class.html b/templates/web/tfl/report/_item_extra_class.html
new file mode 100644
index 000000000..dcecce136
--- /dev/null
+++ b/templates/web/tfl/report/_item_extra_class.html
@@ -0,0 +1,3 @@
+[%~ IF c.user.has_permission_to('report_inspect', problem.bodies_str_ids) AND problem.get_extra_field_value('safety_critical') == 'yes';
+ item_extra_class = item_extra_class _ " item-list__item--safety-critical";
+END ~%]
diff --git a/templates/web/tfl/report/_item_heading.html b/templates/web/tfl/report/_item_heading.html
new file mode 100644
index 000000000..17ded1110
--- /dev/null
+++ b/templates/web/tfl/report/_item_heading.html
@@ -0,0 +1,7 @@
+<h3 class="item-list__heading">[% problem.title | html %]</h3>
+[% IF c.user.from_body || c.user.is_superuser %]
+ <small class="item-list__item__borough">[% c.cobrand.borough_for_report(problem) %]</small>
+[% END %]
+[%~ IF c.user.has_permission_to('report_inspect', problem.bodies_str_ids) AND problem.get_extra_field_value('safety_critical') == 'yes' ~%]
+ <small class="item-list__safety-critical">Safety Critical</small>
+[%~ END ~%]
diff --git a/templates/web/tfl/report/_item_photo_title.html b/templates/web/tfl/report/_item_photo_title.html
new file mode 100644
index 000000000..becd28ca3
--- /dev/null
+++ b/templates/web/tfl/report/_item_photo_title.html
@@ -0,0 +1 @@
+[% THROW file 'Not found' %]
diff --git a/templates/web/tfl/report/form/private_details.html b/templates/web/tfl/report/form/private_details.html
new file mode 100644
index 000000000..6e939cb09
--- /dev/null
+++ b/templates/web/tfl/report/form/private_details.html
@@ -0,0 +1,19 @@
+<!-- private_details.html -->
+<h2 class="form-section-heading form-section-heading--private">[% loc('Tell us about you') %]</h2>
+
+[% UNLESS c.user_exists %]
+<p class="hidden-nojs js-new-report-sign-in-hidden">
+ <a class="js-new-report-show-sign-in" href="#">[% loc('Or sign in with password to prefill this information.') %]</a>
+</p>
+[% END %]
+
+<p class="form-section-description js-new-report-sign-in-hidden" id="js-councils_text_private">
+ [% IF js %]
+ These details will be sent to Transport for London, but will never be shown online without your permission.
+ (<a href="[% c.cobrand.privacy_policy_url %]">[% loc('See our privacy policy') %]</a>.)
+ [% ELSE %]
+ [% PROCESS 'report/new/councils_text_private.html' %]
+ [% END %]
+</p>
+
+<!-- /private_details.html -->
diff --git a/templates/web/tfl/report/inspect/extra_details.html b/templates/web/tfl/report/inspect/extra_details.html
new file mode 100644
index 000000000..e5489cc11
--- /dev/null
+++ b/templates/web/tfl/report/inspect/extra_details.html
@@ -0,0 +1,3 @@
+[% IF permissions.report_inspect %]
+ [% INCLUDE 'report/inspect/_extra_details_field.html' %]
+[% END %]
diff --git a/templates/web/tfl/report/new/after_photo.html b/templates/web/tfl/report/new/after_photo.html
new file mode 100644
index 000000000..ed05e4191
--- /dev/null
+++ b/templates/web/tfl/report/new/after_photo.html
@@ -0,0 +1,10 @@
+[% IF c.cobrand.allow_photo_upload %]
+<div class="description_tips" aria-label="[% loc('Tips for perfect photos') %]">
+ <ul class="do">
+ <li>[% loc('Use close-ups and wide shots to show the issue to us') %]</li>
+ </ul>
+ <ul class="dont">
+ <li>[% loc('Avoid personal information and vehicle number plates') %]</li>
+ </ul>
+</div>
+[% END %] \ No newline at end of file
diff --git a/templates/web/tfl/report/new/councils_text_all.html b/templates/web/tfl/report/new/councils_text_all.html
new file mode 100644
index 000000000..ae9fb3307
--- /dev/null
+++ b/templates/web/tfl/report/new/councils_text_all.html
@@ -0,0 +1,17 @@
+<p>
+[% category = mark_safe(category) %]
+[% UNLESS non_public_categories.$category;
+
+ tprintf(
+ 'Information you enter here will be sent to us and published for others to see, in accordance with our <a href="%s">privacy policy</a>.',
+ c.cobrand.privacy_policy_url
+ );
+
+ELSE;
+
+ tprintf(
+ 'Information you enter here will be sent to us but not published online.',
+ );
+
+END %]
+</p>
diff --git a/templates/web/tfl/report/new/councils_text_private.html b/templates/web/tfl/report/new/councils_text_private.html
new file mode 100644
index 000000000..b007a9524
--- /dev/null
+++ b/templates/web/tfl/report/new/councils_text_private.html
@@ -0,0 +1,4 @@
+[% FILTER collapse %]
+These details will be sent to Transport for London, but will never be shown online without your permission.
+(<a href="[% c.cobrand.privacy_policy_url %]">[% loc('See our privacy policy') %]</a>.)
+[% END -%]
diff --git a/templates/web/tfl/report/new/form_public_councils_text.html b/templates/web/tfl/report/new/form_public_councils_text.html
new file mode 100644
index 000000000..b84b29a16
--- /dev/null
+++ b/templates/web/tfl/report/new/form_public_councils_text.html
@@ -0,0 +1,13 @@
+[% public_councils_text_at_top = 1 %]
+[% BLOCK public_councils_text %]
+<div style="margin-top:1em">
+ <h2 class="form-section-heading form-section-heading--private js-hide-if-public-category hidden-js">[% loc( 'Report details' ) %]</h2>
+ <div class="form-section-description" id="js-councils_text">
+ [% IF js %]
+ [% PROCESS 'report/new/councils_text_all.html' list_of_names = [ loc('the local council') ] %]
+ [% ELSE %]
+ [% PROCESS 'report/new/councils_text.html' %]
+ [% END %]
+ </div>
+</div>
+[% END %]
diff --git a/templates/web/tfl/report/new/inline-tips.html b/templates/web/tfl/report/new/inline-tips.html
new file mode 100644
index 000000000..2cd3f2961
--- /dev/null
+++ b/templates/web/tfl/report/new/inline-tips.html
@@ -0,0 +1,11 @@
+<div class="description_tips" aria-label="Tips for successful reports">
+ <ul class="do">
+ <li>Be polite</li>
+ <li>Tell us exactly where this is</li>
+ <li>Say how long the issue has been here</li>
+ </ul>
+ <ul class="dont">
+ <li>Don’t identify or blame people</li>
+ <li>Don’t give out anyone’s contact details</li>
+ </ul>
+</div>
diff --git a/templates/web/tfl/report/new/roads_message.html b/templates/web/tfl/report/new/roads_message.html
new file mode 100644
index 000000000..85e1650b3
--- /dev/null
+++ b/templates/web/tfl/report/new/roads_message.html
@@ -0,0 +1,11 @@
+<div id="js-roads-responsibility" class="box-warning hidden">
+ <div id="js-not-tfl-road" class="hidden js-responsibility-message">
+ <p>Transport for London does not maintain this road. Please use
+ <a class="js-not-tfl-link" href="https://www.fixmystreet.com/report/new?latitude=[% latitude | html %]&amp;longitude=[% longitude | html %]">FixMyStreet.com</a> to report it
+ to the appropriate borough.</p>
+ </div>
+ <div id="js-not-an-asset" class="hidden js-responsibility-message">
+ <p><strong>Select a marker</strong></p>
+ <p>Please select <span class="js-roads-asset" data-original="an item">an item</span> from the map on which to make a report.</p>
+ </div>
+</div>
diff --git a/templates/web/tfl/report/new/top_message.html b/templates/web/tfl/report/new/top_message.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/tfl/report/new/top_message.html
diff --git a/templates/web/tfl/report/update/form_state_checkbox.html b/templates/web/tfl/report/update/form_state_checkbox.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/tfl/report/update/form_state_checkbox.html
diff --git a/templates/web/tfl/report/updates-sidebar-notes.html b/templates/web/tfl/report/updates-sidebar-notes.html
new file mode 100644
index 000000000..a4b456501
--- /dev/null
+++ b/templates/web/tfl/report/updates-sidebar-notes.html
@@ -0,0 +1,4 @@
+<p>
+ Please note that updates are sent to Transport for London.
+ [% tprintf( loc( 'Your information will only be used in accordance with our <a href="%s">privacy policy</a>' ), c.cobrand.privacy_policy_url ) %]
+</p>
diff --git a/templates/web/tfl/site-name.html b/templates/web/tfl/site-name.html
new file mode 100644
index 000000000..ef8d7d667
--- /dev/null
+++ b/templates/web/tfl/site-name.html
@@ -0,0 +1 @@
+Street Care
diff --git a/templates/web/tfl/tokens/confirm_problem.html b/templates/web/tfl/tokens/confirm_problem.html
new file mode 100644
index 000000000..be02fc4d2
--- /dev/null
+++ b/templates/web/tfl/tokens/confirm_problem.html
@@ -0,0 +1,18 @@
+[% INCLUDE 'header.html', bodyclass = 'fullwidthpage', title = loc('Confirmation') %]
+
+<div class="confirmation-header">
+
+ <h1><a href="[% c.cobrand.relative_url_for_report( report ) %][% report.url %]">[% report.title %]</a></h1>
+
+ <h2>Your issue is on its way to Transport for London.</h2>
+ <p>Your reference for this report is FMS[% report.id %], please quote it in any enquiries.</p>
+
+ <p class="confirmation-again">
+ <a href="/report/new?latitude=[% report.latitude %]&amp;longitude=[% report.longitude %]" class="btn btn-primary">
+ [% loc('Report another problem here') %]
+ </a>
+ </p>
+
+</div>
+
+[% INCLUDE 'footer.html' %]
diff --git a/templates/web/tfl/tracking_code.html b/templates/web/tfl/tracking_code.html
new file mode 100644
index 000000000..8acf6c4d5
--- /dev/null
+++ b/templates/web/tfl/tracking_code.html
@@ -0,0 +1,7 @@
+<script id="Cookiebot" src="https://consent.cookiebot.com/uc.js" data-cbid="87b975a8-f977-4b96-9935-f5b0e33f75e6" type="text/javascript" async></script>
+
+[% IF c.config.BASE_URL == "https://www.fixmystreet.com" %]
+<script src="//assets.adobedtm.com/launch-ENc5e3f827edc94f2a816110524598acd7.min.js" async></script>
+[% ELSE %]
+<script src="//assets.adobedtm.com/launch-ENc56c35f411854b108532dc14f2586333-development.min.js" async></script>
+[% END %]
diff --git a/templates/web/warwickshire/footer.html b/templates/web/warwickshire/footer.html
deleted file mode 100644
index 6f4007781..000000000
--- a/templates/web/warwickshire/footer.html
+++ /dev/null
@@ -1,57 +0,0 @@
- </div>[%# close div.content %]
- </div>[%# close div#mysociety %]
- </div>[%# close div#wrapper.container.wrapper %]
-
- <footer>
- <div class="container">
- <div class="row">
- <div class="span3">
- <aside class="widget widget_text" id="text-7">
- <div class="textwidget">
- <div style="text-align:center;padding-top:5px;">
- <img alt="" src="//www.warwickshire.gov.uk/wp-content/uploads/2014/08/WCC+logo.png" style="width:auto !important;">
- </div>
- </div>
- </aside>
- </div>
- <div class="span3">
- <aside class="widget widget_text" id="text-3">
- <div class="textwidget">
- <p><a href="//www.warwickshire.gov.uk/accessibility">Accessibility</a></p>
- <p><a href="//www.warwickshire.gov.uk/help">Help using the website</a></p>
- <p><a href="//www.warwickshire.gov.uk/disclaimer">Privacy and disclaimer</a></p>
- <p><a href="//www.warwickshire.gov.uk/contactus">Contact us</a></p>
- <p><a href="//www.warwickshire.gov.uk/az">A-Z of services</a></p>
- </div>
- </aside>
- </div>
- <div class="span2">
- <aside class="widget widget_text" id="text-4">
- <div class="textwidget">
- <p><a href="//www.warwickshire.gov.uk/socialnetworking">Social media</a></p>
- <p><a href="//www.warwickshire.gov.uk/?page_id=976766">Services for...</a></p>
- <p><a href="//www.warwickshire.gov.uk/customerservice">Customer service and complaints</a></p>
- </div>
- </aside>
- </div>
- <div class="span2">
- <aside class="widget widget_text" id="text-13">
- <div class="textwidget">
- <a href="https://public.govdelivery.com/accounts/UKWarwickshire/subscriber/new"><img src="https://www.warwickshire.gov.uk/wp-content/uploads/2016/05/keep-me-posted-white-on-trans-155x39.png"></a>
- </div>
- </aside>
- </div>
- </div>
- <div class="row">
- <div class="span4"></div>
- <div class="span4" style="text-align:center;">
- <p>&copy; Warwickshire County Council</p>
- </div>
- <div class="span4"></div>
- </div>
- </div>
- </footer>
-
- [% INCLUDE 'common_footer_tags.html' %]
- </body>
-</html>
diff --git a/templates/web/warwickshire/footer_extra.html b/templates/web/warwickshire/footer_extra.html
new file mode 100644
index 000000000..122c59ded
--- /dev/null
+++ b/templates/web/warwickshire/footer_extra.html
@@ -0,0 +1,48 @@
+<footer class="site-footer">
+ <div class="container site-footer__container">
+ <div class="site-footer__section">
+ <div class="identity">
+ <a class="identity__link" href="https://www.warwickshire.gov.uk/">
+ <span class="icon icon-logo identity__logo"></span>
+ <span class="visually-hidden">Warwickshire County Council</span>
+ </a>
+ </div>
+ <div class="site-footer__info">
+ <p class="site-footer__text site-footer__rights">&copy; Warwickshire County Council</p>
+ </div>
+ </div>
+ <div class="site-footer__section">
+ <nav class="site-footer__navigation" aria-label="Footer Navigation">
+ <div class="site-footer__group site-footer__group--primary">
+ <ul class="list">
+ <li class="list__item"><a class="list__link" href="https://www.warwickshire.gov.uk/a-to-z"><span class="list__link-text">
+ A-Z of services
+ </span></a></li>
+ <li class="list__item"><a class="list__link" href="https://www.warwickshire.gov.uk/disclaimer"><span class="list__link-text">
+ Privacy and disclaimer
+ </span></a></li>
+ <li class="list__item"><a class="list__link" href="https://www.warwickshire.gov.uk/accessibility"><span class="list__link-text">
+ Accessibility
+ </span></a></li>
+ <li class="list__item"><a class="list__link" href="https://www.warwickshire.gov.uk/contactus"><span class="list__link-text">
+ Contact us
+ </span></a></li>
+ <li class="list__item"><a class="list__link" href="https://www.warwickshire.gov.uk/customerserviceandcomplaints"><span class="list__link-text">
+ Customer service and complaints
+ </span></a></li>
+ <li class="list__item"><a class="list__link" href="https://www.warwickshire.gov.uk/help"><span class="list__link-text">
+ Help using the website
+ </span></a></li>
+ </ul>
+ </div>
+ </nav>
+ </div>
+ <div class="site-footer__section">
+ <div class="site-footer__suppliers">
+ <p class="site-footer__text">
+ Powered by <a class="site-footer__text-link" href="https://www.fixmystreet.com/pro">FixMyStreet Platform</a>
+ </p>
+ </div>
+ </div>
+ </div>
+</footer>
diff --git a/templates/web/warwickshire/header.html b/templates/web/warwickshire/header.html
deleted file mode 100644
index 5470d401a..000000000
--- a/templates/web/warwickshire/header.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE html><!-- 3P header begins -->
-<!--[if IE 8]> <html class="no-js lt-ie9 ie8" lang="[% lang_code %]"> <![endif]-->
-<!--[if IE 9]> <html class="no-js ie9" lang="[% lang_code %]"><![endif]-->
-<!--[if gt IE 9]><!--> <html class="no-js" lang="[% lang_code %]"> <!--<![endif]-->
-
-<head>
- <meta name="viewport" content="initial-scale=1.0">
-
- <link rel="shortcut icon" href="/cobrands/warwickshire/vendor/gamma/images/favicon_wcc.ico" />
- <link rel="icon" type="image/png" href="/cobrands/warwickshire/vendor/gamma/images/favicon-WCC.png" />
- <link rel="apple-touch-icon" href="/cobrands/warwickshire/vendor/gamma/images/apple-touch-icon-WCC.png" />
-
- <link rel="stylesheet" href="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/style.css') %]" />
- <link rel="stylesheet" href="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/bootstrap-responsive.css') %]" />
- <link rel="stylesheet" href="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/image-navigation.css') %]" />
- <link rel="stylesheet" href="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/venues.css') %]" />
- <link rel="stylesheet" media="print" href="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/print.css') %]" />
-
- <script src="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/modernizr-2.6.2-respond-1.1.0.min.js') %]" type="text/javascript"></script>
- <script src="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/jquery-1.9.0.min.js') %]" type="text/javascript"></script>
- <script src="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/bootstrap.min.js') %]" type="text/javascript"></script>
- <script src="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/main.js') %]" type="text/javascript"></script>
- <script src="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/jquery.tabSlideOut.v1.3.js') %]" type="text/javascript"></script>
- <script type="text/javascript">
- function popup(mylink, wname) {
- if (! window.focus)return true;
- var href;
- if (typeof(mylink) == 'string')
- href=mylink;
- else
- href=mylink.href;
- window.open(href,wname,'width=345, height=590,scrollbars=no');
- return false;
- }
- </script>
- <script src="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/jquery.cycle.js') %]" type="text/javascript"></script>
- <script src="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/jquery.zrssfeed.o.js') %]" type="text/javascript"></script>
- <script src="[% version ('/cobrands/' _ c.cobrand.moniker _ '/vendor/gamma/homepage-slider-test.js') %]" type="text/javascript"></script>
-
- [% INCLUDE 'header/css.html' %]
- [% INCLUDE 'common_header_tags.html' %]
-</head>
-
-[% TRY %][% PROCESS 'set_body_class.html' %][% CATCH file %][% END %]
-<body class="style-1 [% bodyclass | html IF bodyclass %]">
-
- [% INCLUDE 'warwickshire_masthead.html' %]
-
- [% INCLUDE "main_nav.html" body_name=c.cobrand.council_area hide_all_reports_link=1 ul_class='container' %]
-
- <div id="wrapper" class="container wrapper">
- <div id="mysociety">
- [% pre_container_extra %]
- <div class="content[% " $mainclass" | html IF mainclass %]" role="main">
diff --git a/templates/web/warwickshire/header_extra.html b/templates/web/warwickshire/header_extra.html
new file mode 100644
index 000000000..bb44856a7
--- /dev/null
+++ b/templates/web/warwickshire/header_extra.html
@@ -0,0 +1,12 @@
+<link rel="apple-touch-icon" sizes="180x180" href="/cobrands/warwickshire/images/apple-touch-icon.png">
+<link rel="icon" type="image/png" sizes="32x32" href="/cobrands/warwickshire/images/favicon-32x32.png">
+<link rel="icon" type="image/png" sizes="16x16" href="/cobrands/warwickshire/images/favicon-16x16.png">
+<link rel="manifest" href="/cobrands/warwickshire/images/site.webmanifest">
+<link rel="mask-icon" href="/cobrands/warwickshire/images/safari-pinned-tab.svg" color="#076440">
+<link rel="shortcut icon" href="/cobrands/warwickshire/images/favicon.ico">
+<meta name="apple-mobile-web-app-title" content="Warwickshire County Council">
+<meta name="application-name" content="Warwickshire County Council">
+<meta name="msapplication-TileColor" content="#ffffff">
+<meta name="theme-color" content="#ffffff">
+
+<link href="https://fonts.googleapis.com/css?family=Nunito+Sans:400,600,700" rel="stylesheet">
diff --git a/templates/web/warwickshire/warwickshire_masthead.html b/templates/web/warwickshire/warwickshire_masthead.html
deleted file mode 100644
index 11afec135..000000000
--- a/templates/web/warwickshire/warwickshire_masthead.html
+++ /dev/null
@@ -1,219 +0,0 @@
-<!--[if lt IE 7]>
- <div class="alert alert-error"><strong>You are using an outdated browser</strong>. You may want to <a href="//browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
-<![endif]-->
-
-<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container">
- <a class="btn btn-navbar" data-target=".nav-collapse" data-toggle="collapse">
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </a>
- <a alt="Warwickshire County Council Search" class="search btn-search pull-right">
- <span class="icon-search icon-white"></span>
- </a>
- <a href="#maincontent" id="skiptomain">Skip to main content</a>
- <a alt="Warwickshire County Council logo" class="brand" href="//www.warwickshire.gov.uk/">
- <img alt="Warwickshire County Council" src="https://www.warwickshire.gov.uk/wp-content/themes/gamma/images/corpwhitelogo.png" style="width:85px;">
- </a>
- <a alt="Gov Delivery logo" class="gdslogo" href="https://public.govdelivery.com/accounts/UKWarwickshire/subscriber/new">
- <img alt="GDSl" src="https://www.warwickshire.gov.uk/wp-content/themes/gamma/images/keep_me_posted_envelope_17px.png" style="width:17px;">
- </a>
- <a alt="Gov Delivery logo" class="govdelmobile pull-right" href="https://public.govdelivery.com/accounts/UKWarwickshire/subscriber/new">
- <img alt="GDSl" src="https://www.warwickshire.gov.uk/wp-content/themes/gamma/images/keep_me_posted_envelope_17px.png" style="width:17px;">
- </a>
- <a class="gdstext" href="https://public.govdelivery.com/accounts/UKWarwickshire/subscriber/new">Email alerts</a>
- <div class="nav-collapse collapse pull-left" id="right-topbar">
- <ul class="nav pull-right">
- <li class="dropdown">
- <a class="dropdown-toggle sign-in" href="//www.warwickshire.gov.uk/myaccount"><i class="icon-white icon-user"></i> My account</a>
- <ul class="dropdown-menu">
- <li>
- <a href="https://customer.warwickshire.gov.uk/login">Self account</a>
- <p class="nav-header" style="font-weight:normal;text-transform:none !important;">
- Contact us, streetlight faults, blue badges, etc
- </p>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/me@wcc">Me@WCC - Atlas</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/librarylogin">Library account</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/jobslogin">Jobs</a>
- </li>
- <li>
- <a href="https://admissions.warwickshire.gov.uk/Enrol/Website/login.aspx">School admissions</a>
- </li>
- <li>
- <a href="https://apps.warwickshire.gov.uk/SchoolsIDP/users/sign_in">Warwickshire Education Service (WES)</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/myaccount">Other accounts</a>
- </li>
- </ul>
- </li>
- </ul>
- </div>
- <div class="nav-collapse collapse" id="left-topbar">
- <nav>
- <ul class="nav">
- <li class="dropdown">
- <a class="dropdown-toggle" data-toggle="dropdown" href="//www.warwickshire.gov.uk">Residents<b class="caret"></b></a>
- <ul class="dropdown-menu">
- <li>
- <a href="//www.warwickshire.gov.uk/">Residents - home</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/environment">Environment</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/health">Health</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/librariesandleisure">Libraries and leisure</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/roadsandtravel">Roads and travel</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/registrations">Registrations</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/safetyandcrime">Safety and crime</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/schoolsandlearning">Schools and learning</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/socialcareandhealth">Social care and support</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/contactus">Customer service and contacts</a>
- </li>
- </ul>
- </li>
- <li class="dropdown">
- <a class="dropdown-toggle" data-toggle="dropdown" href="//www.warwickshire.gov.uk/business">Business <b class="caret"></b></a>
- <ul class="dropdown-menu">
- <li>
- <a href="//www.warwickshire.gov.uk/business">Business - home</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/businesssupportorganisations">Business support organisations</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/growingyourbusiness">Growing your business</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/businesshealthandsafety">Health and safety for businesses</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/locatingyourbusiness">Locating your business</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/otherbusinessservices">Other business services</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/businessadvice">Regulatory business service and advice</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/startingabusiness">Starting a business</a>
- </li>
- </ul>
- </li>
- <li class="dropdown">
- <a class="dropdown-toggle" data-toggle="dropdown" href="//www.warwickshire.gov.uk/corporate">The council <b class="caret"></b></a>
- <ul class="dropdown-menu">
- <li>
- <a href="//www.warwickshire.gov.uk/corporate">The council - home</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/democracy">Democracy</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/financeandsuppliers">Finance and suppliers</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/jobs">Jobs</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/listsanddata">Lists, data and information</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/news">News</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/organisation">Organisation</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/performance">Our performance</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/partnerships">Partnerships</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/policies">Policies, standards and legislation</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/projects">Projects</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/strategies">Strategies and priorities</a>
- </li>
- </ul>
- </li>
- <li class="dropdown">
- <a class="dropdown-toggle" data-toggle="dropdown" href="//www.warwickshire.gov.uk/onlineestate">More sites<b class="caret"></b></a>
- <ul class="dropdown-menu">
- <li>
- <a href="http://countryparks.warwickshire.gov.uk/">Country Parks</a>
- </li>
- <li>
- <a href="http://hwb.warwickshire.gov.uk/">Health and Wellbeing</a>
- </li>
- <li>
- <a href="http://heritage.warwickshire.gov.uk/">Heritage and Culture</a>
- </li>
- <li>
- <a href="http://invest.warwickshire.gov.uk/">Invest in Warwickshire</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/jobs">Jobs</a>
- </li>
- <li>
- <a href="https://dementia.warwickshire.gov.uk/">Living well with dementia</a>
- </li>
- <li>
- <a href="http://laf.warwickshire.gov.uk/">Local Access Forum</a>
- </li>
- <li>
- <a href="//news.warwickshire.gov.uk/">News</a>
- </li>
- <li>
- <a href="http://publichealth.warwickshire.gov.uk/">Public Health</a>
- </li>
- <li>
- <a href="//www.warwickshire.gov.uk/spp">Staff, Partners and Practitioners</a>
- </li>
- <li>
- <a href="http://wwp.warwickshire.gov.uk/">Waste Partnership</a>
- </li>
- <li>
- <a href="http://whittlefordpark.warwickshire.gov.uk/">Whittleford Park</a>
- </li>
- </ul>
- </li>
- </ul>
- <form action="//search3.openobjects.com/kb5/warwickshire/search/results.page" class="navbar-form pull-right" id="site-search" method="get" name="kbs">
- <label class="skip" for="qtbottom" style="display:none;">Search again</label>
- <input alt="Search" class="span3" id="qtbottom" maxlength="1000" name="qt" placeholder="eg; libraries, roadworks" size="40" type="text">
- <button class="btn btn-mini searchbutton" id="kbsubmitbottom" type="submit" value="Search">Search</button>
- </form>
- </nav>
- </div>
- </div>
- </div>
-</div>
diff --git a/templates/web/westminster/about/faq-en-gb.html b/templates/web/westminster/about/faq-en-gb.html
new file mode 100644
index 000000000..900d13b19
--- /dev/null
+++ b/templates/web/westminster/about/faq-en-gb.html
@@ -0,0 +1,94 @@
+[% INCLUDE 'header.html', title = loc('Frequently Asked Questions'), bodyclass = 'twothirdswidthpage' %]
+
+[% INCLUDE 'about/_sidebar.html' %]
+
+<h1><a name="faq"></a>[% loc('Frequently Asked Questions') %]</h1>
+
+<dl>
+
+ <dt>What is this site?</dt>
+ <dd>&lsquo;Report it&rsquo; enables you to report issues on the streets of Westminster such as fly tipping and
+ damaged pavements, to the Council. It&rsquo;s the quickest and easiest way to report an issue.
+ </dd>
+
+ <dt>How do I get in touch with Westminster City Council regarding &lsquo;Report it&rsquo;?</dt>
+ <dd>If you are experiencing any technical issues with the &lsquo;Report it&rsquo; tool please let us know using our
+ <a href="/contact">contact page</a>.</dd>
+
+ <dt>What sort of problems can I report with &lsquo;Report it&rsquo;?</dt>
+ <dd>
+ <p>We&rsquo;re rolling out this new version of &lsquo;Report it&rsquo; using the FixMyStreet platform and so at
+ this stage you can report the following issues using this tool:</p>
+
+ <ul>
+ <li>
+ Fly tipping
+ </li>
+ <li>
+ Street cleaning
+ </li>
+ <li>
+ Street lights
+ </li>
+ <li>
+ Drains
+ </li>
+ <li>
+ Signs and bollards
+ </li>
+ </ul>
+ <p>
+ To report other issues , you can visit our <a href="https://www.westminster.gov.uk/report-it">website</a>.
+ </p>
+ <p>
+ Over the coming months, more of the Council&rsquo;s services will be connected to the FixMyStreet platform,
+ as well as adding more functions.
+ </p>
+ </dd>
+
+ <dt>What shouldn&rsquo;t I use &lsquo;Report it&rsquo; for?</dt>
+ <dd>
+ <p>
+ &lsquo;Report it&rsquo; is not a way of getting in touch with the Council for all issues – please use this
+ site only for problems such as those listed above. The site and this page will be updated as more services
+ are added to Westminster&rsquo;s FixMyStreet &lsquo;Report it&rsquo; platform.
+ </p>
+
+ <p>
+ Using this site for other matters may result in a delay in your report getting to the right department.
+ </p>
+
+ <p>
+ You will need to contact the Council directly for problems not listed above. You can view more reporting
+ methods on the <a href="https://www.westminster.gov.uk/report-it">Westminster City Council&rsquo;s
+ website</a>.
+ </p>
+ </dd>
+
+ <dt>How do I use the site?</dt>
+ <dd>After entering a postcode or location, you&rsquo;ll see a map of that area. You can view problems already
+ reported in that area, or report ones of your own by clicking on the map at the location of the problem.</dd>
+
+ <dt>How are the problems solved?</dt>
+ <dd>They are reported to the relevant services at Westminster City Council who will then investigate and respond.
+ </dd>
+
+ <dt>Is it free?</dt>
+ <dd>Yes, the site is free to use for logging reports.</dd>
+
+ <dt>
+ Can I use &lsquo;Report it&rsquo; on my mobile?
+ </dt>
+ <dd>
+ Yes, the &lsquo;Report it&rsquo; website adapts to work on your mobile phone&rsquo;s browser.
+ </dd>
+
+ <dt>Who built [% site_name %]?</dt>
+ <dd>The FixMyStreet Platform was
+ built by <a href="https://www.mysociety.org/">mySociety</a>.
+ Westminster City Council is customising the platform for its residents and users.
+ </dd>
+
+</dl>
+
+[% INCLUDE 'footer.html' pagefooter = 'yes' %]
diff --git a/templates/web/westminster/around/intro.html b/templates/web/westminster/around/intro.html
new file mode 100644
index 000000000..a40891769
--- /dev/null
+++ b/templates/web/westminster/around/intro.html
@@ -0,0 +1 @@
+ <h1>Report it</h1>
diff --git a/templates/web/westminster/auth/general.html b/templates/web/westminster/auth/general.html
new file mode 100644
index 000000000..55999584e
--- /dev/null
+++ b/templates/web/westminster/auth/general.html
@@ -0,0 +1,89 @@
+[% INCLUDE 'header.html', bodyclass='authpage', title = loc('Sign in') %]
+
+<h1>
+ [% loc('Sign in') %]
+</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.') %]</p>
+[% END %]
+
+<form action="/auth" method="post" name="general_auth" class="validate">
+ <fieldset>
+
+ <input type="hidden" name="r" value="[% c.req.params.r | html %]">
+
+[% IF NOT oauth_need_email AND c.cobrand.social_auth_enabled AND c.cobrand.feature('oidc_login') %]
+
+ <div class="form-box">
+ <button name="social_sign_in" id="oidc_sign_in" value="oidc" class="btn btn--block btn--social btn--oidc">
+ [% tprintf(loc('Sign in with %s'), c.cobrand.feature('oidc_login').display_name) %]
+ </button>
+ </div>
+
+[% ELSE %]
+
+ [% 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"
+ autofocus>
+
+ <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 %]
+ [% END %]
+ </div>
+
+[% END %]
+
+ </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 %]
diff --git a/templates/web/westminster/before_wrapper.html b/templates/web/westminster/before_wrapper.html
new file mode 100644
index 000000000..8061bfbc3
--- /dev/null
+++ b/templates/web/westminster/before_wrapper.html
@@ -0,0 +1,6 @@
+[% IF c.config.BASE_URL == "https://www.fixmystreet.com" OR c.config.BASE_URL == "https://staging.fixmystreet.com" %]
+<!-- Google Tag Manager (noscript) -->
+<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MVJJRB"
+height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
+<!-- End Google Tag Manager (noscript) -->
+[% END %]
diff --git a/templates/web/westminster/contact/_heading.html b/templates/web/westminster/contact/_heading.html
new file mode 100644
index 000000000..9554ed727
--- /dev/null
+++ b/templates/web/westminster/contact/_heading.html
@@ -0,0 +1 @@
+<h1>Contact</h1>
diff --git a/templates/web/westminster/contact/blurb.html b/templates/web/westminster/contact/blurb.html
new file mode 100644
index 000000000..096aaac83
--- /dev/null
+++ b/templates/web/westminster/contact/blurb.html
@@ -0,0 +1,11 @@
+<p>
+ It's often quickest to <a href="[% c.uri_for('/faq') %]">check our FAQs</a> and see if the answer is there.
+</p>
+
+<p>
+ To report a problem, please <a href="/">go to the front page</a> and follow the instructions.
+</p>
+
+<p>
+ The form below is to only be used to report technical issues with the FixMyStreet website.
+</p>
diff --git a/templates/web/westminster/footer_extra.html b/templates/web/westminster/footer_extra.html
new file mode 100644
index 000000000..25f156c80
--- /dev/null
+++ b/templates/web/westminster/footer_extra.html
@@ -0,0 +1,35 @@
+<footer class="westminster-footer" id="westminster-footer">
+
+ <div class="container">
+
+ <div class="westminster-footer-logo">
+ <a href="https://www.westminster.gov.uk/">City of Westminster</a>
+ </div>
+
+ <ul class="westminster-site-links">
+ <li><a href="https://www.westminster.gov.uk/apply-and-pay">Apply and pay</a></li>
+ <li><a href="https://www.westminster.gov.uk/report-it">Report it</a></li>
+ <li><a href="https://www.westminster.gov.uk/licensing-and-planning">Licensing and planning</a></li>
+ <li><a href="https://www.westminster.gov.uk/find-it">Find</a></li>
+ </ul>
+
+ <ul class="westminster-social-links">
+ <li><a href="https://www.facebook.com/CityWestminster/" class="westminster-social-links__facebook">Facebook</a></li>
+ <li><a href="https://twitter.com/CityWestminster" class="westminster-social-links__twitter">Twitter</a></li>
+ <li><a href="https://www.instagram.com/citywestminster" class="westminster-social-links__instagram">Instagram</a></li>
+ </ul>
+
+ <ul class="westminster-tertiary-links">
+ <li><a href="https://www.westminster.gov.uk/accessibility">Accessibility</a></li>
+ <li><a href="https://www.westminster.gov.uk/jobs">Careers</a></li>
+ <li><a href="https://www.westminster.gov.uk/data-protection">Data protection</a></li>
+ <li><a href="https://www.westminster.gov.uk/freedom-of-information">Freedom of information</a></li>
+ <li><a href="https://www.westminster.gov.uk/sites/default/files/gender_pay_gap_2018_2019.pdf" class="ext" target="_blank">Gender pay gap</a></li>
+ <li><a href="https://www.westminster.gov.uk/modern-slavery-statement">Modern slavery statement</a></li>
+ <li><a href="https://www.westminster.gov.uk/stay-informed-westminster-newsletter">Newsletters</a></li>
+ <li><a href="https://www.westminster.gov.uk/terms-conditions">Terms and conditions</a></li>
+ </ul>
+
+ </div>
+
+</footer>
diff --git a/templates/web/westminster/footer_extra_js.html b/templates/web/westminster/footer_extra_js.html
new file mode 100644
index 000000000..f6e8c8bf9
--- /dev/null
+++ b/templates/web/westminster/footer_extra_js.html
@@ -0,0 +1 @@
+[% PROCESS 'footer_extra_js_base.html' cobrand_js=1 tfl=1 %]
diff --git a/templates/web/westminster/front/stats.html b/templates/web/westminster/front/stats.html
new file mode 100644
index 000000000..d4e60f634
--- /dev/null
+++ b/templates/web/westminster/front/stats.html
@@ -0,0 +1,32 @@
+[% 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
+ );
+
+ updates_text = nget(
+ "<big>%s</big> update on reports",
+ "<big>%s</big> updates on reports",
+ stats.updates
+ );
+
+ new_n = stats.new | format_number;
+ updates_n = stats.updates | format_number;
+%]
+
+<div id="front_stats">
+ <div>[% tprintf( new_text, decode(new_n) ) %]</div>
+ <div>[% tprintf( updates_text, decode(updates_n) ) %]</div>
+</div>
diff --git a/templates/web/westminster/header_extra.html b/templates/web/westminster/header_extra.html
new file mode 100644
index 000000000..bcae1e7e3
--- /dev/null
+++ b/templates/web/westminster/header_extra.html
@@ -0,0 +1,3 @@
+[% INCLUDE 'tracking_code.html' %]
+<link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700&amp;display=swap" rel="stylesheet">
+<link rel="shortcut icon" type="image/x-icon" href="/cobrands/westminster/favicon.ico">
diff --git a/templates/web/westminster/header_logo.html b/templates/web/westminster/header_logo.html
new file mode 100644
index 000000000..a58fea318
--- /dev/null
+++ b/templates/web/westminster/header_logo.html
@@ -0,0 +1,2 @@
+<a href="https://www.westminster.gov.uk" id="site-logo" title="Home">[% site_name %]</a>
+<a href="[% c.cobrand.base_url IF admin %]/" id="report-cta" title="[%- loc('Report a problem') -%]">[%- loc('Report') -%]</a>
diff --git a/templates/web/westminster/next_steps.html b/templates/web/westminster/next_steps.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/westminster/next_steps.html
diff --git a/templates/web/westminster/report/form/user.html b/templates/web/westminster/report/form/user.html
new file mode 100644
index 000000000..196d2ea4d
--- /dev/null
+++ b/templates/web/westminster/report/form/user.html
@@ -0,0 +1,35 @@
+<!-- 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>
+[% IF c.user_exists OR NOT c.cobrand.social_auth_enabled %]
+ <button type="button" class="btn btn--block hidden-nojs js-new-report-user-show">[% loc('Continue') %]</button>
+[% ELSE %]
+ [% IF c.config.FACEBOOK_APP_ID %]
+ <button name="social_sign_in" id="facebook_sign_in" value="facebook" class="btn btn--block btn--social btn--facebook">
+ <img alt="" src="/i/facebook-icon-32.png" width="17" height="32">
+ [% loc('Log in with Facebook') %]
+ </button>
+ [% END %]
+ [% IF c.cobrand.feature('oidc_login') %]
+ <button name="social_sign_in" id="oidc_sign_in" value="oidc" class="btn btn--block btn--social btn--oidc">
+ [% tprintf(loc('Sign in with %s'), c.cobrand.feature('oidc_login').display_name) %]
+ </button>
+ <small>Receive updates and view your reports</small>
+ [% END %]
+ [% IF c.config.TWITTER_KEY %]
+ <button name="social_sign_in" id="twitter_sign_in" value="twitter" class="btn btn--block btn--social btn--twitter">
+ <img alt="" src="/i/twitter-icon-32.png" width="17" height="32">
+ [% loc('Log in with Twitter') %]
+ </button>
+ [% END %]
+[% END %]
+[% IF 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('Submit report anonymously') %]</button>
+ <small>[% loc('No personal details will be stored, and you will not receive updates about this report.') %]</small>
+[% END %]
+</div>
+<!-- /report/form/user.html -->
diff --git a/templates/web/westminster/report/form/user_loggedout.html b/templates/web/westminster/report/form/user_loggedout.html
new file mode 100644
index 000000000..71a68f216
--- /dev/null
+++ b/templates/web/westminster/report/form/user_loggedout.html
@@ -0,0 +1,2 @@
+<!-- user_loggedout.html -->
+<!-- /user_loggedout.html -->
diff --git a/templates/web/westminster/report/new/_category_extra_field_notice.html b/templates/web/westminster/report/new/_category_extra_field_notice.html
new file mode 100644
index 000000000..cecabd574
--- /dev/null
+++ b/templates/web/westminster/report/new/_category_extra_field_notice.html
@@ -0,0 +1,3 @@
+[% IF meta.datatype_description AND NOT hide_descriptions %]
+ <p class="form-hint">[% meta.datatype_description %]</p>
+[% END %]
diff --git a/templates/web/westminster/report/new/_form_labels.html b/templates/web/westminster/report/new/_form_labels.html
new file mode 100644
index 000000000..2fafc55b0
--- /dev/null
+++ b/templates/web/westminster/report/new/_form_labels.html
@@ -0,0 +1,4 @@
+[%
+SET form_title_placeholder = 'e.g. ‘Rubbish dumped on Example St, next to post box’';
+SET form_detail_placeholder = 'e.g. ‘Six large bags of rubbish, including shoes and clothes…’';
+%] \ No newline at end of file
diff --git a/templates/web/westminster/report/new/roads_message.html b/templates/web/westminster/report/new/roads_message.html
new file mode 100644
index 000000000..dbed24eed
--- /dev/null
+++ b/templates/web/westminster/report/new/roads_message.html
@@ -0,0 +1,5 @@
+<div id="js-roads-responsibility" class="box-warning hidden">
+ <div id="js-not-an-asset" class="hidden js-responsibility-message">
+ <p>Please select <span class="js-roads-asset" data-original="an item">an item</span> from the map on which to make a report.</p>
+ </div>
+</div>
diff --git a/templates/web/westminster/report/new/top_message.html b/templates/web/westminster/report/new/top_message.html
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/templates/web/westminster/report/new/top_message.html
diff --git a/templates/web/westminster/site-name.html b/templates/web/westminster/site-name.html
new file mode 100644
index 000000000..6e69a1843
--- /dev/null
+++ b/templates/web/westminster/site-name.html
@@ -0,0 +1 @@
+Report it
diff --git a/templates/web/westminster/tracking_code.html b/templates/web/westminster/tracking_code.html
new file mode 100644
index 000000000..dec32a3ad
--- /dev/null
+++ b/templates/web/westminster/tracking_code.html
@@ -0,0 +1,12 @@
+[% IF c.config.BASE_URL == "https://www.fixmystreet.com" OR c.config.BASE_URL == "https://staging.fixmystreet.com" %]
+<!-- Google Tag Manager -->
+<script nonce="[% csp_nonce %]">
+(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
+new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
+j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
+'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
+})(window,document,'script','dataLayer','GTM-MVJJRB');</script>
+<!-- End Google Tag Manager -->
+[% ELSE %]
+<!-- Tracking code not inserted as "[% c.config.BASE_URL %]" not "https://www.fixmystreet.com" -->
+[% END %]
diff --git a/templates/web/zurich/about/faq-de-ch.html b/templates/web/zurich/about/faq-de-ch.html
index 121a9b6af..ec6cc8819 100644
--- a/templates/web/zurich/about/faq-de-ch.html
+++ b/templates/web/zurich/about/faq-de-ch.html
@@ -1,4 +1,5 @@
[% INCLUDE 'header.html', title => loc('Help'), bodyclass => 'fullwidthpage' %]
+[% USE date %]
<h1><a name="faq"></a>Hilfe</h1>
@@ -18,10 +19,15 @@
<li>Grünflächen / Spielplätze</li>
<li>Strasse / Trottoir / Platz</li>
<li>VBZ / ÖV</li>
+ [% IF date.format(format = '%Y%m%d') >= 20190710 %]
+ <li>Schädlinge</li>
+ [% END %]
</ul>
+ [% IF date.format(format = '%Y%m%d') < 20190710 %]
<p>Ratten können in der Kategorie «Grünflächen / Spielplätze» gemeldet werden.</p>
+ [% END %]
<h3>Was kann ich nicht über «Züri wie neu» melden?</h3>
diff --git a/templates/web/zurich/admin/bodies/body.html b/templates/web/zurich/admin/bodies/body.html
index aab038ff8..1c1e9a427 100644
--- a/templates/web/zurich/admin/bodies/body.html
+++ b/templates/web/zurich/admin/bodies/body.html
@@ -18,7 +18,7 @@
<th>[% loc('When edited') %]</th>
<th>Kürzel</th>
</tr>
- [% WHILE ( cat = contacts.next ) %]
+ [% FOR cat IN contacts %]
<tr[% IF cat.state == 'deleted' %] class="is-deleted"[% END %]>
<td><a href="[% c.uri_for_action( 'admin/bodies/edit', [ body_id ], cat.category ) %]">[% cat.category_display %]</a></td>
<td>[% cat.email | html %]</td>
@@ -35,7 +35,7 @@
[% IF errors %]
<div class="fms-admin-warning">
- [% errors.values.join('<br>') %]
+ [% FOR error IN errors.values %][% error %][% IF NOT loop.last %]<br>[% END %][% END %]
</div>
[% END %]
diff --git a/templates/web/zurich/admin/bodies/contact-form.html b/templates/web/zurich/admin/bodies/contact-form.html
index 7b59124fb..8449f2d39 100644
--- a/templates/web/zurich/admin/bodies/contact-form.html
+++ b/templates/web/zurich/admin/bodies/contact-form.html
@@ -15,6 +15,11 @@
<input type="text" class="form-control" name="extra[abbreviation]" id="abbreviation" size="30" value="[% contact.get_extra_metadata('abbreviation') | html %]">
</p>
+ <p>
+ <label for="admin_label">Admin-label</label>
+ <input type="text" class="form-control" name="extra[admin_label]" id="admin_label" size="30" value="[% contact.get_extra_metadata('admin_label') | html %]">
+ </p>
+
<p><strong>[% loc('Email:') %] </strong>
<input type="text" class="form-control" name="email" value="[% contact.email | html %]" size="30">
@@ -29,15 +34,12 @@
</div>
<p>
- [% IF contact.in_storage %]
<label for="state">[% loc('State') %]</label>
<select name="state" id="state">
<option value="confirmed"[% ' selected' IF contact.state == 'confirmed' %]>[% loc('Confirmed') %]
+ <option value="inactive"[% ' selected' IF contact.state == 'inactive' %]>[% loc('Inactive') %]
<option value="deleted"[% ' selected' IF contact.state == 'deleted' %]>[% loc('Deleted') %]
</select>
- [% ELSE %]
- <input type="hidden" name="state" value="confirmed" id="confirmed">
- [% END %]
<input type="checkbox" name="photo_required" value="1" id="photo_required"[% ' checked' IF contact.get_extra_metadata('photo_required') %]>
<label class="inline" for="photo_required">[% loc('Photo required') %]</label>
</p>
diff --git a/templates/web/zurich/admin/bodies/form.html b/templates/web/zurich/admin/bodies/form.html
index b625efc44..f9cd4f812 100644
--- a/templates/web/zurich/admin/bodies/form.html
+++ b/templates/web/zurich/admin/bodies/form.html
@@ -20,6 +20,18 @@
</select>
</p>
+ [% IF body AND NOT body.parent AND NOT body.bodies %]
+ <p>
+ <label for="category">[% loc('Category') %]</label>
+ <select class="form-control" name="extra[category]" id="category">
+ <option value="">[% loc('-- Pick a category --') %]</option>
+ [% FOR cat IN c.cobrand.category_options %]
+ <option value="[% cat.category %]"[% ' selected' IF cat.category == body.get_extra_metadata('category') %]>[% cat.category_display | html %]</option>
+ [% END %]
+ </select>
+ </p>
+ [% END %]
+
<p>
<label for="area_ids">[% loc('Area covered') %]</label>
<select class="form-control js-multiple" name="area_ids" id="area_ids" multiple data-none="-- [% loc('Select an area') %] --">
diff --git a/templates/web/zurich/admin/index-dm.html b/templates/web/zurich/admin/index-dm.html
index 4d77cf264..39fa34dcb 100644
--- a/templates/web/zurich/admin/index-dm.html
+++ b/templates/web/zurich/admin/index-dm.html
@@ -1,7 +1,9 @@
[% PROCESS 'admin/header.html' title=loc('Summary') -%]
[% PROCESS 'admin/report_blocks.html' %]
-[% status_message %]
+<div class="index-status">
+[% status_message | safe %]
+</div>
<h2 id="submitted">[% loc('Submitted') %]</h2>
[% INCLUDE list, problems = submitted.all, hash = 'submitted' %]
diff --git a/templates/web/zurich/admin/problem_row.html b/templates/web/zurich/admin/problem_row.html
index 973d9f651..502a7bc39 100644
--- a/templates/web/zurich/admin/problem_row.html
+++ b/templates/web/zurich/admin/problem_row.html
@@ -46,7 +46,7 @@
</td>
[% IF NOT no_edit %]
- <td><a href="[% c.uri_for( 'report_edit', problem.id ) %]">[% loc('Edit') %]</a></td>
+ <td><a href="[% c.uri_for_action( 'admin/reports/edit', [ problem.id ] ) %]">[% loc('Edit') %]</a></td>
[% END %]
</tr>
[%- END -%]
diff --git a/templates/web/zurich/admin/report_edit-sdm.html b/templates/web/zurich/admin/report_edit-sdm.html
index e6b17b8f0..b468bc7a0 100644
--- a/templates/web/zurich/admin/report_edit-sdm.html
+++ b/templates/web/zurich/admin/report_edit-sdm.html
@@ -7,12 +7,12 @@
PROCESS 'admin/report_blocks.html'
-%]
-[% map_html %]
+[% map_html | safe %]
</div>
<div id="map_sidebar">
-<form method="post" action="[% c.uri_for( 'report_edit', problem.id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+<form method="post" action="[% c.uri_for_action( 'admin/reports/edit', [ problem.id ] ) %]" 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" >
@@ -39,23 +39,11 @@
<dd class="screen-no-space-after">
<strong>[% PROCESS format_date this_date=problem.created %] [% problem.created.hms %]</strong>
</dd>
- <dt class="print-only">[% loc('Coordinates:') %] <!-- Koordinaten --></dt>
- <dd class="screen-no-space-after print-no-space-after">
- [% problem.local_coords.join(',') %]
- <input type="hidden" name="latitude" id="fixmystreet.latitude" value="[% problem.latitude %]">
- <input type="hidden" name="longitude" id="fixmystreet.longitude" value="[% problem.longitude %]">
- </dd>
- <dd class="screen-no-space-after print-no-space-after">
- [% IF problem.used_map %]
- [% loc('Used map') %]
- [% ELSE %]
- [% loc("Didn't use map") %]
- [% END %]
- </dd>
- <dd>[%
- safe = problem.postcode | html;
- tprintf( loc('originally entered: &ldquo;%s&rdquo;'), safe )
- %]</dd>
+
+ <dd>[% c.cobrand.admin_district_lookup(problem) %]</dd>
+
+ <input type="hidden" name="latitude" id="fixmystreet.latitude" value="[% problem.latitude %]">
+ <input type="hidden" name="longitude" id="fixmystreet.longitude" value="[% problem.longitude %]">
<dt class="print-only">[% loc('Reported by:') %] <!-- Meldende Person --></dt>
<dd>
@@ -78,10 +66,6 @@
<dt>[% loc('Time spent (in minutes):') %]</dt>
<dd>[% problem.get_time_spent %]</dd>
- <dd>
- [% status_message %]
- </dd>
-
[% IF problem.photo %]
<dd>
[% FOR photo IN problem.photos %]
@@ -102,6 +86,9 @@
<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>
+
+[% 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>
<ul class="no-bullets screen-only">
diff --git a/templates/web/zurich/admin/report_edit.html b/templates/web/zurich/admin/reports/edit.html
index d6f9c4c39..147022981 100644
--- a/templates/web/zurich/admin/report_edit.html
+++ b/templates/web/zurich/admin/reports/edit.html
@@ -7,14 +7,14 @@
PROCESS 'admin/report_blocks.html'
-%]
-[% map_html %]
+[% map_html | safe %]
</div>
<div id="map_sidebar">
[% pstate = problem.get_extra_metadata('closure_status') || problem.state %]
-<form id="report_edit" method="post" action="[% c.uri_for( 'report_edit', problem.id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
+<form id="report_edit" method="post" action="[% c.uri_for_action( 'admin/reports/edit', [ problem.id ] ) %]" 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" >
@@ -58,23 +58,11 @@
<dd class="screen-no-space-after">
<strong>[% PROCESS format_date this_date=problem.created %] [% problem.created.hms %]</strong>
</dd>
- <dt class="print-only">[% loc('Coordinates:') %] <!-- Koordinaten --></dt>
- <dd class="screen-no-space-after print-no-space-after">
- [% problem.local_coords.join(',') %]
- <input type="hidden" name="latitude" id="fixmystreet.latitude" value="[% problem.latitude %]">
- <input type="hidden" name="longitude" id="fixmystreet.longitude" value="[% problem.longitude %]">
- </dd>
- <dd class="screen-no-space-after print-no-space-after">
- [% IF problem.used_map %]
- [% loc('Used map') %]
- [% ELSE %]
- [% loc("Didn't use map") %]
- [% END %]
- </dd>
- <dd>[%
- safe = problem.postcode | html;
- tprintf( loc('originally entered: &ldquo;%s&rdquo;'), safe )
- %]</dd>
+
+ <dd>[% c.cobrand.admin_district_lookup(problem) %]</dd>
+
+ <input type="hidden" name="latitude" id="fixmystreet.latitude" value="[% problem.latitude %]">
+ <input type="hidden" name="longitude" id="fixmystreet.longitude" value="[% problem.longitude %]">
[% SET fields = problem.get_extra_fields; IF fields.size %]
<dd>
@@ -129,7 +117,7 @@
<div class="admin-report-edit admin-report-edit--interact">
-[% status_message %]
+[% status_message | safe %]
<dl [% IF status_message %]class="with-message"[% END %]>
@@ -188,7 +176,7 @@
<label for="body_subdivision">[% loc('Assign to subdivision:') %]</label>
<select name="body_subdivision" id="body_subdivision" class="form-control assignation__select">
<option value="">--</option>
- [% list %]
+ [% list | safe %]
</select>
</li>
[% END %]
@@ -280,6 +268,7 @@
[% ELSE %]
[% loc('Message to competent body:') %]
[% END %]
+ [% problem.body(c).endpoint %]
</h2>
<div class="admin-external-message">
[% problem.extra.external_message | html_para %]
diff --git a/templates/web/zurich/admin/reports.html b/templates/web/zurich/admin/reports/index.html
index 7e425c8ec..481dfb49d 100644
--- a/templates/web/zurich/admin/reports.html
+++ b/templates/web/zurich/admin/reports/index.html
@@ -1,7 +1,7 @@
[% PROCESS 'admin/header.html' title=loc('Search Reports') %]
[% PROCESS 'admin/report_blocks.html' %]
-<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">
<p><label for="search">[% loc('Search:') %]</label> <input type="text" name="search" size="30" id="search" value="[% searched | html %]">
</form>
diff --git a/templates/web/zurich/admin/template_edit.html b/templates/web/zurich/admin/templates/edit.html
index e954d566c..8a95f2a04 100644
--- a/templates/web/zurich/admin/template_edit.html
+++ b/templates/web/zurich/admin/templates/edit.html
@@ -11,11 +11,14 @@
</h3>
<form method="post"
- action="[% c.uri_for('templates', body.id, rt.id || 'new' ) %]"
+ action="[% c.uri_for_action('/admin/templates/edit', body.id, rt.id || 'new' ) %]"
enctype="application/x-www-form-urlencoded"
accept-charset="utf-8"
class="validate">
+ [% IF errors.title %]
+ <div class="form-error">[% errors.title %]</div>
+ [% END %]
<p>
<strong>[% loc('Title:') %] </strong>
<input type="text" name="title" class="form-control required" size="30" value="[% rt.title| html %]">
diff --git a/templates/web/zurich/admin/templates.html b/templates/web/zurich/admin/templates/view.html
index 2db9e2e34..7b95c8a99 100644
--- a/templates/web/zurich/admin/templates.html
+++ b/templates/web/zurich/admin/templates/view.html
@@ -17,12 +17,12 @@
<td> [% t.title %] </td>
<td> [% t.text %] </td>
<td> [% t.created %] </td>
- <td> <a href="[% c.uri_for('templates', body.id, t.id) %]" class="btn">[% loc('Edit') %]</a> </td>
+ <td> <a href="[% c.uri_for_action('/admin/templates/edit', body.id, t.id) %]" class="btn">[% loc('Edit') %]</a> </td>
</tr>
[% END %]
</tbody>
</table>
-<a href="[% c.uri_for('templates', body.id, 'new') %]" class="btn">[% loc('New template') %]</a>
+<a href="[% c.uri_for_action('/admin/templates/edit', body.id, 'new') %]" class="btn">[% loc('New template') %]</a>
[% INCLUDE 'admin/footer.html' %]
diff --git a/templates/web/zurich/admin/update_edit.html b/templates/web/zurich/admin/update_edit.html
index bcf849732..314ae3e2b 100644
--- a/templates/web/zurich/admin/update_edit.html
+++ b/templates/web/zurich/admin/update_edit.html
@@ -1,7 +1,7 @@
[% INCLUDE 'admin/header.html' title=tprintf(loc('Editing update %d'), update.id ) -%]
[% PROCESS 'admin/report_blocks.html' %]
-[% status_message %]
+[% INCLUDE status_message %]
<form method="post" action="[% c.uri_for( 'update_edit', update.id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">
<input type="hidden" name="token" value="[% csrf_token %]" >
diff --git a/templates/web/zurich/header.html b/templates/web/zurich/header.html
index b453465f7..347bf6b70 100644
--- a/templates/web/zurich/header.html
+++ b/templates/web/zurich/header.html
@@ -9,6 +9,7 @@
<meta name="HandHeldFriendly" content="true">
<meta name="mobileoptimized" content="0">
+ [% INCLUDE 'header_opengraph.html' %]
[% INCLUDE 'header/css.html' %]
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/themes/redmond/jquery-ui.css">
@@ -19,6 +20,8 @@
</head>
<body class="[% bodyclass | html IF bodyclass %]">
+ [% INCLUDE 'debug_header.html' %]
+
<div class="wrapper">
<div class="table-cell clearfix">
<header id="site-header" role="banner">
@@ -78,6 +81,4 @@
[% INCLUDE 'nav_over_content.html' %]
[% END %]
- [% pre_container_extra %]
-
- <!-- [% INCLUDE 'debug_header.html' %] -->
+ [% pre_container_extra | safe %]
diff --git a/templates/web/zurich/header/title.html b/templates/web/zurich/header/title.html
new file mode 100644
index 000000000..118817e48
--- /dev/null
+++ b/templates/web/zurich/header/title.html
@@ -0,0 +1,4 @@
+<title>
+ [% "$title :: " | html IF title %]
+ Züri wie neu – Infrastrukturschäden melden – Stadt Zürich
+</title>
diff --git a/templates/web/zurich/header_opengraph.html b/templates/web/zurich/header_opengraph.html
new file mode 100644
index 000000000..0a7dc42d7
--- /dev/null
+++ b/templates/web/zurich/header_opengraph.html
@@ -0,0 +1,8 @@
+ <meta property="og:url" content="[% c.cobrand.base_url %][% c.req.uri.path %]">
+ <meta property="og:title" content="[% title || site_name | html %]">
+ <meta property="og:site_name" content="[% site_name %]">
+ [% IF c.req.uri.path == '/' %]
+ <meta name="description" property="og:description" content="Melden Sie Schäden an der Infrastruktur der Stadt Zürich wie Schlaglöcher, defekte Beleuchtung/Signalisation, Graffitis, Schädlinge oder Abfall auf öffentlichem Grund.">
+ [% END %]
+ <meta property="og:type" content="website">
+ [% INCLUDE 'header_opengraph_image.html' %]
diff --git a/templates/web/zurich/maps/noscript_map.html b/templates/web/zurich/maps/noscript_map.html
index 4925f9260..86cbdaec8 100644
--- a/templates/web/zurich/maps/noscript_map.html
+++ b/templates/web/zurich/maps/noscript_map.html
@@ -6,7 +6,7 @@
[%- FOR tile IN row -%]
[%- top_px = tile.row_offset * map.tile_size -%]
[%- left_px = tile.col_offset * map.tile_size %]
- <[% map.img_type %]
+ <[% map.img_type | safe %]
class="square-map__tile"
alt="[% tile.alt %]"
id="[% nsm_prefix %]t[% tile.dotted_id %]"
@@ -23,23 +23,23 @@
[% ELSE %]
<div class="noscript">
<div id="[% nsm_prefix %]drag">
- <[% map.img_type %]
+ <[% map.img_type | safe %]
alt="NW map tile" id="[% nsm_prefix %]t2.2"
name="tile_[% map.x_tile - 1 %].[% map.y_tile - 1 %]"
src="[% map.tiles.0 %]"
style="top:0; left:0;">
- <[% map.img_type %]
+ <[% map.img_type | safe %]
alt="NE map tile" id="[% nsm_prefix %]t2.3"
name="tile_[% map.x_tile %].[% map.y_tile - 1 %]"
src="[% map.tiles.1 %]"
style="top:0px; left:256px;">
<br>
- <[% map.img_type %]
+ <[% map.img_type | safe %]
alt="SW map tile" id="[% nsm_prefix %]t3.2"
name="tile_[% map.x_tile - 1 %].[% map.y_tile %]"
src="[% map.tiles.2 %]"
style="top:256px; left:0;">
- <[% map.img_type %]
+ <[% map.img_type | safe %]
alt="SE map tile" id="[% nsm_prefix %]t3.3"
name="tile_[% map.x_tile %].[% map.y_tile %]"
src="[% map.tiles.3 %]"
diff --git a/templates/web/zurich/maps/zurich.html b/templates/web/zurich/maps/zurich.html
index 33c70bb0f..f3a9bdc7f 100644
--- a/templates/web/zurich/maps/zurich.html
+++ b/templates/web/zurich/maps/zurich.html
@@ -7,7 +7,7 @@
[% INCLUDE maps/wmts_config.html %]
[% UNLESS around_page %]
<p class="sub-map-links" id="sub_map_links">
- [% map_sub_links %]
+ [% map_sub_links | safe %]
</p>
[% END %]
[% END %]
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 17e308f07..376429dad 100644
--- a/templates/web/zurich/report/new/fill_in_details_form.html
+++ b/templates/web/zurich/report/new/fill_in_details_form.html
@@ -1,4 +1,4 @@
-[% sidebar_html %]
+[% sidebar_html | safe %]
<div id="report-a-problem-main">
<h1>[% loc('Reporting a problem') %]</h1>
@@ -7,7 +7,7 @@
<fieldset>
<div id="problem_form">
- [% INCLUDE 'report/new/form_heading.html' %]
+ [% INCLUDE 'report/new/form_after_heading.html' %]
[% IF field_errors.bodies %]
diff --git a/templates/web/zurich/reports/_list-filter-status.html b/templates/web/zurich/reports/_list-filter-status.html
new file mode 100644
index 000000000..bf56821f6
--- /dev/null
+++ b/templates/web/zurich/reports/_list-filter-status.html
@@ -0,0 +1,7 @@
+<select class="form-control js-multiple" name="status" id="statuses" multiple
+ data-all="[% loc('All') %]" data-all-options='["open","closed"]'
+ [% INCLUDE 'reports/_status_filter_options.html' %]
+>
+ <option value="open"[% ' selected' IF filter_status.open %]>[% prettify_state('confirmed') %]</option>
+ <option value="closed"[% ' selected' IF filter_status.closed %]>[% prettify_state('closed') %]</option>
+</select>
diff --git a/templates/web/zurich/reports/index.html b/templates/web/zurich/reports/index.html
index d6d7a541a..f2a604c25 100755
--- a/templates/web/zurich/reports/index.html
+++ b/templates/web/zurich/reports/index.html
@@ -5,7 +5,7 @@
INCLUDE 'header.html',
title = loc('Summary reports');
%]
-[% map_html %]
+[% map_html | safe %]
</div>
<div id="map_sidebar">
diff --git a/templates/web/zurich/tracking_code.html b/templates/web/zurich/tracking_code.html
index bffd0fd6f..cf7fbbadd 100644
--- a/templates/web/zurich/tracking_code.html
+++ b/templates/web/zurich/tracking_code.html
@@ -2,7 +2,7 @@
SET ga_code = 'UA-38427437-1';
SET ga_code = 'UA-39223200-1' IF c.config.BASE_URL == "https://www.zueriwieneu.ch";
%]
-<script type="text/javascript">
+<script nonce="[% csp_nonce %]">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '[% ga_code %]']);