diff --git a/lib/NGCP/Panel/Controller/API/SMS.pm b/lib/NGCP/Panel/Controller/API/SMS.pm index 81af468ad3..c8dd1b6f26 100644 --- a/lib/NGCP/Panel/Controller/API/SMS.pm +++ b/lib/NGCP/Panel/Controller/API/SMS.pm @@ -111,6 +111,13 @@ sub create_item { err_code => sub {$error_msg = shift;}, ); + # TODO: agranig: we need to return an item here, otherwise it fails + #if($c->user->roles eq "admin" || $c->user->roles eq "reseller") { + # if($c->req->params->{skip_journal} eq "true") { + # return; + # } + #} + my $rs = $self->item_rs($c); my $item = $rs->create({ subscriber_id => $resource->{subscriber_id}, diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index 31bb4fb43c..157bedb425 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -36,6 +36,7 @@ use NGCP::Panel::Form::DestinationSet; use NGCP::Panel::Form::TimeSet; use NGCP::Panel::Form::Voicemail::Pin; use NGCP::Panel::Form::Voicemail::Email; +use NGCP::Panel::Form::Voicemail::Pager; use NGCP::Panel::Form::Voicemail::Attach; use NGCP::Panel::Form::Voicemail::Delete; use NGCP::Panel::Form::Reminder; @@ -3005,6 +3006,18 @@ sub edit_voicebox :Chained('base') :PathPart('preferences/voicebox/edit') :Args( } last SWITCH; }; + /^pager$/ && do { + $form = NGCP::Panel::Form::Voicemail::Pager->new; + $params = { 'sms_number' => $vm_user->pager }; + $form->process(params => $posted ? $c->req->params : $params); + NGCP::Panel::Utils::Navigation::check_form_buttons( + c => $c, form => $form, fields => {}, back_uri => $c->req->uri, + ); + if($posted && $form->validated) { + $vm_user->update({ pager => $form->values->{sms_number} // ''}); + } + last SWITCH; + }; /^attach$/ && do { $form = NGCP::Panel::Form::Voicemail::Attach->new; $params = { 'attach' => $vm_user->attach eq 'yes' ? 1 : 0 }; diff --git a/lib/NGCP/Panel/Form/SMSAPI.pm b/lib/NGCP/Panel/Form/SMSAPI.pm index 179288fa07..e319a0d67c 100644 --- a/lib/NGCP/Panel/Form/SMSAPI.pm +++ b/lib/NGCP/Panel/Form/SMSAPI.pm @@ -4,7 +4,6 @@ use HTML::FormHandler::Moose; extends 'HTML::FormHandler'; use HTML::FormHandler::Widget::Block::Bootstrap; -use NGCP::Panel::Field::BillingZone; has '+widget_wrapper' => ( default => 'Bootstrap' ); has_field 'submitid' => ( type => 'Hidden' ); diff --git a/lib/NGCP/Panel/Form/Voicemail/API.pm b/lib/NGCP/Panel/Form/Voicemail/API.pm index 5618f4c1ef..b3d41302d0 100644 --- a/lib/NGCP/Panel/Form/Voicemail/API.pm +++ b/lib/NGCP/Panel/Form/Voicemail/API.pm @@ -47,6 +47,17 @@ has_field 'attach' => ( }, ); +has_field 'sms_number' => ( + type => 'Text', + required => 0, + validate_when_empty => 0, + element_attr => { + rel => ['tooltip'], + title => ['The E164 number in format <cc><ac><sn> to send voicemail notification SMS.'] + }, +); + + sub validate { my $self = shift; my $attach = $self->field('attach')->value; @@ -56,6 +67,15 @@ sub validate { } } +sub validate_sms_number { + my ($self, $field) = @_; + + unless($field->value =~ /^[1-9]\d+$/) { + my $err_msg = 'Invalid E164 number'; + $field->add_error($err_msg); + } +} + 1; # vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Form/Voicemail/Pager.pm b/lib/NGCP/Panel/Form/Voicemail/Pager.pm new file mode 100644 index 0000000000..bf4a6a496e --- /dev/null +++ b/lib/NGCP/Panel/Form/Voicemail/Pager.pm @@ -0,0 +1,52 @@ +package NGCP::Panel::Form::Voicemail::Pager; + +use HTML::FormHandler::Moose; +extends 'HTML::FormHandler'; + +use HTML::FormHandler::Widget::Block::Bootstrap; + +has '+widget_wrapper' => ( default => 'Bootstrap' ); +has_field 'submitid' => ( type => 'Hidden' ); +sub build_render_list {[qw/submitid fields actions/]} +sub build_form_element_class { [qw/form-horizontal/] } + +has_field 'sms_number' => ( + type => 'Text', + label => 'SMS Number', + required => 0, + element_attr => { + rel => ['tooltip'], + title => ['The E164 number in format to send voicemail notification SMS.'] + }, +); + +has_field 'save' => ( + type => 'Submit', + value => 'Save', + element_class => [qw/btn btn-primary/], + label => '', +); + +has_block 'fields' => ( + tag => 'div', + class => [qw/modal-body/], + render_list => [qw/sms_number/], +); + +has_block 'actions' => ( + tag => 'div', + class => [qw/modal-footer/], + render_list => [qw/save/], +); + +sub validate_sms_number { + my ($self, $field) = @_; + + unless($field->value =~ /^[1-9]\d+$/) { + my $err_msg = 'Invalid E164 number'; + $field->add_error($err_msg); + } +} + +1; +# vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Role/API/SMS.pm b/lib/NGCP/Panel/Role/API/SMS.pm index 99aefb96c9..8b86c5eb4e 100644 --- a/lib/NGCP/Panel/Role/API/SMS.pm +++ b/lib/NGCP/Panel/Role/API/SMS.pm @@ -73,6 +73,7 @@ sub check_resource{ $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Missing mandatory field 'subscriber_id'"); return; } + my $b_subscriber = $c->model('DB')->resultset('voip_subscribers')->find({ id => $resource->{subscriber_id}, }); @@ -87,6 +88,13 @@ sub check_resource{ } $resource->{subscriber_id} = $subscriber->id; + if($c->user->roles eq "admin" || $c->user->roles eq "reseller") { + if($c->req->params->{skip_checks} eq "true") { + $c->log->info("skipping number checks for sending sms"); + return 1; + } + } + return unless NGCP::Panel::Utils::SMS::check_numbers($c, $resource, $subscriber, sub { my ($err) = @_; $self->error($c, HTTP_UNPROCESSABLE_ENTITY, $err); diff --git a/lib/NGCP/Panel/Role/API/VoicemailSettings.pm b/lib/NGCP/Panel/Role/API/VoicemailSettings.pm index f43e81a431..d61063e7ff 100644 --- a/lib/NGCP/Panel/Role/API/VoicemailSettings.pm +++ b/lib/NGCP/Panel/Role/API/VoicemailSettings.pm @@ -74,6 +74,7 @@ sub resource_from_item { $resource->{pin} = delete $resource->{password}; $resource->{delete} = delete $resource->{delete} eq 'yes' ? 1 : 0; $resource->{attach} = delete $resource->{attach} eq 'yes' ? 1 : 0; + $resource->{sms_number} = delete $resource->{pager}; return $resource; } @@ -102,6 +103,8 @@ sub update_item { $resource->{delete} = delete $resource->{delete} ? 'yes' : 'no'; $resource->{attach} = delete $resource->{attach} ? 'yes' : 'no'; $resource->{password} = delete $resource->{pin}; + $resource->{pager} = delete $resource->{sms_number}; + $resource->{pager} //= ""; $item->update($resource); diff --git a/share/templates/subscriber/preferences.tt b/share/templates/subscriber/preferences.tt index 5a4ffb97bf..1ecb4ed79e 100644 --- a/share/templates/subscriber/preferences.tt +++ b/share/templates/subscriber/preferences.tt @@ -260,6 +260,22 @@ + [% IF c.config.features.sms -%] + + [% c.loc('SMS Number') %] + + [% subscriber.provisioning_voip_subscriber.voicemail_user.pager %] + + +
+ [% IF c.user.roles == "subscriber" || c.user.roles == "subscriberadmin" || ((c.user.roles == "admin" || c.user.roles == "reseller") && c.user.read_only != 1) -%] + [% c.loc('Edit') %] + [% END -%] +
+ + + + [% END -%]