diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm index 21453cf65f..8295ded3b6 100644 --- a/lib/NGCP/Panel/Controller/Subscriber.pm +++ b/lib/NGCP/Panel/Controller/Subscriber.pm @@ -14,6 +14,7 @@ use NGCP::Panel::Utils::DateTime; use NGCP::Panel::Form::Subscriber; use NGCP::Panel::Form::SubscriberEdit; use NGCP::Panel::Form::Customer::PbxExtensionSubscriberEdit; +use NGCP::Panel::Form::Customer::PbxExtensionSubscriberEditAdmin; use NGCP::Panel::Form::SubscriberCFSimple; use NGCP::Panel::Form::SubscriberCFTSimple; use NGCP::Panel::Form::SubscriberCFAdvanced; @@ -1591,11 +1592,16 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) { my $subscriber = $c->stash->{subscriber}; my $prov_subscriber = $subscriber->provisioning_voip_subscriber; - my $form; my $pbx_ext; + my $form; my $pbx_ext; my $is_admin; if($c->config->{features}->{cloudpbx} && $prov_subscriber->voip_pbx_group) { $pbx_ext = 1; $c->stash(customer_id => $subscriber->contract->id); - $form = NGCP::Panel::Form::Customer::PbxExtensionSubscriberEdit->new(ctx => $c); + if($c->user->roles eq 'subscriberadmin') { + $form = NGCP::Panel::Form::Customer::PbxExtensionSubscriberEdit->new(ctx => $c); + } else { + $is_admin = 1; + $form = NGCP::Panel::Form::Customer::PbxExtensionSubscriberEditAdmin->new(ctx => $c); + } } else { $form = NGCP::Panel::Form::SubscriberEdit->new; } @@ -1625,11 +1631,11 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) { $params->{password} = $prov_subscriber->password; $params->{administrative} = $prov_subscriber->admin; if($subscriber->primary_number) { - unless($pbx_ext) { - $params->{e164}->{cc} = $subscriber->primary_number->cc; - $params->{e164}->{ac} = $subscriber->primary_number->ac; - $params->{e164}->{sn} = $subscriber->primary_number->sn; - } elsif($base_number) { + $params->{e164}->{cc} = $subscriber->primary_number->cc; + $params->{e164}->{ac} = $subscriber->primary_number->ac; + $params->{e164}->{sn} = $subscriber->primary_number->sn; + + if($base_number && $pbx_ext) { my $pbx_base_num = $base_number->{cc} . ($base_number->{ac} // ''). $base_number->{sn}; @@ -1644,15 +1650,15 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) { $params->{group}{id} = $prov_subscriber->pbx_group_id; } } - unless($pbx_ext) { - my @alias_nums = (); - for my $num($subscriber->voip_numbers->all) { - next if $subscriber->primary_number && - $num->id == $subscriber->primary_number->id; - push @alias_nums, { e164 => { cc => $num->cc, ac => $num->ac, sn => $num->sn } }; - } - $params->{alias_number} = \@alias_nums; + + my @alias_nums = (); + for my $num($subscriber->voip_numbers->all) { + next if $subscriber->primary_number && + $num->id == $subscriber->primary_number->id; + push @alias_nums, { e164 => { cc => $num->cc, ac => $num->ac, sn => $num->sn } }; } + $params->{alias_number} = \@alias_nums; + $params->{status} = $subscriber->status; $params->{external_id} = $subscriber->external_id; @@ -1725,7 +1731,7 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) { })->delete_all; if($subscriber->primary_number) { - if($pbx_ext) { + if($pbx_ext && !$is_admin) { $form->params->{e164}{cc} = $subscriber->primary_number->cc; $form->params->{e164}{ac} = $subscriber->primary_number->ac; $form->params->{e164}{sn} = $base_number->{sn} . $form->params->{extension}; diff --git a/lib/NGCP/Panel/Form/Customer/PbxExtensionSubscriberEditAdmin.pm b/lib/NGCP/Panel/Form/Customer/PbxExtensionSubscriberEditAdmin.pm new file mode 100644 index 0000000000..2f2829c66f --- /dev/null +++ b/lib/NGCP/Panel/Form/Customer/PbxExtensionSubscriberEditAdmin.pm @@ -0,0 +1,69 @@ +package NGCP::Panel::Form::Customer::PbxExtensionSubscriberEditAdmin; + +use HTML::FormHandler::Moose; +use NGCP::Panel::Field::PosInteger; +extends 'NGCP::Panel::Form::Customer::PbxExtensionSubscriberEdit'; + +with 'NGCP::Panel::Render::RepeatableJs'; + +has_field 'extension' => ( + required => 0, +); + +has_field 'e164' => ( + type => '+NGCP::Panel::Field::E164', + order => 99, + required => 0, + label => 'E164 Number', + do_label => 1, + do_wrapper => 1, +); + +has_field 'alias_number' => ( + type => '+NGCP::Panel::Field::AliasNumber', + setup_for_js => 1, + do_wrapper => 1, + do_label => 0, + tags => { + controls_div => 1, + }, + wrapper_class => [qw/hfh-rep/], +); + +has_field 'alias_number_add' => ( + type => 'AddElement', + repeatable => 'alias_number', + value => 'Add another number', + element_class => [qw/btn btn-primary pull-right/], +); + +has_block 'fields' => ( + tag => 'div', + class => [qw/modal-body/], + render_list => [qw/group e164 alias_number alias_number_add display_name webusername webpassword password status external_id/ ], +); + +1; + +=head1 NAME + +NGCP::Panel::Form::Subscriber + +=head1 DESCRIPTION + +Form to modify a subscriber. + +=head1 METHODS + +=head1 AUTHOR + +Gerhard Jungwirth + +=head1 LICENSE + +This library is free software. You can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + +# vim: set tabstop=4 expandtab: diff --git a/share/templates/subscriber/master.tt b/share/templates/subscriber/master.tt index 5f06aa6159..8ed3d72110 100644 --- a/share/templates/subscriber/master.tt +++ b/share/templates/subscriber/master.tt @@ -24,7 +24,8 @@
- [% IF c.user.roles == 'admin' || c.user.roles == 'reseller' %] + [% IF c.user.roles == 'admin' || c.user.roles == 'reseller' + || c.user.roles == 'subscriberadmin' -%]