diff options
Diffstat (limited to 'templates')
63 files changed, 2733 insertions, 107 deletions
diff --git a/templates/email/default/submit-brent.txt b/templates/email/default/submit-brent.txt index fcddcc8f1..4b3e20968 100644 --- a/templates/email/default/submit-brent.txt +++ b/templates/email/default/submit-brent.txt @@ -40,6 +40,5 @@ also welcome any other feedback you may have. FixMyStreet is now available for full integration into council websites, making life easier for both you and your residents. -Read more here: -http://www.mysociety.org/fixmystreet-for-local-council-websites/ +Read more here: http://www.fixmystreet.com/for-councils diff --git a/templates/email/default/submit-example.txt b/templates/email/default/submit-example.txt index 61850cafa..6d1815cd1 100644 --- a/templates/email/default/submit-example.txt +++ b/templates/email/default/submit-example.txt @@ -57,6 +57,5 @@ feedback you may have. FixMyStreet is now available for full integration into council websites, making life easier for both you and your residents. -Read more here: -http://www.mysociety.org/fixmystreet-for-local-council-websites/ +Read more here: http://www.fixmystreet.com/for-councils diff --git a/templates/email/default/submit.txt b/templates/email/default/submit.txt index 2542e786b..20fa17096 100644 --- a/templates/email/default/submit.txt +++ b/templates/email/default/submit.txt @@ -40,6 +40,5 @@ also welcome any other feedback you may have. FixMyStreet is now available for full integration into council websites, making life easier for both you and your residents. -Read more here: -http://www.mysociety.org/fixmystreet-for-local-council-websites/ +Read more here: http://www.fixmystreet.com/for-councils diff --git a/templates/web/default/alert/index.html b/templates/web/default/alert/index.html index d8478cf98..274d61780 100644 --- a/templates/web/default/alert/index.html +++ b/templates/web/default/alert/index.html @@ -30,7 +30,7 @@ postcode or street name and area:' ) %] <h2>[% loc('Some photos of recent reports') %]</h2> [% FOREACH p IN photos %] <a href="/report/[% p.id %]"><img border="0" height="100" - src="/photo?tn=1;id=[% p.id %]" alt="[% p.title | html %]" title="[% p.title | html %]"></a> + src="/photo/[% p.id %].tn.jpeg" alt="[% p.title | html %]" title="[% p.title | html %]"></a> [% END %] </div> [% END %] diff --git a/templates/web/default/alert/list.html b/templates/web/default/alert/list.html index c763331cc..9f2bd69d0 100644 --- a/templates/web/default/alert/list.html +++ b/templates/web/default/alert/list.html @@ -27,7 +27,7 @@ <h2>[% loc('Photos of recent nearby reports') %]</h2> [% FOREACH p IN photos %] <a href="/report/[% p.id %]"><img border="0" height="100" - src="/photo?tn=1;id=[% p.id %]" alt="[% p.title | html %]" title="[% p.title | html %]"></a> + src="/photo/[% p.id %].tn.jpeg" alt="[% p.title | html %]" title="[% p.title | html %]"></a> [% END %] </div> [% END %] diff --git a/templates/web/default/around/around_index.html b/templates/web/default/around/around_index.html index c07eb2ca2..012354f4a 100644 --- a/templates/web/default/around/around_index.html +++ b/templates/web/default/around/around_index.html @@ -39,7 +39,7 @@ [% IF partial_token %] <p style="margin-top: 0; color: #cc0000;"> - <img align="right" src="/photo?id=[% report.id %]" hspace="5"> + <img align="right" src="/photo/[% report.id %].jpeg" hspace="5"> [% loc("Thanks for uploading your photo. We now need to locate your problem, so please enter a nearby street name or postcode in the box below :") %] </p> [% END %] diff --git a/templates/web/default/around/display_location.html b/templates/web/default/around/display_location.html index b5705a77b..27f54f346 100755 --- a/templates/web/default/around/display_location.html +++ b/templates/web/default/around/display_location.html @@ -55,9 +55,9 @@ [% IF c.cobrand.country == 'GB' || c.cobrand.country == 'NO' %] | [% IF c.req.params.all_pins %] - <a id='all_pins_link' rel='nofollow' href='[% c.uri_with( { no_pins => undef, all_pins => undef } ) %]'>[% loc('Hide stale reports') %]</a> + <a id='all_pins_link' rel='nofollow' href='[% c.uri_with( { no_pins => undef, all_pins => undef } ) %]'>[% loc('Hide old') %]</a> [% ELSE %] - <a id='all_pins_link' rel='nofollow' href='[% c.uri_with( { no_pins => undef, all_pins => 1 } ) %]'>[% loc('Include stale reports') %]</a> + <a id='all_pins_link' rel='nofollow' href='[% c.uri_with( { no_pins => undef, all_pins => 1 } ) %]'>[% loc('Show old') %]</a> [% END %] [% END %] </p> diff --git a/templates/web/default/auth/general.html b/templates/web/default/auth/general.html index 5407e56e1..c2249fa46 100644 --- a/templates/web/default/auth/general.html +++ b/templates/web/default/auth/general.html @@ -20,7 +20,7 @@ [% IF loc_email_error %] <div class="form-error">[% loc_email_error %]</div> [% ELSIF sign_in_error %] - <div class="form-error">[% loc('There was a problem with your email/password combination. Passwords and user accounts are a brand <strong>new</strong> service, so you probably do not have one yet – please fill in the right hand side of this form to get one.') %]</div> + <div class="form-error">[% loc('There was a problem with your email/password combination. If you cannot remember your password, or do not have one, please fill in the ‘sign in by email’ section of the form.') %]</div> [% END %] <div class="form-field"> diff --git a/templates/web/default/faq/faq-en-gb.html b/templates/web/default/faq/faq-en-gb.html index 599d3a37e..ed9d53c24 100755 --- a/templates/web/default/faq/faq-en-gb.html +++ b/templates/web/default/faq/faq-en-gb.html @@ -93,7 +93,7 @@ href="https://secure.mysociety.org/donate/">please do</a>.</dd> to find out where reports go at the moment. Also <a href="/contact">contact us</a> to update the address or addresses we use.</dd> <dt>I’m from a council, can we have FixMyStreet on our website?</dt> - <dd>Yes you can! We offer branded, hosted versions of FixMyStreet for local council websites. <a href="http://www.mysociety.org/fixmystreet-for-local-council-websites/">Full details</a>.</dd> + <dd>Yes you can! We offer branded, hosted versions of FixMyStreet for local council websites. <a href="/for-councils">Full details</a>.</dd> <dt>Do you remove silly or illegal content?</dt> <dd>FixMyStreet is not responsible for the content and accuracy of material submitted by its users. We reserve the right to edit or remove any diff --git a/templates/web/default/index.html b/templates/web/default/index.html index 06f3ef771..e5f98b0c5 100644 --- a/templates/web/default/index.html +++ b/templates/web/default/index.html @@ -63,7 +63,7 @@ <p id="front_photos"> [% FOREACH p IN recent_photos %] <a href="/report/[% p.id %]"><img border="0" height="100" - src="/photo?tn=1;id=[% p.id %]" alt="[% p.title | html %]" title="[% p.title | html %]"></a> + src="/photo/[% p.id %].tn.jpeg" alt="[% p.title | html %]" title="[% p.title | html %]"></a> [% END %] </p> [% END %] diff --git a/templates/web/default/js_validation_msgs.html b/templates/web/default/js_validation_msgs.html index 0263f75ce..f89ab4bcc 100644 --- a/templates/web/default/js_validation_msgs.html +++ b/templates/web/default/js_validation_msgs.html @@ -5,7 +5,7 @@ detail: '[% loc('Please enter some details') %]', name: { required: '[% loc('Please enter your name') %]', - 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') %]' + 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') %]' }, category: '[% loc('Please choose a category') %]', rznvy: { diff --git a/templates/web/default/maps/openlayers.html b/templates/web/default/maps/openlayers.html index 1c0a32278..e815642f1 100644 --- a/templates/web/default/maps/openlayers.html +++ b/templates/web/default/maps/openlayers.html @@ -59,8 +59,8 @@ var fixmystreet = { east = c.uri_with( { lat = map.compass.east.0, lon = map.compass.east.1, zoom = map.zoom } ) west = c.uri_with( { lat = map.compass.west.0, lon = map.compass.west.1, zoom = map.zoom } ) world = c.uri_with( { zoom = 0 } ); - SET zoom_in = c.uri_with( { zoom = map.zoom + 1 } ) IF map.zoom < map.numZoomLevels - 1; - SET zoom_out = c.uri_with( { zoom = map.zoom - 1 } ) IF map.zoom > 0; + SET zoom_in = c.uri_with( { lat = map.latitude, lon = map.longitude, zoom = map.zoom + 1 } ) IF map.zoom < map.numZoomLevels - 1; + SET zoom_out = c.uri_with( { lat = map.latitude, lon = map.longitude, zoom = map.zoom - 1 } ) IF map.zoom > 0; SET zoom_in = '#' IF map.zoom >= map.numZoomLevels - 1; SET zoom_out = '#' IF map.zoom <= 0; %] @@ -78,15 +78,11 @@ var fixmystreet = { [% BLOCK pin %] -[% cols = { - red = 'R', green = 'G', blue = 'B', purple = 'P', - } -%] [% IF pin.id %] <a title="[% pin.title | html %]" href="[% c.uri_for('/report/' _ pin.id) %]"> [%- END -%] -<img border="0" class="pin" src="[% c.uri_for('/i/pin' _ cols.${pin.colour} _ '.png') %]" - alt="[% loc('Problem') %]" style="top:[% pin.py - 58 %]px; left:[% pin.px - 22 %]px; position: absolute;"> +<img border="0" class="pin" src="[% c.uri_for('/i/pin-' _ pin.colour _ '.png') %]" + alt="[% loc('Problem') %]" style="top:[% pin.py - 64 %]px; left:[% pin.px - 24 %]px; position: absolute;"> [%- IF pin.id -%] </a> [% END %] diff --git a/templates/web/default/maps/pins_js.html b/templates/web/default/maps/pins_js.html index 355fffaba..d9c6b3531 100644 --- a/templates/web/default/maps/pins_js.html +++ b/templates/web/default/maps/pins_js.html @@ -1,4 +1,4 @@ [ [% FOR pin IN map.pins -%] - [ [% pin.latitude %], [% pin.longitude %], '[% pin.colour %]', '[% pin.id %]', "[% pin.title | escape_js %]" ] + [ [% pin.latitude %], [% pin.longitude %], '[% pin.colour %]', '[% pin.id %]', "[% pin.title | escape_js %]", '[% pin.type %]' ] [%- IF !loop.last %],[% END %] [% END %] ] diff --git a/templates/web/default/report/new/fill_in_details_form.html b/templates/web/default/report/new/fill_in_details_form.html index 2809b9c0e..ed8b07ea1 100644 --- a/templates/web/default/report/new/fill_in_details_form.html +++ b/templates/web/default/report/new/fill_in_details_form.html @@ -95,7 +95,7 @@ <input type="hidden" name="upload_fileid" value="[% upload_fileid %]" /> [% END %] [% IF report.photo %] - <img align="right" src="/photo?id=[% report.id %]" hspace="5"> + <img align="right" src="/photo/[% report.id %].jpeg" hspace="5"> [% END %] [% END %] diff --git a/templates/web/default/reports/council.html b/templates/web/default/reports/council.html index 797d34d6b..ec9efbdbf 100755 --- a/templates/web/default/reports/council.html +++ b/templates/web/default/reports/council.html @@ -77,13 +77,6 @@ Its area is now covered by <a href="/reports/Bedford">Bedford Borough Council</a [% INCLUDE 'reports/cobrand_stats.html' %] -[% IF c.cobrand.moniker == 'fixmystreet' %] -<p class="promo"> - FixMyStreet is now available for local council websites. - <a href="http://www.mysociety.org/fixmystreet-for-local-council-websites/">Find out more</a>. -</p> -[% END %] - [% INCLUDE 'pagination.html', param = 'p' %] [% INCLUDE column diff --git a/templates/web/default/static/fun.html b/templates/web/default/static/fun.html index abe9d4028..00976f3ec 100644 --- a/templates/web/default/static/fun.html +++ b/templates/web/default/static/fun.html @@ -10,7 +10,7 @@ Do let us know if you find any more.</p> <ul style='list-style-type: none; margin:0; padding:0'> -<li><img src='http://www.fixmystreet.com/photo?id=9468' align='right' hspace=8> +<li><img src='http://www.fixmystreet.com/photo/9468.jpeg' align='right' hspace=8> <h2>Dumped Piano (right)</h2> <p>The reporter of this problem summed it up with their report, which consisted solely of the one character “!”. — @@ -20,7 +20,7 @@ Do let us know if you find any more.</p> <p>“A seagull is attacking various cars within this road. He starts at around 05:45 every morning and continues until around 19:30. This causes a lot of noisy banging and wakes up children.” — <a href='http://www.fixmystreet.com/report/2722'>Problem report</a> -<li><img src='http://www.fixmystreet.com/photo?id=6553' align='right' hspace=8> +<li><img src='http://www.fixmystreet.com/photo/6553.jpeg' align='right' hspace=8> <h2>Boxes full of cheese dumped (right)</h2> <p>“About a dozen boxes full of mozzarella cheese have been dumped opposite 3 rufford street. if it warms up we could have nasty road topping problem (seriously there is a lot of cheese)” — <a href='http://www.fixmystreet.com/report/6553'>Problem report</a> diff --git a/templates/web/fixmystreet/alert/_list.html b/templates/web/fixmystreet/alert/_list.html new file mode 100644 index 000000000..e9f877466 --- /dev/null +++ b/templates/web/fixmystreet/alert/_list.html @@ -0,0 +1,89 @@ + <input type="hidden" name="type" value="local"> + <input type="hidden" name="pc" value="[% pc | html %]"> + <input type="hidden" name="latitude" value="[% latitude | html %]"> + <input type="hidden" name="longitude" value="[% longitude | html %]"> + + <p> + [% IF pretty_pc %] + [% tprintf( loc('Here are the types of local problem alerts for ‘%s’.'), pretty_pc ) %] + [% END %] + [% loc('Select which type of alert you\'d like and click the button for an RSS feed, or enter your email address to subscribe to an email alert.') %] + </p> + + [% INCLUDE 'errors.html' %] + + <p> + [% loc('The simplest alert is our geographic one:') %] + </p> + + <p> + <input type="radio" name="feed" id="[% rss_feed_id %]" value="[% rss_feed_id %]"[% IF rss_feed_id == selected_feed || selected_feed == '' %] checked[% END %]> + <label class="inline" for="[% rss_feed_id %]">[% tprintf( loc('Problems within %.1fkm of this location'), population_radius ) %]</label> + <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> + <br /> + [% loc('(a default distance which covers roughly 200,000 people)') %] + </p> + + <p id="rss_local_alt"> + [% loc('(alternatively the RSS feed can be customised, within') %] + <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>) + </p> + + <p> + [% loc("Or you can subscribe to an alert based upon what ward or council you’re in:") %] + </p> + + [% IF reported_to_options %] + <p><strong> + [% loc('Problems within the boundary of:') %] + </strong></p> + <ul class="plain-list"> + [% ELSE %] + <ul id="rss_feed" class="plain-list"> + [% END %] + + [% FOREACH option IN options %] + <li[% IF ! (loop.count % 2) %] class="a"[% END %]> + <input type="radio" name="feed" id="[% option.id %]" value="[% option.id %]"[% IF option.id == selected_feed %] checked[% END %]> + <a href="[% option.uri %]"><img src="/i/feed.png" width="16" height="16" +title="[% option.rss_text %]" alt="RSS feed" border="0"></a> + <label class="inline" for="[% option.id %]">[% option.text %]</label> + </li> + [% END %] +</ul> + [% IF reported_to_options %] + <p><strong> + [% loc('Or problems reported to:') %] + </strong></p> + <ul class="plain-list"> + [% FOREACH option IN reported_to_options %] + <li[% IF ! (loop.count % 2) %] class="a"[% END %]> + <input type="radio" name="feed" id="[% option.id %]" value="[% option.id %]"[% IF option.id == selected_feed %] checked[% END %]> + <a href="[% option.uri %]"><img src="/i/feed.png" width="16" height="16" + title="[% option.rss_text %]" alt="RSS feed" border="0"></a> + <label class="inline" for="[% option.id %]">[% option.text %]</label> + </li> + [% END %] + </ul> + <p><small> + [% loc( 'FixMyStreet sends different categories of problem +to the appropriate council, so problems within the boundary of a particular council +might not match the problems sent to that council. For example, a graffiti report +will be sent to the district council, so will appear in both of the district +council’s alerts, but will only appear in the "Within the boundary" alert +for the county council.' ) %] + </small></p> + [% END %] + + <input id="alert_rss_button" class="green-btn" type="submit" name="rss" value="[% loc('Give me an RSS feed') %]"> + + <p id="alert_or"> + [% loc('or') %] + </p> + + [% UNLESS c.user_exists %] + <label for="rznvy">[% loc('Your email') %]</label> + <input type="text" id="rznvy" name="rznvy" value="[% rznvy | html %]"> + [% END %] + <input id="alert_email_button" style="margin-top:1em;" class="green-btn" type="submit" name="alert" value="[% loc('Subscribe me to an email alert') %]"> + diff --git a/templates/web/fixmystreet/alert/choose.html b/templates/web/fixmystreet/alert/choose.html new file mode 100644 index 000000000..312b9f520 --- /dev/null +++ b/templates/web/fixmystreet/alert/choose.html @@ -0,0 +1,14 @@ +[% INCLUDE 'header.html', title => loc('Local RSS feeds and email alerts') %] + +<h1>[% loc('Local RSS feeds and email alerts') %]</h1> + +[% IF possible_location_matches %] + <p>[% loc('We found more than one match for that location. We show up to ten matches, please try a different search if yours is not here.') %]</p> + <ul class="pc_alternatives plain-list"> + [% FOREACH match IN possible_location_matches %] + <li><a href="[% choose_target_uri %]?latitude=[% match.latitude | uri %];longitude=[% match.longitude | uri %]">[% match.address | html %]</a></li> + [% END %] + </ul> +[% END %] + +[% INCLUDE 'footer.html' %] diff --git a/templates/web/fixmystreet/alert/index.html b/templates/web/fixmystreet/alert/index.html new file mode 100644 index 000000000..7bec66305 --- /dev/null +++ b/templates/web/fixmystreet/alert/index.html @@ -0,0 +1,42 @@ +[% INCLUDE 'header.html', title = loc('Local RSS feeds and email alerts'), bodyclass = 'twothirdswidthpage' %] + +<h1>[% loc('Local RSS feeds and email alerts') %]</h1> + +<p> +[% loc('FixMyStreet 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.') %] +</p> + +[% IF location_offshore %] + <div class="error">[% loc('That location does not appear to be covered by a council, perhaps it is offshore - please try somewhere more specific.') %]</div> +[% ELSIF location_error %] + <div class="error">[% location_error %]</div> +[% ELSE %] + [% INCLUDE 'errors.html' %] +[% END %] + +<p>[% loc('To find out what local alerts we have for you, please enter your GB + postcode or street name and area' ) %]</p> +<form method="get" action="/alert/list" class="full-width"> + <fieldset> + <div class="form-txt-submit-box"> + <input type="text" name="pc" value="[% pc | html %]" placeholder="[% loc('e.g. ‘B2 4QA’ or ‘Tib St, Manchester’') %]"> + <input class="green-btn" type="submit" value="[% loc('Go') %]"> + </div> + </fieldset> +</form> + +[% IF photos.size %] +<div class="sticky-sidebar"> + <aside> + <h2>[% loc('Some photos of recent reports') %]</h2> + [% FOREACH p IN photos %] + <a href="/report/[% p.id %]"><img border="0" height="100" + src="/photo/[% p.id %].tn.jpeg" alt="[% p.title | html %]" title="[% p.title | html %]"></a> + [% END %] + </aside> +</div> +[% END %] + +[% INCLUDE 'footer.html' %] diff --git a/templates/web/fixmystreet/alert/list-ajax.html b/templates/web/fixmystreet/alert/list-ajax.html new file mode 100644 index 000000000..639af6f07 --- /dev/null +++ b/templates/web/fixmystreet/alert/list-ajax.html @@ -0,0 +1,9 @@ +[% IF pretty_pc %] + [% + pretty_pc = pretty_pc | html | replace(' ', ' '); + %] +[% END %] + +<div id="alerts"> + [% INCLUDE 'alert/_list.html' %] +</div> diff --git a/templates/web/fixmystreet/alert/list.html b/templates/web/fixmystreet/alert/list.html new file mode 100644 index 000000000..8305fff6f --- /dev/null +++ b/templates/web/fixmystreet/alert/list.html @@ -0,0 +1,40 @@ +[% + IF pretty_pc; + title = tprintf( loc("Local RSS feeds and email alerts for ‘%s’"), pretty_pc ); + ELSE; + title = loc('Local RSS feeds and email alerts'); + END; +%] + +[% INCLUDE 'header.html', title = title, bodyclass = 'twothirdswidthpage' %] + +[% IF pretty_pc %] + [% + pretty_pc = pretty_pc | html | replace(' ', ' '); + title = tprintf( loc("Local RSS feeds and email alerts for ‘%s’"), pretty_pc ); + %] +[% END %] + + +<h1>[% title %]</h1> + +<form id="alerts" name="alerts" method="post" action="/alert/subscribe"> + +[%# XXX These photos should perhaps be in a vertical column on the right hand side, as currently. %] + [% IF photos.size %] + <div class="sticky-sidebar"> + <aside> + <h2>[% loc('Photos of recent nearby reports') %]</h2> + [% FOREACH p IN photos %] + <a href="/report/[% p.id %]"><img border="0" height="100" + src="/photo/[% p.id %].tn.jpeg" alt="[% p.title | html %]" title="[% p.title | html %]"></a> + [% END %] + </aside> + </div> + [% END %] + + [% INCLUDE 'alert/_list.html' %] + +</form> + +[% INCLUDE 'footer.html' %] diff --git a/templates/web/fixmystreet/alert/updates.html b/templates/web/fixmystreet/alert/updates.html new file mode 100644 index 000000000..2240844e4 --- /dev/null +++ b/templates/web/fixmystreet/alert/updates.html @@ -0,0 +1,32 @@ +[% title = loc('Local RSS feeds and email alerts') %] + +[% INCLUDE 'header.html', title => title %] + + +[% INCLUDE 'errors.html' %] + +<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> + +<p> +[% loc('Receive email when updates are left on this problem.') %] +</p> + +<form action="/alert/subscribe" method="post"> + <fieldset> + <label class="hidden n" for="alert_rznvy">[% loc('Your email') %]</label> + + <div class="form-txt-submit-box"> + <input type="email" name="rznvy" id="alert_rznvy" value="[% email | html %]" placeholder="[% loc('Your email') %]"> + <input class="green-btn" type="submit" value="[% loc('Subscribe') %]"> + </div> + + <input type="hidden" name="id" value="[% problem_id | html %]"> + <input type="hidden" name="type" value="updates"> + </fieldset> +</form> + + +[% INCLUDE 'footer.html' %] diff --git a/templates/web/fixmystreet/around/around_index.html b/templates/web/fixmystreet/around/around_index.html new file mode 100644 index 000000000..331f34325 --- /dev/null +++ b/templates/web/fixmystreet/around/around_index.html @@ -0,0 +1,52 @@ +[% INCLUDE 'header.html', title => loc('Reporting a problem'), bodyclass => 'mappage' %] + +[% + # NOTE ON PARTIAL REPORTS: + # + # partial reports get a bit of extra text added, the form goes to + # '/report/new' and the partial hidden field is added to the form. +%] + +[% + question + = c.cobrand.enter_postcode_text() + || loc("Enter a nearby GB postcode, or street name and area"); +%] + +<form action="[% c.uri_for('/around') %]" method="get" name="postcodeForm" id="postcodeForm"> + <fieldset> + <label for="pc">[% question %]:</label> + <input type="text" name="pc" value="[% pc | html %]" id="pc" size="10" maxlength="200"> + <input class="green-btn final-submit" type="submit" value="[% loc('Go') %]" id="submit"> + + [% IF partial_token %] + <input type="hidden" name="partial" value="[% partial_token.token %]"> + [% END %] + </fieldset> +</form> + +[% IF location_offshore %] + <p class="error">[% loc('That spot does not appear to be covered by a council. If you have tried to report an issue past the shoreline, for example, please specify the closest point on land.') %]</p> +[% ELSIF location_error %] + <p class="error">[% location_error %]</p> +[% END %] + +[% IF possible_location_matches %] + <p>[% loc('We found more than one match for that location. We show up to ten matches, please try a different search if yours is not here.') %]</p> + <ul class="pc_alternatives"> + [% FOREACH match IN possible_location_matches %] + <li><a href="/around?latitude=[% match.latitude | uri %];longitude=[% match.longitude | uri %]">[% match.address | html %]</a></li> + [% END %] + </ul> +[% END %] + +[% IF partial_token %] + <p style="margin-top: 0; color: #cc0000;"> + <img align="right" src="/photo/[% partial_report.id %].jpeg" hspace="5"> + [% loc("Thanks for uploading your photo. We now need to locate your problem, so please enter a nearby street name or postcode in the box below :") %] + </p> +[% END %] + + + +[% INCLUDE 'footer.html' %] diff --git a/templates/web/fixmystreet/around/around_map_list_items.html b/templates/web/fixmystreet/around/around_map_list_items.html new file mode 100644 index 000000000..7dce76ce1 --- /dev/null +++ b/templates/web/fixmystreet/around/around_map_list_items.html @@ -0,0 +1,25 @@ +[% IF around_map.size %] + [% FOREACH p IN around_map %] + + [% dist = tprintf("%.1f", (p.distance || 0) ) %] + + <li> + <a href="[% c.uri_for('/report', p.problem.id ) %]"> + <div class="text"> + <h4>[% p.problem.title | html %]</h4> + <small>[% prettify_epoch( p.problem.confirmed_local.epoch, 1 ) %], [% dist %]km</small> + [% IF p.problem.is_fixed %] + <small>[% loc('(fixed)') %]</small> + [% END %] + </div> + [% IF p.problem.photo %] + <div class="img"> + <img height="60" width="90" src="/photo/[% p.problem.id %].fp.jpeg" alt=""> + </div> + [% END %] + </a> + </li> + [% END %] +[% ELSE %] + <li><p>[% loc('No problems found.') %]</p></li> +[% END %] diff --git a/templates/web/fixmystreet/around/display_location.html b/templates/web/fixmystreet/around/display_location.html new file mode 100755 index 000000000..c98982a60 --- /dev/null +++ b/templates/web/fixmystreet/around/display_location.html @@ -0,0 +1,116 @@ +[% + + rss_alt = loc('RSS feed'); + rss_title = loc('RSS feed of recent local problems'); + + rss_url + = pc + ? c.uri_for( "/rss/pc", pc ) + : c.uri_for( "/rss/l/$short_latitude,$short_longitude" ); + + email_url = c.uri_for( + '/alert/list', + { + lat => short_latitude, + lon => short_longitude, + feed => "local:$short_latitude:$short_longitude", + } + ); + + url_skip = c.uri_for( + '/report/new', + { + pc => pc + latitude => short_latitude, + longitude => short_longitude, + skipped => 1, + } + ); + + PROCESS "maps/${map.type}.html"; + + INCLUDE 'header.html', + title => loc('Viewing a location') + rss => [ loc('Recent local problems, FixMyStreet'), rss_url ], + bodyclass => 'mappage', + robots => 'noindex,nofollow'; +%] + +<form action="[% c.uri_for('/report/new') %]" method="post" name="mapForm" id="mapForm" enctype="multipart/form-data" class="validate"> + [% IF c.req.params.map_override %] + <input type="hidden" name="map_override" value="[% c.req.params.map_override | html %]"> + [% END %] + <input type="hidden" name="pc" value="[% pc | html %]"> + + <input type="hidden" name="latitude" id="fixmystreet.latitude" value="[% short_latitude | html %]"> + <input type="hidden" name="longitude" id="fixmystreet.longitude" value="[% short_longitude | html %]"> + + [% map_html %] + + <p id='sub_map_links'> + [% 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 %] + <a id='hide_pins_link' rel='nofollow' href='[% c.uri_with( { no_pins => 1 } ) %]'>[% loc('Hide pins') %]</a> + [% END %] + [% IF c.cobrand.country == 'GB' || c.cobrand.country == 'NO' %] + [% IF c.req.params.all_pins %] + <a id='all_pins_link' rel='nofollow' href='[% c.uri_with( { no_pins => undef, all_pins => undef } ) %]'>[% loc('Hide old') %]</a> + [% ELSE %] + <a id='all_pins_link' rel='nofollow' href='[% c.uri_with( { no_pins => undef, all_pins => 1 } ) %]'>[% loc('Show old') %]</a> + [% END %] + [% END %] + </p> + + </div> + + + + + <div id="side"> + + <h1 class="big-green-banner">[% loc( 'Click map to report a problem' ) %]</h1> + + <p id="skip-this-step"> + [% + tprintf( + loc("Can't see the map? <a href='%s' rel='nofollow'>Skip this step</a>"), + url_skip + ) + %] + </p> + + <div class="shadow-wrap"> + <ul id="key-tools" class="singleton"> + <li><a class="feed" id="key-tool-around-updates" href="[% email_url | html %]">Get updates</a></li> + </ul> + </div> + + <section class="full-width"> + <menu id="problems-nav" class="tab-nav"> + <ul> + <li><a href="#current">[% loc('Problems on the map') %]</a></li> + <li><a href="#current_near">[% loc( 'Problems nearby' ) %]</a></li> + </ul> + </menu> + + <ul id="current" class="issue-list-a tab"> + [% INCLUDE "around/on_map_list_items.html" %] + </ul> + + <ul id="current_near" class="issue-list-a tab"> + [% INCLUDE "around/around_map_list_items.html" %] + </ul> + </section> + </div> + + <div style="display:none" id="side-form"> + [% INCLUDE "report/new/fill_in_details_form.html" + js = 1, + report.used_map = 1 + report.name = c.user.name + %] + </div> +</form> + +[% INCLUDE 'footer.html' %] diff --git a/templates/web/fixmystreet/around/on_map_list_items.html b/templates/web/fixmystreet/around/on_map_list_items.html new file mode 100644 index 000000000..9329e6833 --- /dev/null +++ b/templates/web/fixmystreet/around/on_map_list_items.html @@ -0,0 +1,22 @@ +[% IF on_map.size %] + [% FOREACH p IN on_map %] + <li> + <a href="[% c.uri_for('/report', p.id ) %]"> + <div class="text"> + <h4>[% p.title | html %]</h4> + <small>[% prettify_epoch( p.confirmed_local.epoch, 1 ) %]</small> + [% IF p.is_fixed %] + <small>[% loc('(fixed)') %]</small> + [% END %] + </div> + [% IF p.photo %] + <div class="img"> + <img height="60" width="90" src="/photo/[% p.id %].fp.jpeg" alt=""> + </div> + [% END %] + </a> + </li> + [% END %] +[% ELSE %] + <li><p>[% loc('No problems have been reported yet.') %]</p></li> +[% END %] diff --git a/templates/web/fixmystreet/auth/change_password.html b/templates/web/fixmystreet/auth/change_password.html new file mode 100644 index 000000000..c10560c3e --- /dev/null +++ b/templates/web/fixmystreet/auth/change_password.html @@ -0,0 +1,39 @@ +[% INCLUDE 'header.html', title = loc('Change Password') %] + +<h1>[% loc('Change Password') %]</h1> + +[% IF password_changed %] + <p id="fixed">[% loc('Your password has been changed') %]</p> +[% END %] + + +<form action="[% c.uri_for('change_password') %]" method="post" name="change_password" class="fieldset"> + + [% IF password_error; + + errors = { + missing => loc('Please enter a password'), + mismatch => loc('The passwords do not match'), + other => loc('Please check the passwords and try again'), + }; + + loc_password_error = errors.$password_error || errors.other; %] + <div class="form-error">[% loc_password_error %]</div> + [% END %] + + <div class="form-field"> + <label for="new_password">[% loc('Password:') %]</label> + <input type="password" name="new_password" value="[% new_password | html %]"> + </div> + <div class="form-field"> + <label for="confirm">[% loc('Again:') %]</label> + <input type="password" name="confirm" value="[% confirm | html %]"> + </div> + <div class="checkbox"> + <input type="submit" value="[% loc('Change Password') %]"> + </div> + +</form> + + +[% INCLUDE 'footer.html' %] diff --git a/templates/web/fixmystreet/auth/general.html b/templates/web/fixmystreet/auth/general.html new file mode 100644 index 000000000..585232bc5 --- /dev/null +++ b/templates/web/fixmystreet/auth/general.html @@ -0,0 +1,67 @@ +[% INCLUDE 'header.html', title = loc('Sign in or create an account') %] + +<h1>[% loc('Sign in') %]</h1> + +<form action="[% c.uri_for() %]" method="post" name="general_auth" class="validate"> + <fieldset> + <input type="hidden" name="r" value="[% c.req.params.r | html %]"> + + [% IF email_error; + + # other keys include fqdn, mxcheck if you'd like to write a custom error message + + errors = { + missing => loc('Please enter your email'), + other => loc('Please check your email address is correct') + }; + + loc_email_error = errors.$email_error || errors.other; + END %] + <label class="n" for="email">[% loc('Email') %]</label> + [% IF loc_email_error %] + <div class="form-error">[% loc_email_error %]</div> + [% ELSIF sign_in_error %] + <div class="form-error">[% loc('There was a problem with your email/password combination. If you cannot remember your password, or do not have one, please fill in the ‘sign in by email’ section of the form.') %]</div> + [% END %] + <input type="email" class="required email" id="email" name="email" value="[% email | html %]" placeholder="[% loc('Your email address') %]"> + + <div id="form_sign_in"> + <h3>[% loc("Do you have a FixMyStreet password?") %]</h3> + + <div id="form_sign_in_yes" class="form-box"> + <h5>[% loc('<strong>Yes</strong> I have a password') %]</h5> + + <label class="hidden-js n" for="password_sign_in">[% loc('<strong>Yes</strong>, I have a password') %]</label> + + <div class="form-txt-submit-box"> + <input type="password" name="password_sign_in" id="password_sign_in" value="" placeholder="[% loc('Your password') %]"> + <input class="green-btn" type="submit" name="sign_in" value="[% loc('Sign in') %]"> + </div> + + <input type="checkbox" id="remember_me" name="remember_me" value='1'[% ' checked' IF remember_me %]> + <label class="inline n" for="remember_me">[% loc('Keep me signed in on this computer') %]</label> + + </div> + <div id="form_sign_in_no" class="form-box"> + <h5>[% loc('<strong>No</strong> let me sign in by email') %]</h5> + + <div class="general-sidebar-notes"> + <p>Providing a name and password is optional, but doing so will allow you to more easily report problems, leave updates and manage your reports.</p> + </div> + + <label for="name">[% loc('Name') %]</label> + <input type="text" name="name" value="" placeholder="[% loc('Your name') %]"> + + <label for="password_register">[% loc('Password (optional)') %]</label> + <div class="form-txt-submit-box"> + <input type="password" name="password_register" id="password_register" value="" placeholder="[% loc('Enter a password') %]"> + <input class="green-btn" type="submit" name="email_sign_in" value="[% loc('Sign in') %]"> + </div> + </div> + + </div> + </fieldset> +</form> + + +[% INCLUDE 'footer.html' %] diff --git a/templates/web/fixmystreet/auth/sign_out.html b/templates/web/fixmystreet/auth/sign_out.html new file mode 100644 index 000000000..3d8df60e4 --- /dev/null +++ b/templates/web/fixmystreet/auth/sign_out.html @@ -0,0 +1,8 @@ +[% INCLUDE 'header.html', title => loc('Sign out') %] + +<h1>[% loc('You have been signed out') %]</h1> + +<p>Please feel free to <a href="[% c.uri_for('/auth') %]">sign in again</a>.</p> + + +[% INCLUDE 'footer.html' %] diff --git a/templates/web/fixmystreet/auth/token.html b/templates/web/fixmystreet/auth/token.html new file mode 100644 index 000000000..0f44d1074 --- /dev/null +++ b/templates/web/fixmystreet/auth/token.html @@ -0,0 +1,27 @@ +[% INCLUDE 'header.html', title => loc('Confirm account') %] + +[% IF token_not_found %] + +<h1>[% loc('Error') %]</h1> + +<p>We have not been able to confirm your account - sorry. This may be because:</p> + +<ul> + <li>Link too old or already used</li> + <li>URL not copied correctly</li> + [%# FIXME - add more reasons here %] +</ul> + +[% ELSE %] + +<h1>[% loc('Please check your email') %]</h1> + +<p>[% loc("We have sent you an email containing a link to confirm your account.") %]</p> + +<p>[% loc("The confirmation email <strong>may</strong> take a few minutes to arrive — <em>please</em> be patient.") %]</p> + +<p>[% loc("If you use web-based email or have 'junk mail' filters, you may wish to check your bulk/spam mail folders: sometimes, our messages are marked that way.") %]</p> + +[% END %] + +[% INCLUDE 'footer.html' %] diff --git a/templates/web/fixmystreet/common_header_tags.html b/templates/web/fixmystreet/common_header_tags.html new file mode 100644 index 000000000..ea952ccdc --- /dev/null +++ b/templates/web/fixmystreet/common_header_tags.html @@ -0,0 +1,38 @@ +[% INCLUDE 'js_validation_msgs.html' %] + +<meta http-equiv="content-type" content="text/html; charset=utf-8"> +<script type="text/javascript" src="/jslib/jquery-1.7.0.min.js"></script> + +<script src="[% version('/js/jquery.validate.min.js') %]" type="text/javascript" charset="utf-8"></script> + +<script src="[% version('/js/modernizr.custom.76759.js') %]" type="text/javascript" charset="utf-8"></script> + +<script src="[% version('/js/jquery.placeholder.min.js') %]" type="text/javascript" charset="utf-8"></script> + +<script type="text/javascript" src="[% version('/js/geo.min.js') %]"></script> +<script type="text/javascript" src="[% version('/cobrands/fixmystreet/fixmystreet.js') %]"></script> + +<script src="[% version('/js/fancybox/jquery.fancybox-1.3.4.pack.js') %]" type="text/javascript" charset="utf-8"></script> + +[% map_js %] + +[% IF category_extras_json && category_extras_json != '{}' %] +<script type="text/javascript"> + category_extras = [% category_extras_json %]; +</script> +[% END %] + +[% IF robots %] + <meta name="robots" content="[% robots %]"> +[% ELSIF c.config.STAGING_SITE %] + <meta name="robots" content="noindex,nofollow"> +[% END %] + +[% IF rss %] + <link rel="alternate" type="application/rss+xml" title="[% rss.0 %]" href="[% rss.1 %]"> +[% END %] + +<title> + [% "$title :: " | html IF title %] + [% c.cobrand.site_title %] +</title> diff --git a/templates/web/fixmystreet/contact/index.html b/templates/web/fixmystreet/contact/index.html new file mode 100644 index 000000000..368fb0628 --- /dev/null +++ b/templates/web/fixmystreet/contact/index.html @@ -0,0 +1,100 @@ +[% INCLUDE 'header.html', + title = loc('Contact Us') + robots = 'noindex,nofollow' + bodyclass => 'twothirdswidthpage' +%] + +<h1>[% loc('Contact the team') %]</h1> + +<form method="post" action="/contact/submit" class="validate"> + <fieldset> + [% INCLUDE 'errors.html' %] + + [% IF update %] + + <p> + [% loc('You are reporting the following update for being abusive, containing personal information, or similar:') %] + </p> + + <blockquote> + <p> + [% IF update.anonymous %] + [% tprintf( loc('Update below added anonymously at %s'), prettify_epoch( update.confirmed_local.epoch ) ) %] + [% ELSE %] + [% tprintf( loc('Update below added by %s at %s'), update.name, prettify_epoch( update.confirmed_local.epoch ) ) | html %] + [% END %] + </p> + + <p> + [% update.text | html %] + </p> + + </blockquote> + <input type="hidden" name="update_id" value="[% update.id %]"> + <input type="hidden" name="id" value="[% update.problem_id %]"> + + [% ELSIF problem %] + <p> + [% loc('You are reporting the following problem report for being abusive, containing personal information, or similar:') %] + </p> + + <blockquote> + <h2>[% problem.title | html %]</h2> + + <p> + [% IF problem.anonymous %] + [% tprintf( loc('Reported anonymously at %s'), prettify_epoch( problem.confirmed_local.epoch ) ) %] + [% ELSE %] + [% tprintf( loc('Reported by %s at %s'), problem.user.name, prettify_epoch( problem.confirmed_local.epoch ) ) | html %] + [% END %] + </p> + + <p> + [% problem.detail | html %] + </p> + + </blockquote> + <input type="hidden" name="id" value="[% problem.id %]"> + + [% ELSE %] + + [% INCLUDE 'contact/blurb.html' %] + + [% END %] + + <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="required" name="name" id="form_name" value="[% form_name | html %]" size="30"> + + + <label for="form_email">[% loc('Your email') %]</label> + [% IF field_errors.em %] + <div class="form-error">[% field_errors.em %]</div> + [% END %] + <input type="text" class="required email" name="em" id="form_email" value="[% em | html %]" size="30"> + + + <label for="form_subject">[% loc('Subject') %]</label> + [% IF field_errors.subject %] + <div class="form-error">[% field_errors.subject %]</div> + [% END %] + <input type="text" class="required" name="subject" id="form_subject" value="[% subject | html %]" size="30"> + + + <label for="form_message">[% loc('Message') %]</label> + [% IF field_errors.message %] + <div class="form-error">[% field_errors.message %]</div> + [% END %] + <textarea class="required" name="message" id="form_message" rows="7" cols="50">[% message | html %]</textarea> + + + <input class="final-submit green-btn" type="submit" value="[% loc('Post') %]"> + + </fieldset> +</form> + +[% TRY %][% INCLUDE 'contact/address.html' %][% CATCH file %][% END %] + +[% INCLUDE 'footer.html' pagefooter = 'yes' %] diff --git a/templates/web/fixmystreet/faq/faq-en-gb.html b/templates/web/fixmystreet/faq/faq-en-gb.html new file mode 100755 index 000000000..462c43564 --- /dev/null +++ b/templates/web/fixmystreet/faq/faq-en-gb.html @@ -0,0 +1,218 @@ +[% INCLUDE 'header.html', title => loc('Frequently Asked Questions'), bodyclass => 'twothirdswidthpage' %] + +<div class="sticky-sidebar"> + <aside> + <ul class="plain-list"> + <li><a href="#faq">Frequently Asked Questions</a></li> + <li><a href="#practical">Practical Questions</a></li> + <li><a href="#privacy">Privacy Questions</a></li> + <li><a href="#organisation">Organisation Questions</a></li> + </ul> + </aside> +</div> + +<h1><a name="faq"></a>Frequently Asked Questions</h1> + <dl> + <dt>What is FixMyStreet?</dt> + <dd>FixMyStreet is a site to help people report, view, +or discuss local problems they’ve found to their local council by +simply locating them on a map. It launched in early February +2007.</dd> + <dt>What sort of problems should I report with FixMyStreet?</dt> + <dd>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>Abandoned vehicles + <li>Dog Fouling + <li>Flyposting or graffiti + <li>Flytipping or litter + <li>Streetcleaning, such as broken glass in a cycle lane + [% IF c.cobrand.moniker != 'southampton' %] + <li>Unlit lamposts + [% END %] + <li>Potholes + </ul> + </dd> + + <dt>What isn’t FixMyStreet for?</dt> + <dd>FixMyStreet is not a way of getting in touch with [% c.cobrand.moniker == 'southampton' ? 'the' : 'your' %] council for all + issues – please use FixMyStreet only for problems such as the above. We + often route problem reports via cleansing services or highways and so using + FixMyStreet for other matters may result in a delay in your report getting + to the right department. <strong>You will need to contact [% c.cobrand.moniker == 'southampton' ? 'the' : 'your' %] council + 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 council + <li>Joy riding, drug taking, animal cruelty, or other criminal activity + </ul> + <p>Councils often have direct hotlines for these sorts of issues.</p> + </dd> + + <dt>How do I use the site?</dt> + <dd>After entering a postcode or 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 simply 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 [% IF c.cobrand.moniker != 'southampton' %]relevant[% END %] council by email. The +council can then resolve the problem the way they normally would. +Alternatively, you can discuss the problem on the website with others[% IF c.cobrand.moniker != 'southampton' %], and +then together lobby the council to fix it, or fix it directly yourselves[% END %].</dd> + <dt>Is it free?</dt> + <dd>The site is free to use, yes. FixMyStreet is run +by a registered charity, though, so if you want to make a contribution, <a +href="https://secure.mysociety.org/donate/">please do</a>.</dd> + + <dt>Can I use FixMyStreet on my mobile?</dt> + <dd><ul> + <li><em>iPhone:</em> There are two apps for FixMyStreet, one written by us + in 2008 and another much more recently by a volunteer, Martin Stephenson. + Both are available for download on the App Store: + <a href="http://itunes.apple.com/gb/app/fixmystreet/id297456545">FixMyStreet</a>, + <a href="http://itunes.apple.com/gb/app/streetreport/id371891859">StreetReport</a>. + <li><em>Android:</em> A volunteer, Anna Powell-Smith, has written an app + available from the + <a href="https://market.android.com/details?id=com.android.fixmystreet">Android Market</a>. + <li><em>Nokia:</em> A volunteer, Thomas Forth, has written an app available from the + <a href="http://store.ovi.com/content/107557">Ovi Store</a>. + </ul> + <p>We also hope to make the website itself much more mobile friendly in the future.</p> + </dd> + + <dt>Why do you only cover the countries of Great Britain?</dt> + <dd>We would love to cover Northern Ireland, but as we were funded for + FixMyStreet by the Department for Constitutional Affairs (now the Ministry + of Justice), we were covered for Ordnance Survey data (but not OSNI data) + by the Pan-Governmental Agreement. The cost for these maps would be + prohibitively expensive for the small charity that we are – if you know of + any way we could get access to the Ordnance Survey for Northern Ireland's + maps so that we can add them to the site, that'd be great.</dd> + </dl> + + <h2><a name="practical"></a>Practical Questions</h2> + <dl> + <dt>I’m from a council, where do you send the reports?</dt> + <dd>You can either leave a test report or <a href="/contact">contact us</a> +to find out where reports go at the moment. Also <a href="/contact">contact us</a> +to update the address or addresses we use.</dd> + <dt>I’m from a council, can we have FixMyStreet on our website?</dt> + <dd>Yes you can! We offer branded, hosted versions of FixMyStreet for local council websites. <a href="/for-councils">Full details</a>.</dd> + <dt>Do you remove silly or illegal content?</dt> + <dd>FixMyStreet 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 does the site use kilometres for measurements?</dt> + <dd>Thanks for asking politely – we never quite understand why some of the rudest + emails we receive are on this topic. The British national + grid reference system, devised by Ordnance Survey (the British national + mapping agency) around the time of the second world war, uses eastings and + northings measured in metres and kilometres; the maps we use are from + Ordnance Survey and so this is what we use to display distances. + There you have it: not everything British is in miles!</dd> + + <dt>Why can’t I zoom out more on the reporting map?</dt> + <dd>We want to keep FixMyStreet locally focused, so restrict the ability to + move radically between areas. The map on Your Reports will let you see all + the reports you’ve made, wherever they are. If you’re from the + council then the emailed version of the problem report also contains the + closest road and postcode to the pin on the map.</dd> + + <dt>This site is great – why aren’t you better publicised?</dt> + <dd>As a tiny charity we simply don’t have a publicity budget, and we + rely on word of mouth to advertise the site. We have a whole <a + href="posters/">array of posters, flyers and badges</a> if you’d like + to publicise us on the web or in your local area, and why not write to your + local paper to let them know about us?</dd> </dl> + + <h2><a name="privacy"></a>Privacy Questions</h2> + <dl> + <dt>Who gets to see my email address?</dt> + <dd>If you submit a problem, we pass on your details, and details +of the problem, to the council contact or contacts responsible for the +area where you located the problem. Other than the council, who obviously get your +email address, only people we authorise to view the FixMyStreet administration interface +will be able to see your email address and they will never use it for anything other than +to help administer FixMyStreet. Similarly with email addresses from updates. We will never give or sell your email address to anyone else, +unless we are obliged to by law. Your name will not be published anywhere unless you let us.</dd> + <dt>Will you send nasty, brutish spam to my email address?</dt> + <dd>Never. We will email you if someone leaves an update on a +problem you’ve reported, and send you a questionnaire email four weeks +after you submit a problem, asking for a status update; we’ll only ever +send you emails in relation to your problem.</dd> + </dl> + <h2><a name="organisation"></a>Organisation Questions</h2> + <dl> + <dt>Who built FixMyStreet?</dt> + <dd>This site was built by <a href="http://www.mysociety.org/">mySociety</a>, in conjunction with the <a href="http://www.youngfoundation.org.uk/">Young Foundation</a>. +mySociety is the project of a registered charity which has grown out of the community of +volunteers who built sites like <a href="http://www.theyworkforyou.com/">TheyWorkForYou.com</a>. +mySociety’s primary mission is to build Internet projects which give people simple, tangible +benefits in the civic and community aspects of their lives. Our first project +was <a href="http://www.writetothem.com/">WriteToThem</a>, where you can write to any of your +elected representatives, for free. The charity is called UK Citizens Online Democracy and is charity number 1076346. mySociety +can be contacted by email at <a href="mailto:hello@mysociety.org">hello@mysociety.org</a>, +or by post at:<br> +mySociety<br> +483 Green Lanes<br> +London<br> +N13 4BS<br> +UK</dd> + <dt><img src="/i/moj.png" align="right" alt="Ministry of Justice" hspace="10">Who pays for it?</dt> + <dd>FixMyStreet was paid for via the Department for +Constitutional Affairs Innovations Fund.</dd> + <dt><a name="nfi"></a>Wasn’t this site called Neighbourhood Fix-It?</dt> + <dd>Yes, we changed the name mid June 2007. We decided +Neighbourhood Fix-It was a bit of a mouthful, hard to spell, and hard to publicise (does the URL have a dash in it or not?). The domain FixMyStreet became available, and everyone liked the name.</dd> + <dt>Do you need any help with the project?</dt> + <dd>Yes, we can use help in all sorts of ways, technical or +non-technical. Please see our <a +href="http://www.mysociety.org/helpus/">Get Involved page</a>.</dd> + <dt>I’d like a site like this for my own location/ where’s the "source code" to this site?</dt> + <dd> +The software behind this site is open source, and available +to you mainly under the GNU Affero GPL software license. You can <a +href="http://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="http://www.fiksgatami.no/">Fiksgatami</a> is an example of our code +being used in a Norwegian version of this site. +</dd> +<dt>I’d prefer code in a different language?</dt> +<dd> +VisibleGovernment.ca wrote their own code for +<a href="http://www.fixmystreet.ca/">http://www.fixmystreet.ca/</a>, which is +written in GeoDjango and available under an MIT licence at <a +href="http://github.com/visiblegovernment/django-fixmystreet/tree/master">github</a>. +Or <a href="http://www.fixmystreet.org.nz/">FixMyStreet.org.nz</a> is written in +Drupal. +</p> +</dd> + <dt>People build things, not organisations. Who <em>actually</em> built it?</dt> + <dd>Matthew Somerville and Francis Irving wrote the site, +Chris Lightfoot wrote the tileserver and map cutter, Richard Pope created +our pins, Deborah Kerr keeps things up-to-date and does user support, +Ayesha Garrett designed our posters, and Tom Steinberg managed it all. + +Thanks also to +<a href="http://www.ordnancesurvey.co.uk">Ordnance Survey</a> (for the maps, +UK postcodes, and UK addresses – data © Crown copyright, all +rights reserved, Ministry of Justice 100037819 2008), +Yahoo! for their BSD-licensed JavaScript libraries, the entire free software +community (this particular project was brought to you by Perl, PostgreSQL, +and the number 161.290) and <a +href="http://www.m247.com/">M247</a> (who kindly host all +our servers). + +Let us know if we’ve missed anyone.</dd> + </dl> +[% INCLUDE 'footer.html' pagefooter = 'yes' %] diff --git a/templates/web/fixmystreet/footer.html b/templates/web/fixmystreet/footer.html index 089eb1cb7..c73c9eb2c 100644 --- a/templates/web/fixmystreet/footer.html +++ b/templates/web/fixmystreet/footer.html @@ -1,51 +1,62 @@ - </div><!-- #mysociety .container --> - - <div id="navigation" class="container" role="navigation"> - <div class="spacer"></div> - <ul id="site-nav" class="nav"> - <li><[% IF c.req.uri.path == '/' %]span[% ELSE %]a href="/"[% END - %]>[% loc("Report a problem") %]</[% c.req.uri.path == '/' ? 'span' : 'a' %]></li>[% - %]<li><[% IF c.req.uri.path == '/my' %]span[% ELSE %]a href="/my"[% END - %]>[% loc("Your reports") %]</[% 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> - - <ul id="mysociety-nav" class="nav"> - <li><a id="mysociety-logo" href="http://www.mysociety.org/">mySociety</a></li>[% - %]<li><a href="http://mysociety.org/donate/">Donate</a></li>[% - %]<li><a href="http://www.mysociety.org/projects/">Our Sites</a></li> - </ul> - - </div> - -</div></div></div><!-- wrappers --> - -<div id="footer"> - - <p><a href="/contact">[% loc("Contact FixMyStreet") | replace(' ', ' ') %]</a> - <br>Mobile apps: - <a href="http://itunes.apple.com/gb/app/fixmystreet/id297456545">iPhone</a>, - <a href="http://itunes.apple.com/gb/app/streetreport/id371891859">StreetReport (iPhone)</a> - | <a href="https://market.android.com/details?id=com.android.fixmystreet">Android</a> - | <a href="http://store.ovi.com/content/107557">Nokia</a> - </p> - - <p>[% loc('Are you from a <strong>council</strong>? Would you like better integration with FixMyStreet?') %] - <a href="http://www.mysociety.org/fixmystreet-for-local-council-websites/">[% loc('Find out about FixMyStreet for councils') %]</a>. - </p> - - <p>[% loc('Are you a <strong>developer</strong>? Would you like to contribute to FixMyStreet?') %] - [% loc('Our code is open source and <a href="http://github.com/mysociety/fixmystreet">available on GitHub</a>.') %] - </p> - -</div> - -[% INCLUDE 'debug_footer.html' %] - + [% IF pagefooter %] + <footer role="content-info"> + <div class="tablewrapper bordered"> + <div id="footer-mobileapps"> + <h4>Mobile apps</h4> + + <ul> + <li><a class="m-app-iphone" href="http://itunes.apple.com/gb/app/fixmystreet/id297456545">iPhone</a></li> + <li><a class="m-app-droid" href="https://market.android.com/details?id=com.android.fixmystreet">Android</a></li> + <li><a class="m-app-nokia" href="http://store.ovi.com/content/107557">Nokia</a></li> + <li><a class="m-app-iphone-streetreport" href="http://itunes.apple.com/gb/app/streetreport/id371891859">iPhone Street Report</a></li> + </ul> + </div> + + <div id="footer-help"> + <ul> + <li> + <h4>[% loc('Are you a developer?') %]</h4> + <p>[% loc('Would you like to contribute to FixMyStreet? Our code is open source and <a href="http://github.com/mysociety/fixmystreet">available on GitHub</a>.') %]</p> + </li> + <li> + <h4>[% loc('Are you from a council?') %]</h4> + <p>[% loc('Would you like better integration with FixMyStreet? <a href="/for-councils">Find out about FixMyStreet for councils</a>.') %]</p> + </li> + </ul> + </div> + </div> + </footer> + [% END %] + </div><!-- .content role=main --> + </div><!-- .container --> + </div><!-- .table-cell --> + + <div class="nav-wrapper"> + <div class="nav-wrapper-2"> + <div id="main-nav" role="navigation"> + <ul id="mysoc-menu"> + <li><a id="mysoc-logo" href="http://www.mysociety.org/">mySociety</a></li>[% + %]<li><a href="http://mysociety.org/donate/">Donate</a></li>[% + %]<li><a href="http://www.mysociety.org/projects/">Our Sites</a></li> + </ul> + + <ul id="main-menu"> + <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 + %]>[% loc("Your reports") %]</[% 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> + +<!-- [% INCLUDE 'debug_footer.html' %] --> + </div> <!-- .wrapper --> </body> </html> diff --git a/templates/web/fixmystreet/header.html b/templates/web/fixmystreet/header.html index ff08116a9..dd1a90c5f 100644 --- a/templates/web/fixmystreet/header.html +++ b/templates/web/fixmystreet/header.html @@ -2,18 +2,18 @@ <!--[if lt IE 7]><html class="no-js ie6 oldie" lang="[% lang_code %]"><![endif]--> <!--[if IE 7]> <html class="no-js ie7 oldie" lang="[% lang_code %]"><![endif]--> <!--[if IE 8]> <html class="no-js ie8 oldie" lang="[% lang_code %]"><![endif]--> -<!--[if gt IE 8]><!--><html class="no-js" lang="[% lang_code %]"><!--<![endif]--> +<!--[if IE 9]> <html class="no-js ie9 oldie" 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"> - <meta name="apple-mobile-web-app-capable" content="yes"> - <meta name="apple-mobile-web-app-status-bar-style" content="black"> + <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta name="HandHeldFriendly" content="true"> <meta name="mobileoptimized" content="0"> - <link rel="stylesheet" href="[% version('/css/core.css') %]"> <link rel="stylesheet" href="[% version('/cobrands/fixmystreet/base.css') %]"> <link rel="stylesheet" href="[% version('/cobrands/fixmystreet/layout.css') %]" media="(min-width:48em)"> + <link rel="stylesheet" href="[% version('/js/fancybox/jquery.fancybox-1.3.4.css') %]"> <!--[if (lt IE 9) & (!IEMobile)]> <link rel="stylesheet" href="[% version('/cobrands/fixmystreet/layout.css') %]"> <![endif]--> @@ -27,23 +27,29 @@ [% INCLUDE 'tracking_code.html' %] </head> - <body> - -<div id="wrapper"><div id="wrapper2"><div id="wrapper3"> - - [% IF NOT title AND NOT c.req.path %]<h1 id="header" role="banner">[% ELSE %]<div id="header" role="banner"><a href="/">[% END - %]<img src="/cobrands/fixmystreet/fms-logo-flat.png" width=327 height=62 alt="[% loc('FixMyStreet') %]"> - [%- IF NOT title AND NOT c.req.path %]</h1>[% ELSE %]</a></div>[% END %] - - <ul id="meta"> - [% IF c.user_exists %] - <li>[% tprintf(loc('Signed in as %s'), c.user.name || c.user.email) %] - <li class="last"><a href="/auth/sign_out">[% loc('Sign out') %]</a></li> - [% ELSE %] - <li> </li> - [% END %] - </ul> - - <div id="mysociety" class="container" role="main"> - - [% INCLUDE 'debug_header.html' %] + <body class="[% bodyclass | html IF bodyclass %]"> + + <div class="wrapper"> + <div class="table-cell"> + <header id="site-header" role="banner"> + <div class="container"> + <a href="/" id="site-logo">FixMyStreet</a> + <a href="#main-nav" id="nav-link">Main Navigation</a> + </div> + </header> + + <div id="user-meta"> + [% 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> + [% ELSE %] + <!-- <a href="/auth">[% loc('Sign in') %]</a> --> + [% END %] + </div> + + <div class="container"> + <div class="content[% " $mainclass" | html IF mainclass %]" role="main"> + + <!-- [% INCLUDE 'debug_header.html' %] --> diff --git a/templates/web/fixmystreet/index.html b/templates/web/fixmystreet/index.html new file mode 100644 index 000000000..605e428a3 --- /dev/null +++ b/templates/web/fixmystreet/index.html @@ -0,0 +1,100 @@ +[%# Assumes fixmystreet cobrand is using FMS map template - for bonus points preload all the right map elements. %] +[% map_js = BLOCK %] +<script> +yepnope.addPrefix( 'preload', function ( resource ) { + resource.noexec = true; + return resource; +}); +Modernizr.load({ + load: [ + "preload![% version('/js/OpenLayers.fixmystreet.js') %]", + "preload![% version('/js/map-OpenLayers.js') %]", + "preload![% version('/js/map-bing-ol.js') %]", + "preload![% version('/js/jquery.ba-hashchange.min.js') %]" + ] +}); +</script> +[% END %] + +[% INCLUDE 'header.html', title => '' , bodyclass => 'frontpage fullwidthpage' %] + +[% IF error %] + <p class="error">[% error %]</p> +[% END %] + + +<div id="front-main"> + <div id="front-main-container"> + <h1>[% loc('Report, view, or discuss local problems') %]</h1> + + <h2>[% loc('(like graffiti, fly tipping, broken paving slabs, or street lighting)') %]</h2> + + [% + question + = c.cobrand.enter_postcode_text() + || loc("Enter a nearby GB postcode, or street name and area"); + %] + + <form action="[% c.uri_for('/around') %]" method="get" name="postcodeForm" id="postcodeForm"> + <label for="pc">[% question %]:</label> + <div> + <input type="text" name="pc" value="" id="pc" size="10" maxlength="200" placeholder="[% loc('e.g. ‘B2 4QA’ or ‘Tib St, Manchester’') %]"> + <input type="submit" value="[% loc('Go') %]" id="submit"> + </div> + </form> + </div> +</div> + +<div class="tablewrapper"> + <div id="front-howto"> + <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>[% loc('Enter details of the problem') %]</li> + <li>[% loc('We send it to the council on your behalf') %]</li> + </ol> + + <section class="full-width"> + [% INCLUDE "front/stats.html" %] + [% TRY %][% INCLUDE "front/tips.html" %][% CATCH file %][% END %] + </section> + </div> + + + [% + recent_photos = c.cobrand.recent_photos(5); + %] + + [% IF recent_photos.size %] + <div id="front-recently"> + <h2>[% loc('Recently reported problems') %]</h2> + + <section class="full-width"> + <ul class="issue-list-a"> + [% FOREACH p IN recent_photos %] + <li> + <a href="/report/[% p.id %]"> + <div class="text"> + <h4>[% p.title | html %]</h4> + <small>[% prettify_epoch( p.confirmed_local.epoch, 1 ) %]</small> + </div> + <div class="img"> + <img alt="[% p.title | html %]" title="[% p.title | html %]" height="60" width="90" src="/photo/[% p.id %].fp.jpeg"> + </div> + </a> + </li> + [% END %] + </ul> + </section> + + </div> + [% END %] +</div> + + +<!-- [% TRY %][% INCLUDE 'front/news.html' %][% CATCH file %][% END %] --> + + +[% INCLUDE 'footer.html' pagefooter = 'yes' %] diff --git a/templates/web/fixmystreet/my/my.html b/templates/web/fixmystreet/my/my.html new file mode 100644 index 000000000..687c5686e --- /dev/null +++ b/templates/web/fixmystreet/my/my.html @@ -0,0 +1,86 @@ +[% + PROCESS "maps/${map.type}.html" IF problems.size; + INCLUDE 'header.html', title = loc('Your Reports'), bodyclass = 'mappage' +%] + +[% IF problems.size %] + [% map_html %] + </div> + <div id="side"> +[% ELSE %] + <div id="skipped-map"> +[% END %] + +<h1>[% loc('Your Reports') %]</h1> + +[% INCLUDE 'pagination.html', + pager = problems_pager, + param = 'p' +%] + +[% FOREACH p = problems.confirmed %] + [% IF loop.first %]<h2>[% loc('Open reports') %]</h2>[% END %] + [% INCLUDE problem %] +[% END %] + +[% FOREACH p = problems.fixed %] + [% IF loop.first %]<h2>[% loc('Fixed reports') %]</h2>[% END %] + [% INCLUDE problem %] +[% END %] + +[% FOREACH p = problems.closed %] + [% IF loop.first %]<h2>[% loc('Closed reports') %]</h2>[% END %] + [% INCLUDE problem %] +[% END %] + +[%# FOREACH p = problems.unconfirmed; + IF loop.first; + '<h2>' _ loc('Unconfirmed reports') _ '</h2>'; + END; + INCLUDE problem; +END %] + +[% FOREACH u IN updates %] + [% IF loop.first %] + <h2>[% loc('Your updates') %]</h2> + [% INCLUDE 'pagination.html', + pager = updates_pager, + param = 'u' + %] + <ul class="issue-list full-width"> + [% END %] + + <li>“[% u.text | html %]” + – <a href="[% c.uri_for( '/report', u.problem_id ) %]#update_[% u.id %]">[% u.problem.title | html %]</a>. + <p><small class="council_sent_info"> + [% tprintf( loc("Added %s"), prettify_epoch( u.confirmed_local.epoch, 'date' ) ) %] + </small></p> + </li> + [% "</ul>" IF loop.last %] +[% END %] + +</div> + +[% INCLUDE 'footer.html' %] + +[% BLOCK problem %] + [% "<ul class='issue-list-a full-width'>" IF loop.first %] + + <li> + <a href="[% c.uri_for( '/report', p.id ) %]"> + <div class="text"> + <h4>[% p.title | html %]</h4> + <small> + [% IF p.whensent %] + [% tprintf( loc("Reported %s, to %s"), prettify_epoch( p.confirmed_local.epoch, 'date' ), p.body(c) ) %] + [% ELSE %] + [% tprintf( loc("Reported %s"), prettify_epoch( p.confirmed_local.epoch, 'date' ) ) %] + [% END %] + </small> + </div> + </a> + </li> + + [% "</ul>" IF loop.last %] +[% END %] + diff --git a/templates/web/fixmystreet/pagination.html b/templates/web/fixmystreet/pagination.html new file mode 100644 index 000000000..4f4d00a79 --- /dev/null +++ b/templates/web/fixmystreet/pagination.html @@ -0,0 +1,15 @@ +[% IF pager.last_page > 1 %] +<section class="full-width"> + <p class="pagination"> + [% IF pager.previous_page %] + <a class="prev" href="[% c.req.uri_with({ $param => pager.previous_page }) %]">Previous</a> + [% END %] + + [% pager.first %] to [% pager.last %] of [% pager.total_entries %] + + [% IF pager.next_page %] + <a class="next" href="[% c.req.uri_with({ $param => pager.next_page }) %]">Next</a> + [% END %] + </p> +</section> +[% END %] diff --git a/templates/web/fixmystreet/questionnaire/index.html b/templates/web/fixmystreet/questionnaire/index.html new file mode 100644 index 000000000..3b23c81cd --- /dev/null +++ b/templates/web/fixmystreet/questionnaire/index.html @@ -0,0 +1,109 @@ +[% + PROCESS "maps/${map.type}.html"; + INCLUDE 'header.html', title = loc('Questionnaire'), bodyclass = 'mappage' +%] + +[% map_html %] + +[% INCLUDE 'report/updates.html' %] + +</div> +<div id="side"> + + <menu id="problems-nav" class="tab-nav"> + <ul> + <li><a id="questionnaire_tab" href="#questionnaire">[% loc('Questionnaire') %]</a></li> + <li><a id="report_tab" href="#report">[% loc( 'Your report' ) %]</a></li> + </ul> + </menu> + + <div id="questionnaire" class="issue-list-a tab"> + [% INCLUDE questionnaire_form %] + </div> + + <div id="report" class="issue-list-a tab"> + [% INCLUDE 'report/_main.html' %] + </div> +</div> + +[% INCLUDE 'footer.html' %] + +[% BLOCK questionnaire_form %] +<h1>[% loc('Questionnaire') %]</h1> + +<form method="post" action="/questionnaire/submit" id="questionnaire" +[%- IF c.cobrand.allow_photo_upload -%] + enctype="multipart/form-data" +[%- END -%] +> + +<input type="hidden" name="token" value="[% token | html %]"> + +<p> +[% loc('The details of your problem are available from the other tab above.') %] +[% loc('Please <a class="tab_link" href="#report">take a look</a> at the updates that have been left.') IF updates %] +</p> + +[% IF errors %] +<ul class="error"> +<li>[% errors.join("</li>\n<li>") %]</li> +</ul> +[% END %] + +<p> +[% loc('An update marked this problem as fixed.') IF problem.is_fixed %] +[% loc('Has this problem been fixed?') %] +</p> + +<p> +<input type="radio" name="been_fixed" id="been_fixed_yes" value="Yes"[% ' checked' IF been_fixed == 'Yes' %]> +<label class="inline" for="been_fixed_yes">[% loc('Yes') %]</label> +<input type="radio" name="been_fixed" id="been_fixed_no" value="No"[% ' checked' IF been_fixed == 'No' %]> +<label class="inline" for="been_fixed_no">[% loc('No') %]</label> +<input type="radio" name="been_fixed" id="been_fixed_unknown" value="Unknown"[% ' checked' IF been_fixed == 'Unknown' %]> +<label class="inline" for="been_fixed_unknown">[% loc('Don’t know') %]</label> +</p> + +[% UNLESS answered_ever_reported %] +<p>[% loc('Have you ever reported a problem to a council before, or is this your first time?') %]</p> +<p> +<input type="radio" name="reported" id="reported_yes" value="Yes"[% ' checked' IF reported == 'Yes' %]> +<label class="inline" for="reported_yes">[% loc('Reported before') %]</label> +<input type="radio" name="reported" id="reported_no" value="No"[% ' checked' IF reported == 'No' %]> +<label class="inline" for="reported_no">[% loc('First time') %]</label> +</p> +[% END %] + +<p>[% loc('If you wish to leave a public update on the problem, please enter it here +(please note it will not be sent to the council). For example, what was +your experience of getting the problem fixed?') %]</p> + +<p><textarea name="update" style="max-width:90%" rows="7" cols="30">[% update | html %]</textarea></p> + +[% IF c.cobrand.allow_photo_upload %] +<div id="fileupload_normalUI"> + [% IF upload_fileid %] + <img align="right" src="/photo/[% upload_fileid %].temp.jpeg" alt=""> + <p>[% loc('You have already attached a photo to this report, attaching another one will replace it.') %]</p> + <input type="hidden" name="upload_fileid" value="[% upload_fileid %]"> + [% END %] + <label for="form_photo">[% loc('Photo:') %]</label> + <input type="file" name="photo" id="form_photo"> +</div> +[% END %] + +<div id="another_qn"> + <p>[% loc('Would you like to receive another questionnaire in 4 weeks, reminding you to check the status?') %]</p> + <p> + <input type="radio" name="another" id="another_yes" value="Yes"[% ' checked' IF another == 'Yes' %]> + <label for="another_yes">[% loc('Yes') %]</label> + <input type="radio" name="another" id="another_no" value="No"[% ' checked' IF another == 'No' %]> + <label for="another_no">[% loc('No') %]</label> + </p> +</div> + +<p><input type="submit" name="submit" value="[% loc('Submit questionnaire') %]"></p> + +</form> +[% END %] + diff --git a/templates/web/fixmystreet/report/_main.html b/templates/web/fixmystreet/report/_main.html new file mode 100644 index 000000000..762aa10f7 --- /dev/null +++ b/templates/web/fixmystreet/report/_main.html @@ -0,0 +1,19 @@ +<div class="problem-header cf"> + <h1>[% problem.title | html %]</h1> + + <p><em> + [% problem.meta_line(c) | html %] + [% IF problem.council %] + [% IF problem.whensent %] + <small class="council_sent_info"><br>[% problem.duration_string(c) %]</small> + [% END %] + [% ELSE %] + <br><small>[% loc('Not reported to council') %]</small> + [% END %] + </em></p> + + [% INCLUDE 'report/photo.html' object=problem center=1 %] + + [% add_links( problem.detail ) | html_para %] + +</div> diff --git a/templates/web/fixmystreet/report/display.html b/templates/web/fixmystreet/report/display.html new file mode 100644 index 000000000..42b9dbdb0 --- /dev/null +++ b/templates/web/fixmystreet/report/display.html @@ -0,0 +1,195 @@ +[% + PROCESS "maps/${map.type}.html"; + + problem_title = problem.title _ ' - ' _ loc('Viewing a problem') | html; + INCLUDE 'header.html' + title = problem_title + rss = [ loc('Updates to this problem, FixMyStreet'), "/rss/$problem.id" ] + robots = 'index, nofollow' + bodyclass = 'mappage' +%] + +[% map_html %] + +</div> + + +[% IF banner.id %] + <div class="banner"> + <p id="[% banner.id %]">[% banner.text %]</p> + </div> +[% END %] + +[% INCLUDE 'report/_main.html' %] + +<div class="shadow-wrap"> + <ul id="key-tools"> + <li><a rel="nofollow" id="key-tool-report-abuse" class="abuse" href="[% c.uri_for( '/contact', { id => problem.id } ) %]">[% loc('Report abuse' ) %]</a></li> + <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> + <li><a class="chevron" id="key-tool-problems-nearby" href="[% c.uri_for( '/around', { lat => short_latitude, lon => short_longitude } ) %]">[% loc( 'Problems nearby' ) %]</a></li> + </ul> + +<div id="report-updates-data" class="hidden-js"> + <form action="[% c.uri_for( '/alert/subscribe' ) %]" method="post"> + <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> + <p>[% loc('Receive email when updates are left on this problem.' ) %]</p> + <fieldset> + <label class="hidden n" for="alert_rznvy">[% loc('Your email') %]</label> + <div class="form-txt-submit-box"> + <input type="email" name="rznvy" id="alert_rznvy" value="[% email | html %]" size="30" placeholder="[% loc('Your email') %]"> + <input class="green-btn" type="submit" value="[% loc('Subscribe') %]"> + </div> + <input type="hidden" name="id" value="[% problem.id %]"> + <input type="hidden" name="type" value="updates"> + </fieldset> + </form> +</div> + +</div> + +[% INCLUDE 'report/updates.html' %] + +<div id="update_form"> + <h2>[% loc( 'Provide an update') %]</h2> + + [% IF c.cobrand.moniker != 'emptyhomes' %] + <div class="general-sidebar-notes"> + <p>[% loc( 'Please note that updates are not sent to the council. If you leave your name it will be public. Your information will only be used in accordance with our <a href="/faq#privacy">privacy policy</a>' ) %]</p> + </div> + [% END %] + + [% INCLUDE 'errors.html' %] + + <form method="post" action="[% c.uri_for( '/report/update' ) %]" name="updateForm" class="validate"[% IF c.cobrand.allow_photo_upload %] enctype="multipart/form-data"[% END %]> + <fieldset> + <input type="hidden" name="submit_update" value="1"> + <input type="hidden" name="id" value="[% problem.id | html %]"> + + <label for="form_update">[% loc( 'Update' ) %]</label> + [% IF field_errors.update %] + <div class='form-error'>[% field_errors.update %]</div> + [% END %] + <textarea rows="7" cols="30" name="update" id="form_update" placeholder="[% loc('Please write your update here') %]" required>[% update.text | html %]</textarea> + + [% IF c.user && c.user.belongs_to_council( problem.council ) %] + <label for="form_state">[% loc( 'State' ) %]</label> + <select name="state" id="form_state"> + [% FOREACH state IN [ ['confirmed', loc('Open')], ['investigating', + loc('Investigating')], ['planned', loc('Planned')], ['in progress', + loc('In Progress')], ['closed', loc('Closed')], ['fixed', loc('Fixed')] ] %] + <option [% 'selected ' IF state.0 == problem.state %] value="[% state.0 %]">[% state.1 %]</option> + [% END %] + </select> + [% ELSE %] + [% IF problem.is_fixed AND c.user_exists AND c.user.id == problem.user_id %] + + <input type="checkbox" name="reopen" id="form_reopen" value="1"[% ' checked' IF update.mark_open %]> + <label class="inline" for="form_reopen">[% loc('This problem has not been fixed') %]</label> + + [% ELSIF !problem.is_fixed %] + + <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 %] + [% END %] + + [% IF c.cobrand.allow_photo_upload %] + <div id="fileupload_normalUI"> + [% IF upload_fileid %] + <img align="right" src="/photo/[% upload_fileid %].temp.jpeg" alt=""> + <p>[% loc('You have already attached a photo to this update, attaching another one will replace it.') %]</p> + <input type="hidden" name="upload_fileid" value="[% upload_fileid %]"> + [% END %] + <label for="form_photo">[% loc('Photo') %]</label> + [% IF field_errors.photo %] + <p class='form-error'>[% field_errors.photo %]</p> + [% END %] + <input type="file" name="photo" id="form_photo"> + </div> + [% END %] + + [% IF c.user_exists %] + + [% INCLUDE name %] + + <input class="final-submit green-btn" type="submit" id="update_post" value="[% loc('Post') %]"> + + + [% ELSE %] + + <label for="form_rznvy">[% loc('Email' ) %]</label> + [% IF field_errors.email %] + <p class='form-error'>[% field_errors.email %]</p> + [% END %] + <input type="email" name="rznvy" id="form_rznvy" value="[% update.user.email | html %]" placeholder="[% loc('Your email address' ) %]" required> + + <div id="form_sign_in"> + <h3>[% loc("Now to submit your update…") %]</h3> + <h2>[% loc("Do you have a FixMyStreet password?") %]</h2> + + <div id="form_sign_in_yes" class="form-box"> + <h5>[% loc('<strong>Yes</strong> I have a password') %]</h5> + + <label class="hidden-js n" for="password_sign_in">[% loc('Yes I have a password') %]</label> + [% IF field_errors.password %] + <p class='form-error'>[% field_errors.password %]</p> + [% END %] + <div class="form-txt-submit-box"> + <input type="password" name="password_sign_in" id="password_sign_in" value="" placeholder="[% loc('Your password') %]"> + <input class="green-btn" type="submit" name="submit_sign_in" id="submit_sign_in" value="[% loc('Post') %]"> + </div> + + <div class="checkbox-group"> + <input type="checkbox" id="remember_me" name="remember_me" value='1'[% ' checked' IF remember_me %]> + <label class="inline n" for="remember_me">[% loc('Keep me signed in on this computer') %]</label> + </div> + </div> + <div id="form_sign_in_no" class="form-box"> + <h5>[% loc('<strong>No</strong> Let me confirm my update by email') %]</h5> + + [% INCLUDE name %] + + <div class="general-sidebar-notes"> + <p class="dark">[% loc('We never show your email') %]</p> + <p>[% loc('Providing a password is optional, but doing so will allow you to more easily report problems, leave updates and manage your reports.') %]</p> + </div> + + <label for="password_register">[% loc('Password (optional)') %]</label> + + <div class="form-txt-submit-box"> + <input type="password" name="password_register" id="password_register" value="" placeholder="[% loc('Enter a password') %]"> + <input class="green-btn" type="submit" name="submit_register" id="submit_register" value="[% loc('Post') %]"> + </div> + </div> + </div> + + [% END %] + </fieldset> + </form> +</div> + + + +[% INCLUDE 'footer.html' %] + +[% BLOCK name %] + <label for="form_name">[% loc('Name') %]</label> + [% IF field_errors.name %] + <p class='form-error'>[% field_errors.name %]</p> + [% END %] + <input type="text" name="name" id="form_name" value="[% update.name || c.user.name | html %]" placeholder="[% loc('Your name') %]"> + + <div class="checkbox-group"> + <input type="checkbox" name="may_show_name" id="form_may_show_name" value="1"[% ' checked' UNLESS update.anonymous %]> + <label class="inline" for="form_may_show_name">[% loc('Show my name publicly') %]</label> + </div> + <div class="checkbox-group"> + <input type="checkbox" name="add_alert" id="form_add_alert" value="1"[% ' checked' IF add_alert %]> + <label class="inline" for="form_add_alert">[% loc( 'Alert me to future updates' ) %]</label> + </div> +[% END %] diff --git a/templates/web/fixmystreet/report/new/category.html b/templates/web/fixmystreet/report/new/category.html new file mode 100644 index 000000000..095cd7c2e --- /dev/null +++ b/templates/web/fixmystreet/report/new/category.html @@ -0,0 +1,10 @@ +[% FILTER collapse %] +[% IF category_options.size %] + <label for='form_category'>[% category_label | html %]</label> + <select name='category' id='form_category'[% ' onchange="form_category_onchange()"' IF category_extras.size %]> + [% FOREACH cat_op IN category_options %] + <option value='[% cat_op | html %]'[% ' selected' IF report.category == cat_op %]>[% cat_op | html %]</option> + [% END %] + </select> +[% END %] +[% END -%] diff --git a/templates/web/fixmystreet/report/new/category_extras.html b/templates/web/fixmystreet/report/new/category_extras.html new file mode 100644 index 000000000..c2a213225 --- /dev/null +++ b/templates/web/fixmystreet/report/new/category_extras.html @@ -0,0 +1,24 @@ +<div id="category_meta"> + [%- IF report_meta %] + [%- category = report.category %] + <h4>Additional Information</h4> + [%- FOR meta IN category_extras.$category %] + [%- meta_name = meta.code -%] + + <label for="form_[% meta_name %]">[% meta.description _ ':' %]</label> + [% IF field_errors.$meta_name %] + <p class='form-error'>[% field_errors.$meta_name %]</p> + [% END -%] + [% IF meta.exists('values') %] + <select name="[% meta_name %]" id="form_[% meta_name %]"[% meta.required == 'true' ? ' required' : '' %]> + [% FOR option IN meta.values.value.keys %] + <option value="[% meta.values.value.$option.key %]">[% option %]</option> + [% END %] + </select> + [% ELSE %] + <input type="text" value="[% report_meta.$meta_name | html %]" name="[% meta_name %]" id="form_[% meta_name %]"[% meta.required == 'true' ? ' required' : '' %]> + [% END %] + + [%- END %] + [%- END %] +</div>
\ No newline at end of file diff --git a/templates/web/fixmystreet/report/new/councils_text.html b/templates/web/fixmystreet/report/new/councils_text.html new file mode 100644 index 000000000..1da5746c1 --- /dev/null +++ b/templates/web/fixmystreet/report/new/councils_text.html @@ -0,0 +1,9 @@ +[% FILTER collapse %] +[% IF area_ids_to_list.size == 0 %] + [% PROCESS 'report/new/councils_text_none.html' %] +[% ELSIF area_ids_to_list.size == all_councils.size %] + [% PROCESS 'report/new/councils_text_all.html' %] +[% ELSE %] + [% PROCESS 'report/new/councils_text_some.html' %] +[% END %] +[% END -%] diff --git a/templates/web/fixmystreet/report/new/councils_text_all.html b/templates/web/fixmystreet/report/new/councils_text_all.html new file mode 100644 index 000000000..fb10ec4fd --- /dev/null +++ b/templates/web/fixmystreet/report/new/councils_text_all.html @@ -0,0 +1,19 @@ +<p> +[% IF all_councils.${area_ids_to_list.0}.type == 'LBO' %] +[% + tprintf( + loc('All the information you provide here will be sent to <strong>%s</strong> or a relevant local body such as <strong>TfL</strong>, via the London Report-It system.'), + all_council_names.join( '</strong>' _ loc(' or ') _ '<strong>' ) + ); +%] +[% ELSE %] +[% + tprintf( + loc('All the information you provide here will be sent to <strong>%s</strong>.'), + all_council_names.join( '</strong>' _ loc(' or ') _ '<strong>' ) + ); +%] +[% END %] + +[% loc('The subject and details of the problem will be public, plus your name if you give us permission.') %] +</p>
\ No newline at end of file diff --git a/templates/web/fixmystreet/report/new/councils_text_none.html b/templates/web/fixmystreet/report/new/councils_text_none.html new file mode 100644 index 000000000..992d030c0 --- /dev/null +++ b/templates/web/fixmystreet/report/new/councils_text_none.html @@ -0,0 +1,20 @@ +<p>[% + + nget( + "We do not yet have details for the council that covers this location.", + "We do not yet have details for the councils that cover this location.", + all_councils.size + ); +%] +[% + loc("If you submit a problem here the subject and details of the problem will be public, but the problem will <strong>not</strong> be reported to the council."); +%] +[% + tprintf( + loc("You can help us by finding a contact email address for local problems for %s and emailing it to us at <a href='mailto:%s'>%s</a>."), + all_council_names.join( loc(' or ') ), + c.cobrand.contact_email, + c.cobrand.contact_email + ); + +%]</p>
\ No newline at end of file diff --git a/templates/web/fixmystreet/report/new/councils_text_some.html b/templates/web/fixmystreet/report/new/councils_text_some.html new file mode 100644 index 000000000..9f123fb9a --- /dev/null +++ b/templates/web/fixmystreet/report/new/councils_text_some.html @@ -0,0 +1,28 @@ +<p> +[% loc('All the information you provide here will be sent to') %] + +[% FOREACH council_id IN area_ids_to_list %] + [% loc( ' or ') IF ! loop.first %] + <strong>[% all_councils.$council_id.name %]</strong> + [%- '.' IF loop.last %] +[% END %] + +[% + loc('The subject and details of the problem will be public, plus your name if you give us permission.'); +%] +[% + nget( + "We do <strong>not</strong> yet have details for the other council that covers this location.", + "We do <strong>not</strong> yet have details for the other councils that cover this location.", + missing_details_councils.size + ); +%] +[% + tprintf( + loc("You can help us by finding a contact email address for local problems for %s and emailing it to us at <a href='mailto:%s'>%s</a>."), + missing_details_council_names.join( loc(' or ') ), + c.cobrand.contact_email, + c.cobrand.contact_email + ); +%] +</p>
\ No newline at end of file diff --git a/templates/web/fixmystreet/report/new/fill_in_details.html b/templates/web/fixmystreet/report/new/fill_in_details.html new file mode 100644 index 000000000..fa783ab64 --- /dev/null +++ b/templates/web/fixmystreet/report/new/fill_in_details.html @@ -0,0 +1,36 @@ +[% + SET class = ''; + SET class = 'mappage' IF report.used_map; + PROCESS "maps/${map.type}.html" IF report.used_map; + INCLUDE 'header.html', title => loc('Reporting a problem'), bodyclass => class +%] + +[% IF report.used_map %] + +<form action="[% c.uri_for('/report/new') %]" method="post" name="mapForm" id="mapForm"[% IF c.cobrand.allow_photo_upload %] enctype="multipart/form-data"[% END %] class="validate"> + [% IF c.req.params.map_override %] + <input type="hidden" name="map_override" value="[% c.req.params.map_override | html %]"> + [% END %] + + <input type="hidden" name="pc" value="[% pc | html %]"> + +[% ELSE %] + +<form action="[% c.uri_for('/report/new') %]" method="post" name="mapSkippedForm"[% IF c.cobrand.allow_photo_upload %] enctype="multipart/form-data"[% END %] class="validate"> + <input type="hidden" name="pc" value="[% pc | html %]"> + <input type="hidden" name="skipped" value="1"> + +[% END %] + + <input type="hidden" name="latitude" id="fixmystreet.latitude" value="[% short_latitude | html %]"> + <input type="hidden" name="longitude" id="fixmystreet.longitude" value="[% short_longitude | html %]"> + + [% IF report.used_map %] + [% map_html %] + </div> + [% END %] + + [% PROCESS 'report/new/fill_in_details_form.html' %] +</form> + +[% INCLUDE 'footer.html' %] diff --git a/templates/web/fixmystreet/report/new/fill_in_details_form.html b/templates/web/fixmystreet/report/new/fill_in_details_form.html new file mode 100644 index 000000000..283f748ba --- /dev/null +++ b/templates/web/fixmystreet/report/new/fill_in_details_form.html @@ -0,0 +1,209 @@ +<div id="report-a-problem-main"> + <h1>[% loc('Reporting a problem') %]</h1> + + [% IF js %] + <p id="councils_text"> + [% + tprintf( + loc('All the information you provide here will be sent to <strong>%s</strong>.'), + loc('the local council') + ); + %] + [% loc('The subject and details of the problem will be public, plus your name if you give us permission.') %] + </p> + [% ELSE %] + [% PROCESS 'report/new/councils_text.html' %] + [% END %] + + <div id="report-a-problem-sidebar"> + <!-- + The text for this section needs checking, but I can't work out which bit comes from where + --> + <div class="sidebar-tips"> + [% IF report.used_map %] + [% IF partial_token %] + <p id="unknown">[% loc('Please note your report has <strong>not yet been sent</strong>. Choose a category and add further information below, then submit.') %]</p> + [% END %] + <p>[% loc('You have located the problem at the point marked with a green pin on the map. If this is not the correct location, simply click on the map again. ') %]</p> + [% END %] + + <p> + [% IF report.used_map %] + [% INCLUDE 'report/new/fill_in_details_text.html' %] + [% ELSE %] + [% loc('Please fill in the form below with details of the problem, and describe the location as precisely as possible in the details box.') %] + [% END %] + </p> + </div> + + <div class="sidebar-notes"> + [% INCLUDE 'report/new/notes.html' %] + </div> + + </div> + + [% INCLUDE 'errors.html' %] + <fieldset> + <div id="problem_form"> + + [% INCLUDE 'report/new/form_heading.html' %] + + + [% IF field_errors.council %] + <p class='form-error'>[% field_errors.council %]</p> + [% END %] + + + + <label for="form_title">[% loc('Subject') %]</label> + [% IF field_errors.title %] + <p class='form-error'>[% field_errors.title %]</p> + [% END %] + <input type="text" value="[% report.title | html %]" name="title" id="form_title" placeholder="[% loc('Provide a title') %]" required> + + <label for="form_detail">[% loc('Details') %]</label> + [% IF field_errors.detail %] + <p class='form-error'>[% field_errors.detail %]</p> + [% END %] + <textarea rows="7" cols="26" name="detail" id="form_detail" placeholder="[% loc('Please fill in details of the problem.') %]" required>[% report.detail | html %]</textarea> + + [% IF js %] + <div id="form_category_row"> + <label class="inline" for="form_category">[% loc('Category') %]</label> + <select name="category" id="form_category" required><option>[% loc('Loading...') %]</option></select> + </div> + [% ELSE %] + [% IF category_options.size %] + [% IF field_errors.category %] + <p class='form-error'>[% field_errors.category %]</p> + [% END %] + + [% PROCESS "report/new/category.html" %] + [% END %] + [% END %] + + [%- IF category_extras %] + [% PROCESS "report/new/category_extras.html" %] + [%- END %] + + [% IF c.cobrand.allow_photo_upload %] + [% IF field_errors.photo %] + <p class='form-error'>[% field_errors.photo %]</p> + [% END %] + + + [% IF upload_fileid || report.photo %] + [% IF upload_fileid %] + <img align="right" src="/photo/[% upload_fileid %].temp.jpeg" alt=""> + <input type="hidden" name="upload_fileid" value="[% upload_fileid %]"> + [% END %] + + <p>[% loc('You have already attached a photo to this report, attaching another one will replace it.') %]</p> + + [% IF report.photo %] + <img align="right" src="/photo/[% report.id %].jpeg"> + [% END %] + [% END %] + + <label for="form_photo">[% loc('Photo') %]</label> + <input type="file" name="photo" id="form_photo"> + [% END %] + + [% IF c.user_exists %] + <div class="form-box"> + <label for="form_may_show_nameme">[% loc('Name') %]</label> + [% IF field_errors.name %] + <p class='form-error'>[% field_errors.name %]</p> + [% END %] + <input type="text" class="validName" value="[% report.name | html %]" name="name" id="form_name" placeholder="[% loc('Your name') %]"> + + [%# if there is nothing in the name field then set check box as default on form %] + <div class="checkbox-group"> + <input type="checkbox" name="may_show_name" id="form_may_show_name" value="1"[% ' checked' IF !report.anonymous %]> + <label class="inline" for="form_may_show_name">[% loc('Show my name publicly') %]</label> + </div> + + <div class="general-sidebar-notes"> + <p>[% loc('We never show your email address or phone number.') %]</p> + </div> + + <label for="form_phone">[% loc('Phone number (optional)') %]</label> + <input class="" type="text" value="[% report.user.phone | html %]" name="phone" id="form_phone" placeholder="[% loc('Your phone number') %]"> + + <div class="form-txt-submit-box"> + <input class="green-btn" type="submit" id="submit_register" name="submit_register" value="[% loc('Submit') %]"> + </div> + </div> + [% ELSE %] + + <label for="form_email">[% loc('Your email') %]</label> + [% IF field_errors.email %] + <p class='form-error'>[% field_errors.email %]</p> + [% END %] + <input type="email" value="[% report.user.email | html %]" name="email" id="form_email" placeholder="[% loc('Please enter your email address') %]" required> + + <div id="form_sign_in"> + <h3>[% loc("Now to submit your report…") %]</h3> + <h2>[% loc("Do you have a FixMyStreet password?") %]</h2> + + <div id="form_sign_in_yes" class="form-box"> + + <h5>[% loc('<strong>Yes</strong> I have a password') %]</h5> + + <label class="hidden-js n" for="password_sign_in">[% loc('Yes I have a password') %]</label> + <div class="form-txt-submit-box"> + [% IF field_errors.password %] + <p class='form-error'>[% field_errors.password %]</p> + [% END %] + <input type="password" name="password_sign_in" id="password_sign_in" placeholder="[% loc('Your password') %]" value=""> + <input class="green-btn" type="submit" id="submit_sign_in" name="submit_sign_in" value="[% loc('Submit') %]"> + </div> + + <div class="checkbox-group"> + <input type="checkbox" id="remember_me" name="remember_me" value='1'[% ' checked' IF remember_me %]> + <label class="n inline" for="remember_me">[% loc('Keep me signed in on this computer') %]</label> + </div> + </div> + + <div id="form_sign_in_no" class="form-box"> + <h5>[% loc('<strong>No</strong> Let me confirm my report by email') %]</h5> + + <label for="form_may_show_nameme">[% loc('Name') %]</label> + [% IF field_errors.name %] + <p class='form-error'>[% field_errors.name %]</p> + [% END %] + <input type="text" class="form-focus-trigger validName" value="[% report.name | html %]" name="name" id="form_name" placeholder="[% loc('Your name') %]"> + + [%# if there is nothing in the name field then set check box as default on form %] + <div class="checkbox-group"> + <input type="checkbox" name="may_show_name" id="form_may_show_name" value="1"[% ' checked' IF !report.anonymous %]> + <label class="inline" for="form_may_show_name">[% loc('Show my name publicly') %]</label> + </div> + + <div class="general-sidebar-notes form-focus-hidden"> + <p class="dark">[% loc('We never show your email address or phone number.') %]</p> + <p>[% loc('Providing a password is optional, but doing so will allow you to more easily report problems, leave updates and manage your reports.') %]</p> + </div> + + <label class="form-focus-hidden" for="form_phone">[% loc('Phone number (optional)') %]</label> + <input class="form-focus-hidden" type="text" value="[% report.user.phone | html %]" name="phone" id="form_phone" placeholder="[% loc('Your phone number') %]"> + + <label class="form-focus-hidden" for="password_register">[% loc('Password (optional)') %]</label> + + <div class="form-txt-submit-box form-focus-hidden"> + <input type="password" name="password_register" id="password_register" value="" placeholder="[% loc('Enter a password') %]"> + <input class="green-btn" type="submit" id="submit_register" name="submit_register" value="[% loc('Submit') %]"> + </div> + </div> + </div> + + [% END %] + </div> + </fieldset> + + [% IF partial_token %] + <input type="hidden" name="partial" value="[% partial_token.token %]"> + [% END %] + + <input type="hidden" name="submit_problem" value="1"> +</div> diff --git a/templates/web/fixmystreet/report/new/fill_in_details_text.html b/templates/web/fixmystreet/report/new/fill_in_details_text.html new file mode 100644 index 000000000..8b5e3a2ad --- /dev/null +++ b/templates/web/fixmystreet/report/new/fill_in_details_text.html @@ -0,0 +1,13 @@ +[% + IF area_ids_to_list.size != 0; + loc('The council won’t be able to help unless you leave as much +detail as you can. Please describe the exact location of the problem (e.g. on a +wall), what it is, how long it has been there, a description (and a photo of +the problem if you have one), etc.'); + IF category_extras; + ' ' _ loc('Some categories may require additional information.'); + END; + ELSE; + loc('Please fill in details of the problem below.'); + END; +%] diff --git a/templates/web/fixmystreet/report/new/form_heading.html b/templates/web/fixmystreet/report/new/form_heading.html new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/templates/web/fixmystreet/report/new/form_heading.html diff --git a/templates/web/fixmystreet/report/new/notes.html b/templates/web/fixmystreet/report/new/notes.html new file mode 100644 index 000000000..5a885abd0 --- /dev/null +++ b/templates/web/fixmystreet/report/new/notes.html @@ -0,0 +1,9 @@ +<p>[% loc("Please note:") %]</p> + +<ul class="plain-list"> + <li>[% loc("We will only use your personal information in accordance with our <a href=\"/faq#privacy\">privacy policy.</a>") %]</li> + <li>[% loc("Please be polite, concise and to the point.") %]</li> + <li>[% loc("Please do not be abusive — abusing your council devalues the service for all users.") %]</li> + <li>[% loc("Writing your message entirely in block capitals makes it hard to read, as does a lack of punctuation.") %]</li> + <li>[% loc("Remember that FixMyStreet is primarily for reporting physical problems that can be fixed. If your problem is not appropriate for submission via this site remember that you can contact your council directly using their own website.") %]</li> +</ul>
\ No newline at end of file diff --git a/templates/web/fixmystreet/report/new/report_import.html b/templates/web/fixmystreet/report/new/report_import.html new file mode 100644 index 000000000..7aa105afe --- /dev/null +++ b/templates/web/fixmystreet/report/new/report_import.html @@ -0,0 +1,92 @@ +[% INCLUDE 'header.html', title => 'External import' %] + +<h1>External import</h1> + +<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, +add any other information they wish, and then submit to the council. + +<p>This interface returns a plain text response; either <samp>SUCCESS</samp> if +the report has been successfully received, or if not, a list of errors, one per +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> + +<style type="text/css" media="screen"> + input { + /* Hide the form elements - they are just here for simpler testing */ + display: none; + } +</style> + +<form method="POST" action="/import" enctype="multipart/form-data"> + +<dl> + <dt>service</dt> + <dd> + <em>Required</em>. + Name of application/service using this interface. + <input type="text" name="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" /> + </dd> + + <dt>subject</dt> + <dd> + <em>Required</em>. Subject of problem report. + <input type="text" name="subject" /> + </dd> + + <dt>detail</dt> + <dd> + Main body and details of problem report. + <input type="text" name="detail" /> + </dd> + + <dt>name</dt> + <dd> + <em>Required</em>. Name of problem reporter. + <input type="text" name="name" /> + </dd> + + <dt>email</dt> + <dd> + <em>Required</em>. Email address of problem reporter. + <input type="text" name="email" /> + </dd> + + <dt>phone</dt> + <dd> + Telephone number of problem reporter. + <input type="text" name="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" /> + </dd> + + <dt>photo</dt> + <dd> + Photo of problem (JPEG only). + <input type="file" name="photo" /> + </dd> +</dl> + +<input type="submit" /> + +</form> + +[% INCLUDE 'footer.html' %]
\ No newline at end of file diff --git a/templates/web/fixmystreet/report/photo.html b/templates/web/fixmystreet/report/photo.html new file mode 100644 index 000000000..02ab9228b --- /dev/null +++ b/templates/web/fixmystreet/report/photo.html @@ -0,0 +1,8 @@ +[% IF c.cobrand.allow_photo_display && object.photo %] +[% photo = object.get_photo_params %] +<div class="update-img"> + [% IF photo.url_full %]<a href="[% photo.url_full %]" rel="fancy">[% END + %]<img alt="Photo of this report" [% IF photo.height %]height="[% photo.height %]" width="[% photo.width %]"[% END %] src="[% photo.url %]"> + [%- IF photo.url_full %]<span>zoom</span></a>[% END %] +</div> +[% END %] diff --git a/templates/web/fixmystreet/report/updates.html b/templates/web/fixmystreet/report/updates.html new file mode 100644 index 000000000..508e2aacc --- /dev/null +++ b/templates/web/fixmystreet/report/updates.html @@ -0,0 +1,36 @@ +[% FOREACH update IN updates.all %] +[% IF loop.first %] +<section class="full-width"> + <h4 class="static-with-rule">[% loc('Updates') %]</h4> + <ul class="issue-list"> +[% END %] + <li> + <div class="update-wrap"> + <div class="update-text"> + [% add_links( update.text ) | html_para %] + + <p class="meta-2"> + <a name="update_[% update.id %]"></a> + [% IF update.anonymous || update.name == '' %] + [% tprintf( loc( 'Posted anonymously at %s' ), prettify_epoch( update.confirmed_local.epoch ) ) -%] + [%- ELSIF update.user.from_council %] + [% user_name = update.user.name | html %] + [% tprintf( loc( 'Posted by %s (<strong>%s</strong>) at %s' ), user_name, update.user.council, prettify_epoch( update.confirmed_local.epoch ) ) -%] + [%- ELSE %] + [% tprintf( loc( 'Posted by %s at %s' ), update.name, prettify_epoch( update.confirmed_local.epoch ) ) | html -%] + [%- END -%] + [%- c.cobrand.extra_update_meta_text(update) -%] + [%- ", " _ loc( 'marked as fixed' ) IF update.mark_fixed %] + [%- ", " _ loc( 'reopened' ) IF update.mark_open %] + [%- ", " _ tprintf(loc( 'marked as %s' ), update.meta_problem_state) IF update.problem_state %] + </p> + </div> + + [% INCLUDE 'report/photo.html' object=update %] + </div> + </li> +[% IF loop.last %] + </ul> +</section> +[% END %] +[% END %]
\ No newline at end of file diff --git a/templates/web/fixmystreet/reports/cobrand_stats.html b/templates/web/fixmystreet/reports/cobrand_stats.html new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/templates/web/fixmystreet/reports/cobrand_stats.html diff --git a/templates/web/fixmystreet/reports/council.html b/templates/web/fixmystreet/reports/council.html new file mode 100755 index 000000000..cf5729fb3 --- /dev/null +++ b/templates/web/fixmystreet/reports/council.html @@ -0,0 +1,131 @@ +[% IF ward %] + [% name = "$ward.name, $council.name" + thing = loc('ward') + %] +[% ELSE %] + [% name = council.name + thing = loc('council') + %] +[% END %] + +[% + PROCESS "maps/${map.type}.html"; + INCLUDE 'header.html', + title = tprintf(loc('%s - Summary reports'), name) + context = 'reports' + bodyclass = 'mappage' + rss = [ tprintf(loc('Problems within %s, FixMyStreet'), name), rss_url ] +%] + +[% map_html %] +</div> + +<div id="side"> + +<h1 id="reports_heading"> + [% IF ward %] + [% ward.name %]<span>, </span><a href="[% council_url %]">[% council.name %]</a> + [% ELSE %] + [% council.name %] + [% END %] +</h1> + +[% IF council.generation_high == 10 AND c.cobrand.country == 'GB' %] + <p class="alert">This council no longer exists. + [% IF council.name.match('Penwith|Kerrier|Carrick|Restormel|Caradon|North Cornwall') %] + Its area is now covered by <a href="/reports/Cornwall">Cornwall Council</a>. + [% ELSIF council.name.match('Durham|Easington|Sedgefield|Teesdale|Wear Valley|Derwentside|Chester le Street') %] + Its area is now covered by <a href="/reports/Durham+County">Durham County Council</a>. + [% ELSIF council.name.match('Blyth Valley|Wansbeck|Castle Morpeth|Tynedale|Alnwick|Berwick upon Tweed') %] + Its area is now covered by <a href="/reports/Northumberland">Northumberland County Council</a>. + [% ELSIF council.name.match('North Shropshire|Oswestry|Shrewsbury and Atcham|South Shropshire|Bridgnorth') %] + Its area is now covered by <a href="/reports/Shropshire">Shropshire Council</a>. + [% ELSIF council.name.match('Salisbury|West Wiltshire|Kennet|North Wiltshire') %] + Its area is now covered by <a href="/reports/Wiltshire">Wiltshire Council</a>. + [% ELSIF council.name.match('Ellesmere Port and Neston|Vale Royal|Chester') %] + Its area is now covered by <a href="/reports/Cheshire+West+and+Chester">Cheshire West and Chester Council</a>. + [% ELSIF council.name.match('Macclesfield|Congleton|Crewe and Nantwich') %] + Its area is now covered by <a href="/reports/Cheshire+East">Cheshire East Council</a>. + [% ELSIF council.name.match('Mid Bedfordshire|South Bedfordshire') %] + Its area is now covered by <a href="/reports/Central+Bedfordshire">Central Bedfordshire Council</a>. + [% ELSIF council.name.match('Cheshire') %] + Its area is now covered by <a href="/reports/Cheshire+West+and+Chester">Cheshire West and Chester Council</a> or + <a href="/reports/Cheshire+East">Cheshire East Council</a>. + [% ELSIF council.name.match('Bedfordshire') %] + Its area is now covered by <a href="/reports/Bedford">Bedford Borough Council</a> or + <a href="/reports/Central+Bedfordshire">Central Bedfordshire Council</a>. + [% END %] + </p> +[% ELSE %] + <div class="shadow-wrap"> + <ul id="key-tools"[% IF NOT children.size %] class="singleton"[% END %]> + <li><a rel="nofollow" id="key-tool-updates-area" class="feed" href="[% rss_url %]">[% tprintf(loc('Get updates of problems in this %s'), thing) %]</a></li> + [% IF children.size %] + <li><a href="#council_wards" id="key-tool-wards" class="chevron">[% loc('Wards of this council') %]</a></li> + [% END %] + </ul> + </div> +[% END %] + +[% INCLUDE 'reports/cobrand_stats.html' %] + +[% IF children.size %] +<section id="council_wards" class="hidden-js"> + <h2>[% loc('Wards of this council') %]</h2> + <p>[% loc('Follow a ward link to view only reports within that ward.') %]</p> + <ul class="issue-list-a full-width"> + [% FOR child IN children.values.sort('name') %] + <li><a href="[% child.url %]"><span class="text">[% child.name %]</span></a></li> + [% END %] + </ul> +</section> +[% END %] + +[% IF c.cobrand.moniker == 'fixmystreet' %] +<p class="promo"> + FixMyStreet is now available for local council websites. + <a href="/for-councils">Find out more</a>. +</p> +[% END %] + +[% INCLUDE 'pagination.html', param = 'p' %] + +<section class="full-width"> + [% INCLUDE column + problems = problems.${council.id} + %] +</section> + +[% INCLUDE 'pagination.html', param = 'p' %] + +</div> +[% INCLUDE 'footer.html' %] + +[% BLOCK column %] +[% IF problems %] + +<ul class="issue-list-a"> +[% FOREACH problem IN problems %] + <li> + <a href="[% c.uri_for('/report/' _ problem.id) %]"> + <div class="text"> + <h4>[% problem.title | html %]</h4> + <small>[% prettify_epoch( problem.confirmed, 1 ) %]</small> + [% IF problem.councils > 1 %] <small>[% loc('(sent to both)') %]</small> [% END %] + [% IF c.cobrand.moniker != 'emptyhomes' %] + [% IF problem.councils == 0 %] <small>[% loc('(not sent to council)') %]</small> [% END %] + [% END %] + </div> + [% IF problem.photo %] + <div class="img"> + <img height="60" width="90" src="/photo/[% problem.id %].fp.jpeg" alt=""> + </div> + [% END %] + </a> + </li> +[% END %] +</ul> + +[% END %] +[% END %] + diff --git a/templates/web/fixmystreet/reports/index.html b/templates/web/fixmystreet/reports/index.html new file mode 100755 index 000000000..96367d4bb --- /dev/null +++ b/templates/web/fixmystreet/reports/index.html @@ -0,0 +1,37 @@ +[% INCLUDE 'header.html', title = loc('Summary reports'), bodyclass => 'fullwidthpage' %] + +<h1>[% loc('All Reports') %]</h1> + +<div class="intro"> + <p> + [% loc('This is a summary of all reports on this site; select a particular council to see the reports sent there.') %] + [% loc('Greyed-out lines are councils that no longer exist.') %] + </p> +</div> + +<table cellpadding="3" cellspacing="1" border="0" class="nicetable"> + <thead> + <th class="title">[% loc('Name') %]</th> + <th class="data">[% loc('New <br>problems') %]</th> + <th class="data">[% loc('Older <br>problems') %]</th> + <th class="data">[% loc('Old / unknown <br>problems') %]</th> + <th class="data">[% loc('Recently <br>fixed') %]</th> + <th class="data">[% loc('Older <br>fixed') %]</th> + </thead> + + [% FOREACH area IN areas_info_sorted %] + <tr align="center" + [%- IF area.generation_high == 10 %] class="gone" + [%- ELSIF ! (loop.count % 2) %] class="a" + [%- END %]> + <td class="title"><a href="[% area.url %]">[% area.name %]</a></td> + <td class="data">[% open.${area.id}.new or 0 %]</td> + <td class="data">[% open.${area.id}.older or 0 %]</td> + <td class="data">[% open.${area.id}.unknown or 0 %]</td> + <td class="data">[% fixed.${area.id}.new or 0 %]</td> + <td class="data">[% fixed.${area.id}.old or 0 %]</td> + </tr> + [% END %] +</table> + +[% INCLUDE 'footer.html' pagefooter => 'yes' %] diff --git a/templates/web/fixmystreet/reports/ward.html b/templates/web/fixmystreet/reports/ward.html new file mode 100755 index 000000000..8b65ffb28 --- /dev/null +++ b/templates/web/fixmystreet/reports/ward.html @@ -0,0 +1 @@ +[% INCLUDE reports/council.html %] diff --git a/templates/web/fixmystreet/static/for_councils.html b/templates/web/fixmystreet/static/for_councils.html new file mode 100644 index 000000000..2e83c7c6c --- /dev/null +++ b/templates/web/fixmystreet/static/for_councils.html @@ -0,0 +1,46 @@ +[% INCLUDE 'header.html', title = loc('FixMyStreet for Councils'), bodyclass = 'twothirdswidthpage' %] + +<div class="sticky-sidebar"> + <aside> + <ul class="plain-list"> + <li><strong>FixMyStreet for Councils</strong></li> + <li>Summary</li> + <li><a href="/for-councils/faq">Questions and Answers</a></li> + <li><i>Email us at <a href="mailto:hello@mysociety.org">hello@mysociety.org</a></i></li> + </ul> + </aside> +</div> + +<h1>Shift your problem reporting online: FixMyStreet for Councils</h1> + +<p>Councils everywhere are looking to move street issue reporting online, to make +savings and improve services for their residents. <strong>FixMyStreet for +Councils</strong> is explicitly designed to support the shift to digital. + +<p>FixMyStreet is the most popular online street issue reporting application in +the UK. It’s known for prioritising usability and accessibility – and people +love to use it. With very little cost and effort, your staff and your website’s +users can enjoy its simple yet powerful features. + +<p>Embedding FixMyStreet in your council’s website is simple. As a cloud-based +service, it requires no development work from your team. We will match your +site’s look and feel seamlessly, and provide robust technical support and free +training to council users. We also offer a mobile web version of the product +as well as iPhone and Android apps branded for councils. + +<p>We can also integrate FixMyStreet with your CRM or customer management system, +to ensure automatic two-way updates, saving you even more time and money. + +<img src="/cobrands/fixmystreet/barnet.png" alt="" style="float: right; padding: 0.25em; border: solid 1px #ccc; margin: 1em;"> + +<p>mySociety, the non-profit behind FixMyStreet, is a software provider to over +forty local authorities in the UK. We understand the challenges that councils +face in channel shift, and will bring our passion and expertise to support your +journey. + +<p><a href="http://www.mysociety.org/wp/wp-content/uploads/2012/02/FixMyStreet_for_councils_2012.pdf">FixMyStreet for Councils brochure</a> + +<p>Have questions? Read our <a href="/for-councils/faq">Questions and Answers for Councils</a> +or get in touch at <a href="mailto:hello@mysociety.org">hello@mysociety.org</a>. + +[% INCLUDE 'footer.html' pagefooter = 'yes' %] diff --git a/templates/web/fixmystreet/static/for_councils_faq.html b/templates/web/fixmystreet/static/for_councils_faq.html new file mode 100644 index 000000000..16c7d5cfe --- /dev/null +++ b/templates/web/fixmystreet/static/for_councils_faq.html @@ -0,0 +1,359 @@ +[% INCLUDE 'header.html', title = loc('Questions and Answers :: FixMyStreet for Councils'), bodyclass = 'twothirdswidthpage' %] + +<div class="sticky-sidebar"> + <aside> + <ul class="plain-list"> + <li><strong>FixMyStreet for Councils</strong></li> + <li><a href="/for-councils">Summary</a></li> + <li>Questions and Answers <ul> + <li><a href="#general">General information</a></li> + <li><a href="#implementing">Implementing FixMyStreet for Councils</a></li> + <li><a href="#reporting">Problem reporting</a></li> + <li><a href="#best">Getting the best out of FixMyStreet</a></li> + </ul> </li> + <li><i>Email us at <a href="mailto:hello@mysociety.org">hello@mysociety.org</a></i></li> + </ul> + </aside> +</div> + +<h1>Questions about FixMyStreet for Councils</h1> + +<h2 id="general">General information</h2> + +<dl> + +<dt>What is FixMyStreet For Councils?</dt> + +<dd> +<p>FixMyStreet is a street issue-reporting and mapping application +designed specifically for local authority websites. + +<p>It integrates seamlessly with council websites, fully reflecting their look +and feel. All copy, categories, information, reporting fields and links can be +customised to the specific needs of the council. FixMyStreet can also be +connected to a CRM or fault management system for automatic two-way updates. + +<p>The software is open source and is based on mySociety’s award-winning +FixMyStreet.com platform, which has been operating for five years. It is the +most widely-used street issue web application in the UK, sending over 5,000 +reports to local authorities each month. +</dd> + +<dt>Who built it?</dt> + +<dd> +FixMyStreet for Councils was built by mySociety Ltd, a company registered in +England and Wales, company number 03277032. mySociety Ltd is wholly owned by +the charity UK Citizens Online Democracy (charity number 1076346). All profits +are returned to the charity. +</dd> + +<dt>What are the benefits for councils?</dt> + +<dd> +<p>FixMyStreet for Councils will save you and your residents time. It will reduce duplicate reports and encourage the shift of street issue reporting to the web. + +<p>It also places a highly usable, attractive application on your website, and a very simple channel for responding to your residents if you wish to do so. + +<p>Most councils get a high volume of telephone calls to report street issues - by moving even a small proportion of that online, you can make significant savings over time. +</dd> + +<dt>Why is FixMyStreet more effective than standard reporting forms?</dt> + +<dd> +<p>As a rule, people do not enjoy filling in onerous forms on the web. They +often span several pages and require a lot of personal information – so many +people resort to calling instead. + +<p>Reporting on FixMyStreet is extremely simple and quick. The user pinpoints +the location of the problem on a map, provides a description and a photo if +they have one, and their email address. You’ll receive the email address with +the problem report, so your officers can get in touch if they need to. + +<p>Using a map as a way to locate an issue is very useful – people often don’t +know the exact nearest address, but they can show where it is on a map. + +<p>Finally, FixMyStreet allows you to comment on a report or update its status +– your update will be available for everyone interested to see on the website, +further reducing avoidable contact. +</dd> + +<dt>What is the difference between FixMyStreet.com and FixMyStreet for Councils?</dt> + +<dd> +<p>FixMyStreet.com is a national street issue reporting website that enables +anyone anywhere in Great Britain to report a problem to their council. The +reports are delivered to councils by email. + +<p>FixMyStreet for Councils is a product for council websites to enable their +residents to report issues to them. It becomes a natural part of the council’s +site, can be included in the list of top tasks, integrates council-relevant +information, and can be linked with council’s backoffice. + +<p>It uses the same software platform as the FixMyStreet.com site; issues +reported to a council on its own website are also shown on FixMyStreet.com, and +vice-versa. Read the Implementation FAQ above to learn why this approach really +works. + +</dd> + +<dt>Which councils already have FixMyStreet?</dt> + +<dd> +The London Borough of Bromley will soon be launching our upgraded FixMyStreet +for Councils product. For existing implementations, have a look at the +<a href="http://barnet.fixmystreet.com/">London Borough of Barnet’s website</a> +or <a href="http://southampton.fixmystreet.com/">Southampton City Council’s +website</a>. Meanwhile, West Berkshire Council is an example of a back-office +integration - they receive problems reported on FixMyStreet directly into their +CRM. +</dd> + +<dt>Is there a mobile version of the FixMyStreet for Councils product?</dt> + +<dd> +<p>As more and more people use their smartphones for online tasks, we make it +easy for councils to enable mobile street issue reporting. We offer two +products: +<ul> +<li>A mobile web version of FixMyStreet – this presents users with a +mobile-optimised version of a council FixMyStreet web app, and enables mobile +reporting by simply entering a URL of the council’s web reporting page in their +mobile browser +<li>Mobile Apps - some users do prefer to use downlodable apps, so we are +currently developing iPhone and Android Apps with the capability to include +council branding. If you are interested, <a +href="mailto:hello@mysociety.org">let us know</a>. +</ul> +</dd> + +<dt>What is the cost to councils?</dt> + +<dd> +<ul> +<li>The front end product costs £3,500 in year one, reducing to £1,500 per annum in future years. +<li>The mobile web version costs £3,000 in year one and £1,000 per annum subsequently. +<li>Back-end integration costs depend on the complexity of your systems. Prices start at £3,500 in year one, then £1,500 per annum. +</ul> + +<p>The prices are all-inclusive, covering installation, updates, unlimited +problem reports and user training. There are no hidden fees. Please see <a +href="http://www.mysociety.org/wp/wp-content/uploads/2012/02/FixMyStreet_for_councils_2012.pdf">our +brochure</a> for more detail on what’s included. + +<p>There’s no commitment beyond the first 12 months, so you won’t be locked +into a lengthy contract. + +</dl> +<h2 id="implementing">Implementing FixMyStreet for Councils</h2> +<dl> + +<dt>How easy is it to implement FixMyStreet on a council website?</dt> + +<dd> +Extremely easy. Because we run FixMyStreet as a cloud service, all you need to do is to provide details of your website’s colour scheme, fonts, and any customised links or information you’d like to include. We will do all the work in setting up your issue reporting application. The implementation can take as little as a week, and requires minimal work from your web team. +</dd> + +<dt>Can we integrate FixMyStreet with the council’s CRM or fault management system?</dt> + +<dd> +<p>Absolutely. Integrating with your back-office system ensures maximum efficiencies - all reports go straight into your database. When their status changes, updates can be automatically pushed out onto your website as well as to FixMyStreet.com. We are able to integrate with any back-office system. + +<p>We understand that each council has its own processes which have evolved over time. We will work with you to find the best integration solution to ensure minimum disruption to your work, while helping make your processes simpler and more streamlined. + +<p>If you’d like us to advise on the best integration options for you, get in touch. Our advice is completely free - we are always keen to talk to councils and learn about your needs. +</dd> + +<dt>What is the technical architecture of FixMyStreet?</dt> + +<dd> +<p>FixMyStreet for councils uses the same <a +href="https://github.com/mysociety/fixmystreet">open source code base</a> and +runs on the same servers as the national FixMyStreet site. At the same time it +has been designed to allow customisation of both design and functionality. +Using the URL of the site visited the code determines which version of +FixMyStreet to display and loads the appropriate design and customisations. + +<p>If you have back end integration then new reports to your council will be +sent to your CRM through the agreed mechanism ( e.g. Open311 ). If we cannot +send a report to you then it will be put back on the queue and we will try +again later so you won’t miss any reports. +</dd> + +<dt>Why is linking FixMyStreet for Councils with the national FixMyStreet.com website a good idea?</dt> + +<dd> + +<p>There are three key benefits. First, by using the same underlying platform we can spread the cost of maintaining and hosting the system across the national site and different council users. This helps to keep prices low. Plus, we carry out all the technical maintenance and support, so you don’t need to. + +<p>Second, issues reported on FixMyStreet.com are also shown on your Council’s website, avoiding duplicate reports by different residents. + +<p>Third, the customised features on your own FixMyStreet (such as categories, information you gather from customers, additional details on issues the council is not responsible for, etc) will also be reflected on FixMyStreet.com. So wherever your residents report issues, they will get the right features and information from the council. +</dd> + +<dt>Do you offer training?</dt> + +<dd> +Yes. We offer a free two-hour remote training session to your users. If your location is within two hours’ travel from one of our FixMyStreet team members, we will provide training in person. +</dd> + +<dt>What level of support do you provide after implementation?</dt> + +<dd> +<p>We will provide technical support, address any questions, and make tweaks to your system if required. We will also go out of our way to help you with non-technical issues based on our significant experience with online problem reporting. + +<p>Throughout our contract with you, we will always be available by email or on the phone, and will get back to you quickly. + +</dl> +<h2 id="reporting">Problem reporting</h2> +<dl> + +<dt>Can we customise report categories and information requested?</dt> + +<dd> +<p>Yes. You can add the categories most relevant to your council, and remove ones that are not. Your customised categories will appear on both your website’s FixMyStreet implementation, and on the national FixMystreet.com website. + +<p>You can also customise information requested for each issue type - for example, Southampton council asks its customers to report the approximate pothole size, to help prioritise its work. +</dd> + +<dt>How can we deal with issues that the council is not responsible for?</dt> + +<dd> +Most councils already get residents phoning up or emailing them about problems not within their remit. FixMyStreet can help reduce this in two ways: +We can include the most commonly misreported issues in the categories list so when a users selects these, we can give them alternative contact information. If there are known geographical areas that council is not responsible for, we can alert users to that when they click on the map, provided you have given us this information. +Alternatively, if you have contact details in relevant organisations, we can instead email reports to them, while telling the user that these are not the council’s responsibility. +</dd> + +<dt>How are reports delivered to the council?</dt> + +<dd> +<p>If your FixMyStreet is not integrated with your CRM or back-office system, you will receive reports by email to email addresses that you specify. Different type of problems can be sent to different addresses if you wish. + +<p>With back-office integration, reports will go straight into your CRM or fault management system. +</dd> + +<dt>What information is provided in a problem report?</dt> + +<dd> +<p>You will receive the following information: +<ul> +<li>Issue category +<li>Precise location reported (in both latitude/longitude and easting/northing) +<li>Subject and issue description (we encourage users to give as much detail as possible) +<li>Link to a photo of the problem if the user has added one (we don’t send the actual photos so that we don’t clog your system) +<li>The user’s verified email address and phone number if given, so you can contact them directly if you wish +<li>A link to the issue on FixMyStreet for you to update the issue if required. +</ul> +</dd> + +<dt>How precise is location information provided in FixMyStreet?</dt> + +<dd> +<p>Very. The user clicks on a map that includes useful information for +reporting, such as building positions and footpaths, so they can tell you the +location as precisely as they can. + +<p>This approach also helps capture superior location data even when the user +does not know the exact address. + +<p>We will send you the co-ordinates for the point clicked on the map, as well +as the nearest street address as an additional data point. You can also view +the map directly on the issue report page. +</dd> + +<dt>Can we reflect more granular report statuses than just open and fixed?</dt> + +<dd> +Yes. As a client council you get a selection of problem statuses, including: +Investigating, Planned, In Progress, Fixed and Closed. +</dd> + +</dl> +<h2 id="best">Getting the best out of FixMyStreet</h2> +<dl> + +<dt>Can we add photos showing that council has dealt with an issue?</dt> + +<dd> +Yes - you can easily post a photo as an update to a report on your website. These will also be shown on the national FixMyStreet.com site. +</dd> + +<dt>What can we do to help shift users to online reporting instead of calling us up?</dt> + +<dd> +Online reporting is better for you and your residents, as it’s quick, effective and cheap. Good technology will certainly encourage the shift, but to make it fully effective you could do a a few things to help. +Direct residents to report issues on your website when they are in the telephone queue +When someone reports an issue to your call centre, tell them that next time they can do it much quicker online +Encourage council employees or other relevant organisations to report issues online +Respond to problem reports online, so that your residents know you engage well through this channel. +</dd> + +<dt>How can a council respond to issue reports?</dt> + +<dd> +<p>If you choose the back-office integration option, when an issue status +changes in your CRM or fault management system, it can also automatically +update on both your website and the national FixMyStreet website. This assumes +that your system can support automatic updates (most systems can). + +<p>If your back-office is not integrated, you can still easily respond by +changing the status manually on the website, or adding a few words of +commentary. This simple process is much quicker than a telephone call or email. +</dd> + +<dt>How can we contact the person submitting the report if we need more information?</dt> + +<dd> +Our software encourages users to submit as much information as possible, along with photographs. If you do need additional details, you can either post your question as an update to the issue online, or email the user directly (you will get their email address with the issue report). +</dd> + +<dt>We are unable to fix every problem, in particular in the current budget environment. How do we deal with this?</dt> + +<dd> +<p>Whether reported online or not, there are some issues that a council will +decide not to fix because it needs to prioritise more important problems. + +<p>Our online reporting application gives you a direct channel to explain to +your residents why certain problems cannot be addressed. This will lead to a +more open, constructive relationship. This may be a big culture change - we are +happy to support you with our experience in this area. + +<p>When deciding not to deal with a problem, you can close it so that it does +not show as an open problem. +</dd> + +<dt>We are worried about being swamped with high volume of online reports. What can we do?</dt> + +<dd> +While the volume of online reporting is likely to increase (a good thing, as it +replaces phone calls and alerts you to issues you didn’t know about), it +usually happens gradually, giving you plenty of time to adjust. We can stage +the introduction of your new reporting app to make the process even smoother. +</dd> + +<dt>Does FixMyStreet for Councils offer reporting functionality?</dt> + +<dd> +<p>We are currently working on a new reporting dashboard for councils, +accessible through a separate council log-in. This will have detailed reporting +on issue categories, timelines, statuses and help you identify emerging +hotspots. + +<p>Any new council implementation from April 2012 will have this new +functionality. Please get in touch if you’d like more detail. +</dd> + +<dt>I’d like to discuss options for my council. What do I do?</dt> + +<dd> +<p>Just drop us a line to <a +href="mailto:hello@mysociety.org">hello@mysociety.org</a> and we will get back +to you as soon as possible. + +<p>We will be happy to advise you on the options, and recommend an +implementation approach to fit your needs based on our experience. +</dd> + +</dl> + +[% INCLUDE 'footer.html' pagefooter = 'yes' %] diff --git a/templates/web/fixmystreet/static/fun.html b/templates/web/fixmystreet/static/fun.html new file mode 100644 index 000000000..57a74a0d7 --- /dev/null +++ b/templates/web/fixmystreet/static/fun.html @@ -0,0 +1,35 @@ +[% INCLUDE header.html + title = 'Weird and Wonderful reports' +%] + +<h1>Weird and Wonderful reports</h1> + +<p>Here are some of the best or strangest reports we’ve seen on FixMyStreet. +They’ve all been fixed, and in one case could have saved lives! +Do let us know if you find any more.</p> + +<ul class="plain-list"> + + <li><img src='http://www.fixmystreet.com/photo/9468.jpeg' align='right' hspace=8> + <h2>Dumped Piano (right)</h2> + <p>The reporter of this problem summed it up with their report, + which consisted solely of the one character “!”. — + <a href='http://www.fixmystreet.com/report/9468'>Problem report</a> + + <li><h2>Mad Seagull</h2> + <p>“A seagull is attacking various cars within this road. He starts at around 05:45 every morning and continues until around 19:30. This causes a lot of noisy banging and wakes up children.” — + <a href='http://www.fixmystreet.com/report/2722'>Problem report</a> + + <li><img src='http://www.fixmystreet.com/photo/6553.jpeg' align='right' hspace=8> + <h2>Boxes full of cheese dumped (right)</h2> + <p>“About a dozen boxes full of mozzarella cheese have been dumped opposite 3 rufford street. if it warms up we could have nasty road topping problem (seriously there is a lot of cheese)” — + <a href='http://www.fixmystreet.com/report/6553'>Problem report</a> + + <li><h2>Dangerous Nivea Billboard</h2> + <p>“The Nivea 'Oxygen is a wonderful thing' billboard here has a device on it releasing bubbles and foam. This is blowing into the road which is both distracting and dangerous to drivers. A large ball of foam hit my windscreen unexpectedly and nearly caused me to have an accident” — + <a href='http://www.fixmystreet.com/report/7552'>Problem report</a> + +</ul> + +[% INCLUDE footer.html %] + diff --git a/templates/web/fixmystreet/static/posters.html b/templates/web/fixmystreet/static/posters.html new file mode 100644 index 000000000..760397b02 --- /dev/null +++ b/templates/web/fixmystreet/static/posters.html @@ -0,0 +1,39 @@ +[% INCLUDE header.html + title = 'Publicity material' +%] + +[% + badge = '<a href="http://www.fixmystreet.com/"> <img src="http://www.fixmystreet.com/i/fms-badge.jpeg" alt="FixMyStreet - report, view or discuss local problems" border="0"></a>' +%] + +<h1>Publicity Material</h1> + + <p>Copy and paste the text below to add this badge to your site:</p> + <p>[% badge %]</p> + <textarea onclick="this.select()">[% badge | html %]</textarea> + <p><small>(thanks to Lincolnshire Council for the image)</small></p> + + <p>Here are some posters and flyers you can use to publicise FixMyStreet:</p> + <img hspace="5" src="/posters/poster.png" alt='Example poster'> + <h2>Posters</h2> + <ul class="issue-list-a full-width"> + <li><a href='/posters/fixmystreet-poster-a4.pdf'>A4, colour</a> + <li><a href='/posters/fixmystreet-poster-a4-bw.pdf'>A4, black and white</a> + <li><a href='/posters/fixmystreet-poster-a4-bw-low-ink.pdf'>A4, black and white, low ink</a> + <li><a href='/posters/fixmystreet-poster-a4-bw-outlined.pdf'>A4, black and white, outlined</a> + </ul> + <h2>Posters with tags</h2> + <ul class="issue-list-a full-width"> + <li><a href='/posters/fixmystreet-poster-tags.pdf'>A4, colour</a> + <li><a href='/posters/fixmystreet-poster-tags-bw.pdf'>A4, black and white</a> + <li><a href='/posters/fixmystreet-poster-tags-bw-low-ink.pdf'>A4, black and white, low ink</a> + <li><a href='/posters/fixmystreet-poster-tags-only.pdf'>A4, tags only</a> + </ul> + <h2>Flyers</h2> + <ul class="issue-list-a full-width"> + <li><a href='/posters/fixmystreet-flyers-colour.pdf'>4 x A6, colour</a> + <li><a href='/posters/fixmystreet-flyers-bw-outlined.pdf'>4 x A6, black and white, outlined</a> + <li><a href='/posters/fixmystreet-flyers-bw-low-ink.pdf'>4 x A6, black and white, low ink</a> + </ul> + +[% INCLUDE footer.html %] |