TT#19855 align writing the 'lock' pref value

Change-Id: Ibd03f3624fe31d670df14a38cf18d1f75fe9040f
changes/06/14706/5
Rene Krenn 9 years ago
parent 0c573e4184
commit fc70bcd3ba

@ -641,8 +641,12 @@ sub update_item {
}; };
} }
my %nullable = (
lock => 1,
);
foreach my $pref(keys %{ $resource }) { foreach my $pref(keys %{ $resource }) {
next unless(defined $resource->{$pref}); next if (not defined $resource->{$pref} and not $nullable{$pref});
my $pref_rs = $self->get_preference_rs($c, $type, $elem, $pref); my $pref_rs = $self->get_preference_rs($c, $type, $elem, $pref);
unless($pref_rs) { unless($pref_rs) {
$c->log->debug("removing unknown preference '$pref' from update"); $c->log->debug("removing unknown preference '$pref' from update");
@ -667,14 +671,14 @@ sub update_item {
my $maxlen = 128; my $maxlen = 128;
if($vtype eq "") { if($vtype eq "") {
if(length($resource->{$pref}) > $maxlen) { if(defined $resource->{$pref} and length($resource->{$pref}) > $maxlen) {
$c->log->error("preference '$pref' exceeds maximum length of $maxlen characters"); $c->log->error("preference '$pref' exceeds maximum length of $maxlen characters");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Preference '$pref' exceeds maximum length of $maxlen characters"); $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Preference '$pref' exceeds maximum length of $maxlen characters");
return; return;
} }
} elsif($vtype eq "ARRAY") { } elsif($vtype eq "ARRAY") {
foreach my $a(@{ $resource->{$pref} }) { foreach my $a(@{ $resource->{$pref} }) {
if(length($a) > $maxlen) { if(defined $a and length($a) > $maxlen) {
$c->log->error("element in preference '$pref' exceeds maximum length of $maxlen characters"); $c->log->error("element in preference '$pref' exceeds maximum length of $maxlen characters");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Element in preference '$pref' exceeds maximum length of $maxlen characters"); $self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Element in preference '$pref' exceeds maximum length of $maxlen characters");
return; return;
@ -810,6 +814,16 @@ sub update_item {
# in contrast to panel, it does not drop the allowed_ips_grp pref, if empty ipnets. # in contrast to panel, it does not drop the allowed_ips_grp pref, if empty ipnets.
last SWITCH; last SWITCH;
}; };
/^lock$/ && do {
my $v = $resource->{$pref};
return unless $self->check_pref_value($c, $meta, $v, $pref_type);
NGCP::Panel::Utils::Subscriber::lock_provisoning_voip_subscriber(
c => $c,
prov_subscriber => $elem,
level => $v, # || 0
);
last SWITCH;
};
# default # default
if($meta->max_occur != 1) { if($meta->max_occur != 1) {
$pref_rs->delete; $pref_rs->delete;

@ -724,6 +724,32 @@ sub create_preference_form {
} }
$c->response->redirect($base_uri); $c->response->redirect($base_uri);
return 1; return 1;
} elsif ($attribute eq "lock") {
my $v = $form->field($attribute)->value;
undef $v if (defined $v && $v eq '');
try {
NGCP::Panel::Utils::Subscriber::lock_provisoning_voip_subscriber(
c => $c,
prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber,
level => $v,
);
NGCP::Panel::Utils::Message::info(
c => $c,
data => \%log_data,
desc => $c->loc('Preference [_1] successfully updated', $attribute),
);
} catch($e) {
NGCP::Panel::Utils::Message::error(
c => $c,
error => $e,
data => \%log_data,
desc => $c->loc('Failed to update preference [_1]', $attribute),
);
$c->response->redirect($base_uri);
return 1;
}
$c->response->redirect($base_uri);
return 1;
} else { } else {
if( ($c->stash->{preference_meta}->data_type ne 'enum' && if( ($c->stash->{preference_meta}->data_type ne 'enum' &&
(!defined $form->field($attribute)->value || $form->field($attribute)->value eq '')) || (!defined $form->field($attribute)->value || $form->field($attribute)->value eq '')) ||
@ -1117,12 +1143,12 @@ sub set_provisoning_voip_subscriber_first_int_attr_value {
); );
try { try {
if($rs->first) { if($rs->first) {
if($new_value == 0) { if(($new_value // 0) == 0) {
$rs->first->delete; $rs->first->delete;
} else { } else {
$rs->first->update({ value => $new_value }); $rs->first->update({ value => $new_value });
} }
} elsif($new_value > 0) { } elsif(($new_value // 0) > 0) {
$rs->create({ value => $new_value }); $rs->create({ value => $new_value });
} # nothing to do for level 0, if no lock is set yet } # nothing to do for level 0, if no lock is set yet
} catch($e) { } catch($e) {

@ -108,6 +108,14 @@ sub destination_as_string {
sub lock_provisoning_voip_subscriber { sub lock_provisoning_voip_subscriber {
my %params = @_; my %params = @_;
if ($params{c} and $params{prov_subscriber}) {
if ($params{level}) {
$params{c}->log->debug('set subscriber ' . $params{prov_subscriber}->username . ' lock level: ' . $params{level});
} else {
$params{c}->log->debug('remove subscriber ' . $params{prov_subscriber}->username . ' lock level');
}
}
NGCP::Panel::Utils::Preferences::set_provisoning_voip_subscriber_first_int_attr_value(%params, NGCP::Panel::Utils::Preferences::set_provisoning_voip_subscriber_first_int_attr_value(%params,
value => $params{level}, value => $params{level},
attribute => 'lock' attribute => 'lock'

Loading…
Cancel
Save