diff --git a/lib/NGCP/Panel/Form/Preferences.pm b/lib/NGCP/Panel/Form/Preferences.pm index 5b3b587a56..1019703db5 100644 --- a/lib/NGCP/Panel/Form/Preferences.pm +++ b/lib/NGCP/Panel/Form/Preferences.pm @@ -1,4 +1,5 @@ package NGCP::Panel::Form::Preferences; + use Sipwise::Base; use HTML::FormHandler::Moose; extends 'HTML::FormHandler'; @@ -25,12 +26,12 @@ sub field_list { my $self = shift; return [] unless $self->ctx; - my $is_subscriber = ($self->ctx->user->roles eq 'subscriber' || + my $is_subscriber = ($self->ctx->user->roles eq 'subscriber' || $self->ctx->user->roles eq 'subscriberadmin'); - + my @field_list; my $fields_data = $self->fields_data; - + foreach my $row (@$fields_data) { my $meta = $row->{meta}; my $enums = $row->{enums}; @@ -89,9 +90,9 @@ sub field_list { }; } elsif($meta->data_type eq "enum") { my @options = map {{label => $_->label, value => $_->value}} @{ $enums }; - $field = { - name => $meta->attribute, - type => 'Select', + $field = { + name => $meta->attribute, + type => 'Select', options => \@options, }; } elsif($meta->data_type eq "boolean") { @@ -126,10 +127,47 @@ sub field_list { $field->{label} = $is_subscriber ? $meta->label : $meta->attribute; push @field_list, $field; } - + return \@field_list; } +sub validate { + my ($self) = @_; + my $c = $self->ctx; + return unless $c; + + my $res = 1; + + my $attribute = 'codecs_list'; + if(my $field = $self->field( $attribute )){ + if( my $value = $field->value ){ + #todo: 1.Should we allow only some particular separator? + #todo: 2.Lengths of the provisioning.voip_usr_preferences.value and kamailio.usr_preferences.value =128,all available values length is 141. We can't insert all codecs. + my $enum = { map { lc( $_ ) => 1 } qw/AMR CelB CN DVI4 G722 G723 G728 G729 GSM H261 H263 H263-1998 h264 + JPEG L16 MP2T MPA MPV nv opus PCMA PCMU QCELP speex telephone-event vp8 vp9/ }; + my @codecs = split(/,/, $value); + my %codecs_dup; + foreach my $codec( @codecs){ + $codec = lc($codec); + if( !exists $enum->{$codec} ){ + my $err_msg = 'Value should be a comma separated list of the valid codecs.'; + $field->add_error($err_msg); + $res = 0; + last; + } + if($codecs_dup{$codec}){ + my $err_msg = 'Value should not contain duplicates.'; + $field->add_error($err_msg); + $res = 0; + last; + } + $codecs_dup{$codec} = 1; + } + } + } + return $res; +} + has_field 'save' => ( type => 'Submit', value => 'Save', @@ -154,7 +192,7 @@ has_block 'actions' => ( sub create_structure { my $self = shift; my $field_list = shift; - + $self->block('fields')->render_list($field_list); }