diff --git a/lib/NGCP/Panel/Controller/Peering.pm b/lib/NGCP/Panel/Controller/Peering.pm index 2a0c82d65a..91a45e5ac3 100644 --- a/lib/NGCP/Panel/Controller/Peering.pm +++ b/lib/NGCP/Panel/Controller/Peering.pm @@ -84,6 +84,9 @@ sub base :Chained('group_list') :PathPart('') :CaptureArgs(1) { { name => 'transport', search => 1, title => $c->loc('Protocol') }, { name => 'weight', search => 0, title => $c->loc('Weight') }, { name => 'via_route', search => 1, title => $c->loc('Via Route Set') }, + $c->config->{multisite}{site_id} + ? ({ name => 'site_id', search => 0, title => $c->loc('Site') }) + : (), { name => 'probe', search => 0, title => $c->loc('Probe') }, { name => 'enabled', search => 0, title => $c->loc('Enabled') }, ]); @@ -298,6 +301,7 @@ sub servers_create :Chained('servers_list') :PathPart('create') :Args(0) { via_route => $form->values->{via_route}, enabled => $form->values->{enabled}, probe => $form->values->{probe}, + site_id => $form->values->{site_id}, }; my $server = $c->stash->{group_result}->voip_peer_hosts->create($dbvalues); NGCP::Panel::Utils::Peering::sip_lcr_reload(c => $c); diff --git a/lib/NGCP/Panel/Form/Peering/Server.pm b/lib/NGCP/Panel/Form/Peering/Server.pm index 5ea0355999..f1b15f5faf 100644 --- a/lib/NGCP/Panel/Form/Peering/Server.pm +++ b/lib/NGCP/Panel/Form/Peering/Server.pm @@ -83,6 +83,31 @@ sub build_via_routes { return \@options; } +has_field 'site_id' => ( + type => '+NGCP::Panel::Field::Select', + label => 'Site', + options_method => \&build_sites_select, +); + +sub build_sites_select { + my ($self) = @_; + + return unless $self->form->ctx; + my @options = (); + push @options, { label => 'all (default)', value => undef }; + my $sites = $self->form->ctx->config->{multisite}->{sites}; + if (defined $sites) { + if (ref $sites eq "HASH") { + foreach my $id (sort keys %{$sites}) { + my ($name, $role) = @{$sites->{$id}}{qw(name role)}; + my $label = "$name (id: $id role: $role)"; + push @options, { label => $label, value => $id }; + } + } + } + return \@options; +} + has_field 'probe' => ( type => 'Boolean', label => 'Enable Probing', @@ -114,7 +139,7 @@ has_field 'save' => ( has_block 'fields' => ( tag => 'div', class => [qw/modal-body/], - render_list => [qw/ name ip host port transport weight via_route probe enabled /], + render_list => [qw/ name ip host port transport weight via_route site_id probe enabled /], ); has_block 'actions' => ( diff --git a/lib/NGCP/Panel/Form/Peering/ServerAPI.pm b/lib/NGCP/Panel/Form/Peering/ServerAPI.pm index 179ca49233..0c5f705765 100644 --- a/lib/NGCP/Panel/Form/Peering/ServerAPI.pm +++ b/lib/NGCP/Panel/Form/Peering/ServerAPI.pm @@ -11,10 +11,19 @@ has_field 'group_id' => ( }, ); +has_field 'site_id' => ( + type => 'PosInteger', + required => 0, + element_attr => { + rel => ['tooltip'], + title => ['If defined, the peering will only be used on the selected site.'] + }, +); + has_block 'fields' => ( tag => 'div', class => [qw/modal-body/], - render_list => [qw/group_id name ip host port transport weight via_route probe enabled/], + render_list => [qw/group_id name ip host port transport weight via_route site_id probe enabled/], ); 1;