diff options
Diffstat (limited to 'templates/web/default')
33 files changed, 735 insertions, 232 deletions
diff --git a/templates/web/default/admin/bodies.html b/templates/web/default/admin/bodies.html index e0cf013d8..8bf7954f3 100644 --- a/templates/web/default/admin/bodies.html +++ b/templates/web/default/admin/bodies.html @@ -2,51 +2,63 @@ [% INCLUDE 'admin/edit-league.html' %] -<table cellspacing="0" cellpadding="2" border="1"> - <tr> - <th>[% loc('Name') %]</th> +[% IF bodies.size == 0 %] + <p class="fms-admin-info"> + [% loc('Currently no bodies have been created.') %] + <br> + [% loc('You need to add bodies (such as councils or departments) so that you can then add + the categories of problems they can handle (such as potholes or streetlights) and the + contacts (such as an email address) to which reports are sent.') %] + </p> +[% ELSE %] + <table cellspacing="0" cellpadding="2" border="1"> + <tr> + <th>[% loc('Name') %]</th> + [% IF c.cobrand.moniker == 'zurich' %] + <th>[% loc('Email') %]</th> + [% ELSE %] + <th>[% loc('Category') %]</th> + [% END %] + <th>[% loc('Deleted') %]</th> + </tr> + [%- FOREACH body IN bodies %] + [%- SET id = body.id %] + [% NEXT IF c.cobrand.moniker == 'zurich' AND admin_type == 'dm' AND (body.parent OR body.bodies) %] + <tr[% IF body.deleted %] class="adminhidden"[% END %]> + <td> + [% IF c.cobrand.moniker == 'zurich' %] + [% FILTER repeat(4*body.api_key) %] [% END %] + [% IF admin_type == 'super' %] + <a href="[% c.uri_for( 'body', id ) %]">[% body.name %]</a> + [% ELSE %] + [% body.name %] + [% END %] + [% ELSE %] [%# not Zurich: all bodies should be links %] + <a href="[% c.uri_for( 'body', id ) %]">[% body.name %]</a> + [%- ', ' _ body.parent.name IF body.parent -%] + [% END %] + </td> [% IF c.cobrand.moniker == 'zurich' %] - <th>[% loc('Email') %]</th> + <td>[% body.endpoint %]</td> [% ELSE %] - <th>[% loc('Category') %]</th> - [% END %] - </tr> -[%- FOREACH body IN bodies %] - [%- SET id = body.id %] - [% NEXT IF c.cobrand.moniker == 'zurich' AND admin_type == 'dm' AND (body.parent OR body.bodies) %] - <tr> - <td> - [% IF c.cobrand.moniker == 'zurich' %] - [% FILTER repeat(4*body.api_key) %] [% END %] - [% END %] - [% IF admin_type == 'super' %] - <a href="[% c.uri_for( 'body', id ) %]">[% body.name %]</a> + <td> + [% IF counts.$id %] + [% tprintf( loc('%d addresses'), counts.$id.c) IF c.cobrand.moniker != 'emptyhomes' %] + [% IF counts.$id.deleted %] + (1+ deleted) + [% ELSIF counts.$id.confirmed != counts.$id.c %] + (some unconfirmed) + [% END %] [% ELSE %] - [% body.name %] - [% END %] - [% IF c.cobrand.moniker != 'zurich' %] - [%- ', ' _ body.parent.name IF body.parent -%] + no categories [% END %] - </td> - [% IF c.cobrand.moniker == 'zurich' %] - <td>[% body.endpoint %]</td> - [% ELSE %] - <td> - [% IF counts.$id %] - [% tprintf( loc('%d addresses'), counts.$id.c) IF c.cobrand.moniker != 'emptyhomes' %] - [% IF counts.$id.deleted %] - (1+ deleted) - [% ELSIF counts.$id.confirmed != counts.$id.c %] - (some unconfirmed) - [% END %] - [% ELSE %] - no categories - [% END %] - </td> - [% END %] - </tr> -[%- END %] -</table> + </td> + [% END %] + <td>[% IF body.deleted %][% loc('Yes') %][% END %]</td> + </tr> + [%- END %] + </table> +[% END %] [% IF c.cobrand.moniker == 'zurich' %] [% IF admin_type == 'super' %] @@ -54,8 +66,10 @@ [% INCLUDE 'admin/body-form.html', body='' %] [% END %] [% ELSE %] - <h2>[% loc('Add body') %]</h2> - [% INCLUDE 'admin/body-form.html', body='' %] + <div class="admin-box"> + <h2>[% loc('Add body') %]</h2> + [% INCLUDE 'admin/body-form.html', body='' %] + </div> [% END %] [% INCLUDE 'admin/footer.html' %] diff --git a/templates/web/default/admin/body-form.html b/templates/web/default/admin/body-form.html index 039d83ae2..f2eb505ab 100644 --- a/templates/web/default/admin/body-form.html +++ b/templates/web/default/admin/body-form.html @@ -1,10 +1,32 @@ <form method="post" action="[% body ? c.uri_for('body', body.id) : c.uri_for('bodies') %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8"> - + <div class="fms-admin-info"> + [% loc( + "Add a <strong>body</strong> for each administrative body, such as a council or department + to which problem reports can be sent. You can add one or more contacts (for different + categories of problem) to each body." + ) %] + </div> + <div class="admin-hint"> + <p> + [% loc( + "The body's <strong>name</strong> identifies the body (for example, <em>Borsetshire District Council</em>) + and may be displayed publically." + ) %] + </p> + </div> <p> <label for="name">[% loc('Name') %]</label> <input type="text" name="name" id="name" value="[% body.name %]" size="50"> </p> + <div class="admin-hint"> + <p> + [% loc( + "Identify a <strong>parent</strong> if this body is itself part of another body. + For basic installations, you don't need to join bodies in this way." + ) %] + </p> + </div> <p> <label for="parent">[% loc('Parent') %]</label> <select name="parent" id="parent"> @@ -15,17 +37,62 @@ </select> </p> + [% IF areas.size == 0 AND c.config.MAPIT_URL AND (NOT c.config.MAPIT_TYPES OR c.config.MAPIT_TYPES.size==O) %] + <p class="fms-admin-warning"> + [% tprintf( loc( + '<code>MAPIT_URL</code> is set (<code>%s</code>) but no <code>MAPIT_TYPES</code>.<br> + This is probably why "area covered" is empty (below).<br> + Maybe add some <code>MAPIT_TYPES</code> to your config file?'), c.config.MAPIT_URL) + %] + </p> + [% END %] + + <div class="admin-hint"> + <p> + [% loc( + "This body will only be sent reports for problems that are located in the <strong>area covered</strong>. + A body will not receive any reports unless it covers at least one area." + ) %] + <br> + [% IF c.config.MAPIT_URL %] + [% tprintf( loc("The list of available areas is being provided by the MapIt service at %s."), c.config.MAPIT_URL) %] + [% ELSE %] + [% loc( + "No specific areas are currently available, because the <code>MAPIT_URL</code> in + your config file is not pointing to a live MapIt service.") %] + [% END %] + <br> + [% loc("For more information, see <a href='http://code.fixmystreet.com/customising/fms_and_mapit' class='admin-offsite-link'>How FixMyStreet uses Mapit</a>.")%] + </p> + </div> <p> <label for="area_ids">[% loc('Area covered') %]</label> <select name="area_ids" id="area_ids" multiple> <option value=""> -- [% loc('Select an area') %] -- </option> + [% SET body_areas = body.areas %] [% FOR area IN areas %] [% SET aid = area.id %] - <option value="[% area.id %]"[% ' selected' IF body.areas.$aid %]>[% area.name %]</option> + <option value="[% area.id %]"[% ' selected' IF body_areas.$aid %]>[% area.name %]</option> [% END %] </select> </p> + <div class="admin-hint"> + <p>[% loc( "You can mark a body as deleted if you do not want it to be active on the site." ) %]</p> + </div> + <p> + <label for="deleted">[% loc('Flag as deleted') %]</label> + <input type="checkbox" name="deleted" id="deleted" value="1"[% ' checked' IF body.deleted %]> + </p> + + <div class="admin-hint"> + <p> + [% loc( + "The <strong>send method</strong> determines how problem reports will be sent to the body. + If you leave this blank, <strong>send method defaults to email</strong>." + ) %] + </p> + </div> <p> <label for="send_method">Send Method</label> <select name="send_method" id="send_method"> @@ -36,46 +103,130 @@ </select> </p> + <div class="admin-open311-only"> + <p class="fms-admin-info"> + [% loc( + "These settings are for bodies that use Open311 (or other back-end integration) to receive problem reports.<br> + <strong>You don't need to set them if the Send Method is email.</strong>. + For more information on Open311, see + <a href='http://www.mysociety.org/2013/01/17/open311-explained/' class='admin-offsite-link'>this article</a>. + " + ) %] + </p> + + <div class="admin-hint"> + <p> + [% loc( + "The <strong>endpoint</strong> is the URL of the service that FixMyStreet will connect to + when sending reports to this body." + ) %] + </p> + </div> <p> <label for="endpoint">[% loc('Endpoint') %]</label> <input type="text" name="endpoint" id="endpoint" value="[% body.endpoint %]" size="50"> </p> + <div class="admin-hint"> + <p> + [% loc( + "The <strong>jurisdiction</strong> is only needed if the endpoint is serving more + than one. If the body is running its own endpoint, you can usually leave this blank." + ) %] + </p> + </div> <p> <label for="jurisdiction">Open311 Jurisdiction</label> <input type="text" name="jurisdiction" id="jurisdiction" value="[% body.jurisdiction %]" size="50"> </p> + <div class="admin-hint"> + <p> + [% loc( + "Some endpoints require an <strong>API key</strong> to indicate that the reports are being + sent from your FixMyStreet installation." + ) %] + </p> + </div> <p> <label for="api_key">Open311 API Key</label> <input type="text" name="api_key" id="api_key" value="[% body.api_key %]" size="25"> </p> + <div class="admin-hint"> + <p> + [% loc( + "Enable <strong>Open311 update-sending</strong> if the endpoint will send and receive + updates to existing reports. If you're not sure, it probably does not, so leave this unchecked. + For more information, see + <a href='http://www.mysociety.org/2013/02/20/open311-extended/' class='admin-offsite-link'>this article</a>." + ) %] + </p> + </div> <p> <input type="checkbox" id="send_comments" name="send_comments"[% ' checked' IF body.send_comments %]> - <label for="send_comments" class="inline">Use Open311 comment sending extension</label> + <label for="send_comments" class="inline">Use Open311 update-sending extension</label> </p> + <div class="admin-hint"> + <p> + [% loc( + "If you've enabled Open311 update-sending above, you must identify which + FixMyStreet <strong>user</strong> will be attributed as the creator of those updates + when they are shown on the site. Enter the ID (number) of that user." + ) %] + </p> + </div> <p> <label for"comment_user_id">User ID to attribute fetched comments to</label> <input type="text" name="comment_user_id" value="[% body.comment_user_id %]"> </p> + <div class="admin-hint"> + <p> + [% loc( + "If you've enabled Open311 update-sending above, enable <strong>suppression of alerts</strong> + if you do <strong>not</strong> want that user to be notified whenever these updates are created." + ) %] + </p> + </div> <p> <input type="checkbox" id="suppress_alerts" name="suppress_alerts"[% ' checked' IF body.suppress_alerts %]> <label for="suppress_alerts" class="inline">Do not send email alerts on fetched comments to problem creator</label> </p> + <div class="admin-hint"> + <p> + [% loc( + "If you've enabled Open311 update-sending above, Open311 usually only accepts OPEN or CLOSED status in + its updates. Enable <strong>extended Open311 stauses</strong> if you want to allow extra states to be passed. + Check that your cobrand supports this feature before switching it on." + ) %] + </p> + </div> <p> - <input type="checkbox" id="can_be_devolved" name="can_be_devolved"[% ' checked' IF body.can_be_devolved %]> - <label for="can_be_devolved" class="inline">Endpoint lookup can be devolved to contacts</label> + <input type="checkbox" id="send_extended_statuses" name="send_extended_statuses"[% ' checked' IF conf.send_extended_statuses %]> + <label for="send_extended_statuses" class="inline">Send extended Open311 statuses with service request updates</label> </p> - + </div> + + <div class="admin-hint"> + <p> + [% loc( + "Enable this <strong>can be devolved</strong> setting if one or more contacts have a + different endpoint (and send method) from the body's. For example, if reports for some categories of + problem must be emailed, while others can be sent over Open311." + ) %] + <br> + [%# NB 'email' is a literal setting, so not translating it in following string? %] + [% tprintf( loc('Leave this blank if all reports to this body should be sent using the same send method (e.g., "%s").'), body.send_method or 'email' ) %] + </p> + </div> <p> - <label for="send_extended_statuses">Send extended open311 statuses with service request updates</label>: - <input type="checkbox" id="send_extended_statuses" name="send_extended_statuses"[% ' checked' IF conf.send_extended_statuses %]> + <input type="checkbox" id="can_be_devolved" name="can_be_devolved"[% ' checked' IF body.can_be_devolved %]> + <label for="can_be_devolved" class="inline">Send method or endpoints can be devolved to contacts (i.e, can be different from the body's)</label> </p> - + <p> <input type="hidden" name="posted" value="body"> <input type="hidden" name="token" value="[% token %]"> diff --git a/templates/web/default/admin/body.html b/templates/web/default/admin/body.html index 120a07da9..b207d18ca 100644 --- a/templates/web/default/admin/body.html +++ b/templates/web/default/admin/body.html @@ -1,115 +1,192 @@ [% INCLUDE 'admin/header.html' title=tprintf(loc('Council contacts for %s'), body.name) -%] [% IF updated %] -<p> -<em>[% updated %]</em> -</p> + <p> + <em>[% updated %]</em> + </p> [% END %] <p> -[% IF example_pc %] -<a href="[% c.uri_for_email( '/around', { pc => example_pc } ) %]">[% tprintf( loc('Example postcode %s'), example_pc ) | html %]</a> | -[% END %] -[% IF c.cobrand.moniker == 'emptyhomes' %] -<a href="[% c.uri_for( 'reports', search => 'body:' _ body_id ) %]">[% loc('List all reported problems' ) %]</a> -[% ELSE %] -<a href="[% c.uri_for_email( '/reports/' _ body_id ) %]">[% loc('List all reported problems' ) %]</a> -[% END %] -<a href="[% c.uri_for( 'body', body_id, { text => 1 } ) %]">[% loc('Text only version') %]</a> + [% IF example_pc %] + <a href="[% c.uri_for_email( '/around', { pc => example_pc } ) %]" class="admin-offsite-link">[% tprintf( loc('Example postcode %s'), example_pc ) | html %]</a> | + [% END %] + [% IF c.cobrand.moniker == 'emptyhomes' %] + <a href="[% c.uri_for( 'reports', search => 'body:' _ body_id ) %]">[% loc('List all reported problems' ) %]</a> | + [% ELSE %] + <a href="[% c.uri_for_email( '/reports/' _ body_id ) %]" class="admin-offsite-link">[% loc('List all reported problems' ) %]</a> | + [% END %] + <a href="[% c.uri_for( 'body', body_id, { text => 1 } ) %]">[% loc('Text only version') %]</a> </p> [% IF body.send_method == 'Open311' %] - <h2> + <h2> Council contacts configured via Open311 - </h2> + </h2> [% END %] [% IF c.cobrand.moniker == 'fixmystreet' %] -<p class="error">Do not give these out except to people at the council.</p> + <p class="error">Do not give these out except to people at the council.</p> [% END %] -<form method="post" action="[% c.uri_for('body', body_id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8"> +[% IF body.areas.size == 0 %] + <p class="fms-admin-warning"> + [% loc("This body covers no area. This means that it has no jurisdiction over problems reported <em>at any location</em>. + Consequently, none of its categories will appear in the drop-down category menu when users report problems. + Currently, users <strong>cannot report problems to this body</strong>.") %] + <br> + [% loc("Fix this by choosing an <strong>area covered</strong> in the <em>Edit body details</em> form below.") %] + </p> +[% END %] - <table cellspacing="0" cellpadding="2" border="1"> - <tr> - <th>[% loc('Category') %]</th> - <th>[% loc('Email') %]</th> - <th>[% loc('Confirmed') %]</th> - <th>[% loc('Deleted') %]</th> - <th>[% loc('Devolved') %]</th> - <th>[% loc('Last editor') %]</th> - <th>[% loc('Note') %]</th> - <th>[% loc('Public') %]</th> - <th>[% loc('When edited') %]</th> - <th>[% loc('Confirm') %]</th> - </tr> - [% WHILE ( contact = contacts.next ) %] - <tr> - <td><a href="[% c.uri_for( 'body_edit', body_id, contact.category ) %]">[% contact.category %]</a></td> - <td>[% contact.email | html %]</td> - <td>[% IF contact.confirmed %][% loc('Yes') %][% ELSE %][% loc('No') %][% END %]</td> - <td>[% IF contact.deleted %][% loc('Yes') %][% ELSE %][% loc('No') %][% END %]</td> - <td>[% IF body.can_be_devolved && contact.send_method %][% loc('Yes') %][% ELSE %][% loc('No') %][% END %]</td> - <td>[% contact.editor %]</td> - <td>[% contact.note | html %]</td> - <td>[% contact.non_public ? loc('Non Public') : loc('Public') %]</td> - <td>[% contact.whenedited.ymd _ ' ' _ contact.whenedited.hms %]</td> - <td><input type="checkbox" name="confirmed" value="[% contact.category %]"></td> - </tr> - [% END %] - </table> +[% IF live_contacts == 0 %] + <p class="fms-admin-warning"> + [% loc("This body has no contacts. This means that currently problems reported to this body <strong>will not be sent</strong>.") %] + <br> + [% loc("Add a contact using the form below.") %] + </p> +[% END %] - <p> +<form method="post" action="[% c.uri_for('body', body_id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8"> + + <table cellspacing="0" cellpadding="2" border="1"> + <tr> + <th>[% loc('Category') %]</th> + <th>[% loc('Email') %]</th> + <th>[% loc('Confirmed') %]</th> + <th>[% loc('Deleted') %]</th> + <th>[% loc('Devolved') %]</th> + <th>[% loc('Last editor') %]</th> + <th>[% loc('Note') %]</th> + <th>[% loc('Public') %]</th> + <th>[% loc('When edited') %]</th> + <th>[% loc('Confirm') %]</th> + </tr> + [% WHILE ( contact = contacts.next ) %] + <tr [% IF contact.deleted %]class="is-deleted"[% END %]> + <td class="contact-category"><a href="[% c.uri_for( 'body_edit', body_id, contact.category ) %]">[% contact.category %]</a></td> + <td>[% contact.email | html %]</td> + <td>[% IF contact.confirmed %][% loc('Yes') %][% ELSE %][% loc('No') %][% END %]</td> + <td>[% IF contact.deleted %]<strong>[% loc('Yes') %]</strong>[% ELSE %][% loc('No') %][% END %]</td> + <td>[% IF body.can_be_devolved && contact.send_method %][% loc('Yes') %][% ELSE %][% loc('No') %][% END %]</td> + <td>[% contact.editor %]</td> + <td>[% contact.note | html %]</td> + <td>[% contact.non_public ? loc('Non Public') : loc('Public') %]</td> + <td>[% contact.whenedited.ymd _ ' ' _ contact.whenedited.hms %]</td> + <td><input type="checkbox" name="confirmed" value="[% contact.category %]"></td> + </tr> + [% END %] + </table> + + <p> <input type="hidden" name="posted" value="update"> <input type="hidden" name="token" value="[% token %]"> <input type="submit" name="Update statuses" value="[% loc('Update statuses') %]"> - </p> - </form> - - <h2>[% loc('Add new category') %]</h2> - - <form method="post" action="[% c.uri_for('body', body_id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8"> - - [% IF c.cobrand.moniker != 'emptyhomes' %] + </p> +</form> + +<div class="admin-box"> + <h2>[% loc('Add new category') %]</h2> + <p class="fms-admin-info"> + [% loc("Each contact for the body has a category, which is displayed to the public. + Different categories <strong>can have the same contact</strong> (email address). + This means you can add many categories even if you only have one contact for the body. + ") %] + </p> + + <form method="post" action="[% c.uri_for('body', body_id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8"> + + [% IF c.cobrand.moniker != 'emptyhomes' %] + <div class="admin-hint"> <p> - <strong>[% loc('Category:') %] </strong><input type="text" name="category" size="30"> + [% loc('Choose a <strong>category</strong> name that makes sense to the public (e.g., "Pothole", "Street lighting") but is helpful + to the body too. These will appear in the drop-down menu on the report-a-problem page.') %] + <br> + [% loc("If two or more bodies serve the same location, FixMyStreet combines identical categories into a single entry in + the menu. Make sure you use the same category name in the bodies if you want this to happen.") %] </p> - [% END %] - + </div> + <p> + <strong>[% loc('Category:') %] </strong><input type="text" name="category" size="30"> + </p> + [% END %] + + <div class="admin-hint"> + <p> + [% loc("The <strong>email address</strong> is the destination to which reports about this category will be sent. + Other categories for this body may have the same email address.") %] + </p> + [% IF (body.send_method AND body.send_method != 'Email') OR body.can_be_devolved %] <p> - <strong>[% loc('Email:') %] </strong><input type="text" name="email" size="30"> + [% loc("If you're using <strong>a send method that is not email</strong>, enter the service ID (Open311) or equivalent identifier here.") %] </p> + [% END %] + </div> - <p> - <input type="checkbox" name="confirmed" value="1" id="confirmed"> - <label for="confirmed" class="inline">[% loc('Confirmed') %]</label> - - <input type="checkbox" name="deleted" value="1" id="deleted"> - <label for="deleted" class="inline">[% loc('Deleted') %]</label> - </p> + <p> + <strong>[% loc('Email address:') %] </strong><input type="text" name="email" size="30"> + </p> - <p> - <strong>[% loc('Note:') %] </strong> <textarea name="note" rows="3" cols="40"></textarea> - </p> + <div class="admin-hint"> + <p> + [% loc("Check <strong>confirmed</strong> to indicate that this contact has been confirmed as correct. + If you are not sure of the origin or validity of the contact, leave this unchecked.") %] + </p> + </div> + <p> + <input type="checkbox" name="confirmed" value="1" id="confirmed"> + <label for="confirmed" class="inline">[% loc('Confirmed') %]</label> + </p> - <p> - <input type="checkbox" name="non_public" value="1" id="non_public"> - <label for="non_public" class="inline">[% loc('Private') %]</label> - </p> + <div class="admin-hint"> + <p> + [% loc("Check <strong>deleted</strong> to remove the category from use. + It will not appear as an available category in the drop-down menu on the report-a-problem page.") %] + </p> + </div> + <p> + <input type="checkbox" name="deleted" value="1" id="deleted"> + <label for="deleted" class="inline">[% loc('Deleted') %]</label> + </p> - <p> - <input type="hidden" name="posted" value="new" > - <input type="hidden" name="token" value="[% token %]" > - <input type="submit" name="Create category" value="[% loc('Create category') %]" > - </p> + <div class="admin-hint"> + <p> + [% loc("Use the <strong>note</strong> to record details that are only displayed in the admin. Notes are not shown publicly, and are not sent to the body.") %] + </p> + </div> + <p> + <strong>[% loc('Note:') %] </strong> <textarea name="note" rows="3" cols="40"></textarea> + </p> - <div> - <input type="hidden" name=".cgifields" value="confirmed" > - <input type="hidden" name=".cgifields" value="deleted" > - </div> - </form> + <div class="admin-hint"> + <p> + [% loc("Check <strong>private</strong> if reports in this category should <strong>never be displayed on the website</strong>. + <br> + Normally, categories are not private. + <br> + This is suitable for issues that you want to allow users to report to the body, but for which there is no public + interest in displaying the report. In the UK, we've used this for services like requesting an extra rubbish bin + at a specific address.") %] + </p> + </div> + <p> + <input type="checkbox" name="non_public" value="1" id="non_public"> + <label for="non_public" class="inline">[% loc('Private') %]</label> + </p> - <h2>[% loc('Edit body details') %]</h2> - [% INCLUDE 'admin/body-form.html' %] + <p> + <input type="hidden" name="posted" value="new" > + <input type="hidden" name="token" value="[% token %]" > + <input type="submit" name="Create category" value="[% loc('Create category') %]" > + </p> + <div> + <input type="hidden" name=".cgifields" value="confirmed" > + <input type="hidden" name=".cgifields" value="deleted" > + </div> + </form> +</div> +<div class="admin-box"> + <h2>[% loc('Edit body details') %]</h2> + [% INCLUDE 'admin/body-form.html' %] +</div> [% INCLUDE 'admin/footer.html' %] diff --git a/templates/web/default/admin/body_edit.html b/templates/web/default/admin/body_edit.html index 1eeff9ab5..f2bae0c0b 100644 --- a/templates/web/default/admin/body_edit.html +++ b/templates/web/default/admin/body_edit.html @@ -15,7 +15,7 @@ <p> [% IF example_pc %] -<a href="[% c.uri_for_email( '/around', { pc => example_pc } ) %]">[% tprintf( loc('Example postcode %s'), example_pc ) | html %]</a> +<a href="[% c.uri_for_email( '/around', { pc => example_pc } ) %]" class="admin-offsite-link">[% tprintf( loc('Example postcode %s'), example_pc ) | html %]</a> [% END %] </p> diff --git a/templates/web/default/admin/config_page.html b/templates/web/default/admin/config_page.html new file mode 100644 index 000000000..77a8be4b1 --- /dev/null +++ b/templates/web/default/admin/config_page.html @@ -0,0 +1,146 @@ +[% INCLUDE 'admin/header.html' title=loc('Configuration') -%] + +[% BLOCK subsection %] +<tr><td colspan=3><strong>[% heading %]</strong></td></tr> +[% END %] + +[% BLOCK just_value %] +[% SET conf = c.config.$value IF NOT conf; + conf = conf.join(', ') IF conf.size %] +<tr> + <td>[% value %]</td> + <td colspan=2>[% conf or conf_default %]</td> +</tr> +[% END %] + +[% BLOCK with_cobrand %] +[% SET conf = c.config.$value IF NOT conf; + conf = conf.join(', ') IF conf.size; + cob = cob.join(', ') IF conf.size %] +<tr> + <td>[% value %]</td> + <td>[% conf %]</td> + <td>[% cob IF cob != conf %]</td> +</tr> +[% END %] + +<p>A summary of this site's configuration, +running version <strong>[% git_version || 'unknown' %]</strong>. +</p> + +<table> +<tr><th>Variable</th> + <th>general.yml value</th> + <th>Cobrand module override</th> +</tr> + +[% INCLUDE subsection heading="URLs" %] +[% INCLUDE with_cobrand value="BASE_URL" cob=c.cobrand.base_url %] +[% INCLUDE with_cobrand value="ADMIN_BASE_URL" cob=c.cobrand.admin_base_url %] + +[% INCLUDE subsection heading="Display" %] +[% allowed_conf = FOR k IN c.config.ALLOWED_COBRANDS %] + [% IF k.keys %][% k.items.join(':') %][% ELSE %][% k %][% END %] + [%- ',' IF NOT loop.last %] +[% END %] +[% INCLUDE just_value value="ALLOWED_COBRANDS" conf = allowed_conf %] +<tr> +<td>Web templates</td> +<td colspan=2>[% c.cobrand.path_to_web_templates.join('<br>') %]</td> +</tr> +[% INCLUDE with_cobrand value="MAP_TYPE" cob=c.cobrand.map_type %] +[% INCLUDE with_cobrand value="EXAMPLE_PLACES" + conf = decode(c.config.EXAMPLE_PLACES.join(', ')) + cob = c.cobrand.example_places %] +[% INCLUDE with_cobrand value="LANGUAGES" + cob = c.cobrand.languages %] +<tr><td>Language override</td> + <td>-</td> + <td> + [% 'domain=' _ c.cobrand.language_domain IF c.cobrand.language_domain %] + [% 'language=' _ c.cobrand.language_override IF c.cobrand.language_override %] + </td> +</tr> +[% INCLUDE with_cobrand value="ALL_REPORTS_PER_PAGE" cob=c.cobrand.reports_per_page %] +[% INCLUDE just_value value="RSS_LIMIT" %] +[% INCLUDE just_value value="AREA_LINKS_FROM_PROBLEMS" %] + +[% INCLUDE subsection heading="Geocoder" %] +[% INCLUDE just_value value="GEOCODER" + conf_default = '<em>(None; default Nominatim OSM)</em>' +%] +[% disconf = FOR k IN c.config.GEOCODING_DISAMBIGUATION %] + [% k.key %]=[% k.value %][% ',' IF NOT loop.last %] +[% END %] +[% discob = FOR k IN c.cobrand.disambiguate_location %] + [% k.key %]=[% k.value %][% ',' IF NOT loop.last %] +[% END %] +[% INCLUDE with_cobrand value="GEOCODING_DISAMBIGUATION" + conf = disconf + cob = discob %] + +[% INCLUDE subsection heading="MapIt" %] +[% INCLUDE just_value value="MAPIT_URL" %] +[% INCLUDE with_cobrand value="MAPIT_TYPES" + cob = c.cobrand.area_types %] +[% INCLUDE just_value value="MAPIT_ID_WHITELIST" %] +[% INCLUDE with_cobrand value="MAPIT_TYPES_CHILDREN" + cob = c.cobrand.area_types_children %] + +[% INCLUDE subsection heading="Database" %] +[% INCLUDE just_value value="FMS_DB_HOST" %] +[% INCLUDE just_value value="FMS_DB_PORT" %] +[% INCLUDE just_value value="FMS_DB_NAME" %] +[% INCLUDE just_value value="FMS_DB_USER" %] + +[% INCLUDE subsection heading="Email" %] +[% INCLUDE just_value value="EMAIL_DOMAIN" %] +[% INCLUDE with_cobrand value="CONTACT_NAME" cob=c.cobrand.contact_name %] +[% INCLUDE with_cobrand value="CONTACT_EMAIL" cob=c.cobrand.contact_email %] +[% INCLUDE just_value value="DO_NOT_REPLY_EMAIL" %] + +[% INCLUDE subsection heading="Development" %] +[% INCLUDE just_value value="STAGING_SITE" %] +[% INCLUDE just_value value="SEND_REPORTS_ON_STAGING" %] +[% INCLUDE just_value value="UPLOAD_DIR" %] +[% INCLUDE just_value value="GEO_CACHE" %] +[% INCLUDE just_value value="TESTING_COUNCILS" %] +[% INCLUDE just_value value="SMTP_SMARTHOST" %] +[% INCLUDE just_value value="TIME_ZONE" %] +[% INCLUDE just_value value="GAZE_URL" %] + +</table> + +<h2>Cobrand module</h2> + +Other things can be changed on a cobrand basis by using functions in an +(optional) Cobrand .pm module, as explained in the +<a href="http://code.fixmystreet.com/customising/" class="admin-offsite-link">customising section of our +documentation</a>. If you wish to add new functionality just for your cobrand +that can't be done simply by changes to your cobrand's templates, you might +need to add a new Cobrand function. + +<p>Examples of cobrand functions are below; this is not exhaustive. +Many were added for one specific cobrand, so didn't need a general +configuration option. Please feel free to discuss on <a +href="http://code.fixmystreet.com/community/" class="admin-offsite-link">our mailing list</a> if you think +something should be moved to the general.yml file, done differently, +or have any questions.</p> + +<ul style="font-size: 80%"> +<li>allow_photo_upload: [% c.cobrand.allow_photo_upload %], + allow_photo_display: [% c.cobrand.allow_photo_display %]</li> +<li>send_questionnaires: [% c.cobrand.send_questionnaires %], + ask_ever_reported: [% c.cobrand.ask_ever_reported %]</li> +<li>default_map_zoom: [% c.cobrand.default_map_zoom or '-' %]</li> +<li>default_show_name: [% c.cobrand.default_show_name %]</li> +<li>users_can_hide: [% c.cobrand.users_can_hide %]</li> +<li>report_sent_confirmation_email: [% c.cobrand.report_sent_confirmation_email %]</li> +<li>never_confirm_reports: [% c.cobrand.never_confirm_reports %], + allow_anonymous_reports: [% c.cobrand.allow_anonymous_reports %], + show_unconfirmed_reports: [% c.cobrand.show_unconfirmed_reports %]</li> +<li>email_indent: [% c.cobrand.email_indent %]</li> +</ul> + +[% INCLUDE 'admin/footer.html' %] + diff --git a/templates/web/default/admin/edit-league.html b/templates/web/default/admin/edit-league.html index 6bf71537e..4f31eeb2e 100644 --- a/templates/web/default/admin/edit-league.html +++ b/templates/web/default/admin/edit-league.html @@ -1,3 +1,10 @@ +<div class="admin-hint"> + <p> + [% loc( + "The diligency prize league table shows editors' activity (who's been editing the most records)." + ) %] + </p> +</div> <h2>[% loc('Diligency prize league table') %]</h2> [% IF edit_activity.count %] <ul> diff --git a/templates/web/default/admin/flagged.html b/templates/web/default/admin/flagged.html index fc8b1fae1..518d1b14e 100644 --- a/templates/web/default/admin/flagged.html +++ b/templates/web/default/admin/flagged.html @@ -1,6 +1,11 @@ -[% INCLUDE 'admin/header.html' title=loc('Search Reports') %] +[% INCLUDE 'admin/header.html' title=loc('Flagged reports and users') %] [% PROCESS 'admin/report_blocks.html' %] +<p class="fms-admin-info"> + [% loc("You can flag any report or user by editing them, and they will be listed on this page. + For example, this can useful if you want to keep an eye on a user who has posted inappropriate + reports in the past.") %] +</p> <h2>[% loc( 'Problems' ) %]</h2> [% IF problems.size > 0 %] @@ -16,29 +21,41 @@ [% INCLUDE 'admin/problem_row.html' %] </table> [% ELSE %] -<p> -[% loc('No flagged problems found') %] -</p> + <p class="fms-admin-warning"> + [% loc('No flagged problems found.') %] + </p> [% END %] <h2>[% loc( 'Users' ) %]</h2> -[% IF users%] +<p class="fms-admin-info"> + [% loc("Flagged users are not restricted in any way. This is just a list of users that have been marked for attention.") %] +</p> + +[% IF users.size %] <table cellspacing="0" cellpadding="2" border="1"> <tr> <th>[% loc('Name') %]</th> <th>[% loc('Email') %]</th> + <th>[% loc('In abuse table?') %]</th> + <th> </th> </tr> -[% WHILE ( user = users.next ) -%] - <tr> + [%- FOREACH user IN users %] + <tr [% IF user.flagged == 2 %]class="is-deleted"[% END %]> <td>[% user.name | html %]</td> <td>[% user.email | html %]</td> - <td><a href="[% c.uri_for( 'reports', search => user.email ) %]">list content</a></td> + <td> + [% IF user.flagged == 2 %] <strong>[% loc('Yes') %]</strong> [% ELSE %] [% END %] + </td> + <td> + <a href="[% c.uri_for( 'reports', search => user.email ) %]">list content</a> + [% IF user.id %] | <a href="[% c.uri_for( 'user_edit', user.id ) %]">[% loc('edit user') %]</a>[% END %] + </td> </tr> -[%- END %] + [%- END %] </table> [%- ELSE %] -<p> -[% loc('No flagged users found') %] +<p class="fms-admin-warning"> + [% loc('No flagged users found.') %] </p> [%- END %] diff --git a/templates/web/default/admin/header.html b/templates/web/default/admin/header.html index 6282bf383..9f3503e20 100644 --- a/templates/web/default/admin/header.html +++ b/templates/web/default/admin/header.html @@ -1,4 +1,4 @@ -[% INCLUDE 'header.html' admin = 1, bodyclass = 'fullwidthpage admin' %] +[% INCLUDE 'header.html' admin = 1, bodyclass = 'fullwidthpage admin show-admin-notes' %] <style type="text/css"> dt { clear: left; float: left; font-weight: bold; } dd { margin-left: 8em; } diff --git a/templates/web/default/admin/index.html b/templates/web/default/admin/index.html index 2c5ee55db..ad5932d97 100644 --- a/templates/web/default/admin/index.html +++ b/templates/web/default/admin/index.html @@ -1,5 +1,13 @@ [% INCLUDE 'admin/header.html' title=loc('Summary') -%] +[% IF total_bodies == 0 %] + <p class="fms-admin-info"> + [% loc('Currently no bodies have been created.') %] + <br> + [% tprintf( loc('You need to <a href="%s">add some bodies</a> (such as councils or departments) before any reports can be sent.'), c.uri_for('bodies')) %] + </p> +[% END %] + [%- BLOCK states -%] <h2>[% title %]</h2> @@ -21,7 +29,7 @@ [% IF c.cobrand.admin_show_creation_graph -%] <p> - <a href="[% c.config.BASE_URL %]/fms-live-creation.png">[% loc('Graph of problem creation by status over time') %]</a> + <a href="[% c.config.BASE_URL %]/fms-live-creation.png" class="admin-offsite-link">[% loc('Graph of problem creation by status over time') %]</a> </p> [% END -%] diff --git a/templates/web/default/admin/list_updates.html b/templates/web/default/admin/list_updates.html index dbf679702..02845b0ee 100644 --- a/templates/web/default/admin/list_updates.html +++ b/templates/web/default/admin/list_updates.html @@ -4,14 +4,11 @@ <table cellspacing="0" cellpadding="2" border="1"> <tr> <th>[% loc('ID') %]</th> - <th>[% loc('State') %]</th> <th>[% loc('Name') %]</th> - <th>[% loc('Email') %]</th> - <th>[% loc('Created') %]</th> - <th>[% loc('Anonymous') %]</th> <th>[% loc('Owner') %]</th> <th>[% loc('Council') %]</th> <th>[% loc('Cobrand') %]</th> + <th>[% loc('State') %]</th> <th>[% loc('Text') %]</th> <th>*</th> </tr> @@ -26,18 +23,21 @@ uri = c.uri_for_email( '/report', update.problem.id ); END; %] - <a href="[% uri %]#update_[% update.id %]">[% update.id %]</a> + <a href="[% uri %]#update_[% update.id %]" class="admin-offsite-link">[% update.id %]</a> [%- ELSE %] [%- update.id %] [%- END -%]</td> - <td>[% update.state %]</td> - <td>[% update.name | html %]</td> - <td>[% update.user.email | html %]</td> - <td>[% PROCESS format_time time=update.created %]</td> - <td>[% IF update.anonymous %][% loc('Yes') %][% ELSE %][% loc('No') %][% END %]</td> + <td>[% PROCESS value_or_nbsp value=update.name %] + <br>[% PROCESS value_or_nbsp value=update.user.email %] + <br>[% loc('Anonymous') %]: [% IF update.anonymous %][% loc('Yes') %][% ELSE %][% loc('No') %][% END %] + </td> <td>[% IF update.user.id == update.problem.user_id %][% loc('Yes') %][% ELSE %][% loc('No') %][% END %]</td> <td>[% IF update.user.belongs_to_body( update.problem.bodies_str ) %][% loc('Yes') %][% ELSE %][% loc('No') %][% END %]</td> <td>[% update.cobrand %]<br>[% update.cobrand_data | html %]</td> + <td>[% update.state %]<br><small> + [% loc('Created:') %] [% PROCESS format_time time=update.created %] + <br>[% loc('Confirmed:') %] [% PROCESS format_time time=update.confirmed %] + </small></td> <td>[% update.text | html %]</td> <td><a href="[% c.uri_for( 'update_edit', update.id ) %]">[% loc('Edit') %]</a></td> </tr> diff --git a/templates/web/default/admin/problem_row.html b/templates/web/default/admin/problem_row.html index 6dc4de188..2413a6062 100644 --- a/templates/web/default/admin/problem_row.html +++ b/templates/web/default/admin/problem_row.html @@ -9,7 +9,7 @@ uri = c.uri_for_email( '/report', problem.id ); END; %] - <a href="[% uri %]">[% problem.id %]</a> + <a href="[% uri %]" class="admin-offsite-link">[% problem.id %]</a> [%- ELSE %] [%- problem.id %] [%- END -%]</td> diff --git a/templates/web/default/admin/report_edit.html b/templates/web/default/admin/report_edit.html index f3307658d..12560fdf3 100644 --- a/templates/web/default/admin/report_edit.html +++ b/templates/web/default/admin/report_edit.html @@ -15,7 +15,7 @@ uri = c.uri_for_email( '/report', problem.id ); END; %] -<li><a href="[% uri %]">[% loc('View report on site' )%]</a></li> +<li><a href="[% uri %]" class="admin-offsite-link">[% loc('View report on site' )%]</a></li> <li><label for='title'>[% loc('Subject:') %]</label> <input size=60 type='text' id='title' name='title' value='[% problem.title | html %]'></li> <li><label for='detail'>[% loc('Details:') %]</label> <textarea name='detail' id='detail' cols=60 rows=10>[% problem.detail | html %]</textarea></li> @@ -80,7 +80,12 @@ [% IF problem.photo %] [% photo = problem.get_photo_params %] -<li><img alt="" height="[% photo.height %]" width="[% photo.width %]" src="[% c.cobrand.base_url %][% photo.url %]"> +<li><img alt="Photo of this report" height="[% photo.height %]" width="[% photo.width %]" src="[% c.cobrand.base_url %] + [%~ IF problem.photo.length == 40 ~%] + /photo/[% problem.photo %].temp.jpeg + [%~ ELSE ~%] + [% photo.url %] + [%~ END %]"> <br> <input type="submit" name="rotate_photo" value="[% loc('Rotate Left') %]"> <input type="submit" name="rotate_photo" value="[% loc('Rotate Right') %]"> diff --git a/templates/web/default/admin/reports.html b/templates/web/default/admin/reports.html index d57b2f53e..7267dd11d 100644 --- a/templates/web/default/admin/reports.html +++ b/templates/web/default/admin/reports.html @@ -20,6 +20,12 @@ [% INCLUDE 'pagination.html', admin = 1, param = 'p' IF pager %] +[% ELSIF searched %] + +<div class="fms-admin-warning"> + [% loc("Searching found no reports.") %] +</div> + [% END %] [% INCLUDE 'admin/list_updates.html' %] diff --git a/templates/web/default/admin/stats.html b/templates/web/default/admin/stats.html index bb42d5b7d..d143d9f28 100644 --- a/templates/web/default/admin/stats.html +++ b/templates/web/default/admin/stats.html @@ -61,15 +61,15 @@ <form method="post" action="[% c.uri_for('stats') %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8"> <p> - <label for="start_date_year">[% loc('Start Year:') %]</label><input type="text" name="start_date_year" id="start_date_year" size="5" value="[% start_date ? start_date.year : '' | html %]" /> - <label for="start_date_month">[% loc('Start month:') %]</label><input type="text" name="start_date_month" id="start_date_month" size="3" value="[% start_date ? start_date.month : '' | html %]" /> - <label for="start_date_day">[% loc('Start day:') %]</label><input type="text" name="start_date_day" id="start_date_day" size="3" value="[% start_date ? start_date.day : '' | html %]" /> + <label for="start_date">[% loc('Start Date:') %]</label><input type="text" + placeholder="[% loc('Click here or enter as dd/mm/yyyy') %]" name="start_date" id="start_date" + value="[% start_date ? start_date.strftime( '%d/%m/%Y') : '' | html %]" /> </p> <p> - <label for="end_date_year">[% loc('End Year:') %]</label><input type="text" name="end_date_year" id="end_date_year" size="5" value="[% end_date ? end_date.year : '' | html %]" /> - <label for="end_date_month">[% loc('End month:') %]</label><input type="text" name="end_date_month" id="end_date_month" size="3" value="[% end_date ? end_date.month : '' | html %]" /> - <label for="end_date_day">[% loc('End day:') %]</label><input type="text" name="end_date_day" id="end_date_day" size="3" value="[% end_date ? end_date.day : '' | html %]" /> + <label for="end_date">[% loc('End Date:') %]</label><input type="text" + placeholder="[% loc('Click here or enter as dd/mm/yyyy') %]" name="end_date" id="end_date" size="5" + value="[% end_date ? end_date.strftime( '%d/%m/%Y') : '' | html %]" /> </p> <p> diff --git a/templates/web/default/admin/timeline.html b/templates/web/default/admin/timeline.html index 2e4c3b771..6bf350a58 100644 --- a/templates/web/default/admin/timeline.html +++ b/templates/web/default/admin/timeline.html @@ -21,16 +21,16 @@ [% CASE 'problemCreated' %] [%- tprintf(loc('Problem %d created'), item.obj.id) %]; [% PROCESS problem_name problem=item.obj -%] [% CASE 'problemConfirmed' %] - [%- tprintf( loc('Problem %s confirmed'), '<a href="' _ c.uri_for_email( '/report', item.obj.id ) _ '">' _ item.obj.id _ '</a>') %]; [% PROCESS problem_name problem=item.obj -%] + [%- tprintf( loc('Problem %s confirmed'), '<a href="' _ c.uri_for_email( '/report', item.obj.id ) _ '" class="admin-offsite-link">' _ item.obj.id _ '</a>') %]; [% PROCESS problem_name problem=item.obj -%] [% CASE 'problemSent' %] - [% tprintf(loc("Problem %s sent to council %s"), '<a href="' _ c.uri_for_email( '/report', item.obj.id ) _ '">' _ item.obj.id _ '</a>', item.obj.bodies_str ) %] + [% tprintf(loc("Problem %s sent to council %s"), '<a href="' _ c.uri_for_email( '/report', item.obj.id ) _ '" class="admin-offsite-link">' _ item.obj.id _ '</a>', item.obj.bodies_str ) %] [% CASE 'quesSent' %] [% tprintf(loc("Questionnaire %d sent for problem %d"), item.obj.id, item.obj.problem_id ) %] [% CASE 'quesAnswered' %] [% tprintf(loc("Questionnaire %d answered for problem %d, %s to %s"), item.obj.id, item.obj.problem_id, item.obj.old_state, item.obj.new_state ) %] [% CASE 'update' %] [% name = ( item.obj.name || 'anonymous' ) | html %] - [% tprintf(loc("Update %s created for problem %d; by %s"), "<a href='" _ c.uri_for_email( '/report', item.obj.problem_id ) _ "#update_" _ item.obj.id _ "'>" _ item.obj.id _ "</a>", item.obj.problem_id, name) %] <[% item.obj.user.email | html %]> + [% tprintf(loc("Update %s created for problem %d; by %s"), "<a href='" _ c.uri_for_email( '/report', item.obj.problem_id ) _ "#update_" _ item.obj.id _ "' class='admin-offsite-link'>" _ item.obj.id _ "</a>", item.obj.problem_id, name) %] <[% item.obj.user.email | html %]> [% CASE 'alertSub' %] [% tprintf(loc("Alert %d created for %s, type %s, parameters %s / %s"), item.obj.id, item.obj.user.email, item.obj.alert_type.ref, item.obj.parameter, item.obj.parameter2) | html %] [% CASE 'alertDel' %] diff --git a/templates/web/default/admin/update_edit.html b/templates/web/default/admin/update_edit.html index f2029c63f..5ffce8bc4 100644 --- a/templates/web/default/admin/update_edit.html +++ b/templates/web/default/admin/update_edit.html @@ -15,7 +15,7 @@ uri = c.uri_for_email( '/report', update.problem_id ); END; %] -<li><a href="[% uri %]#update_[% update.id %]">[% loc('View report on site' )%]</a></li> +<li><a href="[% uri %]#update_[% update.id %]" class="admin-offsite-link">[% loc('View report on site' )%]</a></li> <li><label for='detail'>[% loc('Text:') %]</label> <textarea name='text' id='text' cols=60 rows=10>[% update.text | html %]</textarea></li> @@ -52,7 +52,12 @@ [% IF update.photo %] [% photo = update.get_photo_params %] -<li><img alt="" height="[% photo.height %]" width="[% photo.width %]" src="[% photo.url %]"> +<li><img alt="Photo of this update" height="[% photo.height %]" width="[% photo.width %]" src="[% c.cobrand.base_url %] + [%~ IF update.photo.length == 40 ~%] + /photo/[% update.photo %].temp.jpeg + [%~ ELSE ~%] + [% photo.url %] + [%~ END ~%]"> <input type="checkbox" id="remove_photo" name="remove_photo" value="1"> <label for="remove_photo" class="inline">[% loc("Remove photo (can't be undone!)") %]</label></li> [% END %] diff --git a/templates/web/default/admin/user-form.html b/templates/web/default/admin/user-form.html index 9c60ec940..4a57b05a0 100644 --- a/templates/web/default/admin/user-form.html +++ b/templates/web/default/admin/user-form.html @@ -1,17 +1,55 @@ <form method="post" action="[% c.uri_for( 'user_edit', user.id ) %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8"> <input type="hidden" name="token" value="[% token %]" > <input type="hidden" name="submit" value="1" > + + [% IF c.cobrand.moniker == 'zurich' AND field_errors.email %] + <p class='error'>[% field_errors.email %]</p> + [% END %] <ul class="no-bullets"> - <li>[% loc('Name:') %] <input type='text' name='name' id='name' value='[% user.name | html %]'></li> + <li> + <div class="admin-hint"> + <p> + [% loc( + "The user's <strong>name</strong> is displayed publicly on reports that have not been marked <em>anonymous</em>. + Names are not necessarily unique.") + %] + </p> + </div> + [% loc('Name:') %] <input type='text' name='name' id='name' value='[% user.name | html %]'> + </li> <li>[% loc('Email:') %] <input type='text' id='email' name='email' value='[% user.email | html %]'></li> - <li>[% loc('Body:') %] <select id='body' name='body'> + <li> + <div class="admin-hint"> + <p> + [% loc( + "Normal (public) users should not be associated with any <strong>body</strong>.<br> + Authorised staff users can be associated with the body they represent.<br> + Depending on the implementation, staff users may have access to the dashboard (summary of + activity across their body), the ability to hide reports or set special report statuses.") + %] + </p> + </div> + [% loc('Body:') %] <select id='body' name='body'> <option value=''>[% loc('No body') %]</option> [% FOR body IN bodies %] <option value="[% body.id %]"[% ' selected' IF body.id == user.from_body.id %]>[% body.name %]</option> [% END %] + </li> </select> [% IF c.cobrand.moniker != 'zurich' %] - <li>[% loc('Flagged:') %] <input type="checkbox" id="flagged" name="flagged"[% user.flagged ? ' checked' : '' %]></li> + <li> + <div class="admin-hint"> + <p> + [% loc("Mark users whose behaviour you want to keep a check on as <strong>flagged</strong>.") %] + <br> + [% tprintf(loc("Flagged users are listed on the <a href='%s'>flagged</a> page."), c.uri_for( 'flagged' )) %] + <br> + [% loc("You can add an abusive user's email to the abuse list, which automatically hides (and never sends) reports they create.") %] + </p> + </div> + + [% loc('Flagged:') %] <input type="checkbox" id="flagged" name="flagged"[% user.flagged ? ' checked' : '' %]> + </li> [% END %] </ul> <input type="submit" name="Submit changes" value="[% loc('Submit changes') %]" > diff --git a/templates/web/default/admin/users.html b/templates/web/default/admin/users.html index 70833ff85..db97c7d59 100644 --- a/templates/web/default/admin/users.html +++ b/templates/web/default/admin/users.html @@ -1,6 +1,9 @@ [% INCLUDE 'admin/header.html' title=loc('Search Users') %] [% PROCESS 'admin/report_blocks.html' %] +<div class="fms-admin-info"> + [% loc("User search finds matches in users' names and email addresses.") %] +</div> <form method="get" action="[% c.uri_for('users') %]" enctype="application/x-www-form-urlencoded" accept-charset="utf-8"> <p><label for="search">[% loc('Search:') %]</label> <input type="text" name="search" size="30" id="search" value="[% searched | html %]"> </form> @@ -30,12 +33,17 @@ [%- END -%] </table> +[% ELSIF searched %] + +<div class="fms-admin-warning"> + [% loc("Searching found no users.") %] +</div> + [% END %] [% IF NOT searched %] <h2>[% loc('Add user') %]</h2> [% INCLUDE 'admin/user-form.html', user = '' %] - [% END %] [% INCLUDE 'admin/footer.html' %] diff --git a/templates/web/default/common_header_tags.html b/templates/web/default/common_header_tags.html index 346d53693..1080e8a88 100644 --- a/templates/web/default/common_header_tags.html +++ b/templates/web/default/common_header_tags.html @@ -1,15 +1,23 @@ [% USE date %][% USE Math %] <meta http-equiv="content-type" content="text/html; charset=utf-8"> -<script type="text/javascript" src="/js/validation_rules.js?[% Math.int( date.now / 3600 ) %]"></script> -<script type="text/javascript" src="/js/translation_strings.[% lang_code %].js?[% Math.int( date.now / 3600 ) %]"></script> +<meta name="cobrand" content="[% c.cobrand.moniker %]"> -<script type="text/javascript" src="/jslib/jquery-1.7.2.min.js"></script> -<script src="[% version('/js/jquery.validate.min.js') %]" type="text/javascript" charset="utf-8"></script> +<script type="text/javascript" src="[% start %]/js/validation_rules.js?[% Math.int( date.now / 3600 ) %]"></script> +<script type="text/javascript" src="[% start %]/js/translation_strings.[% lang_code %].js?[% Math.int( date.now / 3600 ) %]"></script> -<script type="text/javascript" src="[% version('/js/geo.min.js') %]"></script> -<script type="text/javascript" src="[% version('/js/fixmystreet.js') %]"></script> -<script type="text/javascript" src="[% version(js_override || '/js/fixmystreet-old-box.js') %]"></script> +<script type="text/javascript" src="[% start %]/jslib/jquery-1.7.2.min.js"></script> +<script src="[% start %][% version('/js/jquery.validate.min.js') %]" type="text/javascript" charset="utf-8"></script> + +<script type="text/javascript" src="[% start %][% version('/js/geo.min.js') %]"></script> +<script type="text/javascript" src="[% start %][% version('/js/fixmystreet.js') %]"></script> +<script type="text/javascript" src="[% start %][% version(js_override || '/js/fixmystreet-old-box.js') %]"></script> + +[% IF admin %] + <script src="[% start %]/js/jquery-ui/js/jquery-ui-1.10.3.custom.min.js"></script> + <link rel="stylesheet" href="[% start %]/js/jquery-ui/css/smoothness/jquery-ui-1.10.3.custom.min.css" /> + <script type="text/javascript" src="[% start %][% version('/js/fixmystreet-admin.js') %]"></script> +[% END %] [% map_js %] diff --git a/templates/web/default/dashboard/index.html b/templates/web/default/dashboard/index.html index f5a3cfba3..b3e1e8426 100644 --- a/templates/web/default/dashboard/index.html +++ b/templates/web/default/dashboard/index.html @@ -146,6 +146,7 @@ [% END %] </select> <input type="submit" value="Look up"> +<a class="export_as_csv" href="[% c.req.uri_with({ export => 1 }) %]">Export as CSV</a> <table width="100%" id="reports"> <tr> diff --git a/templates/web/default/faq/faq-en-gb.html b/templates/web/default/faq/faq-en-gb.html index bf47a1420..3bfbfb467 100755 --- a/templates/web/default/faq/faq-en-gb.html +++ b/templates/web/default/faq/faq-en-gb.html @@ -62,19 +62,18 @@ href="https://secure.mysociety.org/donate/">please do</a>.</dd> <dt>Can I use FixMyStreet on my mobile?</dt> <dd> - <p>The FixMyStreet website should work on your mobile phone, adapting to - the size of your screen automatically. We plan to release updated native - apps in the near future. - <ul> - <li><em>iPhone:</em> Our basic app from 2008 is available for download - on the App Store: - <a href="http://itunes.apple.com/gb/app/fixmystreet/id297456545">FixMyStreet</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>The FixMyStreet website will already work on your mobile phone, adapting to + the size of your screen automatically. Using an app has some advantages, though + — for example, you can create a report even when you have no network + connection. + <ul> + <li> + <a href="https://itunes.apple.com/gb/app/fixmystreet/id297456545">FixMyStreet app for iPhone</a> + <li> + <a href="https://play.google.com/store/apps/details?id=org.mysociety.FixMyStreet">FixMyStreet app for Android</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> </dd> </dl> diff --git a/templates/web/default/js/translation_strings.html b/templates/web/default/js/translation_strings.html index f6c4f7d41..a14443b71 100644 --- a/templates/web/default/js/translation_strings.html +++ b/templates/web/default/js/translation_strings.html @@ -15,6 +15,12 @@ required: '[% loc('Please enter your email') | replace("'", "\\'") %]', email: '[% loc('Please enter a valid email') | replace("'", "\\'") %]' }, + password_sign_in: { + required: '[% loc('Please enter a password') | replace("'", "\\'") %]' + }, + phone: { + required: '[% loc('Please enter your phone number') | replace("'", "\\'") %]' + }, fms_extra_title: '[% loc('Please enter your title') | replace("'", "\\'") %]', first_name: '[% loc('Please enter your first name') | replace("'", "\\'") %]', last_name: '[% loc('Please enter your second name') | replace("'", "\\'") %]', diff --git a/templates/web/default/maps/bing.html b/templates/web/default/maps/bing.html deleted file mode 100644 index 277886cdb..000000000 --- a/templates/web/default/maps/bing.html +++ /dev/null @@ -1,18 +0,0 @@ -[% map_js = BLOCK %] -<script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&mkt=en-GB"></script> -<script type="text/javascript" src="[% version('/js/map-bing.js') %]"></script> -[% END %] - -[% map_html = BLOCK %] -<script type="text/javascript"> -var fixmystreet = { - 'key': '[% map.key %]', - 'latitude': [% map.latitude %], - 'longitude': [% map.longitude %], - 'pins': [% INCLUDE maps/pins_js.html %] -} -</script> -<div id="map_box"> - [% pre_map %] - <div id="map"></div> -[% END %] diff --git a/templates/web/default/maps/fms.html b/templates/web/default/maps/fms.html index 956a22e69..1cdfc0b35 100644 --- a/templates/web/default/maps/fms.html +++ b/templates/web/default/maps/fms.html @@ -5,7 +5,7 @@ <script type="text/javascript" src="[% version('/js/map-bing-ol.js') %]"></script> <script type="text/javascript" src="[% version('/js/jquery.ba-hashchange.min.js') %]"></script> <!--[if lte IE 6]> - <link rel="stylesheet" href="/jslib/OpenLayers-2.10/theme/default/ie6-style.css" type="text/css" /> + <link rel="stylesheet" href="/js/OpenLayers-2.13.1/theme/default/ie6-style.css" type="text/css"> <![endif]--> [% END %] diff --git a/templates/web/default/maps/google-ol.html b/templates/web/default/maps/google-ol.html new file mode 100644 index 000000000..35c046b55 --- /dev/null +++ b/templates/web/default/maps/google-ol.html @@ -0,0 +1,15 @@ +[% map_js = BLOCK %] +<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script> +<script type="text/javascript" src="[% version('/js/OpenLayers.fixmystreet.google.js') %]"></script> +<script type="text/javascript" src="[% version('/js/map-OpenLayers.js') %]"></script> +<script type="text/javascript" src="[% version('/js/map-google-ol.js') %]"></script> +<script type="text/javascript" src="[% version('/js/jquery.ba-hashchange.min.js') %]"></script> +<!--[if lte IE 6]> + <link rel="stylesheet" href="/jslib/OpenLayers-2.10/theme/default/ie6-style.css" type="text/css" /> +<![endif]--> +[% END %] + +[% map_html = BLOCK %] +[% INCLUDE maps/openlayers.html %] +[% END %] + diff --git a/templates/web/default/maps/openlayers.html b/templates/web/default/maps/openlayers.html index b75e2bbd8..1ac32a717 100644 --- a/templates/web/default/maps/openlayers.html +++ b/templates/web/default/maps/openlayers.html @@ -65,13 +65,13 @@ var fixmystreet = { SET zoom_out = '#' IF map.zoom <= 0; %] <div style="position: absolute; left: 4px; top: 4px; z-index: 1007;" class="olControlPanZoom olControlNoSelect" unselectable="on"> - <div style="position: absolute; left: 13px; top: 4px; width: 18px; height: 18px;"><a rel="nofollow" href="[% north %]"><img style="position: relative; width: 18px; height: 18px;" src="/jslib/OpenLayers-2.10/img/north-mini.png" border="0"></a></div> - <div style="position: absolute; left: 4px; top: 22px; width: 18px; height: 18px;"><a rel="nofollow" href="[% west %]"><img style="position: relative; width: 18px; height: 18px;" src="/jslib/OpenLayers-2.10/img/west-mini.png" border="0"></a></div> - <div style="position: absolute; left: 22px; top: 22px; width: 18px; height: 18px;"><a rel="nofollow" href="[% east %]"><img style="position: relative; width: 18px; height: 18px;" src="/jslib/OpenLayers-2.10/img/east-mini.png" border="0"></a></div> - <div style="position: absolute; left: 13px; top: 40px; width: 18px; height: 18px;"><a rel="nofollow" href="[% south %]"><img style="position: relative; width: 18px; height: 18px;" src="/jslib/OpenLayers-2.10/img/south-mini.png" border="0"></a></div> - <div style="position: absolute; left: 13px; top: 63px; width: 18px; height: 18px;"><a rel="nofollow" href="[% zoom_in %]"><img style="position: relative; width: 18px; height: 18px;" src="/jslib/OpenLayers-2.10/img/zoom-plus-mini.png" border="0"></a></div> - <div style="position: absolute; left: 13px; top: 81px; width: 18px; height: 18px;"><a rel="nofollow" href="[% world %]"><img style="position: relative; width: 18px; height: 18px;" src="/jslib/OpenLayers-2.10/img/zoom-world-mini.png" border="0"></a></div> - <div style="position: absolute; left: 13px; top: 99px; width: 18px; height: 18px;"><a rel="nofollow" href="[% zoom_out %]"><img style="position: relative; width: 18px; height: 18px;" src="/jslib/OpenLayers-2.10/img/zoom-minus-mini.png" border="0"></a></div> + <div style="position: absolute; left: 13px; top: 4px; width: 18px; height: 18px;"><a rel="nofollow" href="[% north %]"><img style="position: relative; width: 18px; height: 18px;" src="/js/OpenLayers-2.13.1/img/north-mini.png" border="0"></a></div> + <div style="position: absolute; left: 4px; top: 22px; width: 18px; height: 18px;"><a rel="nofollow" href="[% west %]"><img style="position: relative; width: 18px; height: 18px;" src="/js/OpenLayers-2.13.1/img/west-mini.png" border="0"></a></div> + <div style="position: absolute; left: 22px; top: 22px; width: 18px; height: 18px;"><a rel="nofollow" href="[% east %]"><img style="position: relative; width: 18px; height: 18px;" src="/js/OpenLayers-2.13.1/img/east-mini.png" border="0"></a></div> + <div style="position: absolute; left: 13px; top: 40px; width: 18px; height: 18px;"><a rel="nofollow" href="[% south %]"><img style="position: relative; width: 18px; height: 18px;" src="/js/OpenLayers-2.13.1/img/south-mini.png" border="0"></a></div> + <div style="position: absolute; left: 13px; top: 63px; width: 18px; height: 18px;"><a rel="nofollow" href="[% zoom_in %]"><img style="position: relative; width: 18px; height: 18px;" src="/js/OpenLayers-2.13.1/img/zoom-plus-mini.png" border="0"></a></div> + <div style="position: absolute; left: 13px; top: 81px; width: 18px; height: 18px;"><a rel="nofollow" href="[% world %]"><img style="position: relative; width: 18px; height: 18px;" src="/js/OpenLayers-2.13.1/img/zoom-world-mini.png" border="0"></a></div> + <div style="position: absolute; left: 13px; top: 99px; width: 18px; height: 18px;"><a rel="nofollow" href="[% zoom_out %]"><img style="position: relative; width: 18px; height: 18px;" src="/js/OpenLayers-2.13.1/img/zoom-minus-mini.png" border="0"></a></div> </div> [% END %] diff --git a/templates/web/default/maps/osm-streetview.html b/templates/web/default/maps/osm-streetview.html index 3bc4614c6..dff6a0c0f 100644 --- a/templates/web/default/maps/osm-streetview.html +++ b/templates/web/default/maps/osm-streetview.html @@ -4,7 +4,7 @@ <script type="text/javascript" src="[% version('/js/map-streetview.js') %]"></script> <script type="text/javascript" src="[% version('/js/jquery.ba-hashchange.min.js') %]"></script> <!--[if lte IE 6]> - <link rel="stylesheet" href="/jslib/OpenLayers-2.10/theme/default/ie6-style.css" type="text/css" /> + <link rel="stylesheet" href="/js/OpenLayers-2.13.1/theme/default/ie6-style.css" type="text/css"> <![endif]--> [% END %] diff --git a/templates/web/default/maps/osm.html b/templates/web/default/maps/osm.html index 804710ad1..0b2db1a53 100644 --- a/templates/web/default/maps/osm.html +++ b/templates/web/default/maps/osm.html @@ -4,7 +4,7 @@ <script type="text/javascript" src="[% version('/js/map-OpenStreetMap.js') %]"></script> <script type="text/javascript" src="[% version('/js/jquery.ba-hashchange.min.js') %]"></script> <!--[if lte IE 6]> - <link rel="stylesheet" href="/jslib/OpenLayers-2.10/theme/default/ie6-style.css" type="text/css" /> + <link rel="stylesheet" href="/js/OpenLayers-2.13.1/theme/default/ie6-style.css" type="text/css"> <![endif]--> [% END %] diff --git a/templates/web/default/my/my.html b/templates/web/default/my/my.html index a6e4000df..48a33a1d2 100644 --- a/templates/web/default/my/my.html +++ b/templates/web/default/my/my.html @@ -13,6 +13,11 @@ <h1>[% loc('Your Reports') %]</h1> +[% IF ! has_content %] +[% tprintf( loc('You haven’t created any reports yet. <a href="%s">Report a problem now.</a>'), + c.uri_for('/') ) %] +[% END %] + [% INCLUDE 'pagination.html', pager = problems_pager, param = 'p' diff --git a/templates/web/default/report/_council_sent_info.html b/templates/web/default/report/_council_sent_info.html new file mode 100644 index 000000000..958562dc2 --- /dev/null +++ b/templates/web/default/report/_council_sent_info.html @@ -0,0 +1,5 @@ +[% IF problem.whensent || problem.can_display_external_id %] + <small class="council_sent_info"><br> + [% problem.processed_summary_string(c) %] + </small> +[% END %] diff --git a/templates/web/default/report/_main.html b/templates/web/default/report/_main.html index 789f8e43e..0124052c0 100644 --- a/templates/web/default/report/_main.html +++ b/templates/web/default/report/_main.html @@ -5,11 +5,7 @@ [% problem.meta_line(c) | html %] [%- IF !problem.used_map AND c.cobrand.moniker != 'emptyhomes' %]; <strong>[% loc('there is no pin shown as the user did not use the map') %]</strong>[% END %] [% IF problem.bodies_str %] - [% IF problem.whensent || problem.can_display_external_id %] - <small class="council_sent_info"><br> - [% problem.processed_summary_string(c) %] - </small> - [% END %] + [% INCLUDE 'report/_council_sent_info.html' %] [% ELSE %] <br><small>[% loc('Not reported to council') %]</small> [% END %] diff --git a/templates/web/default/report/updates.html b/templates/web/default/report/updates.html index 9134c34f8..b0a015f03 100644 --- a/templates/web/default/report/updates.html +++ b/templates/web/default/report/updates.html @@ -30,8 +30,8 @@ [%- IF !update_state && update.problem_state %] [%- state = update.meta_problem_state %] [%- IF c.cobrand.moniker == 'bromley' OR problem.bodies_str == '2482' %] - [%- update_state = 'marked as no further action' IF state == 'unable to fix' %] - [%- update_state = 'marked as third party responsibility' IF state == 'not responsible' %] + [%- SET update_state = 'marked as no further action' IF state == 'unable to fix' %] + [%- SET update_state = 'marked as third party responsibility' IF state == 'not responsible' %] [%- END %] [%- END %] [%- IF !update_state && update.problem_state %] diff --git a/templates/web/default/reports/body.html b/templates/web/default/reports/body.html index 8a443a5fe..2b19e5735 100755 --- a/templates/web/default/reports/body.html +++ b/templates/web/default/reports/body.html @@ -39,6 +39,10 @@ [% END %] </h1> +[% IF c.cobrand.moniker == 'hart' %] + [% INCLUDE '_hart_hants_note.html' %] +[% END %] + [% IF NOT body.areas.size AND c.cobrand.country == 'GB' %] <p id="unknown" class="alert">This council no longer exists. [% IF council.name.match('Penwith|Kerrier|Carrick|Restormel|Caradon|North Cornwall') %] |