diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index 891f045790..aa046890a0 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -2652,7 +2652,7 @@ sub load_preference_list :Private { NGCP::Panel::Utils::Preferences::load_preference_list( c => $c, pref_values => \%pref_values, usr_pref => 1, - customer_view => ($c->user->roles eq 'subscriberdmin' ? 1 : 0), + customer_view => ($c->user->roles eq 'subscriberadmin' ? 1 : 0), subscriber_view => ($c->user->roles eq 'subscriber' ? 1 : 0), ); } @@ -2705,6 +2705,7 @@ sub master :Chained('base') :PathPart('details') :CaptureArgs(0) { c => $c, attribute => 'lock', prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber, + as_admin => 1, ); } @@ -2717,6 +2718,7 @@ sub details :Chained('master') :PathPart('') :Args(0) :Does(ACL) :ACLDetachTo('/ c => $c, attribute => 'lock', prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber, + as_admin => 1, ); my $locklevel = $c->stash->{prov_lock}->first ? $c->stash->{prov_lock}->first->value : 0; $c->stash->{prov_lock_string} = NGCP::Panel::Utils::Subscriber::get_lock_string($locklevel); @@ -2879,7 +2881,10 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) :Does(ACL) :ACLDet } my $display_pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( - c => $c, attribute => 'display_name', prov_subscriber => $prov_subscriber); + c => $c, attribute => 'display_name', + prov_subscriber => $prov_subscriber, + as_admin => 1, + ); if($display_pref->first) { $params->{display_name} = $display_pref->first->value; } diff --git a/lib/NGCP/Panel/Role/API/Subscribers.pm b/lib/NGCP/Panel/Role/API/Subscribers.pm index b916525219..53e8fabfa0 100644 --- a/lib/NGCP/Panel/Role/API/Subscribers.pm +++ b/lib/NGCP/Panel/Role/API/Subscribers.pm @@ -143,7 +143,7 @@ sub resource_from_item { })->all; $pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs( - c => $c, attribute => 'display_name', + c => $c, attribute => 'display_name', as_admin => 1, prov_subscriber => $item->provisioning_voip_subscriber); if($pref->first && $pref->first->value) { $resource{display_name} = $pref->first->value; diff --git a/lib/NGCP/Panel/Utils/Preferences.pm b/lib/NGCP/Panel/Utils/Preferences.pm index b0de2cb5c8..e5ce88d587 100644 --- a/lib/NGCP/Panel/Utils/Preferences.pm +++ b/lib/NGCP/Panel/Utils/Preferences.pm @@ -2418,7 +2418,6 @@ sub get_chained_preference_rs { $preference_type, $preference_elem, $attr, - { exists $params->{subscriberadmin} ? (subscriberadmin => $params->{subscriberadmin} ) : () }, ); if ($attribute_value_rs->first) { return $attribute_value_rs; @@ -2435,21 +2434,19 @@ sub get_usr_preference_rs { my $attribute = $params{attribute}; my $prov_subscriber = $params{prov_subscriber}; my $schema = $params{schema} // $c->model('DB'); + my $as_admin = $params{as_admin} // 0; my $pref_rs = $schema->resultset('voip_preferences')->search_rs({ - attribute => $attribute, - usr_pref => 1, - $c->user->roles eq 'subscriberadmin' - ? (expose_to_customer => 1) : (), - $c->user->roles eq 'subscriber' - ? (expose_to_subscriber => 1) : (), - }); - unless ($pref_rs && $pref_rs->first) { - # an ResultSet object is expected as the return value - return $pref_rs; - } + attribute => $attribute, + usr_pref => 1, + !$as_admin && $c->user->roles eq 'subscriberadmin' + ? (-or => [ expose_to_customer => 1, internal => { '!=' => 0 } ]) : (), + !$as_admin && $c->user->roles eq 'subscriber' + ? (-or => [ expose_to_subscriber => 1, internal => { '!=' => 0 } ]) : (), + })->first; + return unless $pref_rs; - my $attribute_id = $pref_rs->first->id; + my $attribute_id = $pref_rs->id; # filter by allowed attrs from profile if (($c->user->roles eq 'subscriberadmin' || $c->user->roles eq 'subscriber') && @@ -2457,11 +2454,11 @@ sub get_usr_preference_rs { my $found_attr = $prov_subscriber->voip_subscriber_profile ->profile_attributes->search_rs({ attribute_id => $attribute_id, - }); - return $found_attr unless $found_attr->first; + })->first; + return unless $found_attr; } - $pref_rs = $pref_rs->first->voip_usr_preferences; + $pref_rs = $pref_rs->voip_usr_preferences; if ($prov_subscriber) { $pref_rs = $pref_rs->search({ subscriber_id => $prov_subscriber->id, @@ -2727,6 +2724,10 @@ sub api_preferences_defs { my $preferences = $c->model('DB')->resultset('voip_preferences')->search({ internal => { '!=' => 1 }, # also fetch -1 for ncos, rwr $preferences_group => 1, + $c->user->roles eq 'subscriberadmin' + ? (expose_to_customer => 1) : (), + $c->user->roles eq 'subscriber' + ? (expose_to_subscriber => 1) : (), }); my $resource = {};