MT#10159 Add API call towards MWI on voicemail dir change

Change-Id: I37907d1a5351911f5b357ae1e7992c189a9730d3
changes/33/1533/6
Irina Peshinskaya 10 years ago
parent db0cb867c4
commit bda844c9d3

@ -6,6 +6,7 @@ use HTTP::Status qw(:constants);
use MooseX::ClassAttribute qw(class_has);
use NGCP::Panel::Utils::DateTime;
use NGCP::Panel::Utils::ValidateJSON qw();
use NGCP::Panel::Utils::Subscriber;
use Path::Tiny qw(path);
use Safe::Isa qw($_isa);
BEGIN { extends 'Catalyst::Controller::ActionRole'; }
@ -90,7 +91,7 @@ sub PATCH :Allow {
last unless $preference;
my $json = $self->get_valid_patch_data(
c => $c,
c => $c,
id => $id,
media_type => 'application/json-patch+json',
);
@ -105,7 +106,7 @@ sub PATCH :Allow {
$item = $self->update_item($c, $item, $old_resource, $resource, $form);
last unless $item;
$guard->commit;
if ('minimal' eq $preference) {
@ -146,7 +147,7 @@ sub PUT :Allow {
$item = $self->update_item($c, $item, $old_resource, $resource, $form);
last unless $item;
$guard->commit;
$guard->commit;
if ('minimal' eq $preference) {
$c->response->status(HTTP_NO_CONTENT);
@ -174,7 +175,7 @@ sub DELETE :Allow {
last unless $self->resource_exists($c, voicemail => $item);
$item->delete;
NGCP::Panel::Utils::Subscriber::vmnotify( 'c' => $c, 'voicemail' => $item );
$guard->commit;
$c->response->status(HTTP_NO_CONTENT);

@ -4,7 +4,6 @@ BEGIN { extends 'Catalyst::Controller'; }
use HTML::Entities;
use JSON qw(decode_json encode_json);
use URI::Escape qw(uri_unescape);
use IPC::System::Simple qw/capturex/;
use Test::More;
use Data::Dumper;
use NGCP::Panel::Utils::Navigation;
@ -3146,11 +3145,8 @@ sub play_voicemail :Chained('voicemail') :PathPart('play') :Args(0) {
$c->uri_for_action('/subscriber/details', [$c->req->captures->[0]]));
}
my $dir = $file->dir;
$dir =~s/INBOX$/Old/;
$file->update({ dir => $dir });
$self->vmnotify($c, $c->stash->{voicemail});
NGCP::Panel::Utils::Subscriber::mark_voicemail_read( 'c' => $c, 'voicemail' => $c->stash->{voicemail} );
NGCP::Panel::Utils::Subscriber::vmnotify( 'c' => $c, 'voicemail' => $c->stash->{voicemail} );
$c->response->header('Content-Disposition' => 'attachment; filename="'.$file->msgnum.'.wav"');
$c->response->content_type('audio/x-wav');
@ -3177,32 +3173,11 @@ sub delete_voicemail :Chained('voicemail') :PathPart('delete') :Args(0) {
desc => $c->loc('Failed to delete voicemail message'),
);
}
$self->vmnotify($c, $c->stash->{voicemail});
NGCP::Panel::Utils::Subscriber::vmnotify( c => $c, voicemail => $c->stash->{voicemail} );
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/details', [$c->req->captures->[0]]));
}
sub vmnotify :Private(){
my ($self, $c, $voicemail) = @_;
#1.although method is called after delete - DBIC still can access data in deleted row
#2.amount of the new messages should be selected after played update or delete, of course
my $data = { $voicemail->get_inflated_columns };
$data->{cli} = $voicemail->mailboxuser->provisioning_voip_subscriber->username;
$data->{context} = 'default';
$data->{messages_amount} = $c->model('DB')->resultset('voicemail_spool')->find({
'mailboxuser' => $data->{mailboxuser},
'msgnum' => { '>=' => 0 },
'dir' => { 'like' => '%/INBOX' },
},{
'select' => [{'count' => '*', -as => 'messages_number'}]
})->get_column('messages_number');
my @cmd = ('vmnotify',@$data{qw/context cli messages_amount/});
my $output = capturex([0..3],@cmd);
$c->log->debug("cmd=".join(" ", @cmd)."; output=$output;");
}
sub registered :Chained('master') :PathPart('registered') :CaptureArgs(1) {
my ($self, $c, $reg_id) = @_;

@ -12,6 +12,7 @@ use Data::HAL qw();
use Data::HAL::Link qw();
use HTTP::Status qw(:constants);
use NGCP::Panel::Form::Voicemail::Meta;
use NGCP::Panel::Utils::Subscriber;
sub item_rs {
my ($self, $c) = @_;
@ -24,8 +25,8 @@ sub item_rs {
});
if($c->user->roles eq "admin") {
} elsif($c->user->roles eq "reseller") {
$item_rs = $item_rs->search({
'contact.reseller_id' => $c->user->reseller_id
$item_rs = $item_rs->search({
'contact.reseller_id' => $c->user->reseller_id
},{
join => { mailboxuser => { provisioning_voip_subscriber => { voip_subscriber => { contract => 'contact' } } } }
});
@ -101,10 +102,15 @@ sub update_item {
my $f = $resource->{folder};
my $upresource = {};
$upresource->{dir} = $item->dir;
my $dir_old = $item->dir;
$upresource->{dir} =~ s/\/[^\/]+$/\/$f/;
$item->update($upresource);
if($dir_old =~/INBOX/ && $upresource->{dir} !~/INBOX/){
NGCP::Panel::Utils::Subscriber::vmnotify( 'c' => $c, 'voicemail' => $item );
}
return $item;
}

@ -11,6 +11,7 @@ use NGCP::Panel::Utils::Email;
use NGCP::Panel::Utils::Events;
use UUID qw/generate unparse/;
use JSON qw/decode_json encode_json/;
use IPC::System::Simple qw/capturex/;
my %LOCK = (
0, 'none',
@ -195,7 +196,7 @@ sub create_subscriber {
-distribute => 1, -fatal => 1,
);
}
$schema->txn_do(sub {
my ($uuid_bin, $uuid_string);
UUID::generate($uuid_bin);
@ -340,9 +341,9 @@ sub update_subscriber_pbx_policy {
my $c = $params{c};
my $prov_subscriber = $params{prov_subscriber};
my $values = $params{values};
#todo: use update_preferences instead?
foreach(qw/cloud_pbx_hunt_policy cloud_pbx_hunt_timeout/){
my $preference = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c,
@ -980,7 +981,7 @@ sub callforward_create_or_update_quickset_destinations {
my $type = $params{type};
my $destinations = $params{destinations};
my $schema = $params{schema};
return;
}
@ -1233,7 +1234,41 @@ sub update_voicemail_number {
return;
}
sub vmnotify{
my (%params) = @_;
my $c = $params{c};
my $voicemail = $params{voicemail};
#1.although method is called after delete - DBIC still can access data in deleted row
#2.amount of the new messages should be selected after played update or delete, of course
my $data = { $voicemail->get_inflated_columns };
$data->{cli} = $voicemail->mailboxuser->provisioning_voip_subscriber->username;
$data->{context} = 'default';
$data->{messages_amount} = $c->model('DB')->resultset('voicemail_spool')->find({
'mailboxuser' => $data->{mailboxuser},
'msgnum' => { '>=' => 0 },
'dir' => { 'like' => '%/INBOX' },
},{
'select' => [{'count' => '*', -as => 'messages_number'}]
})->get_column('messages_number');
my @cmd = ('vmnotify',@$data{qw/context cli messages_amount/});
my $output = capturex([0..3],@cmd);
$c->log->debug("cmd=".join(" ", @cmd)."; output=$output;");
return;
}
sub mark_voicemail_read{
my (%params) = @_;
my $c = $params{c};
my $voicemail = $params{voicemail};
my $dir = $voicemail->dir;
$dir =~s/INBOX$/Old/;
$voicemail->update({ dir => $dir });
return;
}
1;
=head1 NAME

Loading…
Cancel
Save