MT#4967 Let admin/reseller always change subscriber numbers

When editing a subscriber as admin, you possibly got a stripped version of the
form, where you cannot change e164 or alias_numbers anymore.
agranig/rest
Gerhard Jungwirth 12 years ago committed by Andreas Granig
parent 7a20e3fc70
commit 2ada158ac6

@ -14,6 +14,7 @@ use NGCP::Panel::Utils::DateTime;
use NGCP::Panel::Form::Subscriber; use NGCP::Panel::Form::Subscriber;
use NGCP::Panel::Form::SubscriberEdit; use NGCP::Panel::Form::SubscriberEdit;
use NGCP::Panel::Form::Customer::PbxExtensionSubscriberEdit; use NGCP::Panel::Form::Customer::PbxExtensionSubscriberEdit;
use NGCP::Panel::Form::Customer::PbxExtensionSubscriberEditAdmin;
use NGCP::Panel::Form::SubscriberCFSimple; use NGCP::Panel::Form::SubscriberCFSimple;
use NGCP::Panel::Form::SubscriberCFTSimple; use NGCP::Panel::Form::SubscriberCFTSimple;
use NGCP::Panel::Form::SubscriberCFAdvanced; use NGCP::Panel::Form::SubscriberCFAdvanced;
@ -1591,11 +1592,16 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) {
my $subscriber = $c->stash->{subscriber}; my $subscriber = $c->stash->{subscriber};
my $prov_subscriber = $subscriber->provisioning_voip_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) { if($c->config->{features}->{cloudpbx} && $prov_subscriber->voip_pbx_group) {
$pbx_ext = 1; $pbx_ext = 1;
$c->stash(customer_id => $subscriber->contract->id); $c->stash(customer_id => $subscriber->contract->id);
if($c->user->roles eq 'subscriberadmin') {
$form = NGCP::Panel::Form::Customer::PbxExtensionSubscriberEdit->new(ctx => $c); $form = NGCP::Panel::Form::Customer::PbxExtensionSubscriberEdit->new(ctx => $c);
} else {
$is_admin = 1;
$form = NGCP::Panel::Form::Customer::PbxExtensionSubscriberEditAdmin->new(ctx => $c);
}
} else { } else {
$form = NGCP::Panel::Form::SubscriberEdit->new; $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->{password} = $prov_subscriber->password;
$params->{administrative} = $prov_subscriber->admin; $params->{administrative} = $prov_subscriber->admin;
if($subscriber->primary_number) { if($subscriber->primary_number) {
unless($pbx_ext) {
$params->{e164}->{cc} = $subscriber->primary_number->cc; $params->{e164}->{cc} = $subscriber->primary_number->cc;
$params->{e164}->{ac} = $subscriber->primary_number->ac; $params->{e164}->{ac} = $subscriber->primary_number->ac;
$params->{e164}->{sn} = $subscriber->primary_number->sn; $params->{e164}->{sn} = $subscriber->primary_number->sn;
} elsif($base_number) {
if($base_number && $pbx_ext) {
my $pbx_base_num = $base_number->{cc} . my $pbx_base_num = $base_number->{cc} .
($base_number->{ac} // ''). ($base_number->{ac} // '').
$base_number->{sn}; $base_number->{sn};
@ -1644,7 +1650,7 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) {
$params->{group}{id} = $prov_subscriber->pbx_group_id; $params->{group}{id} = $prov_subscriber->pbx_group_id;
} }
} }
unless($pbx_ext) {
my @alias_nums = (); my @alias_nums = ();
for my $num($subscriber->voip_numbers->all) { for my $num($subscriber->voip_numbers->all) {
next if $subscriber->primary_number && next if $subscriber->primary_number &&
@ -1652,7 +1658,7 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) {
push @alias_nums, { e164 => { cc => $num->cc, ac => $num->ac, sn => $num->sn } }; push @alias_nums, { e164 => { cc => $num->cc, ac => $num->ac, sn => $num->sn } };
} }
$params->{alias_number} = \@alias_nums; $params->{alias_number} = \@alias_nums;
}
$params->{status} = $subscriber->status; $params->{status} = $subscriber->status;
$params->{external_id} = $subscriber->external_id; $params->{external_id} = $subscriber->external_id;
@ -1725,7 +1731,7 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) {
})->delete_all; })->delete_all;
if($subscriber->primary_number) { if($subscriber->primary_number) {
if($pbx_ext) { if($pbx_ext && !$is_admin) {
$form->params->{e164}{cc} = $subscriber->primary_number->cc; $form->params->{e164}{cc} = $subscriber->primary_number->cc;
$form->params->{e164}{ac} = $subscriber->primary_number->ac; $form->params->{e164}{ac} = $subscriber->primary_number->ac;
$form->params->{e164}{sn} = $base_number->{sn} . $form->params->{extension}; $form->params->{e164}{sn} = $base_number->{sn} . $form->params->{extension};

@ -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:

@ -24,7 +24,8 @@
<div class="ngcp-separator"></div> <div class="ngcp-separator"></div>
<div class="accordion" id="subscriber_data"> <div class="accordion" id="subscriber_data">
[% IF c.user.roles == 'admin' || c.user.roles == 'reseller' %] [% IF c.user.roles == 'admin' || c.user.roles == 'reseller'
|| c.user.roles == 'subscriberadmin' -%]
<div class="accordion-group"> <div class="accordion-group">
<div class="accordion-heading"> <div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#subscriber_data" href="#collapse_master">Master Data</a> <a class="accordion-toggle" data-toggle="collapse" data-parent="#subscriber_data" href="#collapse_master">Master Data</a>

Loading…
Cancel
Save