diff --git a/lib/NGCP/Panel/Controller/API/CustomerPhonebookEntries.pm b/lib/NGCP/Panel/Controller/API/CustomerPhonebookEntries.pm index 7bb190a73a..a2ed933b31 100644 --- a/lib/NGCP/Panel/Controller/API/CustomerPhonebookEntries.pm +++ b/lib/NGCP/Panel/Controller/API/CustomerPhonebookEntries.pm @@ -53,6 +53,11 @@ sub query_params { description => 'Filter for Phonebook numbers with a specific name', query_type => 'wildcard', }, + { + param => 'include', + description => 'Include phonebook entries shared by subscribers and/or from reseller. Accepted values: all,shared,reseller', + # only for doc + }, ]; } diff --git a/lib/NGCP/Panel/Controller/API/SubscriberPhonebookEntries.pm b/lib/NGCP/Panel/Controller/API/SubscriberPhonebookEntries.pm index d6c56dac33..80bc5bd481 100644 --- a/lib/NGCP/Panel/Controller/API/SubscriberPhonebookEntries.pm +++ b/lib/NGCP/Panel/Controller/API/SubscriberPhonebookEntries.pm @@ -52,6 +52,11 @@ sub query_params { description => 'Filter for Phonebook entries that are marked as shared', query_type => 'string_eq', }, + { + param => 'include', + description => 'Include phonebook entries shared by subscribers, and/or from reseller, and/or from customer. Accepted values: all,reseller,customer', + # only for doc + }, ]; } diff --git a/lib/NGCP/Panel/Role/API/CustomerPhonebookEntries.pm b/lib/NGCP/Panel/Role/API/CustomerPhonebookEntries.pm index 41ef398927..41ac1869d0 100644 --- a/lib/NGCP/Panel/Role/API/CustomerPhonebookEntries.pm +++ b/lib/NGCP/Panel/Role/API/CustomerPhonebookEntries.pm @@ -7,6 +7,8 @@ use parent 'NGCP::Panel::Role::API'; use HTTP::Status qw(:constants); +use NGCP::Panel::Utils::Phonebook; + sub resource_name { return 'customerphonebookentries'; } @@ -14,9 +16,21 @@ sub resource_name { sub _item_rs { my ($self, $c) = @_; + my $params = $c->req->params; + my $item_rs = $c->model('DB')->resultset('contract_phonebook'); - if ($c->user->roles eq 'reseller') { + if ($c->req->method eq 'GET' && $params->{include}) { + if ($params->{include} eq 'all') { + $item_rs = $c->model('DB')->resultset('v_contract_phonebook'); + } elsif ($params->{include} eq 'shared') { + $item_rs = $c->model('DB')->resultset('v_contract_shared_phonebook'); + } elsif ($params->{include} eq 'reseller') { + $item_rs = $c->model('DB')->resultset('v_contract_reseller_phonebook'); + } + } + + if ($c->user->roles eq 'reseller' || $c->user->roles eq 'ccare') { $item_rs = $item_rs->search({ 'contact.reseller_id' => $c->user->reseller_id, },{ @@ -31,6 +45,24 @@ sub _item_rs { return $item_rs; } +sub get_item_id { + my ($self, $c, $item, $resource, $form, $params) = @_; + return blessed $item ? $item->id : $item->{id}; +} + +sub valid_id { + my ($self, $c, $id) = @_; + return 1 if is_int($id) || $id =~ /^[csr\d]+$/; + $self->error($c, HTTP_BAD_REQUEST, "Invalid id in request URI"); + return; +} + +sub item_by_id { + my ($self, $c, $id) = @_; + my $item_rs = $self->item_rs($c); + return $item_rs->search({ 'me.id' => $id })->first; +} + sub get_form { my ($self, $c) = @_; @@ -40,6 +72,7 @@ sub get_form { sub process_hal_resource { my($self, $c, $item, $resource, $form) = @_; $resource->{customer_id} = delete $resource->{contract_id}; + $resource->{shared} //= 0; return $resource; } diff --git a/lib/NGCP/Panel/Role/API/SubscriberPhonebookEntries.pm b/lib/NGCP/Panel/Role/API/SubscriberPhonebookEntries.pm index 314cb29a5d..dbd64c2631 100644 --- a/lib/NGCP/Panel/Role/API/SubscriberPhonebookEntries.pm +++ b/lib/NGCP/Panel/Role/API/SubscriberPhonebookEntries.pm @@ -14,9 +14,21 @@ sub resource_name { sub _item_rs { my ($self, $c) = @_; + my $params = $c->req->params; + my $item_rs = $c->model('DB')->resultset('subscriber_phonebook'); - if ($c->user->roles eq 'reseller') { + if ($c->req->method eq 'GET' && $params->{include}) { + if ($params->{include} eq 'all') { + $item_rs = $c->model('DB')->resultset('v_subscriber_phonebook'); + } elsif ($params->{include} eq 'reseller') { + $item_rs = $c->model('DB')->resultset('v_subscriber_reseller_phonebook'); + } elsif ($params->{include} eq 'customer') { + $item_rs = $c->model('DB')->resultset('v_subscriber_contract_phonebook'); + } + } + + if ($c->user->roles eq 'reseller' || $c->user->roles eq 'ccare') { $item_rs = $item_rs->search({ 'contact.reseller_id' => $c->user->reseller_id, },{ @@ -37,6 +49,24 @@ sub _item_rs { return $item_rs; } +sub get_item_id { + my ($self, $c, $item, $resource, $form, $params) = @_; + return blessed $item ? $item->id : $item->{id}; +} + +sub valid_id { + my ($self, $c, $id) = @_; + return 1 if is_int($id) || $id =~ /^[csr\d]+$/; + $self->error($c, HTTP_BAD_REQUEST, "Invalid id in request URI"); + return; +} + +sub item_by_id { + my ($self, $c, $id) = @_; + my $item_rs = $self->item_rs($c); + return $item_rs->search({ 'me.id' => $id })->first; +} + sub get_form { my ($self, $c) = @_;