aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStruan Donald <struan@exo.org.uk>2011-08-04 00:21:42 +0100
committerStruan Donald <struan@exo.org.uk>2011-08-04 00:21:42 +0100
commit3700dca455e552ff5846949b972f4be6cf7337dd (patch)
tree242cde5782ec45375337577caf943342838b8cdf
parentce4d421f65f2f4df0abf07719cc5dc9320ea6ad1 (diff)
yet another attempt at storing the service detail information
this time we sort as we store so we don't need to do this every time we display the information
-rwxr-xr-xbin/open311-populate-service-list14
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm7
-rw-r--r--templates/web/default/common_header_tags.html4
-rw-r--r--templates/web/default/report/new/fill_in_details.html15
-rw-r--r--web/js/fixmystreet.js14
5 files changed, 36 insertions, 18 deletions
diff --git a/bin/open311-populate-service-list b/bin/open311-populate-service-list
index 2e65bf4fd..2a6733ef1 100755
--- a/bin/open311-populate-service-list
+++ b/bin/open311-populate-service-list
@@ -77,12 +77,14 @@ while ( my $council = $council_list->next ) {
my $meta_data = $open311->get_service_meta_info( $service->{service_code} );
# turn the data into something a bit more friendly to use
- my %meta = ();
- foreach my $attribute ( @{ $meta_data->{attributes}->{attribute} } ) {
- $meta{ $attribute->{code} } = $attribute;
- }
-
- $contact->extra( \%meta );
+ my @meta =
+ # remove trailing colon as we add this when we display so we don't want 2
+ map { $_->{description} =~ s/:\s*//; $_ }
+ # there is a display order and we only want to sort once
+ sort { $a->{order} <=> $b->{order} }
+ @{ $meta_data->{attributes}->{attribute} };
+
+ $contact->extra( \@meta );
$contact->update;
}
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm
index 63add43ee..d418becb9 100644
--- a/perllib/FixMyStreet/App/Controller/Report/New.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/New.pm
@@ -500,7 +500,7 @@ sub setup_categories_and_councils : Private {
unless ( $seen{$contact->category} ) {
push @category_options, $contact->category;
- $category_extras{ $contact->category } = [ values %{$contact->extra} ]
+ $category_extras{ $contact->category } = $contact->extra
if $contact->extra;
}
$seen{$contact->category} = 1;
@@ -517,7 +517,8 @@ sub setup_categories_and_councils : Private {
$c->stash->{area_ids_to_list} = [ keys %area_ids_to_list ];
$c->stash->{category_label} = $category_label;
$c->stash->{category_options} = \@category_options;
- $c->stash->{category_extras} = encode_json \%category_extras;
+ $c->stash->{category_extras} = \%category_extras;
+ $c->stash->{category_extras_json} = encode_json \%category_extras;
my @missing_details_councils =
grep { !$area_ids_to_list{$_} } #
@@ -699,7 +700,7 @@ sub process_report : Private {
my @extra = ();
my $metas = $contacts[0]->extra;
- foreach my $field ( sort { $a->{order} <=> $b->{order} } values %$metas ) {
+ foreach my $field ( @$metas ) {
if ( lc( $field->{required} ) eq 'true' ) {
unless ( $c->request->param( $field->{code} ) ) {
$c->stash->{field_errors}->{ $field->{code} } = _('This information is required');
diff --git a/templates/web/default/common_header_tags.html b/templates/web/default/common_header_tags.html
index 35218bc1c..206a0e6d4 100644
--- a/templates/web/default/common_header_tags.html
+++ b/templates/web/default/common_header_tags.html
@@ -4,9 +4,9 @@
[% map_js %]
-[% IF category_extras && category_extras != '{}' %]
+[% IF category_extras_json && category_extras_json != '{}' %]
<script type="text/javascript">
- category_extras = [% category_extras %];
+ category_extras = [% category_extras_json %];
</script>
[% END %]
diff --git a/templates/web/default/report/new/fill_in_details.html b/templates/web/default/report/new/fill_in_details.html
index df43fc254..6beb77802 100644
--- a/templates/web/default/report/new/fill_in_details.html
+++ b/templates/web/default/report/new/fill_in_details.html
@@ -105,9 +105,10 @@
[%- IF category_extras %]
<div id="category_meta">
[%- IF report_meta %]
+ [%- category = report.category %]
<h4>Additional Information</h4>
- [%- FOR meta IN report_meta %]
- [%- meta_name = meta.name -%]
+ [%- FOR meta IN category_extras.$category %]
+ [%- meta_name = meta.code -%]
[% IF field_errors.$meta_name %]
<div class='form-error'>[% field_errors.$meta_name %]</div>
@@ -115,7 +116,15 @@
<div class="form-field">
<label for="form_[% meta_name %]">[% meta.description _ ':' %]</label>
- <input type="text" value="[% meta.value | html %]" name="[% meta_name %]" id="form_[% meta_name %]">
+ [% IF meta.exists('values') %]
+ <select name="[% meta_name %]" id="form_[% meta_name %]">
+ [% FOR option IN meta.values.value.keys %]
+ <option value="[% meta.$foo.value.$option.key %]">[% option %]</option>
+ [% END %]
+ </select>
+ [% ELSE %]
+ <input type="text" value="[% report_meta.$meta_name | html %]" name="[% meta_name %]" id="form_[% meta_name %]">
+ [% END %]
</div>
[%- END %]
[%- END %]
diff --git a/web/js/fixmystreet.js b/web/js/fixmystreet.js
index 3c5c56454..9fa0f948b 100644
--- a/web/js/fixmystreet.js
+++ b/web/js/fixmystreet.js
@@ -63,13 +63,19 @@ $(function(){
if ( category_extras[this.options[ this.selectedIndex ].text] ) {
var fields = category_extras[this.options[ this.selectedIndex ].text];
$('<h4>Additional information</h4>').appendTo('#category_meta');
- fields.sort( function(a,b) { return a.order - b.order } );
for ( var i in fields) {
- var field = '';
var meta = fields[i];
- field = '<div class="form-field">';
+ var field = '<div class="form-field">';
field += '<label for="form_' + meta.code + '">' + meta.description + ':</label>';
- field += '<input type="text" value="" name="' + meta.code + '" id="form_' + meta.code + '">';
+ if ( meta.values ) {
+ field += '<select name="' + meta.code + '" id="form_' + meta.code + '">';
+ for ( var j in meta.values.value ) {
+ field += '<option value="' + meta.values.value[j].key + '">' + j + '</option>';
+ }
+ field += '</select>';
+ } else {
+ field += '<input type="text" value="" name="' + meta.code + '" id="form_' + meta.code + '">';
+ }
field += '</div>';
$( field ).appendTo('#category_meta');
}