|
|
|
|
@ -92,82 +92,84 @@ sub prepare_resource {
|
|
|
|
|
my %profile_allowed_attrs; # for filtering subscriber attrs on its profile
|
|
|
|
|
my $has_profile = 0;
|
|
|
|
|
my $attr = 0;
|
|
|
|
|
if($type eq "subscribers") {
|
|
|
|
|
$prefs = $item->provisioning_voip_subscriber->voip_usr_preferences;
|
|
|
|
|
$blob_rs = $c->model('DB')->resultset('voip_usr_preferences_blob');
|
|
|
|
|
my $profile = $item->provisioning_voip_subscriber->voip_subscriber_profile;
|
|
|
|
|
if ($profile) {
|
|
|
|
|
$has_profile = 1;
|
|
|
|
|
%profile_allowed_attrs = map { $_ => 1 } $profile->profile_attributes->get_column('attribute_id')->all;
|
|
|
|
|
}
|
|
|
|
|
} elsif($type eq "profiles") {
|
|
|
|
|
$attr = 1;
|
|
|
|
|
%profile_attrs = map { $_ => 1 } $item->profile_attributes->get_column('attribute_id')->all;
|
|
|
|
|
$prefs = $item->voip_prof_preferences;
|
|
|
|
|
} elsif($type eq "domains") {
|
|
|
|
|
$prefs = $item->provisioning_voip_domain->voip_dom_preferences;
|
|
|
|
|
$blob_rs = $c->model('DB')->resultset('voip_dom_preferences_blob');
|
|
|
|
|
} elsif($type eq "peerings") {
|
|
|
|
|
$prefs = $item->voip_peer_preferences;
|
|
|
|
|
$blob_rs = $c->model('DB')->resultset('voip_peer_preferences_blob');
|
|
|
|
|
} elsif($type eq "resellers") {
|
|
|
|
|
$prefs = $item->reseller_preferences;
|
|
|
|
|
} elsif($type eq "contracts") {
|
|
|
|
|
$prefs = $item->voip_contract_preferences->search(
|
|
|
|
|
{ location_id => $c->request->param('location_id') || undef },
|
|
|
|
|
undef);
|
|
|
|
|
$blob_rs = $c->model('DB')->resultset('voip_contract_preferences_blob');
|
|
|
|
|
} elsif($type eq "pbxdevicemodels") {
|
|
|
|
|
$prefs = $item->voip_dev_preferences;
|
|
|
|
|
} elsif($type eq "pbxdeviceprofiles") {
|
|
|
|
|
$prefs = $item->voip_devprof_preferences;
|
|
|
|
|
} elsif($type eq "pbxdevices") {
|
|
|
|
|
$prefs = $item->voip_fielddev_preferences;
|
|
|
|
|
} elsif($type eq "active") {
|
|
|
|
|
my $sub_prefs = $item->provisioning_voip_subscriber->voip_usr_preferences->search(undef, {columns => ['value', 'attribute_id']});
|
|
|
|
|
|
|
|
|
|
if ($type eq "active") {
|
|
|
|
|
my $sub_prefs = $item->provisioning_voip_subscriber->voip_usr_preferences->search(undef,{
|
|
|
|
|
columns => [ 'value', 'attribute_id'],
|
|
|
|
|
});
|
|
|
|
|
my $profile = $item->provisioning_voip_subscriber->voip_subscriber_profile;
|
|
|
|
|
if ($profile) {
|
|
|
|
|
$has_profile = 1;
|
|
|
|
|
%profile_allowed_attrs = map { $_ => 1 } $profile->profile_attributes->get_column('attribute_id')->all;
|
|
|
|
|
}
|
|
|
|
|
my $dom_prefs = $item->domain->provisioning_voip_domain->voip_dom_preferences->search(
|
|
|
|
|
undef,
|
|
|
|
|
{
|
|
|
|
|
columns => ['value', 'attribute_id'],
|
|
|
|
|
result_class => $sub_prefs->result_class
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
my $dom_prefs = $item->domain->provisioning_voip_domain->voip_dom_preferences->search(undef,{
|
|
|
|
|
columns => ['value', 'attribute_id'],
|
|
|
|
|
result_class => $sub_prefs->result_class,
|
|
|
|
|
});
|
|
|
|
|
#search for location if IP is provided
|
|
|
|
|
my $location_id;
|
|
|
|
|
if ($c->request->param('location_ip')) {
|
|
|
|
|
my $location = $schema->resultset('voip_contract_locations')->search(
|
|
|
|
|
{
|
|
|
|
|
'voip_contract_location_blocks.ip' => $c->request->param('location_ip')
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
join => 'voip_contract_location_blocks'
|
|
|
|
|
}
|
|
|
|
|
)->first;
|
|
|
|
|
my $location = $schema->resultset('voip_contract_locations')->search({
|
|
|
|
|
'voip_contract_location_blocks.ip' => $c->request->param('location_ip')
|
|
|
|
|
},{
|
|
|
|
|
join => 'voip_contract_location_blocks'
|
|
|
|
|
})->first;
|
|
|
|
|
$location_id = $location->id if ($location);
|
|
|
|
|
}
|
|
|
|
|
my $ct_prefs = $item->contract->voip_contract_preferences->search(
|
|
|
|
|
{
|
|
|
|
|
location_id => $location_id || undef
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
columns => ['value', 'attribute_id'],
|
|
|
|
|
result_class => $sub_prefs->result_class
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
my $ct_prefs = $item->contract->voip_contract_preferences->search({
|
|
|
|
|
location_id => $location_id || undef
|
|
|
|
|
},{
|
|
|
|
|
columns => ['value', 'attribute_id'],
|
|
|
|
|
result_class => $sub_prefs->result_class,
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
$prefs = $sub_prefs->union($ct_prefs->search({attribute_id => {-not_in => [map {$_->get_column('attribute_id')} $sub_prefs->all]}}));
|
|
|
|
|
$prefs = $prefs->union($dom_prefs->search({attribute_id => {-not_in => [map {$_->get_column('attribute_id')} $prefs->all]}}));
|
|
|
|
|
|
|
|
|
|
$prefs = $prefs->search({
|
|
|
|
|
}, {
|
|
|
|
|
prefetch => 'attribute',
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
if($type eq "subscribers") {
|
|
|
|
|
$prefs = $item->provisioning_voip_subscriber->voip_usr_preferences;
|
|
|
|
|
$blob_rs = $c->model('DB')->resultset('voip_usr_preferences_blob');
|
|
|
|
|
my $profile = $item->provisioning_voip_subscriber->voip_subscriber_profile;
|
|
|
|
|
if ($profile) {
|
|
|
|
|
$has_profile = 1;
|
|
|
|
|
%profile_allowed_attrs = map { $_ => 1 } $profile->profile_attributes->get_column('attribute_id')->all;
|
|
|
|
|
}
|
|
|
|
|
} elsif($type eq "profiles") {
|
|
|
|
|
$attr = 1;
|
|
|
|
|
%profile_attrs = map { $_ => 1 } $item->profile_attributes->get_column('attribute_id')->all;
|
|
|
|
|
$prefs = $item->voip_prof_preferences;
|
|
|
|
|
} elsif($type eq "domains") {
|
|
|
|
|
$prefs = $item->provisioning_voip_domain->voip_dom_preferences;
|
|
|
|
|
$blob_rs = $c->model('DB')->resultset('voip_dom_preferences_blob');
|
|
|
|
|
} elsif($type eq "peerings") {
|
|
|
|
|
$prefs = $item->voip_peer_preferences;
|
|
|
|
|
$blob_rs = $c->model('DB')->resultset('voip_peer_preferences_blob');
|
|
|
|
|
} elsif($type eq "resellers") {
|
|
|
|
|
$prefs = $item->reseller_preferences;
|
|
|
|
|
} elsif($type eq "contracts") {
|
|
|
|
|
$prefs = $item->voip_contract_preferences->search(
|
|
|
|
|
{ location_id => $c->request->param('location_id') || undef },
|
|
|
|
|
undef);
|
|
|
|
|
$blob_rs = $c->model('DB')->resultset('voip_contract_preferences_blob');
|
|
|
|
|
} elsif($type eq "pbxdevicemodels") {
|
|
|
|
|
$prefs = $item->voip_dev_preferences;
|
|
|
|
|
} elsif($type eq "pbxdeviceprofiles") {
|
|
|
|
|
$prefs = $item->voip_devprof_preferences;
|
|
|
|
|
} elsif($type eq "pbxdevices") {
|
|
|
|
|
$prefs = $item->voip_fielddev_preferences;
|
|
|
|
|
}
|
|
|
|
|
$prefs = $prefs->search({
|
|
|
|
|
}, {
|
|
|
|
|
prefetch => 'attribute',
|
|
|
|
|
order_by => { '-asc' => 'me.id' },
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
$prefs = $prefs->search({
|
|
|
|
|
}, {
|
|
|
|
|
prefetch => 'attribute',
|
|
|
|
|
order_by => { '-asc' => 'me.id' },
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
my $resource;
|
|
|
|
|
foreach my $pref($prefs->all) {
|
|
|
|
|
|