diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | templates/web/base/admin/report-category.html | 5 | ||||
-rw-r--r-- | templates/web/base/report/inspect/information.html | 7 | ||||
-rw-r--r-- | web/cobrands/fixmystreet/assets.js | 29 | ||||
-rw-r--r-- | web/cobrands/fixmystreet/fixmystreet.js | 3 | ||||
-rw-r--r-- | web/cobrands/fixmystreet/staff.js | 41 | ||||
-rw-r--r-- | web/js/map-OpenLayers.js | 9 |
7 files changed, 78 insertions, 17 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a27ea704..a2e197f5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -35,6 +35,7 @@ - Centralise update creation to include fields. - Add full text index to speed up admin search. - Offline process for CSV generation. + - Allow inspectors to change report asset. - Development improvements: - `#geolocate_link` is now easier to re-style. #3006 - Links inside `#front-main` can be customised using `$primary_link_*` Sass variables. #3007 diff --git a/templates/web/base/admin/report-category.html b/templates/web/base/admin/report-category.html index 55b9e2ea5..b15f57e71 100644 --- a/templates/web/base/admin/report-category.html +++ b/templates/web/base/admin/report-category.html @@ -1,11 +1,8 @@ -[%~ IF NOT select_name %] - [%~ select_name = 'category' %] -[%~ END %] [%~ BLOCK category_option ~%] <option value="[% cat.category | html %]"[% ' selected' IF problem.category == cat.category %]>[% cat.category_display | html %]</option> [%~ END ~%] -<select class="form-control" name="[% select_name %]" id="[% select_name %]"> +<select class="form-control" name="category" id="category"> [% SET category_safe = mark_safe(problem.category) ~%] [% IF NOT problem.category OR NOT categories_hash.$category_safe %] <optgroup label="[% loc('Existing category') %]"> diff --git a/templates/web/base/report/inspect/information.html b/templates/web/base/report/inspect/information.html index 3abde9a98..bca2a4b60 100644 --- a/templates/web/base/report/inspect/information.html +++ b/templates/web/base/report/inspect/information.html @@ -53,4 +53,11 @@ </p> [% END %] [% END %] + + <!-- These fields are for the asset display code to use --> + <input type="hidden" name="inspect_category_group" id="inspect_category_group" value=""> + <input type="hidden" name="inspect_form_category" id="inspect_form_category" value=""> + <p> + <a href="#" class="btn btn--block btn--change-asset">[% loc('Change asset') %]</a> + </p> </div> diff --git a/web/cobrands/fixmystreet/assets.js b/web/cobrands/fixmystreet/assets.js index e301cf3dd..ac4cb891c 100644 --- a/web/cobrands/fixmystreet/assets.js +++ b/web/cobrands/fixmystreet/assets.js @@ -24,12 +24,13 @@ OpenLayers.Layer.VectorAsset = OpenLayers.Class(OpenLayers.Layer.Vector, { $(fixmystreet).on('assets:unselected', this.checkSelected.bind(this)); $(fixmystreet).on('report_new:category_change', this.changeCategory.bind(this)); $(fixmystreet).on('report_new:category_change', this.update_layer_visibility.bind(this)); + $(fixmystreet).on('inspect_form:asset_change', this.update_layer_visibility.bind(this)); }, - relevant: function() { - var category = $('select#form_category').val(), - group = $('select#category_group').val(), - layer = this.fixmystreet, + relevant: function(category, group) { + category = category || $('#inspect_form_category').val() || $('#form_category').val(); + group = group || $('#inspect_category_group').val() || $('#category_group').val(); + var layer = this.fixmystreet, relevant; if (layer.relevant) { relevant = layer.relevant({category: category, group: group}); @@ -132,11 +133,15 @@ OpenLayers.Layer.VectorAsset = OpenLayers.Class(OpenLayers.Layer.Vector, { // Set the extra fields to the value of the selected feature $.each(this.fixmystreet.attributes, function(field_name, attribute_name) { var $field = $("#form_" + field_name); + var $inspect_fields = $('[id^=category_][id$=form_' + field_name + ']'); + var value; if (typeof attribute_name === 'function') { - $field.val(attribute_name.apply(feature)); + value = attribute_name.apply(feature); } else { - $field.val(feature.attributes[attribute_name]); + value = feature.attributes[attribute_name]; } + $field.val(value); + $inspect_fields.val(value); }); }, @@ -875,6 +880,14 @@ fixmystreet.assets = { } options = $.extend(true, {}, default_options, options); + + var cls = construct_layer_class(options); + var staff_report_page = ((fixmystreet.page == 'report' || fixmystreet.page == 'reports') && fixmystreet.staff_set_up); + if (staff_report_page && cls === OpenLayers.Layer.VectorNearest) { + // Only care about asset layers on report page when staff + return; + } + var asset_layer = this.add_layer(options); this.add_controls([asset_layer], options); return asset_layer; @@ -920,8 +933,10 @@ fixmystreet.assets = { }, init: function() { - if (fixmystreet.page != 'new' && fixmystreet.page != 'around') { + var staff_report_page = ((fixmystreet.page == 'report' || fixmystreet.page == 'reports') && fixmystreet.staff_set_up); + if (fixmystreet.page != 'new' && fixmystreet.page != 'around' && !staff_report_page) { // We only want to show asset markers when making a new report + // or if an inspector is editing a report return; } diff --git a/web/cobrands/fixmystreet/fixmystreet.js b/web/cobrands/fixmystreet/fixmystreet.js index ad29ab470..d032b652d 100644 --- a/web/cobrands/fixmystreet/fixmystreet.js +++ b/web/cobrands/fixmystreet/fixmystreet.js @@ -1548,6 +1548,9 @@ fixmystreet.display = { $twoColReport = $reportPage.find('.two_column_sidebar'), $sideReport = $reportPage.find('#side-report'); + // Set this from report page in case change asset used and therefore relevant() function + fixmystreet.bodies = fixmystreet.utils.csv_to_array($reportPage.find('#js-map-data').data('bodies'))[0]; + if ($sideReport.length) { $('#side').hide(); // Hide the list of reports $('#side-form').hide(); // And the form diff --git a/web/cobrands/fixmystreet/staff.js b/web/cobrands/fixmystreet/staff.js index 236bdca70..113886fda 100644 --- a/web/cobrands/fixmystreet/staff.js +++ b/web/cobrands/fixmystreet/staff.js @@ -189,6 +189,7 @@ fixmystreet.staff_set_up = { populateSelect($priorities, priorities_data, 'priorities_type_format'); updateTemplates({'category': category}); $priorities.val(curr_pri); + update_change_asset_button(); }); function state_change(state) { @@ -252,6 +253,46 @@ fixmystreet.staff_set_up = { } } + function get_value_and_group(slr) { + var elt = $(slr)[0]; + var group = $(elt.options[elt.selectedIndex]).closest('optgroup').prop('label'); + return { 'value': $(elt).val(), 'group': group || '' }; + } + + function update_change_asset_button() { + var category = get_value_and_group('#category'); // The inspect form category dropdown only + var found = false; + if (fixmystreet.assets) { + for (var i = 0; i < fixmystreet.assets.layers.length; i++) { + var layer = fixmystreet.assets.layers[i]; + if ((layer.fixmystreet.asset_category || layer.fixmystreet.asset_group) && layer.relevant(category.value, category.group)) { + found = true; + break; + } + } + } + if (found) { + $('.btn--change-asset').show(); + } else { + $('.btn--change-asset').hide(); + } + } + update_change_asset_button(); + + $('.btn--change-asset').on('click', function(e) { + e.preventDefault(); + $(this).toggleClass('asset-spot'); + if ($(this).hasClass('asset-spot')) { + var v = get_value_and_group('#category'); + $('#inspect_form_category').val(v.value); + $('#inspect_category_group').val(v.group); + } else { + $('#inspect_form_category').val(''); + $('#inspect_category_group').val(''); + } + $(fixmystreet).trigger('inspect_form:asset_change'); + }); + // Make the "Provide an update" form toggleable, hidden by default. // (Inspectors will normally just use the #public_update box instead). $('.js-provide-update').on('click', function(e) { diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js index 1a04756c5..553fd6c3a 100644 --- a/web/js/map-OpenLayers.js +++ b/web/js/map-OpenLayers.js @@ -132,14 +132,11 @@ $.extend(fixmystreet.utils, { new OpenLayers.Projection("EPSG:4326") ); - var lat = transformedLonlat.lat.toFixed(6); - var lon = transformedLonlat.lon.toFixed(6); - - document.getElementById('fixmystreet.latitude').value = lat; - document.getElementById('fixmystreet.longitude').value = lon; - + fixmystreet.maps.update_pin_input_fields(transformedLonlat); $(fixmystreet).trigger('maps:update_pin', [ lonlat ]); + var lat = transformedLonlat.lat.toFixed(6); + var lon = transformedLonlat.lon.toFixed(6); return { 'url': { 'lon': lon, 'lat': lat }, 'state': { 'lon': lonlat.lon, 'lat': lonlat.lat } |