MT#8547 - replaced experimental "smartmatch" code with the sane if/else custom SWITCH blocks

changes/94/294/1
Kirill Solomko 11 years ago
parent f2a00bad78
commit c1c72dd6c7

@ -5,24 +5,20 @@ extends 'Catalyst::Authentication::Store::DBIx::Class::User';
sub roles {
my ($self) = @_;
given($self->auth_realm) {
when([qw/admin api_admin_cert api_admin_http/]) {
if($self->_user->is_superuser) {
return "admin";
} else {
return "reseller";
if ($self->auth_realm) {
for my $auth_type (qw/admin api_admin_cert api_admin_http/) {
if ($auth_type eq $self->auth_realm) {
$self->_user->is_superuser ? return "admin"
: return "reseller";
}
}
when([qw/subscriber api_subscriber/]) {
if($self->_user->admin) {
return "subscriberadmin";
} else {
return "subscriber";
foreach my $auth_type (qw/subscriber api_subscriber/) {
if ($auth_type eq $self->auth_realm) {
$self->_user->admin ? return "subscriberadmin"
: return "subscriber";
}
}
default {
return "invalid";
}
}
return "invalid";
}
# vim: set tabstop=4 expandtab:

@ -196,54 +196,39 @@ sub invalid_user : Private {
sub field_to_json : Private {
my ($self, $name) = @_;
given($name) {
when(/Float|Integer|Money|PosInteger|Minute|Hour|MonthDay|Year/) {
SWITCH: for ($name) {
/Float|Integer|Money|PosInteger|Minute|Hour|MonthDay|Year/ &&
return "Number";
}
when(/Boolean/) {
/Boolean/ &&
return "Boolean";
}
when(/Repeatable/) {
/Repeatable/ &&
return "Array";
}
when(/\+NGCP::Panel::Field::Regex/) {
return "String";
}
when(/\+NGCP::Panel::Field::Country/) {
/\+NGCP::Panel::Field::Regex/ &&
return "String";
/\+NGCP::Panel::Field::Country/ &&
return "String";
/\+NGCP::Panel::Field::EmailList/ &&
return "String";
/\+NGCP::Panel::Field::Identifier/ &&
return "String";
}
when(/\+NGCP::Panel::Field::EmailList/) {
return "String";
}
when(/\+NGCP::Panel::Field::Identifier/) {
return "String";
}
when(/\+NGCP::Panel::Field::SubscriberStatusSelect/) {
/\+NGCP::Panel::Field::SubscriberStatusSelect/ &&
return "String";
}
when(/\+NGCP::Panel::Field::SubscriberLockSelect/) {
/\+NGCP::Panel::Field::SubscriberLockSelect/ &&
return "Number";
}
when(/\+NGCP::Panel::Field::E164/) {
/\+NGCP::Panel::Field::E164/ &&
return "Object";
}
when(/Compound/) {
/Compound/ &&
return "Object";
}
when(/\+NGCP::Panel::Field::AliasNumber/) {
/\+NGCP::Panel::Field::AliasNumber/ &&
return "Array";
}
when(/\+NGCP::Panel::Field::PbxGroupAPI/) {
/\+NGCP::Panel::Field::PbxGroupAPI/ &&
return "Array";
}
# usually {xxx}{id}
when(/\+NGCP::Panel::Field::/) {
/\+NGCP::Panel::Field::/ &&
return "Number";
}
default {
return "String";
}
}
# default
return "String";
} # SWITCH
}
sub get_collection_properties {

@ -576,8 +576,8 @@ sub handles_edit :Chained('handles_base') :PathPart('edit') {
my $target_codec = 'WAV';
# clear audio caches
given($file_result->handle->group->name) {
when([qw/calling_card/]) {
SWITCH: for ($file_result->handle->group->name) {
/^calling_card$/ && do {
try {
NGCP::Panel::Utils::Sems::clear_audio_cache($c, "appserver", $file_result->set_id, $file_result->handle->name);
} catch ($e) {
@ -588,8 +588,9 @@ sub handles_edit :Chained('handles_base') :PathPart('edit') {
);
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{handles_base_uri});
}
}
when([qw/pbx music_on_hold/]) {
last SWITCH;
};
/^(pbx|music_on_hold)$/ && do {
my $service;
try {
if(!$file_result->set->contract_id) {
@ -607,8 +608,10 @@ sub handles_edit :Chained('handles_base') :PathPart('edit') {
);
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{handles_base_uri});
}
}
}
last SWITCH;
};
# default
} # SWITCH
if ($file_result->handle->name eq 'music_on_hold' && !$file_result->set->contract_id) {
$target_codec = 'PCMA';

@ -882,21 +882,32 @@ sub preferences_callforward :Chained('base') :PathPart('preferences/callforward'
if(($c->user->roles eq "admin" || $c->user->roles eq "reseller") && $c->user->read_only);
my $cf_desc;
given($cf_type) {
when("cfu") { $cf_desc = $c->loc('Call Forward Unconditional') }
when("cfb") { $cf_desc = $c->loc('Call Forward Busy') }
when("cft") { $cf_desc = $c->loc('Call Forward Timeout') }
when("cfna") { $cf_desc = $c->loc('Call Forward Unavailable') }
default {
NGCP::Panel::Utils::Message->error(
c => $c,
log => "Invalid call-forward type '$cf_type'",
desc => $c->loc('Invalid Call Forward type.'),
);
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]));
}
}
SWITCH: for ($cf_type) {
/^cfu$/ && do {
$cf_desc = $c->loc('Call Forward Unconditional');
last SWITCH;
};
/^cfb$/ && do {
$cf_desc = $c->loc('Call Forward Busy');
last SWITCH;
};
/^cft$/ && do {
$cf_desc = $c->loc('Call Forward Timeout');
last SWITCH;
};
/^cfna$/ && do {
$cf_desc = $c->loc('Call Forward Unavailable');
last SWITCH;
};
# default
NGCP::Panel::Utils::Message->error(
c => $c,
log => "Invalid call-forward type '$cf_type'",
desc => $c->loc('Invalid Call Forward type.'),
);
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]));
} # SWITCH
my $posted = ($c->request->method eq 'POST');
@ -1127,21 +1138,32 @@ sub preferences_callforward_advanced :Chained('base') :PathPart('preferences/cal
}
my $cf_desc;
given($cf_type) {
when("cfu") { $cf_desc = $c->loc('Call Forward Unconditional') }
when("cfb") { $cf_desc = $c->loc('Call Forward Busy') }
when("cft") { $cf_desc = $c->loc('Call Forward Timeout') }
when("cfna") { $cf_desc = $c->loc('Call Forward Unavailable') }
default {
NGCP::Panel::Utils::Message->error(
c => $c,
log => "Invalid call-forward type '$cf_type'",
desc => $c->loc('Invalid Call Forward type.'),
);
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]));
}
}
SWITCH: for ($cf_type) {
/^cfu$/ && do {
$cf_desc = $c->loc('Call Forward Unconditional');
last SWITCH;
};
/^cfb$/ && do {
$cf_desc = $c->loc('Call Forward Busy');
last SWITCH;
};
/^cft$/ && do {
$cf_desc = $c->loc('Call Forward Timeout');
last SWITCH;
};
/^cfna$/ && do {
$cf_desc = $c->loc('Call Forward Unavailable');
last SWITCH;
};
# default
NGCP::Panel::Utils::Message->error(
c => $c,
log => "Invalid call-forward type '$cf_type'",
desc => $c->loc('Invalid Call Forward type.'),
);
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]));
} # SWITCH
my $prov_subscriber = $c->stash->{subscriber}->provisioning_voip_subscriber;
my $cf_mapping = $prov_subscriber->voip_cf_mappings->search_rs({ type => $cf_type });
@ -2656,8 +2678,8 @@ sub edit_voicebox :Chained('base') :PathPart('preferences/voicebox/edit') :Args(
my $params;
try {
given($attribute) {
when('pin') {
SWITCH: for ($attribute) {
/^pin$/ && do {
$form = NGCP::Panel::Form::Voicemail::Pin->new;
$params = { 'pin' => $vm_user->password };
$form->process(params => $posted ? $c->req->params : $params);
@ -2667,8 +2689,9 @@ sub edit_voicebox :Chained('base') :PathPart('preferences/voicebox/edit') :Args(
if($posted && $form->validated) {
$vm_user->update({ password => $form->field('pin')->value });
}
}
when('email') {
last SWITCH;
};
/^email$/ && do {
$form = NGCP::Panel::Form::Voicemail::Email->new;
$params = { 'email' => $vm_user->email };
$form->process(params => $posted ? $c->req->params : $params);
@ -2678,8 +2701,9 @@ sub edit_voicebox :Chained('base') :PathPart('preferences/voicebox/edit') :Args(
if($posted && $form->validated) {
$vm_user->update({ email => $form->field('email')->value });
}
}
when('attach') {
last SWITCH;
};
/^attach$/ && do {
$form = NGCP::Panel::Form::Voicemail::Attach->new;
$params = { 'attach' => $vm_user->attach eq 'yes' ? 1 : 0 };
$form->process(params => $posted ? $c->req->params : $params);
@ -2689,8 +2713,9 @@ sub edit_voicebox :Chained('base') :PathPart('preferences/voicebox/edit') :Args(
if($posted && $form->validated) {
$vm_user->update({ attach => $form->field('attach')->value ? 'yes' : 'no' });
}
}
when('delete') {
last SWITCH;
};
/^delete$/ && do {
$form = NGCP::Panel::Form::Voicemail::Delete->new;
$params = { 'delete' => $vm_user->get_column('delete') eq 'yes' ? 1 : 0 };
$form->process(params => $posted ? $c->req->params : $params);
@ -2704,18 +2729,18 @@ sub edit_voicebox :Chained('base') :PathPart('preferences/voicebox/edit') :Args(
'attach' => $form->field('delete')->value ? 'yes' : $vm_user->attach,
});
}
}
default {
NGCP::Panel::Utils::Message->error(
c => $c,
log => "trying to set invalid voicemail param '$attribute' for subscriber uuid ".$c->stash->{subscriber}->uuid,
desc => $c->loc('Invalid voicemail setting'),
);
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]), 1);
return;
}
}
last SWITCH;
};
# default
NGCP::Panel::Utils::Message->error(
c => $c,
log => "trying to set invalid voicemail param '$attribute' for subscriber uuid ".$c->stash->{subscriber}->uuid,
desc => $c->loc('Invalid voicemail setting'),
);
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]), 1);
return;
} # SWITCH
if($posted && $form->validated) {
NGCP::Panel::Utils::Message->info(
c => $c,
@ -2762,8 +2787,8 @@ sub edit_fax :Chained('base') :PathPart('preferences/fax/edit') :Args(1) {
}
try {
given($attribute) {
when('name') {
SWITCH: for ($attribute) {
/^name$/ && do {
$form = NGCP::Panel::Form::Faxserver::Name->new;
$params = { 'name' => $faxpref->name };
$form->process(params => $posted ? $c->req->params : $params);
@ -2773,8 +2798,9 @@ sub edit_fax :Chained('base') :PathPart('preferences/fax/edit') :Args(1) {
if($posted && $form->validated) {
$faxpref->update({ name => $form->field('name')->value });
}
}
when('password') {
last SWITCH;
};
/^password$/ && do {
$form = NGCP::Panel::Form::Faxserver::Password->new(ctx => $c);
$params = { 'password' => $faxpref->password };
$form->process(params => $posted ? $c->req->params : $params);
@ -2784,8 +2810,9 @@ sub edit_fax :Chained('base') :PathPart('preferences/fax/edit') :Args(1) {
if($posted && $form->validated) {
$faxpref->update({ password => $form->field('password')->value });
}
}
when('active') {
last SWITCH;
};
/^active$/ && do {
$form = NGCP::Panel::Form::Faxserver::Active->new;
$params = { 'active' => $faxpref->active };
$form->process(params => $posted ? $c->req->params : $params);
@ -2795,8 +2822,9 @@ sub edit_fax :Chained('base') :PathPart('preferences/fax/edit') :Args(1) {
if($posted && $form->validated) {
$faxpref->update({ active => $form->field('active')->value });
}
}
when('send_status') {
last SWITCH;
};
/^send_status$/ && do {
$form = NGCP::Panel::Form::Faxserver::SendStatus->new;
$params = { 'send_status' => $faxpref->send_status };
$form->process(params => $posted ? $c->req->params : $params);
@ -2806,8 +2834,9 @@ sub edit_fax :Chained('base') :PathPart('preferences/fax/edit') :Args(1) {
if($posted && $form->validated) {
$faxpref->update({ send_status => $form->field('send_status')->value });
}
}
when('send_copy') {
last SWITCH;
};
/^send_copy$/ && do {
$form = NGCP::Panel::Form::Faxserver::SendCopy->new;
$params = { 'send_copy' => $faxpref->send_copy };
$form->process(params => $posted ? $c->req->params : $params);
@ -2817,8 +2846,9 @@ sub edit_fax :Chained('base') :PathPart('preferences/fax/edit') :Args(1) {
if($posted && $form->validated) {
$faxpref->update({ send_copy => $form->field('send_copy')->value });
}
}
when('destinations') {
last SWITCH;
};
/^destinations$/ && do {
$form = NGCP::Panel::Form::Faxserver::Destination->new;
unless($posted) {
my @dests = ();
@ -2853,18 +2883,18 @@ sub edit_fax :Chained('base') :PathPart('preferences/fax/edit') :Args(1) {
});
}
}
}
default {
NGCP::Panel::Utils::Message->error(
c => $c,
log => "trying to set invalid fax param '$attribute' for subscriber uuid ".$c->stash->{subscriber}->uuid,
desc => $c->loc('Invalid fax setting.'),
);
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]), 1);
return;
}
}
last SWITCH;
};
# default
NGCP::Panel::Utils::Message->error(
c => $c,
log => "trying to set invalid fax param '$attribute' for subscriber uuid ".$c->stash->{subscriber}->uuid,
desc => $c->loc('Invalid fax setting.'),
);
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]), 1);
return;
} # SWITCH
if($posted && $form->validated) {
NGCP::Panel::Utils::Message->info(
c => $c,

@ -110,7 +110,6 @@ sub validate {
my $self = shift;
my $s = $self->field('match_pattern')->value // "";
my $r = $self->field('replace_pattern')->value // "";
my $_ = "";
my $re = "s/$s/$r/";
eval { use warnings FATAL => qw(all); m/$re/; };

@ -75,11 +75,18 @@ sub hal_from_item {
if(exists $plain->{$pref->attribute->data_type}) {
# plain key/value pairs
my $value;
given($pref->attribute->data_type) {
when("int") { $value = int($pref->value) }
when("boolean") { $value = JSON::Types::bool($pref->value) }
default { $value = $pref->value }
}
SWITCH: for ($pref->attribute->data_type) {
/^int$/ && do {
$value = int($pref->value);
last SWITCH;
};
/^boolean$/ && do {
$value = JSON::Types::bool($pref->value);
last SWITCH;
};
# default
$value = $pref->value;
} # SWITCH
if($pref->attribute->max_occur != 1) {
$resource{preferences}{$pref->attribute->attribute} = $value;
} else {
@ -90,11 +97,18 @@ sub hal_from_item {
} else {
# enum mappings
my $value;
given($pref->attribute->data_type) {
when("int") { $value = int($pref->value) }
when("boolean") { $value = JSON::Types::bool($pref->value) }
default { $value = $pref->value }
}
SWITCH: for ($pref->attribute->data_type) {
/^int$/ && do {
$value = int($pref->value);
last SWITCH;
};
/^boolean$/ && do {
$value = JSON::Types::bool($pref->value);
last SWITCH;
};
# default
$value = $pref->value;
} # SWITCH
$resource{preferences}{$pref->attribute->attribute} = $value;
}
}

@ -71,8 +71,8 @@ sub get_resource {
foreach my $pref($prefs->all) {
my $value;
given($pref->attribute->attribute) {
when(/^rewrite_calle[re]_(in|out)_dpid$/) {
SWITCH: for ($pref->attribute->attribute) {
/^rewrite_calle[re]_(in|out)_dpid$/ && do {
next if(exists $resource->{rewrite_rule_set});
my $col = $pref->attribute->attribute;
$col =~ s/^rewrite_//;
@ -87,9 +87,9 @@ sub get_resource {
}
next;
# TODO: HAL link to rewrite rule set? Also/instead set id?
}
when(/^(adm_)?ncos_id$/) {
last SWITCH;
};
/^(adm_)?ncos_id$/ && do {
my $pref_name = $pref->attribute->attribute;
$pref_name =~ s/_id$//;
my $ncos = $c->model('DB')->resultset('ncos_levels')->find({
@ -103,9 +103,9 @@ sub get_resource {
}
next;
# TODO: HAL link to rewrite rule set? Also/instead set id?
}
when(/^(contract_)?sound_set$/) {
last SWITCH;
};
/^(contract_)?sound_set$/ && do {
# TODO: not applicable for domains, but for subs, check for contract_id!
my $set = $c->model('DB')->resultset('voip_sound_sets')->find({
id => $pref->value,
@ -118,9 +118,9 @@ sub get_resource {
}
next;
# TODO: HAL link to rewrite rule set? Also/instead set id?
}
when(/^(man_)?allowed_ips_grp$/) {
last SWITCH;
};
/^(man_)?allowed_ips_grp$/ && do {
my $pref_name = $pref->attribute->attribute;
$pref_name =~ s/_grp$//;
my $sets = $c->model('DB')->resultset('voip_allowed_ip_groups')->search({
@ -134,22 +134,28 @@ sub get_resource {
push @{ $resource->{$pref_name} }, $set->ipnet;
}
next;
last SWITCH;
};
# default
if($pref->attribute->internal != 0) {
next;
}
default {
if($pref->attribute->internal != 0) {
next;
} # SWITCH
SWITCH: for ($pref->attribute->data_type) {
/^int$/ && do {
$value = int($pref->value) if($pref->value->is_int);
last SWITCH;
};
/^boolean$/ && do {
if (defined $pref->value) {
$value = ($pref->value ? JSON::true : JSON::false);
}
}
}
given($pref->attribute->data_type) {
when("int") { $value = int($pref->value) if($pref->value->is_int) }
when("boolean") { $value = ($pref->value ? JSON::true : JSON::false) if(defined $pref->value) }
default { $value = $pref->value }
}
last SWITCH;
};
# default
$value = $pref->value;
} # SWITCH
if($pref->attribute->max_occur != 1) {
$resource->{$pref->attribute->attribute} = []
unless(exists $resource->{$pref->attribute->attribute});
@ -354,10 +360,9 @@ sub update_item {
# in case of PATCH, we remove only those entries marked for removal in the patch
try {
foreach my $k(keys %{ $old_resource }) {
given($k) {
SWITCH: for ($k) {
# no special treatment for *_sound_set deletion, as id is stored in right name
when(/^rewrite_rule_set$/) {
/^rewrite_rule_set$/ && do {
unless(exists $resource->{$k}) {
foreach my $p(qw/caller_in_dpid callee_in_dpid caller_out_dpid callee_out_dpid/) {
my $rs = $self->get_preference_rs($c, $type, $elem, 'rewrite_' . $p);
@ -365,15 +370,17 @@ sub update_item {
$rs->delete;
}
}
}
when(/^(adm_)?ncos$/) {
last SWITCH;
};
/^(adm_)?ncos$/ && do {
unless(exists $resource->{$k}) {
my $rs = $self->get_preference_rs($c, $type, $elem, $k . '_id');
next unless $rs; # unknown resource, just ignore
$rs->delete;
}
}
when(/^(man_)?allowed_ips$/) {
last SWITCH;
};
/^(man_)?allowed_ips$/ && do {
unless(exists $resource->{$k}) {
my $rs = $self->get_preference_rs($c, $type, $elem, $k . '_grp');
next unless $rs; # unknown resource, just ignore
@ -384,16 +391,16 @@ sub update_item {
}
$rs->delete;
}
}
default {
unless(exists $resource->{$k}) {
my $rs = $self->get_preference_rs($c, $type, $elem, $k);
next unless $rs; # unknown resource, just ignore
$rs->delete;
if ($type eq "subscribers" && ($k eq 'voicemail_echo_number' || $k eq 'cli')) {
NGCP::Panel::Utils::Subscriber::update_voicemail_number(
schema => $c->model('DB'), subscriber => $item);
}
last SWITCH;
};
# default
unless(exists $resource->{$k}) {
my $rs = $self->get_preference_rs($c, $type, $elem, $k);
next unless $rs; # unknown resource, just ignore
$rs->delete;
if ($type eq "subscribers" && ($k eq 'voicemail_echo_number' || $k eq 'cli')) {
NGCP::Panel::Utils::Subscriber::update_voicemail_number(
schema => $c->model('DB'), subscriber => $item);
}
}
}
@ -441,20 +448,17 @@ sub update_item {
return;
}
given($pref) {
when(/^rewrite_rule_set$/) {
SWITCH: for ($pref) {
/^rewrite_rule_set$/ && do {
my $rwr_set = $c->model('DB')->resultset('voip_rewrite_rule_sets')->find({
name => $resource->{$pref},
reseller_id => $reseller_id,
});
unless($rwr_set) {
$c->log->error("no rewrite rule set '".$resource->{$pref}."' for reseller id $reseller_id found");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Unknown rewrite_rule_set '".$resource->{$pref}."'");
return;
}
foreach my $k(qw/caller_in_dpid callee_in_dpid caller_out_dpid callee_out_dpid/) {
my $rs = $self->get_preference_rs($c, $type, $elem, 'rewrite_'.$k);
if($rs->first) {
@ -463,9 +467,9 @@ sub update_item {
$rs->create({ value => $rwr_set->$k });
}
}
}
when(/^(adm_)?ncos$/) {
last SWITCH;
};
/^(adm_)?ncos$/ && do {
my $pref_name = $pref . "_id";
my $ncos = $c->model('DB')->resultset('ncos_levels')->find({
level => $resource->{$pref},
@ -482,9 +486,9 @@ sub update_item {
} else {
$rs->create({ value => $ncos->id });
}
}
when(/^(contract_)?sound_set$/) {
last SWITCH;
};
/^(contract_)?sound_set$/ && do {
# TODO: not applicable for domains, but for subs, check for contract_id!
my $set = $c->model('DB')->resultset('voip_sound_sets')->find({
name => $resource->{$pref},
@ -501,9 +505,9 @@ sub update_item {
} else {
$rs->create({ value => $set->id });
}
}
when(/^(man_)?allowed_ips$/) {
last SWITCH;
};
/^(man_)?allowed_ips$/ && do {
my $pref_name = $pref . "_grp";
my $aig_rs;
my $seq;
@ -528,7 +532,6 @@ sub update_item {
group_id => $seq
});
}
foreach my $ip(@{ $resource->{$pref} }) {
unless($self->validate_ipnet($c, $pref, $ip)) {
$c->log->error("invalid $pref entry '$ip'");
@ -536,31 +539,28 @@ sub update_item {
}
$aig_rs->create({ ipnet => $ip });
}
unless($rs->first) {
$rs->create({ value => $seq });
}
}
default {
if($meta->max_occur != 1) {
$rs->delete;
foreach my $v(@{ $resource->{$pref} }) {
return unless $self->check_pref_value($c, $meta, $v, $pref_type);
$rs->create({ value => $v });
}
} elsif($rs->first) {
return unless $self->check_pref_value($c, $meta, $resource->{$pref}, $pref_type);
$resource->{$pref} = (!! $resource->{$pref}) if JSON::is_bool($resource->{$pref});
$rs->first->update({ value => $resource->{$pref} });
} else {
return unless $self->check_pref_value($c, $meta, $resource->{$pref}, $pref_type);
$resource->{$pref} = (!! $resource->{$pref}) if JSON::is_bool($resource->{$pref});
$rs->create({ value => $resource->{$pref} });
last SWITCH;
};
# default
if($meta->max_occur != 1) {
$rs->delete;
foreach my $v(@{ $resource->{$pref} }) {
return unless $self->check_pref_value($c, $meta, $v, $pref_type);
$rs->create({ value => $v });
}
} elsif($rs->first) {
return unless $self->check_pref_value($c, $meta, $resource->{$pref}, $pref_type);
$resource->{$pref} = (!! $resource->{$pref}) if JSON::is_bool($resource->{$pref});
$rs->first->update({ value => $resource->{$pref} });
} else {
return unless $self->check_pref_value($c, $meta, $resource->{$pref}, $pref_type);
$resource->{$pref} = (!! $resource->{$pref}) if JSON::is_bool($resource->{$pref});
$rs->create({ value => $resource->{$pref} });
}
}
} # SWITCH
if ($type eq "subscribers" && ($pref eq 'voicemail_echo_number' || $pref eq 'cli')) {
NGCP::Panel::Utils::Subscriber::update_voicemail_number(
schema => $c->model('DB'), subscriber => $item);
@ -589,10 +589,17 @@ sub check_pref_value {
return;
}
given($meta->data_type) {
when("int") { $err = 1 unless $value->is_int }
when("boolean") { $err = 1 unless JSON::is_bool($value) }
}
SWITCH: for ($meta->data_type) {
/^int$/ && do {
$err = 1 unless $value->is_int;
last SWITCH;
};
/^boolean$/ && do {
$err = 1 unless JSON::is_bool($value);
last SWITCH;
};
# default
} # SWITCH
if($err) {
$c->log->error("preference '".$meta->attribute."' has invalid value data type, expected '".$meta->data_type."'");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Invalid data type for element in preference '".$meta->attribute."', expected '".$meta->data_type."'");

@ -175,15 +175,18 @@ sub update_item {
}
$resource->{handle_id} = $handle->id;
given($handle->group->name) {
when([qw/calling_card/]) {
SWITCH: for ($handle->group->name) {
/^calling_card$/ && do {
NGCP::Panel::Utils::Sems::clear_audio_cache($c, "appserver", $set->id, $handle->name);
}
when([qw/pbx music_on_hold/]) {
last SWITCH;
};
/^(pbx|music_on_hold)$/ && do {
my $service = $set->contract_id ? "pbx" : "appserver";
NGCP::Panel::Utils::Sems::clear_audio_cache($c, $service, $set->id, $handle->name);
}
}
last SWITCH;
};
# default
} # SWITCH
if($resource->{handle} eq 'music_on_hold' && !$set->contract_id) {
$resource->{codec} = 'PCMA';

@ -129,38 +129,37 @@ method error ($self: Catalyst :$c, Str :$desc, :$log?, :$error?, :$type = 'panel
$log_msg and $log_msg = "LOG=$log_msg";
}
given (1) {
when (not defined $error)
{
$msg = $desc;
}
when (my ($host) = $error =~ /problem connecting to (\S+, port [0-9]+)/ )
{
$log_msg = "$desc ($error)";
$usr_text = "$desc (A service could not be reached, $host)";
}
when (ref($error) eq "ARRAY" && @$error >= 2 && $error->[1] eq "showdetails" )
{
$msg = "$desc (@$error[0])";
$usr_text = "$desc (@$error[0])";
}
when (not $error->isa('DBIx::Class::Exception') )
{
$msg = "$desc ($error)";
$usr_text = $desc;
}
when (my ($dup) = $error =~ /(Duplicate entry \S*)/ )
{
$msg = "$desc ($error)";
$usr_text = "$desc ($dup)";
}
when (my ($excerpt) = $error =~ /(Column \S+ cannot be null)/ ) {
$msg = "$desc ($error)";
$usr_text = "$desc ($excerpt)";
}
default {
$msg = "$desc ($error)";
}
if (not defined $error) {
$msg = $desc;
}
elsif (my ($host) = $error =~ /problem connecting to (\S+, port [0-9]+)/)
{
$log_msg = "$desc ($error)";
$usr_text = "$desc (A service could not be reached, $host)";
}
elsif (ref($error) eq "ARRAY" && @$error >= 2 && $error->[1] eq "showdetails")
{
$msg = "$desc (@$error[0])";
$usr_text = "$desc (@$error[0])";
}
elsif (not $error->isa('DBIx::Class::Exception'))
{
$msg = "$desc ($error)";
$usr_text = $desc;
}
elsif (my ($dup) = $error =~ /(Duplicate entry \S*)/)
{
$msg = "$desc ($error)";
$usr_text = "$desc ($dup)";
}
elsif (my ($excerpt) = $error =~ /(Column \S+ cannot be null)/)
{
$msg = "$desc ($error)";
$usr_text = "$desc ($excerpt)";
}
else
{
$msg = "$desc ($error)";
}
my $rc = $c->log->error(

@ -15,11 +15,12 @@ sub transcode_file {
## quite snappy, but breaks SOAP (sigpipe's) and the catalyst devel server
## need instead to redirect like below
given ($target_codec) {
when ('PCMA') {
SWITCH: for ($target_codec) {
/^PCMA$/ && do {
@conv_args = ($tmpfile, qw/--type raw --bits 8 --channels 1 -e a-law - rate 8k/);
}
when ('WAV') {
last SWITCH;
};
/^WAV$/ && do {
if ($source_codec eq 'PCMA') {
# this can actually only come from inside
# certain files will be stored as PCMA (for handles with name "music_on_hold")
@ -28,8 +29,10 @@ sub transcode_file {
else {
@conv_args = ($tmpfile, qw/--type wav --bits 16 - rate 8k/);
}
}
}
last SWITCH;
};
# default
} # SWITCH
$out = capturex([0], "/usr/bin/sox", @conv_args);

@ -35,18 +35,21 @@ sub period_as_string {
foreach my $type(qw/year month mday wday hour minute/) {
my $s = $set->{$type};
if(defined $s) {
given($type) {
when(/^month$/) {
SWITCH: for ($type) {
/^month$/ && do {
my ($from, $to) = split /\-/, $s;
$s = $months[$from];
$s .= '-'.$months[$to] if defined($to);
}
when(/^wday$/) {
last SWITCH;
};
/^wday$/ && do {
my ($from, $to) = split /\-/, $s;
$s = $wdays[$from];
$s .= '-'.$wdays[$to] if defined($to);
}
}
last SWITCH;
};
# default
} # SWITCH
}
$string .= "$type { $s } " if defined($s);
}

Loading…
Cancel
Save