Add subscriber preferences.

Also fix preference handling for deleting preferences when they are set to
false (boolean), empty (string/int) or defaults (enum).
agranig/1_0_subfix
Andreas Granig 12 years ago
parent a3d42f2cd3
commit 7205cac8b2

@ -221,6 +221,93 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) {
}
}
sub preferences :Chained('base') :PathPart('preferences') :Args(0) {
my ($self, $c) = @_;
$self->load_preference_list($c);
$c->stash(template => 'subscriber/preferences.tt');
}
sub preferences_base :Chained('base') :PathPart('preferences') :CaptureArgs(1) {
my ($self, $c, $pref_id) = @_;
$self->load_preference_list($c);
$c->stash->{preference_meta} = $c->model('DB')
->resultset('voip_preferences')
->single({id => $pref_id});
$c->stash->{preference} = $c->model('DB')
->resultset('voip_usr_preferences')
->search({
attribute_id => $pref_id,
subscriber_id => $c->stash->{subscriber}->provisioning_voip_subscriber->id
});
my @values = $c->stash->{preference}->get_column("value")->all;
$c->stash->{preference_values} = \@values;
$c->stash(template => 'subscriber/preferences.tt');
}
sub preferences_edit :Chained('preferences_base') :PathPart('edit') :Args(0) {
my ($self, $c) = @_;
$c->stash(edit_preference => 1);
my @enums = $c->stash->{preference_meta}
->voip_preferences_enums
->search({usr_pref => 1})
->all;
my $pref_rs = $c->model('DB')
->resultset('voip_usr_preferences')
->search({
subscriber_id => $c->stash->{subscriber}->provisioning_voip_subscriber->id
});
NGCP::Panel::Utils::create_preference_form( c => $c,
pref_rs => $pref_rs,
enums => \@enums,
base_uri => $c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]),
edit_uri => $c->uri_for_action('/subscriber/preferences_edit', $c->req->captures),
);
}
sub load_preference_list :Private {
my ($self, $c) = @_;
my $usr_pref_values = $c->model('DB')
->resultset('voip_preferences')
->search({
'subscriber.id' => $c->stash->{subscriber}->provisioning_voip_subscriber->id
},{
prefetch => {'voip_usr_preferences' => 'subscriber'},
});
my %pref_values;
foreach my $value($usr_pref_values->all) {
$pref_values{$value->attribute} = [
map {$_->value} $value->voip_usr_preferences->all
];
}
my $rewrite_rule_sets_rs = $c->model('DB')
->resultset('voip_rewrite_rule_sets');
$c->stash(rwr_sets_rs => $rewrite_rule_sets_rs,
rwr_sets => [$rewrite_rule_sets_rs->all]);
my $ncos_levels_rs = $c->model('DB')
->resultset('ncos_levels');
$c->stash(ncos_levels_rs => $ncos_levels_rs,
ncos_levels => [$ncos_levels_rs->all]);
NGCP::Panel::Utils::load_preference_list( c => $c,
pref_values => \%pref_values,
usr_pref => 1,
);
}
sub master :Chained('/') :PathPart('subscriber') :Args(1) {
my ($self, $c, $subscriber_id) = @_;

@ -37,6 +37,7 @@ sub field_list {
if($meta->attribute eq "rewrite_rule_set") {
my @options = map {{label => $_->name, value => $_->id}}
defined $rwrs_rs ? $rwrs_rs->all : ();
unshift @options, {label => '', value => ''};
$field = {
name => $meta->attribute,
type => 'Select',
@ -45,6 +46,7 @@ sub field_list {
} elsif ($meta->attribute eq "ncos" || $meta->attribute eq "adm_ncos") {
my @options = map {{label => $_->level, value => $_->id}}
defined $ncos_rs ? $ncos_rs->all : ();
unshift @options, {label => '', value => ''};
$field = {
name => $meta->attribute,
type => 'Select',

@ -217,18 +217,35 @@ sub create_preference_form {
);
my $attribute_id = $c->model('DB')->resultset('voip_preferences')
->find({attribute => $attribute."_id"})->id;
$pref_rs->update_or_create({
attribute_id => $attribute_id,
})->update({ value => $selected_level->id });
my $preference = $pref_rs->search({ attribute_id => $attribute_id });
if(!defined $selected_level) {
$preference->first->delete if $preference->first;
} elsif($preference->first) {
$preference->first->update({ value => $selected_level->id });
} else {
$preference->create({ value => $selected_level->id });
}
$c->flash(messages => [{type => 'success', text => "Preference $attribute successfully updated."}]);
$c->response->redirect($base_uri);
return;
} else {
$pref_rs->update_or_create({
id => $preference_id,
attribute_id => $c->stash->{preference_meta}->id,
value => $form->field($attribute)->value,
});
if($form->field($attribute)->value eq '') {
my $preference = $pref_rs->find($preference_id);
$preference->delete if $preference;
} elsif($c->stash->{preference_meta}->data_type eq 'boolean' &&
$form->field($attribute)->value == 0) {
my $preference = $pref_rs->find($preference_id);
$preference->delete if $preference;
} else {
$pref_rs->update_or_create({
id => $preference_id,
attribute_id => $c->stash->{preference_meta}->id,
value => $form->field($attribute)->value,
});
}
$c->flash(messages => [{type => 'success', text => "Preference $attribute successfully updated."}]);
$c->response->redirect($base_uri);
return;
@ -255,6 +272,7 @@ sub create_preference_form {
}
}
$form->process if $posted;
$c->stash(form => $form);
}
@ -265,15 +283,22 @@ sub _set_rewrite_preferences {
my $rwrs_result = $params{rwrs_result};
my $pref_rs = $params{pref_rs};
for my $foo ("callee_in_dpid", "caller_in_dpid",
for my $rules ("callee_in_dpid", "caller_in_dpid",
"callee_out_dpid", "caller_out_dpid") {
my $attribute_id = $c->model('DB')->resultset('voip_preferences')
->find({attribute => "rewrite_$foo"})->id;
->find({attribute => "rewrite_$rules"})->id;
my $preference = $pref_rs->search({
attribute_id => $attribute_id,
})->update_or_create({});
$preference->update({ value => $rwrs_result->$foo });
});
if(!defined $rwrs_result) {
$preference->first->delete if $preference->first;
} elsif($preference->first) {
$preference->first->update({ value => $rwrs_result->$rules });
} else {
$preference->create({ value => $rwrs_result->$rules });
}
}
}

@ -2,7 +2,6 @@
[%
helper.name = 'Domain';
helper.show_create_button = 1;
helper.messages = messages;
helper.edit_preference = edit_preference;

@ -140,22 +140,23 @@ $(function() {
[% IF helper.preference_meta.max_occur != 1 %]
<div class="modal-body">
[% FOREACH v IN helper.preference.all %]
<div class="row-fluid">
[% IF v.value.substr(0,1) == '#' %]
<input type="text" value="[% v.value.substr(1) %]" disabled="disabled" class="ngcp-entry-disabled"></input>
[% ELSE %]
<input type="text" value="[% v.value %]" disabled="disabled"></input>
[% END %]
<a href="?delete=[% v.id %]"><i class="icon-trash"></i></a>
<a class="btn btn-primary pull-right" href="?delete=[% v.id %]"><i class="icon-trash"></i></a>
[% IF v.value.substr(0,1) == '#' %]
<a href="?activate=[% v.id %]"><i class="icon-ok"></i></a>
<a class="btn btn-primary pull-right" href="?activate=[% v.id %]"><i class="icon-ok"></i></a>
[% ELSE %]
<a href="?deactivate=[% v.id %]"><i class="icon-ban-circle"></i></a>
<a class="btn btn-primary pull-right" href="?deactivate=[% v.id %]"><i class="icon-ban-circle"></i></a>
[% END %]
<br />
</div>
[% END %]
<form action="[% helper.form.action %]" method="post">
[% helper.form.fields.2.render %]
<span class="">[% helper.form.field("add").render %]</span>
<span class="pull-right">[% helper.form.field("add").render %]</span>
</form>
</div>
[% ELSE %]

@ -0,0 +1,23 @@
[% site_config.title = 'Subscriber "' _ subscriber.username _ '@' _ subscriber.domain.domain _ '" Preferences' -%]
[%
helper.name = 'Subscriber';
helper.messages = messages;
helper.edit_preference = edit_preference;
helper.preference = preference;
helper.preference_meta = preference_meta;
helper.pref_groups = pref_groups;
helper.form = form;
helper.base_uri = c.uri_for(subscriber.id,'preferences');
helper.rewrite_rule_sets = rwr_sets;
helper.ncos_levels = ncos_levels;
helper.top_buttons = [
{ name = 'Back', uri = c.uri_for(), icon = 'icon-arrow-left' },
];
PROCESS 'helpers/pref_table.tt';
%]
[% # vim: set tabstop=4 syntax=html expandtab: -%]
Loading…
Cancel
Save