TT#5953 Fix directory format for the voicemail greetings

Change-Id: I8dc124109e6f7dc16bfea71cae4bb0b97dbe97f9
changes/32/10432/7
Irina Peshinskaya 9 years ago
parent 63958c3edb
commit cf58d77cb5

@ -68,7 +68,7 @@ sub query_params {
first => sub {
my $q = shift;
return {
'me.dir' => $q,
'me.dir' => { like => '%/'.$q },
};
},
second => sub {},
@ -79,12 +79,13 @@ sub query_params {
sub create_item {
my ($self, $c, $resource, $form, $process_extras) = @_;
my $dir = NGCP::Panel::Utils::Subscriber::get_subscriber_voicemail_directory( c => $c, subscriber => $c->stash->{checked}->{subscriber}, dir => $resource->{dir} );
my $item = $c->stash->{checked}->{voicemail_subscriber}->voicemail_spools->create({
'origtime' => time(),#just to make inflate possible. Really we don't need this value
'recording' => $resource->{greetingfile}->slurp,
'dir' => $resource->{dir},
'msgnum' => '-1',
'recording' => $resource->{greetingfile}->slurp,
'dir' => $dir,
'origtime' => time(),#just to make inflate possible. Really we don't need this value
'mailboxcontext' => 'default',
'msgnum' => '-1',
});
#we need to return subscriber id, so item can be used for further update
#We can't just add field to the item object, so we need to reselect it

@ -28,9 +28,10 @@ sub _set_config{
sub update_item_model{
my($self, $c, $item, $old_resource, $resource, $form, $process_extras) = @_;
my $dir = NGCP::Panel::Utils::Subscriber::get_subscriber_voicemail_directory(c => $c, subscriber => $c->stash->{checked}->{subscriber}, dir => $resource->{dir} );
$item->update({
'recording' => $resource->{greetingfile}->slurp,
'dir' => $resource->{dir},
'dir' => $dir,
'origtime' => time(),#just to make inflate possible. Really we don't need this value
});
#we need to return subscriber id, so item can be used for further update
@ -43,7 +44,7 @@ sub get_item_binary_data{
my($self, $c, $id, $item) = @_;
#caller waits for: $data_ref,$mime_type,$filename
#while we will not strictly check Accepted header, if item can return only one type of the binary data
return \$item->recording, 'audio/x-wav', 'voicemail_'.$item->dir.'_'.$item->get_column('subscriber_id').'.wav',
return \$item->recording, 'audio/x-wav', 'voicemail_'. NGCP::Panel::Utils::Subscriber::get_subscriber_voicemail_type( dir => $item->dir ).'_'.$item->get_column('subscriber_id').'.wav',
}
# vim: set tabstop=4 expandtab:

@ -695,8 +695,10 @@ sub preferences :Chained('base') :PathPart('preferences') :Args(0) {
hash => 'type',
);
foreach my $voicemail_greeting_type (qw/unavail busy/){
my $dir = NGCP::Panel::Utils::Subscriber::get_subscriber_voicemail_directory(c => $c, subscriber => $c->stash->{subscriber}, dir => $voicemail_greeting_type);
push @$vm_recordings_types,
$subscriber_vm_recordings->{$voicemail_greeting_type} // {greeting_exists => 0, type => $voicemail_greeting_type} ;
$subscriber_vm_recordings->{$dir} ? {%{$subscriber_vm_recordings->{$dir}}, type => $voicemail_greeting_type }
: {greeting_exists => 0, type => $voicemail_greeting_type} ;
}
$c->stash->{vm_recordings_types} = $vm_recordings_types;
@ -3000,7 +3002,7 @@ sub edit_voicebox :Chained('base') :PathPart('preferences/voicebox/edit') :Args(
if( !grep{ $type eq $_ } (qw/unavail busy/) ){
die('Wrong voicemail greeting type.');
}
my $dir = NGCP::Panel::Utils::Subscriber::get_subscriber_voicemail_directory(c => $c, subscriber => $c->stash->{subscriber}, dir => $type);
$attribute_name = $c->loc('voicemail greeting "'.$type.'"');
$form = NGCP::Panel::Form::Voicemail::Greeting->new;
$params = {};
@ -3014,7 +3016,7 @@ sub edit_voicebox :Chained('base') :PathPart('preferences/voicebox/edit') :Args(
);
if('delete' eq $action){
$vm_user->voicemail_spools->search_rs({
'dir' => $type,
'dir' => $dir,
'msgnum' => '-1',
})->delete;
NGCP::Panel::Utils::Message::info(
@ -3027,7 +3029,7 @@ sub edit_voicebox :Chained('base') :PathPart('preferences/voicebox/edit') :Args(
return;
}elsif('download' eq $action){
my $recording = $vm_user->voicemail_spools->search_rs({
'dir' => $type,
'dir' => $dir,
'msgnum' => '-1',
})->first;
if($recording){
@ -3051,10 +3053,11 @@ sub edit_voicebox :Chained('base') :PathPart('preferences/voicebox/edit') :Args(
if($form->validated) {
if('edit' eq $action){
$vm_user->voicemail_spools->update_or_create({
'origtime' => time(),#just to make inflate possible. Really we don't need this value
'recording' => $greetingfile->slurp,
'dir' => $type,
'msgnum' => '-1',
'recording' => $greetingfile->slurp,
'dir' => $dir,
'origtime' => time(),#just to make inflate possible. Really we don't need this value
'mailboxcontext' => 'default',
'msgnum' => '-1',
});
}
}

@ -5,6 +5,7 @@ use parent qw/NGCP::Panel::Role::API/;
use Sipwise::Base;
use HTTP::Status qw(:constants);
use NGCP::Panel::Utils::Generic qw(:all);
use NGCP::Panel::Utils::Subscriber;
use NGCP::Panel::Form::Voicemail::GreetingAPI;
sub item_name {
@ -28,7 +29,10 @@ sub _item_rs {
my $item_rs = $c->model('DB')->resultset('voicemail_spool')->search({
'msgnum' => '-1',
'dir' => {-in => [qw/unavail busy/]},
'-or' => [
'dir' => { like => '%/unavail' },
'dir' => { like => '%/busy' },
],
'voip_subscriber.id' => { '!=' => undef },
'voip_subscriber.status' => { '!=' => 'terminated' }
},{
@ -97,6 +101,7 @@ sub check_resource{
return;
}
$c->stash->{checked}->{subscriber} = $subscriber;
$c->stash->{checked}->{voicemail_subscriber} = $voicemail_subscriber;
return 1;
@ -106,9 +111,10 @@ sub check_duplicate{
my($self, $c, $item, $old_resource, $resource, $form) = @_;
my $rs = $self->item_rs($c);
my $existing_item = $rs->search({
'voip_subscriber.id' => $resource->{subscriber_id},
'me.dir' => $resource->{dir},
'me.dir' => {like => '%/'.$resource->{dir}},
})->first;
if($existing_item && (!$item || $item->id != $existing_item->id)) {
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, 'Voicemail greeting for the type "'.$resource->{dir}.'" and subscriber id "'.$resource->{subscriber_id}.'" already exists');
@ -118,5 +124,19 @@ sub check_duplicate{
return 1;
}
#sub resource_from_item{
# my $self shift;
# my($c, $item) = @_;
# my $res = $self->SUPER::resource_from_item(@_);
# $res->{dir} = NGCP::Panel::Utils::Subscriber::get_subscriber_voicemail_directory(c => $c, subscriber => $c->stash->{checked}->{subscriber}, dir => $resource->{dir} );
# return $res;
#}
sub process_hal_resource{
my $self = shift;
my ($c, $item, $resource, $form) = @_;
$resource->{dir} = NGCP::Panel::Utils::Subscriber::get_subscriber_voicemail_type(c => $c, dir => $resource->{dir} );
return $resource;
}
1;
# vim: set tabstop=4 expandtab:

@ -1528,7 +1528,22 @@ sub mark_voicemail_read{
$voicemail->update({ dir => $dir });
return;
}
sub get_subscriber_voicemail_directory{
my (%params) = @_;
my $c = $params{c};
my $subscriber = $params{subscriber};
my $dir = $params{dir};
return "/var/spool/asterisk/voicemail/default/".$subscriber->uuid."/$dir";
}
sub get_subscriber_voicemail_type{
my (%params) = @_;
my $c = $params{c};
my $dir = $params{dir};
$dir =~s/.*?\/([^\/]+)$/$1/gis;
return $dir;
}
sub number_as_string{
my ($number_row, %params) = @_;
return 'HASH' eq ref $number_row

Loading…
Cancel
Save