From ec16e85d24fda7b23b4ace9afc890143a4674936 Mon Sep 17 00:00:00 2001 From: Gerhard Jungwirth Date: Tue, 13 Feb 2018 17:25:52 +0100 Subject: [PATCH] TT#32963 join location and subscriber properly this way we do not depend on the multidomain feature for error prone joining on this condition anymore cherry-picked to mr5.5 (see TT#38607) Change-Id: Ibed97da69376aace6e792ed9db43fb5d461003ef (cherry picked from commit ee2014f468e988717e5d9e0ac3f1e49abc1a6581) --- .../Controller/API/SubscriberRegistrations.pm | 2 +- lib/NGCP/Panel/Controller/Customer.pm | 9 +++---- lib/NGCP/Panel/Controller/Subscriber.pm | 20 +++++--------- .../Panel/Role/API/SubscriberRegistrations.pm | 27 +++++-------------- 4 files changed, 18 insertions(+), 40 deletions(-) diff --git a/lib/NGCP/Panel/Controller/API/SubscriberRegistrations.pm b/lib/NGCP/Panel/Controller/API/SubscriberRegistrations.pm index 82c6273bb3..ca8498347f 100644 --- a/lib/NGCP/Panel/Controller/API/SubscriberRegistrations.pm +++ b/lib/NGCP/Panel/Controller/API/SubscriberRegistrations.pm @@ -176,7 +176,7 @@ sub POST :Allow { my ($guard, $txn_ok) = ($c->model('DB')->txn_scope_guard, 0); { - $self->update_item($c, undef, undef, $resource, $form, $create); + last unless $self->update_item($c, undef, undef, $resource, $form, $create); $guard->commit; $txn_ok = 1; diff --git a/lib/NGCP/Panel/Controller/Customer.pm b/lib/NGCP/Panel/Controller/Customer.pm index 3dcb37eb77..ff56c36999 100644 --- a/lib/NGCP/Panel/Controller/Customer.pm +++ b/lib/NGCP/Panel/Controller/Customer.pm @@ -1844,13 +1844,10 @@ sub pbx_device_sync :Chained('pbx_device_base') :PathPart('sync') :Args(0) { my $sub = $line->provisioning_voip_subscriber; next unless($sub); my $reg_rs = $c->model('DB')->resultset('location')->search({ - username => $sub->username, + 'kam_subscriber.uuid' => $sub->uuid, + },{ + join => 'kam_subscriber', }); - if($c->config->{features}->{multidomain}) { - $reg_rs = $reg_rs->search({ - domain => $sub->domain->domain, - }); - } my $uri = $sub->username . '@' . $sub->domain->domain; if($reg_rs->count) { $c->log->debug("trigger device resync for $uri as it is registered"); diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index c0f6264b20..dd4d15d331 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -3601,13 +3601,10 @@ sub ajax_registered :Chained('master') :PathPart('registered/ajax') :Args(0) { my $s = $c->stash->{subscriber}->provisioning_voip_subscriber; my $reg_rs = $c->model('DB')->resultset('location')->search({ - username => $s->username, + 'kam_subscriber.uuid' => $s->uuid, + },{ + join => 'kam_subscriber', }); - if($c->config->{features}->{multidomain}) { - $reg_rs = $reg_rs->search({ - domain => $s->domain->domain, - }); - } NGCP::Panel::Utils::Datatables::process($c, $reg_rs, $c->stash->{reg_dt_columns}); @@ -3854,14 +3851,11 @@ sub registered :Chained('master') :PathPart('registered') :CaptureArgs(1) { my $s = $c->stash->{subscriber}->provisioning_voip_subscriber; my $reg_rs = $c->model('DB')->resultset('location')->search({ - id => $reg_id, - username => $s->username, + 'me.id' => $reg_id, + 'kam_subscriber.uuid' => $s->uuid, + },{ + join => 'kam_subscriber', }); - if($c->config->{features}->{multidomain}) { - $reg_rs = $reg_rs->search({ - domain => $s->domain->domain, - }); - } $c->stash->{registered} = $reg_rs->first; unless($c->stash->{registered}) { NGCP::Panel::Utils::Message::error( diff --git a/lib/NGCP/Panel/Role/API/SubscriberRegistrations.pm b/lib/NGCP/Panel/Role/API/SubscriberRegistrations.pm index 80145ff1b8..5bd301f4f5 100644 --- a/lib/NGCP/Panel/Role/API/SubscriberRegistrations.pm +++ b/lib/NGCP/Panel/Role/API/SubscriberRegistrations.pm @@ -15,22 +15,18 @@ use NGCP::Panel::Utils::Kamailio; sub _item_rs { my ($self, $c) = @_; - my @joins = ();; - if($c->config->{features}->{multidomain}) { - push @joins, 'domain'; - } my $item_rs = $c->model('DB')->resultset('location'); if($c->user->roles eq "admin") { $item_rs = $item_rs->search({ },{ - join => [@joins,'subscriber'], + join => { 'kam_subscriber' => 'provisioning_voip_subscriber'}, }); } elsif($c->user->roles eq "reseller") { $item_rs = $item_rs->search({ 'contact.reseller_id' => $c->user->reseller_id },{ - join => [@joins, { 'subscriber' => { 'voip_subscriber' => { 'contract' => 'contact' }}} ], + join => { 'kam_subscriber' => 'provisioning_voip_subscriber' => { 'voip_subscriber' => { 'contract' => 'contact' }}}, }); } return $item_rs; @@ -102,19 +98,10 @@ sub item_by_id { sub subscriber_from_item { my ($self, $c, $item) = @_; - my $sub_rs = $c->model('DB')->resultset('voip_subscribers')->search({ - username => $item->username, - status => { '!=' => 'terminated' }, - }); - if($c->config->{features}->{multidomain}) { - $sub_rs = $sub_rs->search({ - 'domain.domain' => $item->domain->domain, - }, { - join => 'domain', - }); - } - my $sub = $sub_rs->first; - unless($sub && $sub->provisioning_voip_subscriber) { + my $kam_subscriber = $item ? $item->kam_subscriber : undef; + my $prov_subscriber = $kam_subscriber ? $kam_subscriber->provisioning_voip_subscriber : undef; + my $sub = $prov_subscriber ? $prov_subscriber->voip_subscriber : undef; + unless($sub && $prov_subscriber) { return; } return $sub; @@ -186,7 +173,7 @@ sub update_item { NGCP::Panel::Utils::Kamailio::flush($c); - return $item; + return $create ? 1 : $item; # on create, we dont have the item yet } sub fetch_item {