From 6af4d59390225adda3cff7353ce1b6f42f411fab Mon Sep 17 00:00:00 2001 From: Andreas Granig Date: Tue, 9 Apr 2013 17:28:40 +0200 Subject: [PATCH] Some more fix attempts for dom-prefs, WIP. --- lib/NGCP/Panel/Controller/Domain.pm | 119 ++++++++++++++++++-------- lib/NGCP/Panel/Form/Preferences.pm | 21 ++--- share/templates/domain/preferences.tt | 2 +- share/templates/helpers/pref_table.tt | 2 +- 4 files changed, 96 insertions(+), 48 deletions(-) diff --git a/lib/NGCP/Panel/Controller/Domain.pm b/lib/NGCP/Panel/Controller/Domain.pm index 9c814f5992..90f31ba85a 100644 --- a/lib/NGCP/Panel/Controller/Domain.pm +++ b/lib/NGCP/Panel/Controller/Domain.pm @@ -158,6 +158,89 @@ sub ajax :Chained('list') :PathPart('ajax') :Args(0) { sub preferences :Chained('base') :PathPart('preferences') :Args(0) { my ($self, $c) = @_; + $self->load_preference_list($c); + $c->stash(template => 'domain/preferences.tt'); +} + +sub preferences_detail :Chained('base') :PathPart('preferences') :CaptureArgs(1) :Args(0) { + my ($self, $c, $pref_id) = @_; + + $self->load_preference_list($c); + + $c->stash->{preference_meta} = $c->model('provisioning') + ->resultset('voip_preferences') + ->single({id => $pref_id}); + $c->stash->{provisioning_domain_id} = $c->model('provisioning') + ->resultset('voip_domains') + ->single({domain => $c->stash->{domain}->{domain}})->id; + + # TODO this can return more than one row + $c->stash->{preference} = $c->model('provisioning') + ->resultset('voip_dom_preferences') + ->search({attribute_id => $pref_id, domain_id => $c->stash->{provisioning_domain_id}}); + my @values = (); + while(my $p = $c->stash->{preference}->next()) { + push @values, $p->value; + } + $c->stash->{preference_values} = \@values; + $c->stash(template => 'domain/preferences.tt'); +} + +sub preferences_edit :Chained('preferences_detail') :PathPart('edit') :Args(0) { + my ($self, $c) = @_; + + $c->stash(edit_preference => 1); + + my @enums = $c->stash->{preference_meta} + ->voip_preferences_enums + ->search({dom_pref => 1}) + ->all; + + my $form = NGCP::Panel::Form::Preferences->new({ + fields_data => [{ + meta => $c->stash->{preference_meta}, + enums => \@enums, + }], + }); + $form->create_structure([$c->stash->{preference_meta}->attribute]); + + $form->process( + posted => ($c->request->method eq 'POST'), + params => $c->request->params || { $c->stash->{preference_meta}->attribute => $c->stash->{preference_values}->[0] }, + action => $c->uri_for($c->stash->{domain}->{id}, 'preferences', $c->stash->{preference_meta}->id, 'edit'), + ); + if($form->validated) { + # TODO: if meta->max_occur=0 insert, otherwise insert_or_update + my $preference_id = $c->stash->{preference}->first ? $c->stash->{preference}->first->id : undef; + my $rs = $c->model('provisioning') + ->resultset('voip_dom_preferences') + ->new_result({ + id => $preference_id, + attribute_id => $c->stash->{preference_meta}->id, + domain_id => $c->stash->{provisioning_domain_id}, + value => $form->field($c->stash->{preference_meta}->attribute)->value, + }); + if($preference_id) { + $rs->update(); + } else { + $rs->insert(); + } + $c->flash(messages => [{type => 'success', text => 'Preference '.$c->stash->{preference_meta}->attribute.' successfully updated.'}]); + $c->response->redirect($c->uri_for($c->stash->{domain}->{id}, 'preferences')); + return; + } + + print "~~~~~~~~~~~~~~~~~~~~~~~~~\n"; + print "".(p $form->field($c->stash->{preference_meta}->attribute))."\n"; + print ">>>>>> ".$form->field($c->stash->{preference_meta}->attribute)->value."\n"; + + + $c->stash(form => $form); +} + +sub load_preference_list : Private { + my ($self, $c) = @_; + my @dom_prefs = $c->model('provisioning') ->resultset('voip_preferences') ->search({ dom_pref => 1, internal => 0}) @@ -186,43 +269,7 @@ sub preferences :Chained('base') :PathPart('preferences') :Args(0) { $pref->{value} = defined $val->first ? $val->first->value : undef; } } - $c->stash(pref_rows => \@dom_prefs); - $c->stash(template => 'domain/preferences.tt'); -} - -sub preferences_detail :Chained('base') :PathPart('preferences') :CaptureArgs(1) :Args(0) { - my ($self, $c, $pref_id) = @_; - - $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 preferences_edit :Chained('preferences_detail') :PathPart('edit') :Args(0) { - my ($self, $c) = @_; - - $c->stash(edit_preference => 1); - - 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); } =head1 AUTHOR diff --git a/lib/NGCP/Panel/Form/Preferences.pm b/lib/NGCP/Panel/Form/Preferences.pm index fa48949f71..d957452489 100644 --- a/lib/NGCP/Panel/Form/Preferences.pm +++ b/lib/NGCP/Panel/Form/Preferences.pm @@ -22,6 +22,7 @@ has 'fields_data' => (is => 'rw'); has_block 'myfields' => ( tag => 'div', + class => [qw/modal-body/], ); sub field_list { @@ -31,37 +32,37 @@ sub field_list { my $fields_data = $self->fields_data; foreach my $row (@$fields_data) { - my $data = $row->{data}; + my $meta = $row->{meta}; my $enums = $row->{enums}; my $field; - if($data->data_type eq "enum") { + if($meta->data_type eq "enum") { my @options = map {{label => $_->label, value => $_->value}} @{ $enums }; $field = { - name => $data->attribute, + name => $meta->attribute, type => 'Select', options => \@options, }; - } elsif($data->data_type eq "boolean") { + } elsif($meta->data_type eq "boolean") { $field = { - name => $data->attribute, + name => $meta->attribute, type => 'Boolean', }; - } elsif($data->data_type eq "int") { + } elsif($meta->data_type eq "int") { $field = { - name => $data->attribute, + name => $meta->attribute, type => 'Integer', }; } else { # string - if($data->max_occur == 1) { + if($meta->max_occur == 1) { $field = { - name => $data->attribute, + name => $meta->attribute, type => 'Text', }; } else { # TODO: needs to be a list of values with the option # to delete old, add new $field = { - name => $data->attribute, + name => $meta->attribute, type => 'Text', }; } diff --git a/share/templates/domain/preferences.tt b/share/templates/domain/preferences.tt index 2c4aa847ae..bb83c6a7dc 100644 --- a/share/templates/domain/preferences.tt +++ b/share/templates/domain/preferences.tt @@ -6,7 +6,7 @@ helper.edit_preference = edit_preference; helper.preference = preference; helper.preference_meta = preference_meta; - helper.pref_form = pref_form; + helper.form = form; helper.domain_id = domain.id; PROCESS 'helpers/pref_table.tt'; diff --git a/share/templates/helpers/pref_table.tt b/share/templates/helpers/pref_table.tt index 249c52e8f6..f5709f5ade 100644 --- a/share/templates/helpers/pref_table.tt +++ b/share/templates/helpers/pref_table.tt @@ -61,7 +61,7 @@

Edit Preference [% helper.preference_meta.attribute %]

- [% helper.pref_form.render -%] + [% helper.form.render -%]