aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--locale/de_CH.UTF-8/LC_MESSAGES/FixMyStreet.po9
-rw-r--r--perllib/FixMyStreet/App/Controller/Open311.pm2
-rw-r--r--perllib/FixMyStreet/App/Controller/Photo.pm2
-rwxr-xr-xperllib/FixMyStreet/App/Controller/Rss.pm7
-rw-r--r--perllib/FixMyStreet/Cobrand/Default.pm3
-rw-r--r--perllib/FixMyStreet/Cobrand/Zurich.pm105
-rw-r--r--perllib/FixMyStreet/DB/Result/Comment.pm20
-rw-r--r--perllib/FixMyStreet/DB/Result/Problem.pm32
-rw-r--r--perllib/FixMyStreet/Roles/PhotoSet.pm34
-rw-r--r--t/app/controller/rss.t60
-rw-r--r--t/cobrand/zurich.t34
-rw-r--r--templates/email/zurich/problem-confirm.txt2
-rw-r--r--templates/web/base/admin/report_edit.html4
-rw-r--r--templates/web/base/report/photo.html14
-rw-r--r--templates/web/zurich/admin/report_edit-sdm.html2
-rw-r--r--templates/web/zurich/admin/report_edit.html8
-rw-r--r--templates/web/zurich/report/_item.html6
-rw-r--r--templates/web/zurich/report/_main.html4
18 files changed, 177 insertions, 171 deletions
diff --git a/locale/de_CH.UTF-8/LC_MESSAGES/FixMyStreet.po b/locale/de_CH.UTF-8/LC_MESSAGES/FixMyStreet.po
index 7914c8335..770793149 100644
--- a/locale/de_CH.UTF-8/LC_MESSAGES/FixMyStreet.po
+++ b/locale/de_CH.UTF-8/LC_MESSAGES/FixMyStreet.po
@@ -191,9 +191,8 @@ msgstr ""
#. ("The first %s is a dropdown of all/fixed/etc, the second is a dropdown of categories")
#: templates/web/base/reports/_list-filters.html:56
-#, fuzzy
msgid "<label for=\"statuses\">Show</label> %s reports <label for=\"filter_categories\">about</label> %s"
-msgstr "<label for=\"statuses\">Zeige</label> %s <label for=\"filter_categories\">&uuml;ber</label> %s"
+msgstr "<label for=\"statuses\">Zeige</label> %s Meldungen <label for=\"filter_categories\">&uuml;ber</label> %s"
#: templates/web/base/js/translation_strings.html:78
msgid "<span>%s</span> saved."
@@ -4578,9 +4577,8 @@ msgstr ""
#: templates/web/base/alert/choose.html:6
#: templates/web/base/around/_error_multiple.html:6
-#, fuzzy
msgid "We found more than one match for that location."
-msgstr "Diese Adresse wurde nicht gefunden."
+msgstr "Ihre Anfrage ergab mehr als eine m&ouml;gliche Adresse."
#: templates/web/base/around/lookup_by_ref.html:6
msgid "We found more than one match for that problem reference:"
@@ -4606,9 +4604,8 @@ msgstr ""
#: templates/web/base/alert/choose.html:12
#: templates/web/base/around/_error_multiple.html:12
-#, fuzzy
msgid "We show up to ten matches, please try a different search if yours is not here."
-msgstr "Ihre Anfrage ergab mehr als eine m&ouml;gliche Adresse. Die ersten zehn Treffer werden unten aufgelistet."
+msgstr "Die ersten zehn Treffer werden unten aufgelistet."
#: templates/web/base/report/new/notes.html:4
#: templates/web/zurich/report/new/notes.html:4
diff --git a/perllib/FixMyStreet/App/Controller/Open311.pm b/perllib/FixMyStreet/App/Controller/Open311.pm
index 95b29d116..c7e4e5bee 100644
--- a/perllib/FixMyStreet/App/Controller/Open311.pm
+++ b/perllib/FixMyStreet/App/Controller/Open311.pm
@@ -284,7 +284,7 @@ sub output_requests : Private {
my $display_photos = $c->cobrand->allow_photo_display($problem);
if ($display_photos && $problem->photo) {
my $url = $c->cobrand->base_url();
- my $imgurl = $url . $problem->photos->[0]->{url_full};
+ my $imgurl = $url . $problem->photos->[$display_photos-1]->{url_full};
$request->{'media_url'} = $imgurl;
}
push(@problemlist, $request);
diff --git a/perllib/FixMyStreet/App/Controller/Photo.pm b/perllib/FixMyStreet/App/Controller/Photo.pm
index 2302322bf..f41702dcf 100644
--- a/perllib/FixMyStreet/App/Controller/Photo.pm
+++ b/perllib/FixMyStreet/App/Controller/Photo.pm
@@ -63,7 +63,7 @@ sub index :LocalRegex('^(c/)?([1-9]\d*)(?:\.(\d+))?(?:\.(full|tn|fp))?\.(?:jpeg|
$c->detach( 'no_photo' ) unless $item;
- $c->detach( 'no_photo' ) unless $c->cobrand->allow_photo_display($item); # Should only be for reports, not updates
+ $c->detach( 'no_photo' ) unless $c->cobrand->allow_photo_display($item, $photo_number); # Should only be for reports, not updates
my $photo;
$photo = $item->get_photoset
diff --git a/perllib/FixMyStreet/App/Controller/Rss.pm b/perllib/FixMyStreet/App/Controller/Rss.pm
index 7cf4783c0..e1da4445d 100755
--- a/perllib/FixMyStreet/App/Controller/Rss.pm
+++ b/perllib/FixMyStreet/App/Controller/Rss.pm
@@ -282,14 +282,15 @@ sub add_row : Private {
$item{pubDate} = $pubDate if $pubDate;
$item{category} = encode_entities($row->{category}) if $row->{category};
- if ($c->cobrand->allow_photo_display($row) && $row->{photo}) {
+ if ((my $photo_to_show = $c->cobrand->allow_photo_display($row)) && $row->{photo}) {
# Bit yucky as we don't have full objects here
my $photoset = FixMyStreet::App::Model::PhotoSet->new({ db_data => $row->{photo} });
- my $first_fn = $photoset->get_id(0);
+ my $idx = $photo_to_show - 1;
+ my $first_fn = $photoset->get_id($idx);
my ($hash, $format) = split /\./, $first_fn;
my $cachebust = substr($hash, 0, 8);
my $key = $alert_type->item_table eq 'comment' ? 'c/' : '';
- $item{description} .= encode_entities("\n<br><img src=\"". $base_url . "/photo/$key$row->{id}.0.$format?$cachebust\">");
+ $item{description} .= encode_entities("\n<br><img src=\"". $base_url . "/photo/$key$row->{id}.$idx.$format?$cachebust\">");
}
if ( $row->{used_map} ) {
diff --git a/perllib/FixMyStreet/Cobrand/Default.pm b/perllib/FixMyStreet/Cobrand/Default.pm
index 4c521eaaa..7888f8ccf 100644
--- a/perllib/FixMyStreet/Cobrand/Default.pm
+++ b/perllib/FixMyStreet/Cobrand/Default.pm
@@ -465,11 +465,12 @@ sub allow_photo_upload { return 1; }
=item allow_photo_display
Return a boolean indicating whether the cobrand allows photo display
+for the particular report and photo.
=cut
sub allow_photo_display {
- my ( $self, $r ) = @_;
+ my ( $self, $r, $num ) = @_;
return 1;
}
diff --git a/perllib/FixMyStreet/Cobrand/Zurich.pm b/perllib/FixMyStreet/Cobrand/Zurich.pm
index 4dc95b178..f0308d6d7 100644
--- a/perllib/FixMyStreet/Cobrand/Zurich.pm
+++ b/perllib/FixMyStreet/Cobrand/Zurich.pm
@@ -4,6 +4,7 @@ use base 'FixMyStreet::Cobrand::Default';
use DateTime;
use POSIX qw(strcoll);
use RABX;
+use List::Util qw(min);
use Scalar::Util 'blessed';
use DateTime::Format::Pg;
@@ -223,19 +224,30 @@ sub updates_as_hashref {
return $hashref;
}
+# If $num is undefined, we want to return the minimum photo number that can be
+# shown (1-indexed), or false for no display. If $num is defined, return
+# boolean whether that indexed photo can be shown.
sub allow_photo_display {
- my ( $self, $r ) = @_;
+ my ( $self, $r, $num ) = @_;
+ my $publish_photo;
if (blessed $r) {
- return $r->get_extra_metadata( 'publish_photo' );
+ $publish_photo = $r->get_extra_metadata('publish_photo');
+ } else {
+ # additional munging in case $r isn't an object, TODO see if we can remove this
+ my $extra = $r->{extra};
+ utf8::encode($extra) if utf8::is_utf8($extra);
+ my $h = new IO::String($extra);
+ $extra = RABX::wire_rd($h);
+ return unless ref $extra eq 'HASH';
+ $publish_photo = $extra->{publish_photo};
}
+ # Old style stored 1/0 integer, which can still be used if present.
+ return $publish_photo unless ref $publish_photo;
+ return $publish_photo->{$num} if defined $num;
- # additional munging in case $r isn't an object, TODO see if we can remove this
- my $extra = $r->{extra};
- utf8::encode($extra) if utf8::is_utf8($extra);
- my $h = new IO::String($extra);
- $extra = RABX::wire_rd($h);
- return unless ref $extra eq 'HASH';
- return $extra->{publish_photo};
+ # We return a 1-indexed number so that '0' can be taken as 'not allowed'
+ my $i = min grep { $publish_photo->{$_} } keys %$publish_photo;
+ return $i + 1;
}
sub show_unconfirmed_reports {
@@ -250,12 +262,27 @@ sub get_body_sender {
# Report overdue functions
my %public_holidays = map { $_ => 1 } (
- '2013-01-01', '2013-01-02', '2013-03-29', '2013-04-01',
- '2013-04-15', '2013-05-01', '2013-05-09', '2013-05-20',
- '2013-08-01', '2013-09-09', '2013-12-25', '2013-12-26',
- '2014-01-01', '2014-01-02', '2014-04-18', '2014-04-21',
- '2014-04-28', '2014-05-01', '2014-05-29', '2014-06-09',
- '2014-08-01', '2014-09-15', '2014-12-25', '2014-12-26',
+ # New Year's Day, Saint Berchtold, Good Friday, Easter Monday,
+ # Sechseläuten, Labour Day, Ascension Day, Whit Monday,
+ # Swiss National Holiday, Knabenschiessen, Christmas, St Stephen's Day
+ # Extra holidays
+
+ '2018-01-01', '2018-01-02', '2018-03-30', '2018-04-02',
+ '2018-04-16', '2018-05-01', '2018-05-10', '2018-05-21',
+ '2018-08-01', '2018-09-10', '2018-12-25', '2018-12-26',
+ '2018-03-29', '2018-05-11', '2018-12-27', '2018-12-28', '2018-12-31',
+
+ '2019-01-01', '2019-01-02', '2019-04-19', '2019-04-22',
+ '2019-04-08', '2019-05-01', '2019-05-30', '2019-06-10',
+ '2019-08-01', '2019-09-09', '2019-12-25', '2019-12-26',
+
+ '2020-01-01', '2020-01-02', '2020-04-10', '2020-04-13',
+ '2020-04-20', '2020-05-01', '2020-05-21', '2020-06-01',
+ '2020-09-14', '2020-12-25',
+
+ '2021-01-01', '2021-04-02', '2021-04-05',
+ '2021-04-19', '2021-05-13', '2021-05-24',
+ '2021-09-13',
);
sub is_public_holiday {
@@ -566,7 +593,19 @@ sub admin_report_edit {
# Problem updates upon submission
if ( ($type eq 'super' || $type eq 'dm') && $c->get_param('submit') ) {
- $problem->set_extra_metadata('publish_photo' => $c->get_param('publish_photo') || 0 );
+
+ my @keys = grep { /^publish_photo/ } keys %{ $c->req->params };
+ my %publish_photo;
+ foreach my $key (@keys) {
+ my ($index) = $key =~ /(\d+)$/;
+ $publish_photo{$index} = 1 if $c->get_param($key);
+ }
+
+ if (%publish_photo) {
+ $problem->set_extra_metadata('publish_photo' => \%publish_photo);
+ } else {
+ $problem->unset_extra_metadata('publish_photo');
+ }
$problem->set_extra_metadata('third_personal' => $c->get_param('third_personal') || 0 );
# Make sure we have a copy of the original detail field
@@ -1005,23 +1044,28 @@ sub _admin_send_email {
sub munge_sendreport_params {
my ($self, $row, $h, $params) = @_;
- if ($row->state =~ /^(closed|investigating)$/ && $row->get_extra_metadata('publish_photo')) {
+
+ if ($row->state =~ /^(closed|investigating)$/) {
# we attach images to reports sent to external bodies
my $photoset = $row->get_photoset();
my $num = $photoset->num_images
or return;
my $id = $row->id;
my @attachments = map {
- my $image = $photoset->get_raw_image($_);
- {
- body => $image->{data},
- attributes => {
- filename => "$id.$_." . $image->{extension},
- content_type => $image->{content_type},
- encoding => 'base64',
- # quoted-printable ends up with newlines corrupting binary data
- name => "$id.$_." . $image->{extension},
- },
+ if ($self->allow_photo_display($row, $_)) {
+ my $image = $photoset->get_raw_image($_);
+ {
+ body => $image->{data},
+ attributes => {
+ filename => "$id.$_." . $image->{extension},
+ content_type => $image->{content_type},
+ encoding => 'base64',
+ # quoted-printable ends up with newlines corrupting binary data
+ name => "$id.$_." . $image->{extension},
+ },
+ };
+ } else {
+ ();
}
} (0..$num-1);
$params->{_attachments_} = \@attachments;
@@ -1165,7 +1209,10 @@ sub admin_stats {
$public_response =~ s{\r?\n}{ <br/> }g if $public_response;
# Assemble photo URL, if report has a photo
- my $media_url = ( @{$report->photos} && $c->cobrand->allow_photo_display($report) ) ? ($c->cobrand->base_url . $report->photos->[0]->{url}) : '';
+ my $photo_to_display = $c->cobrand->allow_photo_display($report);
+ my $media_url = (@{$report->photos} && $photo_to_display)
+ ? $c->cobrand->base_url . $report->photos->[$photo_to_display-1]->{url}
+ : '';
my @columns = (
$report->id,
@@ -1231,7 +1278,7 @@ sub admin_stats {
# pictures taken
my $pictures_taken = $c->model('DB::Problem')->search( { photo => { '!=', undef }, %params } )->count;
# pictures published
- my $pictures_published = $c->model('DB::Problem')->search( { extra => { like => '%publish_photo,I1:1%' }, %params } )->count;
+ my $pictures_published = $c->model('DB::Problem')->search( { extra => { like => '%publish_photo%' }, %params } )->count;
# how many times was a telephone number provided
# XXX => How many users have a telephone number stored
# my $phone = $c->model('DB::User')->search( { phone => { '!=', undef } } )->count;
diff --git a/perllib/FixMyStreet/DB/Result/Comment.pm b/perllib/FixMyStreet/DB/Result/Comment.pm
index 60fd31510..4e869ab24 100644
--- a/perllib/FixMyStreet/DB/Result/Comment.pm
+++ b/perllib/FixMyStreet/DB/Result/Comment.pm
@@ -156,26 +156,6 @@ sub url {
return "/report/" . $self->problem_id . '#update_' . $self->id;
}
-sub photos {
- my $self = shift;
- my $photoset = $self->get_photoset;
- my $i = 0;
- my $id = $self->id;
- my @photos = map {
- my $cachebust = substr($_, 0, 8);
- my ($hash, $format) = split /\./, $_;
- {
- id => $hash,
- url_temp => "/photo/temp.$hash.$format",
- url_temp_full => "/photo/fulltemp.$hash.$format",
- url => "/photo/c/$id.$i.$format?$cachebust",
- url_full => "/photo/c/$id.$i.full.$format?$cachebust",
- idx => $i++,
- }
- } $photoset->all_ids;
- return \@photos;
-}
-
=head2 latest_moderation_log_entry
Return most recent ModerationLog object
diff --git a/perllib/FixMyStreet/DB/Result/Problem.pm b/perllib/FixMyStreet/DB/Result/Problem.pm
index 8625bf17a..a32c17ffb 100644
--- a/perllib/FixMyStreet/DB/Result/Problem.pm
+++ b/perllib/FixMyStreet/DB/Result/Problem.pm
@@ -919,38 +919,6 @@ sub latest_moderation_log_entry {
return $self->admin_log_entries->search({ action => 'moderation' }, { order_by => { -desc => 'id' } })->first;
}
-sub photos {
- my $self = shift;
- my $photoset = $self->get_photoset;
- my $i = 0;
- my $id = $self->id;
- my @photos = map {
- my $cachebust = substr($_, 0, 8);
- # Some Varnish configurations (e.g. on mySociety infra) strip cookies from
- # images, which means image requests will be redirected to the login page
- # if LOGIN_REQUIRED is set. To stop this happening, Varnish should be
- # configured to not strip cookies if the cookie_passthrough param is
- # present, which this line ensures will be if LOGIN_REQUIRED is set.
- my $extra = '';
- if (FixMyStreet->config('LOGIN_REQUIRED')) {
- $cachebust .= '&cookie_passthrough=1';
- $extra = '?cookie_passthrough=1';
- }
- my ($hash, $format) = split /\./, $_;
- {
- id => $hash,
- url_temp => "/photo/temp.$hash.$format$extra",
- url_temp_full => "/photo/fulltemp.$hash.$format$extra",
- url => "/photo/$id.$i.$format?$cachebust",
- url_full => "/photo/$id.$i.full.$format?$cachebust",
- url_tn => "/photo/$id.$i.tn.$format?$cachebust",
- url_fp => "/photo/$id.$i.fp.$format?$cachebust",
- idx => $i++,
- }
- } $photoset->all_ids;
- return \@photos;
-}
-
__PACKAGE__->has_many(
"admin_log_entries",
"FixMyStreet::DB::Result::AdminLog",
diff --git a/perllib/FixMyStreet/Roles/PhotoSet.pm b/perllib/FixMyStreet/Roles/PhotoSet.pm
index 9607b5049..2a6863cff 100644
--- a/perllib/FixMyStreet/Roles/PhotoSet.pm
+++ b/perllib/FixMyStreet/Roles/PhotoSet.pm
@@ -32,4 +32,38 @@ sub get_first_image_fp {
return $self->get_photoset->get_image_data( num => 0, size => 'fp' );
}
+sub photos {
+ my $self = shift;
+ my $photoset = $self->get_photoset;
+ my $i = 0;
+ my $id = $self->id;
+ my $typ = $self->result_source->name eq 'comment' ? 'c/' : '';
+
+ my @photos = map {
+ my $cachebust = substr($_, 0, 8);
+ # Some Varnish configurations (e.g. on mySociety infra) strip cookies from
+ # images, which means image requests will be redirected to the login page
+ # if LOGIN_REQUIRED is set. To stop this happening, Varnish should be
+ # configured to not strip cookies if the cookie_passthrough param is
+ # present, which this line ensures will be if LOGIN_REQUIRED is set.
+ my $extra = '';
+ if (FixMyStreet->config('LOGIN_REQUIRED')) {
+ $cachebust .= '&cookie_passthrough=1';
+ $extra = '?cookie_passthrough=1';
+ }
+ my ($hash, $format) = split /\./, $_;
+ {
+ id => $hash,
+ url_temp => "/photo/temp.$hash.$format$extra",
+ url_temp_full => "/photo/fulltemp.$hash.$format$extra",
+ url => "/photo/$typ$id.$i.$format?$cachebust",
+ url_full => "/photo/$typ$id.$i.full.$format?$cachebust",
+ url_tn => "/photo/$typ$id.$i.tn.$format?$cachebust",
+ url_fp => "/photo/$typ$id.$i.fp.$format?$cachebust",
+ idx => $i++,
+ }
+ } $photoset->all_ids;
+ return \@photos;
+}
+
1;
diff --git a/t/app/controller/rss.t b/t/app/controller/rss.t
index 171121eaa..a8101b593 100644
--- a/t/app/controller/rss.t
+++ b/t/app/controller/rss.t
@@ -14,28 +14,19 @@ my $user1 = $mech->create_user_ok('reporter-rss@example.com', name => 'Reporter
my $dt_parser = FixMyStreet::App->model('DB')->schema->storage->datetime_parser;
-my $report = FixMyStreet::App->model('DB::Problem')->find_or_create( {
+my ($report) = $mech->create_problems_for_body(1, 2651, '', {
postcode => 'eh1 1BB',
- bodies_str => '2651',
areas => ',11808,135007,14419,134935,2651,20728,',
category => 'Street lighting',
title => '&Test’i<n>g \'☃"',
detail => 'Testing Detail',
- used_map => 1,
name => $user1->name,
- anonymous => 0,
- state => 'confirmed',
confirmed => $dt_parser->format_datetime($dt),
lastupdate => $dt_parser->format_datetime($dt),
whensent => $dt_parser->format_datetime($dt->clone->add( minutes => 5 )),
- lang => 'en-gb',
- service => '',
- cobrand => 'default',
- cobrand_data => '',
- send_questionnaire => 1,
latitude => '55.951963',
longitude => '-3.189944',
- user_id => $user1->id,
+ user => $user1,
} );
$mech->host('www.fixmystreet.com');
@@ -127,54 +118,19 @@ $report->delete();
my $council = $mech->create_body_ok(2333, 'Hart Council');
my $county = $mech->create_body_ok(2227, 'Hampshire Council');
-my $now = DateTime->now();
-my $report_to_council = FixMyStreet::App->model('DB::Problem')->find_or_create(
- {
- postcode => 'GU51 4AE',
- bodies_str => $council->id,
+my ($report_to_council) = $mech->create_problems_for_body(1, $council->id, '', {
+ user => $user1,
areas => ',2333,2227,',
- category => 'Other',
- title => 'council report',
- detail => 'Test 2 Detail',
- used_map => 't',
- name => 'Test User',
- anonymous => 'f',
- state => 'closed',
- confirmed => $now->ymd . ' ' . $now->hms,
- lang => 'en-gb',
- service => '',
- cobrand => 'default',
- cobrand_data => '',
- send_questionnaire => 't',
latitude => '51.279616',
longitude => '-0.846040',
- user_id => $user1->id,
- }
-);
+});
-my $report_to_county_council = FixMyStreet::App->model('DB::Problem')->find_or_create(
- {
- postcode => 'GU51 4AE',
- bodies_str => $county->id,
+my ($report_to_county_council) = $mech->create_problems_for_body(1, $county->id, '', {
+ user => $user1,
areas => ',2333,2227,',
- category => 'Other',
- title => 'county report',
- detail => 'Test 2 Detail',
- used_map => 't',
- name => 'Test User',
- anonymous => 'f',
- state => 'closed',
- confirmed => $now->ymd . ' ' . $now->hms,
- lang => 'en-gb',
- service => '',
- cobrand => 'default',
- cobrand_data => '',
- send_questionnaire => 't',
latitude => '51.279616',
longitude => '-0.846040',
- user_id => $user1->id,
- }
-);
+});
subtest "check RSS feeds on cobrand have correct URLs for non-cobrand reports" => sub {
$mech->host('hart.fixmystreet.com');
diff --git a/t/cobrand/zurich.t b/t/cobrand/zurich.t
index 8c2c70c2f..385f7f077 100644
--- a/t/cobrand/zurich.t
+++ b/t/cobrand/zurich.t
@@ -3,6 +3,7 @@
use DateTime;
use Email::MIME;
+use File::Temp;
use LWP::Protocol::PSGI;
use Test::LongString;
use Path::Tiny;
@@ -25,7 +26,6 @@ my $cobrand = FixMyStreet::Cobrand::Zurich->new();
my $sample_file = path(__FILE__)->parent->parent->child("app/controller/sample.jpg");
ok $sample_file->exists, "sample file $sample_file exists";
-my $sample_photo = $sample_file->slurp_raw;
# This is a helper method that will send the reports but with the config
# correctly set - notably STAGING_FLAGS send_reports needs to be true, and
@@ -103,7 +103,7 @@ my $superuser;
subtest "set up superuser" => sub {
$superuser = $mech->log_in_ok( 'super@example.org' );
# a user from body $zurich is a superuser, as $zurich has no parent id!
- $superuser->update({ from_body => $zurich->id });
+ $superuser->update({ from_body => $zurich->id });
$EXISTING_REPORT_COUNT = get_export_rows_count($mech);
$mech->log_out_ok;
};
@@ -112,7 +112,6 @@ my @reports = $mech->create_problems_for_body( 1, $division->id, 'Test', {
state => 'unconfirmed',
confirmed => undef,
cobrand => 'zurich',
- photo => $sample_photo,
areas => ',423017,',
});
my $report = $reports[0];
@@ -315,15 +314,30 @@ subtest "report_edit" => sub {
}
};
+# Give the report three photos
+my $UPLOAD_DIR = File::Temp->newdir();
+my @files = map { $_ x 40 . ".jpeg" } (1..3);
+$sample_file->copy(path($UPLOAD_DIR, $_)) for @files;
+$report->photo(join(',', @files));
+$report->update;
+
FixMyStreet::override_config {
ALLOWED_COBRANDS => [ 'zurich' ],
+ MAPIT_URL => 'http://mapit.zurich/',
MAP_TYPE => 'Zurich,OSM',
+ UPLOAD_DIR => $UPLOAD_DIR,
}, sub {
# Photo publishing
$mech->get_ok( '/admin/report_edit/' . $report->id );
- $mech->submit_form_ok( { with_fields => { state => 'confirmed', publish_photo => 1 } } );
+ $mech->submit_form_ok( { with_fields => { state => 'confirmed', publish_photo_1 => 1 } } );
+ $mech->get_ok( '/around?lat=' . $report->latitude . ';lon=' . $report->longitude);
+ $mech->content_lacks('photo/' . $report->id . '.0.fp.jpeg');
+ $mech->content_contains('photo/' . $report->id . '.1.fp.jpeg');
+ $mech->content_lacks('photo/' . $report->id . '.2.fp.jpeg');
$mech->get_ok( '/report/' . $report->id );
- $mech->content_contains('photo/' . $report->id . '.0.jpeg');
+ $mech->content_lacks('photo/' . $report->id . '.0.jpeg');
+ $mech->content_contains('photo/' . $report->id . '.1.jpeg');
+ $mech->content_lacks('photo/' . $report->id . '.2.jpeg');
# Internal notes
$mech->get_ok( '/admin/report_edit/' . $report->id );
@@ -451,12 +465,16 @@ $mech->content_contains( DateTime->now->strftime("%d.%m.%Y") );
# User confirms their email address
$report->set_extra_metadata(email_confirmed => 1);
+$report->confirmed(DateTime->now);
$report->update;
FixMyStreet::override_config {
ALLOWED_COBRANDS => [ 'zurich' ],
MAP_TYPE => 'Zurich,OSM',
}, sub {
+ # Quick RSS check here, while we have a report
+ $mech->get_ok('/rss/problems');
+
$mech->get_ok( '/admin/report_edit/' . $report->id );
$mech->content_lacks( 'Unbest&auml;tigt' ); # Confirmed email
$mech->submit_form_ok( { with_fields => { status_update => 'FINAL UPDATE' } } );
@@ -480,7 +498,6 @@ $mech->clear_emails_ok;
state => 'unconfirmed',
confirmed => undef,
cobrand => 'zurich',
- photo => $sample_photo,
areas => ',423017,',
});
$report = $reports[0];
@@ -522,7 +539,6 @@ $mech->email_count_is(0);
state => 'unconfirmed',
confirmed => undef,
cobrand => 'zurich',
- photo => $sample_photo,
areas => ',423017,',
});
$report = $reports[0];
@@ -830,7 +846,7 @@ subtest "test stats" => sub {
$mech->content_contains('Innerhalb von f&uuml;nf Arbeitstagen abgeschlossen: 3');
# my @data = $mech->content =~ /(?:moderiert|abgeschlossen): \d+/g;
# diag Dumper(\@data); use Data::Dumper;
-
+
my $export_count = get_export_rows_count($mech);
if (defined $export_count) {
is $export_count - $EXISTING_REPORT_COUNT, 3, 'Correct number of reports';
@@ -865,7 +881,7 @@ subtest 'email images to external partners' => sub {
});
my $fileid = $photoset->data;
- $report->set_extra_metadata('publish_photo' => 1);
+ $report->set_extra_metadata('publish_photo' => { 0 => 1 });
# The below email comparison must not have an external message.
$report->unset_extra_metadata('external_message');
$report->update({
diff --git a/templates/email/zurich/problem-confirm.txt b/templates/email/zurich/problem-confirm.txt
index d64d54e8c..7a76332bd 100644
--- a/templates/email/zurich/problem-confirm.txt
+++ b/templates/email/zurich/problem-confirm.txt
@@ -8,6 +8,8 @@ Besten Dank für Ihre Meldung auf <<Züri wie neu>>. Klicken Sie bitte auf diese
Wir werden Ihr Anliegen innerhalb der nächsten sechs Arbeitstage beantworten.
+Achtung: Notfälle müssen der Polizei gemeldet werden via Telefon 117.
+
Ihre Meldung lautet:
diff --git a/templates/web/base/admin/report_edit.html b/templates/web/base/admin/report_edit.html
index ff99bb907..911f4094e 100644
--- a/templates/web/base/admin/report_edit.html
+++ b/templates/web/base/admin/report_edit.html
@@ -135,7 +135,9 @@ class="admin-offsite-link">[% problem.latitude %], [% problem.longitude %]</a>
<li>[% loc('Phone:') %] [% problem.user.phone_display | html %]</li>
[% END %]
[% IF problem.user.email != problem.user.username %]
-<li>[% loc('Email:') %] [% problem.user.email | html %]</li>
+<li>[% loc('Email:') %]
+<a href="mailto:[% problem.user.email | html %]">[% problem.user.email | html %]</a>
+</li>
[% END %]
<li><label class="inline-text" for="flagged">[% loc('Flagged:') %]</label>
<input type="checkbox" id="flagged" name="flagged"[% ' checked' IF problem.flagged %]></li>
diff --git a/templates/web/base/report/photo.html b/templates/web/base/report/photo.html
index aa82baef6..5474fad28 100644
--- a/templates/web/base/report/photo.html
+++ b/templates/web/base/report/photo.html
@@ -1,13 +1,15 @@
-[% IF c.cobrand.allow_photo_display(object) && object.photo %]
+[% IF object.photo %]
[% IF object.photos.size > 1 %]
<div class="update-img-set">
[% END %]
[% FOR photo IN object.photos %]
- <div class="update-img">
- <a href="[% photo.url_full %]" rel="fancy">
- <img alt="Photo of this report" src="[% photo.url %]">
- <span>zoom</span></a>
- </div>
+ [% IF c.cobrand.allow_photo_display(object, photo.idx) %]
+ <div class="update-img">
+ <a href="[% photo.url_full %]" rel="fancy">
+ <img alt="Photo of this report" src="[% photo.url %]">
+ <span>zoom</span></a>
+ </div>
+ [% END %]
[% END %]
[% IF object.photos.size > 1 %]
</div>
diff --git a/templates/web/zurich/admin/report_edit-sdm.html b/templates/web/zurich/admin/report_edit-sdm.html
index 07fc9ad36..0319fc565 100644
--- a/templates/web/zurich/admin/report_edit-sdm.html
+++ b/templates/web/zurich/admin/report_edit-sdm.html
@@ -62,7 +62,7 @@
<strong>[% IF problem.name %][% problem.name | html %][% ELSE %][% loc('(No name)') %][% END %]</strong>
<input type='hidden' name='name' id='name' value='[% problem.name | html %]'>
<br>
- [% problem.user.email | html %]
+ <a href="mailto:[% problem.user.email | html %]">[% problem.user.email | html %]</a>
[% IF NOT problem.extra.email_confirmed %]<span class="error">[% loc('Unconfirmed') %]</span>[% END %]
<input type='hidden' id='username' name='username' value='[% problem.user.username | html %]'>
<br>
diff --git a/templates/web/zurich/admin/report_edit.html b/templates/web/zurich/admin/report_edit.html
index 7e88fab30..fd03fb044 100644
--- a/templates/web/zurich/admin/report_edit.html
+++ b/templates/web/zurich/admin/report_edit.html
@@ -90,7 +90,7 @@
<strong>[% IF problem.name %][% problem.name | html %][% ELSE %][% loc('(No name)') %][% END %]</strong>
<input type='hidden' name='name' id='name' value='[% problem.name | html %]'>
<br>
- [% problem.user.email | html %]
+ <a href="mailto:[% problem.user.email | html %]">[% problem.user.email | html %]</a>
[% IF NOT problem.extra.email_confirmed %]<span class="error">[% loc('Unconfirmed') %]</span>[% END %]
<input type='hidden' id='username' name='username' value='[% problem.user.username | html %]'>
<br>
@@ -117,10 +117,10 @@
</div>
<input type="submit" name="rotate_photo_[% loop.index %]" value="[% loc('Rotate Left') %]" class="screen-only">
<input type="submit" name="rotate_photo_[% loop.index %]" value="[% loc('Rotate Right') %]" class="screen-only">
+ <br>
+ <input type="checkbox" id="publish_photo_[% loop.index %]" name="publish_photo_[% loop.index %]" value="1"[% ' checked' IF problem.extra.publish_photo.${loop.index} %] class="screen-only">
+ <label class="inline screen-only" for="publish_photo_[% loop.index %]">[% loc("Publish photo") %]</label></li>
[% END %]
- <br>
- <input type="checkbox" id="publish_photo" name="publish_photo" value="1"[% ' checked' IF problem.extra.publish_photo %] class="screen-only">
- <label class="inline screen-only" for="publish_photo">[% loc("Publish photo") %]</label></li>
[% END %]
</dl>
diff --git a/templates/web/zurich/report/_item.html b/templates/web/zurich/report/_item.html
index 560cbac51..ccae84271 100644
--- a/templates/web/zurich/report/_item.html
+++ b/templates/web/zurich/report/_item.html
@@ -1,7 +1,9 @@
<li class="item-list__item item-list--reports__item">
<a href="[% c.uri_for('/report', problem.id ) %]">
- [% IF problem.state != 'unconfirmed' AND problem.photo AND c.cobrand.allow_photo_display(problem) %]
- <img class="img" height="60" width="90" src="[% problem.photos.first.url_fp %]" alt="">
+ [% photo_to_display = c.cobrand.allow_photo_display(problem) %]
+ [% IF problem.state != 'unconfirmed' AND problem.photo AND photo_to_display %]
+ [% photo_idx = photo_to_display - 1 ~%]
+ <img class="img" height="60" width="90" src="[% problem.photos.${photo_idx}.url_fp %]" alt="">
[% END %]
[% IF problem.state != 'unconfirmed' %]
<h3 class="item-list__heading">[% problem.title | html %]</h3>
diff --git a/templates/web/zurich/report/_main.html b/templates/web/zurich/report/_main.html
index b868c03e2..912e8b0c9 100644
--- a/templates/web/zurich/report/_main.html
+++ b/templates/web/zurich/report/_main.html
@@ -6,9 +6,7 @@
</p>
[% IF problem.state != 'unconfirmed' %]
- [% IF c.cobrand.allow_photo_display(problem) %]
- [% INCLUDE 'report/photo.html' object=problem %]
- [% END %]
+ [% INCLUDE 'report/photo.html' object=problem %]
[% problem.detail | add_links | html_para %]
[% ELSE %]
[% loc('This report is awaiting moderation.') %]