diff options
Diffstat (limited to 'perllib/FixMyStreet/App/Controller/Admin.pm')
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Admin.pm | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Admin.pm b/perllib/FixMyStreet/App/Controller/Admin.pm index c4bd5c293..e91597bb0 100644 --- a/perllib/FixMyStreet/App/Controller/Admin.pm +++ b/perllib/FixMyStreet/App/Controller/Admin.pm @@ -841,6 +841,7 @@ sub report_edit_category : Private { my ($self, $c, $problem) = @_; if ((my $category = $c->get_param('category')) ne $problem->category) { + my $category_old = $problem->category; $problem->category($category); my @contacts = grep { $_->category eq $problem->category } @{$c->stash->{contacts}}; my @new_body_ids = map { $_->body_id } @contacts; @@ -849,6 +850,16 @@ sub report_edit_category : Private { $problem->whensent(undef); } $problem->bodies_str(join( ',', @new_body_ids )); + $problem->add_to_comments({ + text => '*' . sprintf(_('Category changed from ā%sā to ā%sā'), $category_old, $category) . '*', + created => \'current_timestamp', + confirmed => \'current_timestamp', + user_id => $c->user->id, + name => $c->user->from_body ? $c->user->from_body->name : $c->user->name, + state => 'confirmed', + mark_fixed => 0, + anonymous => 0, + }); } } @@ -1330,6 +1341,17 @@ sub user_edit : Path('user_edit') : Args(1) { } $c->stash->{field_errors} = {}; + + # Update the categories this user operates in + if ( $user->from_body ) { + $c->stash->{body} = $user->from_body; + $c->forward('fetch_contacts'); + my @live_contacts = $c->stash->{live_contacts}->all; + my @live_contact_ids = map { $_->id } @live_contacts; + my @new_contact_ids = grep { $c->get_param("contacts[$_]") } @live_contact_ids; + $user->set_extra_metadata('categories', \@new_contact_ids); + } + unless ($user->email) { $c->stash->{field_errors}->{email} = _('Please enter a valid email'); } @@ -1354,6 +1376,22 @@ sub user_edit : Path('user_edit') : Args(1) { '<p><em>' . _('Updated!') . '</em></p>'; } + if ( $user->from_body ) { + unless ( $c->stash->{body} && $user->from_body->id eq $c->stash->{body}->id ) { + $c->stash->{body} = $user->from_body; + $c->forward('fetch_contacts'); + } + my @contacts = @{$user->get_extra_metadata('categories') || []}; + my %active_contacts = map { $_ => 1 } @contacts; + my @live_contacts = $c->stash->{live_contacts}->all; + my @all_contacts = map { { + id => $_->id, + category => $_->category, + active => $active_contacts{$_->id}, + } } @live_contacts; + $c->stash->{contacts} = \@all_contacts; + } + return 1; } |