diff --git a/lib/NGCP/Panel/Controller/Domain.pm b/lib/NGCP/Panel/Controller/Domain.pm index c4ca34fd6a..9c814f5992 100644 --- a/lib/NGCP/Panel/Controller/Domain.pm +++ b/lib/NGCP/Panel/Controller/Domain.pm @@ -21,7 +21,7 @@ Catalyst Controller. =cut -sub list :Chained('/') :PathPart('domain') :CaptureArgs(0) { +sub list :Chained('/') :PathPart('domain') :CaptureArgs(0) :Args(0) { my ($self, $c) = @_; $c->stash(has_edit => 0); @@ -71,7 +71,7 @@ sub search :Chained('list') :PathPart('search') Args(0) { $c->response->redirect($c->uri_for()); } -sub base :Chained('/domain/list') :PathPart('') :CaptureArgs(1) { +sub base :Chained('/domain/list') :PathPart('') :CaptureArgs(1) :Args(0) { my ($self, $c, $domain_id) = @_; unless($domain_id && $domain_id =~ /^\d+$/) { @@ -155,9 +155,9 @@ sub ajax :Chained('list') :PathPart('ajax') :Args(0) { $c->detach( $c->view("JSON") ); } -sub preferences :Chained('base') :PathPart('preferences') :CaptureArgs(0) { +sub preferences :Chained('base') :PathPart('preferences') :Args(0) { my ($self, $c) = @_; - + my @dom_prefs = $c->model('provisioning') ->resultset('voip_preferences') ->search({ dom_pref => 1, internal => 0}) @@ -191,46 +191,38 @@ sub preferences :Chained('base') :PathPart('preferences') :CaptureArgs(0) { $c->stash(template => 'domain/preferences.tt'); } -sub preferences_edit :Chained('preferences') :PathPart('edit') :Args(1) { - my ($self, $c, $pref_name) = @_; - - $c->stash(edit_preference => 1); - $c->stash(selected_preference => $pref_name); - - my $rs = $c->model('provisioning')->resultset('voip_preferences'); - my $row = $rs->find({attribute => $pref_name}); - my $pref_form = NGCP::Panel::Form::Preferences->new({ - fields_data => [$row], - #pref_rs => $rs, - }); - - $pref_form->create_structure([$pref_name]); - $c->stash(pref_form => $pref_form); -} +sub preferences_detail :Chained('base') :PathPart('preferences') :CaptureArgs(1) :Args(0) { + my ($self, $c, $pref_id) = @_; -sub preferences_show :Chained('preferences') :PathPart('') :Args(0) { - my ($self, $c) = @_; + $c->stash->{preference_meta} = $c->model('provisioning') + ->resultset('voip_preferences') + ->single({id => $pref_id}); + $c->log->debug(p $c->stash->{preference_meta}); + + # TODO this can return more than one row + $c->stash->{preference} = $c->model('provisioning') + ->resultset('voip_dom_preferences') + ->single({attribute_id => $pref_id, domain_id => $c->stash->{domain}->{id}}); + $c->log->debug(p $c->stash->{preference}); + $c->stash(template => 'domain/preferences.tt'); } -sub preference_form :Chained('base') :PathPart('preferences_form') :Args(0) { +sub preferences_edit :Chained('preferences_detail') :PathPart('edit') :Args(0) { my ($self, $c) = @_; + + $c->stash(edit_preference => 1); - unless ( defined($c->stash->{'domain_result'}) ) { - return; - } - - my $rs = $c->model('provisioning')->resultset('voip_preferences'); - my $pref_form = NGCP::Panel::Form::Preferences->new({pref_rs => $rs}); - $pref_form->readonly(1); - $pref_form->create_my_fields(); - $pref_form->process(); - try { - - } + my @enums = $c->stash->{preference_meta} + ->voip_preferences_enums + ->search({dom_pref => 1}) + ->all; + + my $pref_form = NGCP::Panel::Form::Preferences->new({ + fields_data => [{data => $c->stash->{preference_meta}, enums => \@enums}], + }); + $pref_form->create_structure([$c->stash->{preference_meta}->attribute]); $c->stash(pref_form => $pref_form); - - $c->stash(template => 'domain/preference_form.tt'); } =head1 AUTHOR diff --git a/lib/NGCP/Panel/Form/Preferences.pm b/lib/NGCP/Panel/Form/Preferences.pm index a441cb30bc..fa48949f71 100644 --- a/lib/NGCP/Panel/Form/Preferences.pm +++ b/lib/NGCP/Panel/Form/Preferences.pm @@ -8,6 +8,8 @@ use HTML::Entities qw/encode_entities/; use HTML::FormHandler::Widget::Block::Bootstrap; +use Data::Printer; + has '+widget_wrapper' => ( default => 'Bootstrap' ); sub build_render_list {[qw/myfields actions/]} sub build_form_element_class { [qw/form-horizontal/] } @@ -15,12 +17,11 @@ sub build_form_element_class { [qw/form-horizontal/] } has 'readonly' => (is => 'rw', isa => 'Int', default => 0,); + has 'fields_data' => (is => 'rw'); + has_block 'myfields' => ( tag => 'div', - #class => [qw/accordion/], - #render_list => [], - #type => 'HTML::FormHandler::Widget::Block::Bootstrap', ); sub field_list { @@ -28,60 +29,50 @@ sub field_list { my @field_list; my $fields_data = $self->fields_data; - + foreach my $row (@$fields_data) { - my $field_structure = $self->create_one_field($row); - push @field_list, @$field_structure; + my $data = $row->{data}; + my $enums = $row->{enums}; + my $field; + if($data->data_type eq "enum") { + my @options = map {{label => $_->label, value => $_->value}} @{ $enums }; + $field = { + name => $data->attribute, + type => 'Select', + options => \@options, + }; + } elsif($data->data_type eq "boolean") { + $field = { + name => $data->attribute, + type => 'Boolean', + }; + } elsif($data->data_type eq "int") { + $field = { + name => $data->attribute, + type => 'Integer', + }; + } else { # string + if($data->max_occur == 1) { + $field = { + name => $data->attribute, + type => 'Text', + }; + } else { + # TODO: needs to be a list of values with the option + # to delete old, add new + $field = { + name => $data->attribute, + type => 'Text', + }; + } + } + push @field_list, $field; } return \@field_list; } -sub create_my_fields { - my $self = shift; - - my @field_list = (); - - #TODO: will not work anymore - foreach my $preference ($self->pref_rs->all) { - $self->create_one_field($preference); - push @field_list, $preference->attribute; - } - - $self->create_structure(\@field_list); -} - -sub create_structure { - my $self = shift; - my $field_list = shift; - - $self->block('myfields')->render_list($field_list); -} - -sub create_one_field { - my $self = shift; - my $preference = shift; - - my $field_type; - if($preference->data_type eq "string") { - $field_type = "Text"; - } elsif ($preference->data_type eq "boolean") { - $field_type = "Boolean"; - } else { - $field_type = "Boolean"; - } - if($preference->max_occur == 0) { - $field_type = "Select"; - } - - return [$preference->attribute => { - type => $field_type, - element_attr => { title => encode_entities($preference->description), - $self->readonly ? (readonly => 1) : (), }, - }]; - -} has_field 'save' => ( type => 'Submit', @@ -92,9 +83,16 @@ has_field 'save' => ( has_block 'actions' => ( tag => 'div', - #class => [qw/modal-footer/], + class => [qw/modal-footer/], render_list => [qw/save/], ); +sub create_structure { + my $self = shift; + my $field_list = shift; + + $self->block('myfields')->render_list($field_list); +} + 1; # vim: set tabstop=4 expandtab: diff --git a/share/templates/domain/preferences.tt b/share/templates/domain/preferences.tt index 827d311aff..2c4aa847ae 100644 --- a/share/templates/domain/preferences.tt +++ b/share/templates/domain/preferences.tt @@ -1,12 +1,15 @@ [% META title = 'Domain Preferences' -%] -[% helper.name = 'Domain'; -%] -[% helper.rows = pref_rows; -%] -[% helper.edit_preference = edit_preference; -%] -[% helper.preference = selected_preference; -%] -[% helper.pref_form = pref_form; -%] -[% helper.domain_id = domain.id %] +[% + helper.name = 'Domain'; + helper.rows = pref_rows; + helper.edit_preference = edit_preference; + helper.preference = preference; + helper.preference_meta = preference_meta; + helper.pref_form = pref_form; + helper.domain_id = domain.id; -[% PROCESS 'helpers/pref_table.tt' -%] + PROCESS 'helpers/pref_table.tt'; +%] [% # vim: set tabstop=4 syntax=html expandtab: -%] diff --git a/share/templates/helpers/pref_table.tt b/share/templates/helpers/pref_table.tt index 4ad175bf70..249c52e8f6 100644 --- a/share/templates/helpers/pref_table.tt +++ b/share/templates/helpers/pref_table.tt @@ -59,7 +59,7 @@