diff options
author | Matthew Somerville <matthew-github@dracos.co.uk> | 2017-06-30 20:08:22 +0100 |
---|---|---|
committer | Matthew Somerville <matthew-github@dracos.co.uk> | 2017-06-30 20:08:22 +0100 |
commit | af5c9769ed7f3d4217d9a5de21cf07aa977737be (patch) | |
tree | 84ff5a5050e7d4e2100df9c884c348ea8317464f | |
parent | 30dd9d8bd1f4229bf5cb0a8c559ba00dba35b750 (diff) | |
parent | 7b06aae99229d9a5a8544f4aa106682a8c02b497 (diff) |
Merge branch 'issues/forcouncils/193-state-of-the-template'
-rwxr-xr-x | bin/fixmystreet.com/fixture | 9 | ||||
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report.pm | 2 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Factories.pm | 25 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm | 27 | ||||
-rw-r--r-- | perllib/FixMyStreet/Roles/ContactExtra.pm | 3 | ||||
-rw-r--r-- | templates/web/base/report/_inspect.html | 4 | ||||
-rw-r--r-- | web/cobrands/fixmystreet/staff.js | 74 |
7 files changed, 115 insertions, 29 deletions
diff --git a/bin/fixmystreet.com/fixture b/bin/fixmystreet.com/fixture index 9bb9435c5..d3b0a8349 100755 --- a/bin/fixmystreet.com/fixture +++ b/bin/fixmystreet.com/fixture @@ -67,6 +67,14 @@ my $body = FixMyStreet::DB::Factory::Body->find_or_create({ }); say "Created body " . $body->name . " for MapIt area ID " . $opt->area_id . ', categories ' . join(', ', @$categories); +FixMyStreet::DB::Factory::ResponseTemplate->create({ body => $body, title => 'Generic' }); +FixMyStreet::DB::Factory::ResponseTemplate->create({ body => $body, title => 'Fixed', state => 'fixed - council' }); +FixMyStreet::DB::Factory::ResponseTemplate->create({ body => $body, title => 'Monitoring', state => 'unable to fix' }); +my $template = FixMyStreet::DB::Factory::ResponseTemplate->create({ body => $body, title => 'Not us', state => 'not responsible' }); +$template->add_to_contacts($body->contacts->first); +my $priority = FixMyStreet::DB::Factory::ResponsePriority->create_batch(3, { body => $body }); +$priority->[0]->add_to_contacts($body->contacts->first); + # Users say "Created users, all with password 'password':"; my $user; # Will store the final (normal) user of the loop for later user @@ -123,6 +131,7 @@ for (1..$num) { my $titles = $titles{$category}; push @$problems, FixMyStreet::DB::Factory::Problem->create({ body => $body, + areas => ',' . $opt->area_id . ',', user => $user, postcode => $postcode->{postcode}, latitude => $postcode->{wgs84_lat} + rand($inaccurate_km) - $inaccurate_km / 2, diff --git a/perllib/FixMyStreet/App/Controller/Report.pm b/perllib/FixMyStreet/App/Controller/Report.pm index 223cea9b4..ef10dc32e 100644 --- a/perllib/FixMyStreet/App/Controller/Report.pm +++ b/perllib/FixMyStreet/App/Controller/Report.pm @@ -315,6 +315,8 @@ sub inspect : Private { if ($c->cobrand->can('council_area_id')) { my $priorities_by_category = FixMyStreet::App->model('DB::ResponsePriority')->by_categories($c->cobrand->council_area_id, @{$c->stash->{contacts}}); $c->stash->{priorities_by_category} = $priorities_by_category; + my $templates_by_category = FixMyStreet::App->model('DB::ResponseTemplate')->by_categories($c->cobrand->council_area_id, @{$c->stash->{contacts}}); + $c->stash->{templates_by_category} = $templates_by_category; } if ( $c->get_param('save') ) { diff --git a/perllib/FixMyStreet/DB/Factories.pm b/perllib/FixMyStreet/DB/Factories.pm index c3060507e..acf88063e 100644 --- a/perllib/FixMyStreet/DB/Factories.pm +++ b/perllib/FixMyStreet/DB/Factories.pm @@ -100,6 +100,31 @@ __PACKAGE__->fields({ ####################### +package FixMyStreet::DB::Factory::ResponseTemplate; + +use parent -norequire, "FixMyStreet::DB::Factory::Base"; + +__PACKAGE__->resultset(FixMyStreet::DB->resultset("ResponseTemplate")); + +__PACKAGE__->fields({ + text => __PACKAGE__->seq(sub { 'Template text #' . (shift()+1) }), +}); + +####################### + +package FixMyStreet::DB::Factory::ResponsePriority; + +use parent "DBIx::Class::Factory"; + +__PACKAGE__->resultset(FixMyStreet::DB->resultset("ResponsePriority")); + +__PACKAGE__->fields({ + name => __PACKAGE__->seq(sub { 'Priority #' . (shift()+1) }), + description => __PACKAGE__->seq(sub { 'Description #' . (shift()+1) }), +}); + +####################### + package FixMyStreet::DB::Factory::Comment; use parent "DBIx::Class::Factory"; diff --git a/perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm b/perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm new file mode 100644 index 000000000..aa070daa3 --- /dev/null +++ b/perllib/FixMyStreet/DB/ResultSet/ResponseTemplate.pm @@ -0,0 +1,27 @@ +package FixMyStreet::DB::ResultSet::ResponseTemplate; +use base 'DBIx::Class::ResultSet'; + +use Moo; +use HTML::Entities; + +with('FixMyStreet::Roles::ContactExtra'); + +sub join_table { + return 'contact_response_templates'; +} + +sub name_column { + 'title'; +} + +sub map_extras { + my ($rs, @ts) = @_; + return map { + my $out = { id => encode_entities($_->text), name => encode_entities($_->title) }; + $out->{state} = encode_entities($_->state) if $_->state; + $out; + } @ts; +} + +1; + diff --git a/perllib/FixMyStreet/Roles/ContactExtra.pm b/perllib/FixMyStreet/Roles/ContactExtra.pm index d23a094f3..fc6531e54 100644 --- a/perllib/FixMyStreet/Roles/ContactExtra.pm +++ b/perllib/FixMyStreet/Roles/ContactExtra.pm @@ -11,8 +11,9 @@ sub for_bodies { my $attrs = { 'me.body_id' => $bodies, }; + my $order = $rs->can('name_column') ? $rs->name_column() : 'name'; my $filters = { - order_by => 'name', + order_by => $order, join => { $join_table => 'contact' }, distinct => 1, }; diff --git a/templates/web/base/report/_inspect.html b/templates/web/base/report/_inspect.html index 67e28ca1d..98925271d 100644 --- a/templates/web/base/report/_inspect.html +++ b/templates/web/base/report/_inspect.html @@ -46,11 +46,11 @@ [% cat_prefix = category | lower | replace('[^a-z]', '') %] [% cat_prefix = "category_" _ cat_prefix _ "_" %] [% IF category == problem.category %] - <p data-category="[% category | html %]" data-priorities='[% priorities_by_category.$category %]' data-defect-types='[% category_defect_types.$category %]'> + <p data-category="[% category | html %]" data-priorities='[% priorities_by_category.$category %]' data-defect-types='[% category_defect_types.$category %]' data-templates='[% templates_by_category.$category %]'> [% INCLUDE 'report/new/category_extras_fields.html' %] </p> [% ELSE %] - <p data-category="[% category | html %]" class="hidden" data-priorities='[% priorities_by_category.$category %]' data-defect-types='[% category_defect_types.$category %]'> + <p data-category="[% category | html %]" class="hidden" data-priorities='[% priorities_by_category.$category %]' data-defect-types='[% category_defect_types.$category %]' data-templates='[% templates_by_category.$category %]'> [% INCLUDE 'report/new/category_extras_fields.html' report_meta='' %] </p> [% END %] diff --git a/web/cobrands/fixmystreet/staff.js b/web/cobrands/fixmystreet/staff.js index 7f248acb8..50d049217 100644 --- a/web/cobrands/fixmystreet/staff.js +++ b/web/cobrands/fixmystreet/staff.js @@ -184,52 +184,71 @@ $.extend(fixmystreet.set_up, { }, report_page_inspect: function() { - if (!$('form#report_inspect_form').length) { + var $inspect_form = $('form#report_inspect_form'), + $templates = $('#templates_for_public_update'); + + if (!$inspect_form.length) { return; } // Focus on form - $('html,body').scrollTop($('#report_inspect_form').offset().top); + $('html,body').scrollTop($inspect_form.offset().top); + + function updateTemplates(opts) { + opts.category = opts.category || $inspect_form.find('[name=category]').val(); + opts.state = opts.state || $inspect_form.find('[name=state]').val(); + var selector = "[data-category='" + opts.category + "']"; + var data = $inspect_form.find(selector).data('templates') || []; + data = $.grep(data, function(d, i) { + if (!d.state || d.state == opts.state) { + return true; + } + return false; + }); + populateSelect($templates, data, 'templates_format'); + } + + function populateSelect($select, data, label_formatter) { + $select.find('option:gt(0)').remove(); + $.each(data, function(k,v) { + label = window.fixmystreet.utils[label_formatter](v); + $opt = $('<option></option>').attr('value', v.id).text(label); + if (v.state) { + $opt.attr('data-problem-state', v.state); + } + $select.append($opt); + }); + } // On the manage/inspect report form, we already have all the extra inputs // in the DOM, we just need to hide/show them as appropriate. - $('form#report_inspect_form [name=category]').change(function() { + $inspect_form.find('[name=category]').change(function() { var category = $(this).val(), selector = "[data-category='" + category + "']", + entry = $inspect_form.find(selector), $priorities = $('#problem_priority'), $defect_types = $('#defect_type'), - defect_types_data = $("form#report_inspect_form " + selector).data('defect-types') || [], - priorities_data = $("form#report_inspect_form " + selector).data('priorities') || [], + defect_types_data = entry.data('defect-types') || [], + priorities_data = entry.data('priorities') || [], curr_pri = $priorities.val(); - function populateSelect($select, data, label_formatter) { - $select.find('option:gt(0)').remove(); - $.each(data, function(k,v) { - label = window.fixmystreet.utils[label_formatter](v); - $select.append($('<option></option>') - .attr('value', v.id).text(label)); - }); - } - - $("form#report_inspect_form [data-category]:not(" + selector + ")").addClass("hidden"); - $("form#report_inspect_form " + selector).removeClass("hidden"); + $inspect_form.find("[data-category]:not(" + selector + ")").addClass("hidden"); + entry.removeClass("hidden"); populateSelect($priorities, priorities_data, 'priorities_type_format'); populateSelect($defect_types, defect_types_data, 'defect_type_format'); + updateTemplates({'category': category}); $priorities.val(curr_pri); }); // The inspect form submit button can change depending on the selected state - $("#report_inspect_form [name=state]").change(function(){ + $inspect_form.find("[name=state]").change(function(){ var state = $(this).val(); - var $inspect_form = $("#report_inspect_form"); - var $submit = $inspect_form.find("input[type=submit]"); + var $submit = $inspect_form.find("input[type=submit][name=save]"); var value = $submit.attr('data-value-'+state); - if (value !== undefined) { - $submit.val(value); - } else { - $submit.val($submit.data('valueOriginal')); - } + $submit.val(value || $submit.data('valueOriginal')); + + updateTemplates({'state': state}); // We might also have a response template to preselect for the new state var $select = $inspect_form.find("select.js-template-name"); @@ -265,8 +284,8 @@ $.extend(fixmystreet.set_up, { $("#problem_easting").text(bng.lon.toFixed(1)); $("#problem_latitude").text(latlon.lat.toFixed(6)); $("#problem_longitude").text(latlon.lon.toFixed(6)); - $("form#report_inspect_form input[name=latitude]").val(latlon.lat); - $("form#report_inspect_form input[name=longitude]").val(latlon.lon); + $inspect_form.find("input[name=latitude]").val(latlon.lat); + $inspect_form.find("input[name=longitude]").val(latlon.lon); }); } @@ -454,6 +473,9 @@ $.extend(fixmystreet.utils, { priorities_type_format: function(data) { return data.name; }, + templates_format: function(data) { + return data.name; + }, toggle_shortlist: function(btn, sw, id) { btn.attr('class', 'item-list__item__shortlist-' + sw); btn.attr('title', btn.data('label-' + sw)); |