TT#6496 Implement SMS notifications for voicemail

Change-Id: I569a989ef65226cde5fd6c7b502130a1a97b308a
changes/93/9893/3
Andreas Granig 9 years ago
parent 8c61449d6e
commit d6a63457ab

@ -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},

@ -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 };

@ -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' );

@ -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:

@ -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 <cc><ac><sn> 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:

@ -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);

@ -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);

@ -260,6 +260,22 @@
</td>
</tr>
[% IF c.config.features.sms -%]
<tr class="sw_action_row">
<td>[% c.loc('SMS Number') %]</td>
<td>
[% subscriber.provisioning_voip_subscriber.voicemail_user.pager %]
</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
[% IF c.user.roles == "subscriber" || c.user.roles == "subscriberadmin" || ((c.user.roles == "admin" || c.user.roles == "reseller") && c.user.read_only != 1) -%]
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/subscriber/edit_voicebox", [c.req.captures.0], 'pager') %]"><i class="icon-edit"></i> [% c.loc('Edit') %]</a>
[% END -%]
</div>
</td>
</tr>
[% END -%]
</tbody>
</table>

Loading…
Cancel
Save