Implement first part of editing domain preferences.

Show form accordig to preference type. Still doesn't save
correctly and lacks support for max_occur=0 cases (e.g.
lists of strings).
agranig/1_0_subfix
Andreas Granig 12 years ago committed by Gerhard Jungwirth
parent 926839940a
commit 2c16631a4b

@ -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

@ -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:

@ -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: -%]

@ -59,7 +59,7 @@
<div id="mod_edit" class="modal hide" style="display:block">
<div class="modal-header">
<button id="mod_close" type="button" class="close">×</button>
<h3>Edit Preference [% helper.preference %]</h3>
<h3>Edit Preference [% helper.preference_meta.attribute %]</h3>
</div>
[% helper.pref_form.render -%]
</div>

Loading…
Cancel
Save