diff --git a/lib/NGCP/Panel/Form/MailToFax/API.pm b/lib/NGCP/Panel/Form/MailToFax/API.pm index 7036f5b556..cbbb8e442f 100644 --- a/lib/NGCP/Panel/Form/MailToFax/API.pm +++ b/lib/NGCP/Panel/Form/MailToFax/API.pm @@ -16,6 +16,12 @@ has_field 'secret_key' => ( required => 0, ); +has_field 'last_secret_key_modify' => ( + type => '+NGCP::Panel::Field::DateTime', + label => 'The datetime (YYYY-MM-DD HH:mm:ss) of the secret key modification.', + required => 0, +); + has_field 'secret_key_renew' => ( type => 'Select', options => [ diff --git a/lib/NGCP/Panel/Role/API/MailToFaxSettings.pm b/lib/NGCP/Panel/Role/API/MailToFaxSettings.pm index 534130f1a5..1b73856292 100644 --- a/lib/NGCP/Panel/Role/API/MailToFaxSettings.pm +++ b/lib/NGCP/Panel/Role/API/MailToFaxSettings.pm @@ -8,6 +8,7 @@ use parent 'NGCP::Panel::Role::API'; use boolean qw(true); use Data::HAL qw(); use Data::HAL::Link qw(); +use DateTime::Format::ISO8601; use HTTP::Status qw(:constants); use JSON::Types; use NGCP::Panel::Utils::Subscriber; @@ -161,6 +162,15 @@ sub update_item { $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid field 'acl'. Must be an array."); return; } + if ($resource->{secret_key} && (!$old_resource->{secret_key} || $old_resource->{secret_key} ne $resource->{secret_key})) { + $resource->{last_secret_key_modify} = NGCP::Panel::Utils::DateTime::current_local; + } elsif ($resource->{last_secret_key_modify} && ($old_resource->{last_secret_key_modify} ne $resource->{last_secret_key_modify})) { + #forbid changing modify time + $resource->{last_secret_key_modify} = $old_resource->{last_secret_key_modify}; + } elsif (!$resource->{last_secret_key_modify}) { + #delete last_secret_key_modify to prevent automatic conversion to current time when inserting into DB + delete $resource->{last_secret_key_modify}; + } my %update_fields = %{ $resource }; delete $update_fields{secret_renew_notify}; @@ -191,6 +201,10 @@ sub update_item { sub post_process_hal_resource { my ($self, $c, $item, $resource, $form) = @_; delete $resource->{active} if ($c->user->roles eq 'subscriber' || $c->user->roles eq 'subscriberadmin'); + my $dtf = $c->model('DB')->storage->datetime_parser; + $resource->{last_secret_key_modify} = defined $resource->{last_secret_key_modify} ? + $dtf->format_datetime(DateTime::Format::ISO8601->parse_datetime($resource->{last_secret_key_modify})): + undef; return $resource; }