aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md1
-rw-r--r--templates/web/base/admin/report-category.html5
-rw-r--r--templates/web/base/report/inspect/information.html7
-rw-r--r--web/cobrands/fixmystreet/assets.js29
-rw-r--r--web/cobrands/fixmystreet/fixmystreet.js3
-rw-r--r--web/cobrands/fixmystreet/staff.js41
-rw-r--r--web/js/map-OpenLayers.js9
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 }