MT#12939 Manage pbx groups and members order through the web-Panel

Change-Id: I46e921cdbbe26ec2e0cf291abbb08bbabb4ae5b1
changes/66/1966/2
Irina Peshinskaya 10 years ago
parent 265d0b6e91
commit 558bb1c2fc

@ -289,6 +289,11 @@ sub base :Chained('sub_list') :PathPart('') :CaptureArgs(1) {
customer_id => $c->stash->{contract}->id ,
is_group => 1,
);
$c->stash->{subscriber_pbx_items} = NGCP::Panel::Utils::Subscriber::get_subscriber_pbx_items(
c => $c,
schema => $c->model('DB'),
subscriber => $c->stash->{subscriber} ,
);
}
}
@ -2563,7 +2568,41 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) :Does(ACL) :ACLDet
}
sub aliases_ajax :Chained('master') :PathPart('aliases/ajax') :Args(0) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) :AllowedRole(subscriberadmin) {
sub order_pbx_items :Chained('master') :PathPart('orderpbxitems') :Args(0) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) : AllowedRole(reseller) :AllowedRole(subscriberadmin) {
my ($self, $c) = @_;
my $move_id = $c->req->params->{move};
my $direction = $c->req->params->{where};
my $subscriber = $c->stash->{subscriber};
my $prov_subscriber = $subscriber->provisioning_voip_subscriber;
my $items = $c->stash->{subscriber_pbx_items};
if(defined $move_id){
for( my $i=0; $i <= $#$items; $i++ ){
if($move_id == $items->[$i]->id){
my $i_subling = $i + ( ( $direction eq 'up' ) ? -1 : 1 );
@{$items}[$i,$i_subling] = @{$items}[$i_subling,$i];
last;
}
}
NGCP::Panel::Utils::Subscriber::manage_pbx_groups(
c => $c,
schema => $c->model('DB'),
subscriber => $subscriber,
( $prov_subscriber->is_pbx_group ? 'groupmembers' : 'groups' ) => $items,
);
}
$c->stash->{subscriber_pbx_items} = NGCP::Panel::Utils::Subscriber::get_subscriber_pbx_items(
c => $c,
schema => $c->model('DB'),
subscriber => $subscriber ,
);
$c->stash->{template} = 'subscriber/pbx_group_items.tt';
$c->detach( $c->view('TT') );
}
sub aliases_ajax :Chained('master') :PathPart('ordergroups') :Args(0) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) :AllowedRole(subscriberadmin) {
my ($self, $c) = @_;
my $subscriber = $c->stash->{subscriber};

@ -399,13 +399,13 @@ sub get_pbx_subscribers_by_ids{
my $ids = $params{ids} // [];
my $customer_id = $params{customer_id} // 0;
my $is_group = $params{is_group};
my $pbx_subscribers_rs = get_pbx_subscribers_rs(@_);
my (@items,@absent_items_ids);
@items = $pbx_subscribers_rs->all();
my %items_ids_exists = map{ $_->id => 0 } @items;
if(@$ids){
@ -413,12 +413,55 @@ sub get_pbx_subscribers_by_ids{
@$order_hash{@$ids} = (1..$#$ids+1);
@items = sort { $order_hash->{$a->id} <=> $order_hash->{$b->id} } @items;
}
if($#items < $#$ids){
@absent_items_ids = grep { !exists $items_ids_exists{$_} } @{$params{ids}};
}
return \@items, (( 0 < @absent_items_ids) ? \@absent_items_ids : undef ) ;
return wantarray ? (\@items, (( 0 < @absent_items_ids) ? \@absent_items_ids : undef )) : \@items;
}
sub get_subscriber_pbx_items{
my %params = @_;
my $c = $params{c};
my $schema = $params{schema} // $c->model('DB');
my $subscriber = $params{subscriber};
my $prov_subscriber = $subscriber->provisioning_voip_subscriber;
my $items_are_groups = !($prov_subscriber->is_pbx_group);
my $ids = get_subscriber_pbx_items_ids(@_);
my $items = get_pbx_subscribers_by_ids(
c => $c,
schema => $schema,
customer_id => $subscriber->contract->id ,
is_group => $items_are_groups,
ids => $ids,
);
return wantarray ? ($items, $ids) : $items;
}
sub get_subscriber_pbx_items_ids{
my %params = @_;
my $c = $params{c};
my $schema = $params{schema} // $c->model('DB');
my $subscriber = $params{subscriber};
my $prov_subscriber = $subscriber->provisioning_voip_subscriber;
my $items_are_groups = !($prov_subscriber->is_pbx_group);
my $select_attributes = {
'order_by' => 'me.id',
'select' => 'voip_subscriber.id',
'as' => 'voip_subscriber_id',
'join' => { ( $items_are_groups ? 'group' : 'subscriber' ) => 'voip_subscriber'},
};
my $ids;
if($items_are_groups){
$ids = [ $prov_subscriber->voip_pbx_groups->search_rs(undef,$select_attributes)->get_column('voip_subscriber_id')->all];
}else{
$ids = [ $prov_subscriber->voip_pbx_group_members->search_rs(undef,$select_attributes)->get_column('voip_subscriber_id')->all];
}
return $ids;
}
sub manage_pbx_groups{
@ -431,14 +474,14 @@ sub manage_pbx_groups{
my $subscriber = $params{subscriber};
my $customer = $params{customer} // $subscriber->contract;
my ($groups) = $params{groups} // ( @$group_ids ? get_pbx_subscribers_by_ids(
my $groups = $params{groups} // ( @$group_ids ? get_pbx_subscribers_by_ids(
c => $c,
schema => $schema,
ids => $group_ids,
customer_id => $customer->id,
is_group => 1,
) : [] );
my ($groupmembers) = $params{groupmembers} // ( @$groupmember_ids ? get_pbx_subscribers_by_ids(
my $groupmembers = $params{groupmembers} // ( @$groupmember_ids ? get_pbx_subscribers_by_ids(
c => $c,
schema => $schema,
ids => $groupmember_ids,
@ -462,15 +505,15 @@ sub manage_pbx_groups{
#create new groups
foreach my $group(@{ $groups }) {
my $group_voip_subscriber = $group->provisioning_voip_subscriber;
next unless( $group_voip_subscriber && $group_voip_subscriber->is_pbx_group );
my $group_prov_subscriber = $group->provisioning_voip_subscriber;
next unless( $group_prov_subscriber && $group_prov_subscriber->is_pbx_group );
$prov_subscriber->voip_pbx_groups->create({
group_id => $group_voip_subscriber->id,
group_id => $group_prov_subscriber->id,
});
my $preferences_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c,
attribute => 'cloud_pbx_hunt_group',
prov_subscriber => $group_voip_subscriber,
prov_subscriber => $group_prov_subscriber,
);
$preferences_rs->create({ value => $subscriber_uri });
}
@ -485,9 +528,11 @@ sub manage_pbx_groups{
$group_preferences_rs->delete;
foreach my $member(@{ $groupmembers }) {
my $member_prov_subscriber = $member->provisioning_voip_subscriber;
next unless( $member_prov_subscriber && !$member_prov_subscriber->is_pbx_group );
my $member_uri = get_pbx_group_member_name( subscriber => $member );
$prov_subscriber->voip_pbx_group_members->create({
subscriber_id => $member->provisioning_voip_subscriber->id,
subscriber_id => $member_prov_subscriber->id,
});
$group_preferences_rs->create({ value => $member_uri });
}

@ -165,7 +165,9 @@
c.user.roles == 'subscriberadmin'
-%]
<script type="text/javascript" src="/js/background.js"></script>
<script type="text/javascript" src="/js/background.js"></script>
<script>
function showCallDetails(callId){
var divId = 'call_details';
@ -185,14 +187,38 @@ function showCallDetails(callId){
}
);
}
function process_pbx_items(moveId,direction){
var uri = '[%c.uri_for_action('/subscriber/order_pbx_items', [subscriber.id], 'move'=> 'moveId', 'where' => 'direction')%]';
uri=uri.replace('moveId', moveId);
uri=uri.replace('direction', direction);
fetch_into(
'pbx_group_items',
uri,
'',
function(){
mainWrapperInit();
}
);
}
</script>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#subscriber_data" href="#collapse_pbx_group_items">[%IF subscriber.provisioning_voip_subscriber.is_pbx_group; c.loc('Group members'); ELSE; c.loc('Groups'); END%]</a>
</div>
<div class="accordion-body collapse" id="collapse_pbx_group_items">
<div class="accordion-inner" id="pbx_group_items">
[%PROCESS 'subscriber/pbx_group_items.tt' %]
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#subscriber_data" href="#collapse_calls">[% c.loc('Call History') %]</a>
</div>
<div class="accordion-body collapse" id="collapse_calls">
<div class="accordion-inner">
[%PROCESS 'subscriber/call_details_wrapper.tt' %]
[%
helper.name = 'Calls';

@ -0,0 +1,39 @@
<table class="table table-bordered table-striped table-highlight table-hover">
<thead>
<tr>
<th></th>
<th>#</th>
<th>[%IF subscriber.provisioning_voip_subscriber.is_pbx_group; c.loc('Group member'); ELSE; c.loc('Group'); END%]</th>
<th class="ngcp-actions-column"></th>
</tr>
</thead>
<tbody>
[% FOR item IN subscriber_pbx_items %]
<tr class="sw_action_row">
<td>
[%IF !loop.first() %]
<a href="javascript:process_pbx_items('[%item.id%]','up');void(0);">
<i class="icon-arrow-up"></i>
</a>
[%END%]
[%IF !loop.last() %]
<a href="javascript:process_pbx_items('[%item.id%]','down');void(0);">
<i class="icon-arrow-down"></i>
</a>
[%END%]
</td>
<td>[% item.id %]</td>
<td>[% item.username %]@[% item.domain.domain %]</td>
<td class="ngcp-actions-column">
<div class="sw_actions pull-right">
<a class="btn btn-small btn-primary" href="[% c.uri_for_action('/subscriber/details',[item.id]) %]">
<i class="icon-edit"></i> [% c.loc('Subscriber') %]
</a>
</div>
</td>
</tr>
[% END %]
</tbody>
</table>
Loading…
Cancel
Save