TT#19855 align writing the 'lock' pref value

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

@ -641,8 +641,12 @@ sub update_item {
};
}
my %nullable = (
lock => 1,
);
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);
unless($pref_rs) {
$c->log->debug("removing unknown preference '$pref' from update");
@ -667,14 +671,14 @@ sub update_item {
my $maxlen = 128;
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");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Preference '$pref' exceeds maximum length of $maxlen characters");
return;
}
} elsif($vtype eq "ARRAY") {
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");
$self->error($c, HTTP_UNPROCESSABLE_ENTITY, "Element in preference '$pref' exceeds maximum length of $maxlen characters");
return;
@ -810,6 +814,16 @@ sub update_item {
# in contrast to panel, it does not drop the allowed_ips_grp pref, if empty ipnets.
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
if($meta->max_occur != 1) {
$pref_rs->delete;

@ -724,6 +724,32 @@ sub create_preference_form {
}
$c->response->redirect($base_uri);
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 {
if( ($c->stash->{preference_meta}->data_type ne 'enum' &&
(!defined $form->field($attribute)->value || $form->field($attribute)->value eq '')) ||
@ -1117,12 +1143,12 @@ sub set_provisoning_voip_subscriber_first_int_attr_value {
);
try {
if($rs->first) {
if($new_value == 0) {
if(($new_value // 0) == 0) {
$rs->first->delete;
} else {
$rs->first->update({ value => $new_value });
}
} elsif($new_value > 0) {
} elsif(($new_value // 0) > 0) {
$rs->create({ value => $new_value });
} # nothing to do for level 0, if no lock is set yet
} catch($e) {

@ -108,6 +108,14 @@ sub destination_as_string {
sub lock_provisoning_voip_subscriber {
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,
value => $params{level},
attribute => 'lock'

Loading…
Cancel
Save