Select rewrite rule set for PBX domain creation.

agranig/peering-route
Andreas Granig 13 years ago
parent 00e13f9209
commit 5f9c114ef5

@ -193,13 +193,18 @@ sub subscriber_create :Chained('base') :PathPart('subscriber/create') :Args(0) {
params => $c->request->params,
item => $params,
);
my $fields = {
'domain.create' => $c->uri_for('/domain/create'),
'group.create' => $c->uri_for_action('/customer/pbx_group_create', $c->req->captures),
};
if($pbxadmin) {
$fields->{'domain.create'} = $c->uri_for_action('/domain/create',
$c->stash->{contract}->contact->reseller_id, 'pbx');
}
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c,
form => $form,
fields => {
'domain.create' => $c->uri_for('/domain/create'),
'group.create' => $c->uri_for_action('/customer/pbx_group_create', $c->req->captures),
},
fields => $fields,
back_uri => $c->req->uri,
);
if($form->validated) {
@ -242,7 +247,7 @@ sub subscriber_create :Chained('base') :PathPart('subscriber/create') :Args(0) {
->find($form->params->{pbx_group_id})
->provisioning_voip_subscriber;
if($grp_subscriber) {
my $grp_pref_rs = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $grp_pref_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'cloud_pbx_hunt_group', prov_subscriber => $grp_subscriber
);
$grp_pref_rs->create({ value => 'sip:'.$form->params->{username}.'@'.
@ -504,7 +509,7 @@ sub pbx_group_edit :Chained('pbx_group_base') :PathPart('edit') :Args(0) {
my $schema = $c->model('DB');
$schema->txn_do(sub {
$c->stash->{pbx_group}->update($form->params);
my $hunt_policy = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $hunt_policy = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c,
prov_subscriber => $c->stash->{pbx_group}->provisioning_voip_subscriber,
attribute => 'cloud_pbx_hunt_policy'
@ -514,7 +519,7 @@ sub pbx_group_edit :Chained('pbx_group_base') :PathPart('edit') :Args(0) {
} else {
$hunt_policy->create({ value => $form->params->{hunt_policy} });
}
my $hunt_timeout = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $hunt_timeout = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c,
prov_subscriber => $c->stash->{pbx_group}->provisioning_voip_subscriber,
attribute => 'cloud_pbx_hunt_timeout'

@ -5,6 +5,7 @@ use Sipwise::Base;
BEGIN { extends 'Catalyst::Controller'; }
use NGCP::Panel::Form::Domain::Reseller;
use NGCP::Panel::Form::Domain::ResellerPbx;
use NGCP::Panel::Form::Domain::Admin;
use NGCP::Panel::Utils::Message;
use NGCP::Panel::Utils::Navigation;
@ -53,12 +54,35 @@ sub root :Chained('dom_list') :PathPart('') :Args(0) {
my ($self, $c) = @_;
}
sub create :Chained('dom_list') :PathPart('create') :Args(0) {
my ($self, $c) = @_;
sub create :Chained('dom_list') :PathPart('create') :Args() {
my ($self, $c, $reseller_id, $type) = @_;
my $posted = ($c->request->method eq 'POST');
my $form;
if($c->user->is_superuser) {
my $form; my $pbx;
if($type && $type eq 'pbx') {
unless($reseller_id && $reseller_id->is_int) {
NGCP::Panel::Utils::Message->error(
c => $c,
error => 'invalid reseller id for creating pbx domain',
desc => 'Invalid reseller id detected.',
);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/domain'));
}
if(!$c->user->is_superuser && $reseller_id != $c->user->reseller_id) {
$c->detach('/denied_page');
}
$c->stash->{reseller} = $c->model('DB')->resultset('resellers')->find($reseller_id);
unless($c->stash->{reseller}) {
NGCP::Panel::Utils::Message->error(
c => $c,
error => "reseller with id $reseller_id not found when creating pbx domain",
desc => 'Reseller not found.',
);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/domain'));
}
$form = NGCP::Panel::Form::Domain::ResellerPbx->new(ctx => $c);
$pbx = 1;
} elsif($c->user->is_superuser) {
$form = NGCP::Panel::Form::Domain::Admin->new;
} else {
$form = NGCP::Panel::Form::Domain::Reseller->new;
@ -74,12 +98,22 @@ sub create :Chained('dom_list') :PathPart('create') :Args(0) {
if($posted && $form->validated) {
try {
$c->model('DB')->schema->txn_do( sub {
$c->model('DB')->resultset('voip_domains')
my $prov_dom = $c->model('DB')->resultset('voip_domains')
->create({domain => $form->value->{domain}});
my $new_dom = $c->stash->{dom_rs}
->create({domain => $form->value->{domain}});
my $reseller_id = $c->user->is_superuser ? $form->values->{reseller}{id} :
$c->user->reseller_id;
unless($pbx) {
$reseller_id = $c->user->is_superuser ?
$form->values->{reseller}{id} : $c->user->reseller_id;
} elsif($form->values->{rwr_set}) {
my $rwr_set = $c->model('DB')->resultset('voip_rewrite_rule_sets')
->find($form->values->{rwr_set});
NGCP::Panel::Utils::Preferences::set_rewrite_preferences(
c => $c,
rwrs_result => $rwr_set,
pref_rs => $prov_dom->voip_dom_preferences,
) if($rwr_set);
}
$new_dom->create_related('domain_resellers', {
reseller_id => $reseller_id

@ -293,7 +293,7 @@ sub terminate :Chained('base') :PathPart('terminate') :Args(0) {
if($prov_subscriber->voip_pbx_group) {
my $group_subscriber = $prov_subscriber->voip_pbx_group->provisioning_voip_subscriber;
if($group_subscriber) {
my $hunt_group = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $hunt_group = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c,
prov_subscriber => $group_subscriber,
attribute => 'cloud_pbx_hunt_group'
@ -352,7 +352,7 @@ sub preferences :Chained('base') :PathPart('preferences') :Args(0) {
}
$c->stash(cf_destinations => $cfs);
my $ringtimeout_preference = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $ringtimeout_preference = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'ringtimeout', prov_subscriber => $prov_subscriber)
->first;
$c->stash(cf_ringtimeout => $ringtimeout_preference ? $ringtimeout_preference->value : undef);
@ -425,9 +425,9 @@ sub preferences_callforward :Chained('base') :PathPart('preferences/callforward'
my $posted = ($c->request->method eq 'POST');
my $prov_subscriber = $c->stash->{subscriber}->provisioning_voip_subscriber;
my $cf_preference = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $cf_preference = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, prov_subscriber => $prov_subscriber, attribute => $cf_type);
my $ringtimeout_preference = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $ringtimeout_preference = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, prov_subscriber => $prov_subscriber, attribute => 'ringtimeout');
my $cf_mapping = $prov_subscriber->voip_cf_mappings->search_rs({ type => $cf_type });
my $destination;
@ -675,9 +675,9 @@ sub preferences_callforward_advanced :Chained('base') :PathPart('preferences/cal
my $prov_subscriber = $c->stash->{subscriber}->provisioning_voip_subscriber;
my $cf_mapping = $prov_subscriber->voip_cf_mappings->search_rs({ type => $cf_type });
my $cf_preference = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $cf_preference = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, prov_subscriber => $prov_subscriber, attribute => $cf_type);
my $ringtimeout_preference = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $ringtimeout_preference = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, prov_subscriber => $prov_subscriber, attribute => 'ringtimeout');
# TODO: we can have more than one active, no?
@ -943,11 +943,11 @@ sub preferences_callforward_destinationset_edit :Chained('preferences_callforwar
my $posted = ($c->request->method eq 'POST');
my $cf_preference = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $cf_preference = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber,
attribute => $cf_type,
);
my $ringtimeout_preference = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $ringtimeout_preference = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber,
attribute => 'ringtimeout',
);
@ -1086,11 +1086,11 @@ sub preferences_callforward_destinationset_edit :Chained('preferences_callforwar
sub preferences_callforward_destinationset_delete :Chained('preferences_callforward_destinationset_base') :PathPart('delete') :Args(1) {
my ($self, $c, $cf_type) = @_;
my $cf_preference = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $cf_preference = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber,
attribute => $cf_type,
);
my $ringtimeout_preference = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $ringtimeout_preference = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber,
attribute => 'ringtimeout',
);
@ -1363,7 +1363,7 @@ sub preferences_callforward_delete :Chained('base') :PathPart('preferences/callf
my $prov_subscriber = $c->stash->{subscriber}->provisioning_voip_subscriber;
$prov_subscriber->voip_cf_mappings->search({ type => $cf_type })
->delete_all;
my $cf_pref = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
my $cf_pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c,
attribute => $cf_type,
prov_subscriber => $prov_subscriber,
@ -1454,7 +1454,7 @@ sub master :Chained('base') :PathPart('details') :CaptureArgs(0) {
template => 'subscriber/master.tt',
);
$c->stash->{prov_lock} = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
$c->stash->{prov_lock} = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c,
attribute => 'lock',
prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber,
@ -1467,7 +1467,7 @@ sub master :Chained('base') :PathPart('details') :CaptureArgs(0) {
sub details :Chained('master') :PathPart('') :Args(0) {
my ($self, $c) = @_;
$c->stash->{prov_lock} = NGCP::Panel::Utils::Subscriber::get_usr_preference_rs(
$c->stash->{prov_lock} = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c,
attribute => 'lock',
prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber,

@ -54,7 +54,7 @@ has_field 'domain' => (
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/webusername webpassword e164 username domain password status external_id/ ],
render_list => [qw/domain webusername webpassword e164 username password status external_id/ ],
);
sub validate {

@ -0,0 +1,38 @@
package NGCP::Panel::Form::Domain::ResellerPbx;
use HTML::FormHandler::Moose;
extends 'NGCP::Panel::Form::Domain::Reseller';
has_field 'rwr_set' => (
type => 'Select',
label => 'Rewrite Rule Set',
options_method => \&build_rwr_sets,
default => undef,
);
sub build_rwr_sets {
my ($self) = @_;
my $c = $self->form->ctx;
my @options;
push @options, { label => '', value => undef };
if(defined $c) {
my $sets = $c->stash->{reseller}->voip_rewrite_rule_sets;
use Data::Printer; p $sets->all;
foreach my $s($sets->all) {
push @options, { label => $s->name, value => $s->id };
}
}
return \@options;
}
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/id domain rwr_set/],
);
1;
# vim: set tabstop=4 expandtab:

@ -240,7 +240,7 @@ sub create_preference_form {
my $selected_rwrs = $c->stash->{rwr_sets_rs}->find(
$form->field($attribute)->value
);
_set_rewrite_preferences(
set_rewrite_preferences(
c => $c,
rwrs_result => $selected_rwrs,
pref_rs => $pref_rs,
@ -365,7 +365,7 @@ sub create_preference_form {
man_aip_grp_rs => $man_aip_grp_rs);
}
sub _set_rewrite_preferences {
sub set_rewrite_preferences {
my %params = @_;
my $c = $params{c};
@ -392,6 +392,36 @@ sub _set_rewrite_preferences {
}
sub get_usr_preference_rs {
my %params = @_;
my $c = $params{c};
my $attribute = $params{attribute};
my $prov_subscriber= $params{prov_subscriber};
my $preference = $c->model('DB')->resultset('voip_preferences')->find({
attribute => $attribute, 'usr_pref' => 1,
})->voip_usr_preferences->search_rs({
subscriber_id => $prov_subscriber->id,
});
return $preference;
}
sub get_dom_preference_rs {
my %params = @_;
my $c = $params{c};
my $attribute = $params{attribute};
my $prov_domain = $params{prov_domain};
my $preference = $c->model('DB')->resultset('voip_preferences')->find({
attribute => $attribute, 'dom_pref' => 1,
})->voip_usr_preferences->search_rs({
domain_id => $prov_domain->id,
});
return $preference;
}
1;
=head1 NAME
@ -443,7 +473,7 @@ set in the template (to be used by F<helpers/pref_table.tt>).
On update 4 voip_*_preferences will be created with the attributes
rewrite_callee_in_dpid, rewrite_caller_in_dpid, rewrite_callee_out_dpid
and rewrite_caller_out_dpid (using the helper method _set_rewrite_preferences).
and rewrite_caller_out_dpid (using the helper method set_rewrite_preferences).
For compatibility with ossbss and the www_admin panel, no preference with
the attribute rewrite_rule_set is created and caller_in_dpid is used to
@ -470,7 +500,7 @@ The preference with the attribute sound_set will contain the id of a sound_set.
Also something special here. The table containing data is
provisioning.voip_allowed_ip_groups.
=head2 _set_rewrite_preferences
=head2 set_rewrite_preferences
See "Special case rewrite_rule_set".

@ -5,6 +5,7 @@ use warnings;
use Sipwise::Base;
use DBIx::Class::Exception;
use NGCP::Panel::Utils::DateTime;
use NGCP::Panel::Utils::Preferences;
use UUID qw/generate unparse/;
my %LOCK = (
@ -15,20 +16,6 @@ my %LOCK = (
4, 'global',
);
sub get_usr_preference_rs {
my %params = @_;
my $c = $params{c};
my $attribute = $params{attribute};
my $prov_subscriber= $params{prov_subscriber};
my $preference = $c->model('DB')->resultset('voip_preferences')->find({
attribute => $attribute, 'usr_pref' => 1,
})->voip_usr_preferences->search_rs({
subscriber_id => $prov_subscriber->id,
});
return $preference;
}
sub period_as_string {
my $set = shift;
@ -98,7 +85,7 @@ sub lock_provisoning_voip_subscriber {
return unless $prov_subscriber;
my $rs = get_usr_preference_rs(
my $rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c,
prov_subscriber => $prov_subscriber,
attribute => 'lock'
@ -210,7 +197,7 @@ sub create_subscriber {
if(defined $cli);
foreach my $k(keys %{ $preferences } ) {
my $pref = get_usr_preference_rs(
my $pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => $k, prov_subscriber => $prov_subscriber);
if($pref->first && $pref->first->attribute->max_occur == 1) {
$pref->first->update({
@ -289,15 +276,6 @@ A temporary helper to manipulate subscriber data
=head1 METHODS
=head2 get_usr_preference_rs
Parameters:
c The controller
prov_subscriber The provisioning_voip_subscriber row
attribute The name of the usr preference
Returns a result set for the voip_usr_preference of the given subscriber.
=head1 AUTHOR
Andreas Granig,

Loading…
Cancel
Save