TT#2395 UPN rewrite cli via Panel

Change-Id: Ib2d72d927b5538a378dbd24fb13e359925aefd96
changes/55/8455/2
Gerhard Jungwirth 10 years ago
parent 2e3c713ec1
commit 234fcaf49c

@ -39,11 +39,12 @@ use NGCP::Panel::Form::Voicemail::Email;
use NGCP::Panel::Form::Voicemail::Attach;
use NGCP::Panel::Form::Voicemail::Delete;
use NGCP::Panel::Form::Reminder;
use NGCP::Panel::Form::Subscriber::AutoAttendant;
use NGCP::Panel::Form::Subscriber::EditWebpass;
use NGCP::Panel::Form::Subscriber::TrustedSource;
use NGCP::Panel::Form::Subscriber::Location;
use NGCP::Panel::Form::Subscriber::SpeedDial;
use NGCP::Panel::Form::Subscriber::AutoAttendant;
use NGCP::Panel::Form::Subscriber::TrustedSource;
use NGCP::Panel::Form::Subscriber::UpnRewriteSet;
use NGCP::Panel::Form::Faxserver::Active;
use NGCP::Panel::Form::Faxserver::Destination;
use NGCP::Panel::Form::Faxserver::Name;
@ -676,6 +677,10 @@ sub preferences :Chained('base') :PathPart('preferences') :Args(0) {
->first;
$c->stash(cf_ringtimeout => $ringtimeout_preference ? $ringtimeout_preference->value : undef);
my @upn_rewrite_sets = $c->stash->{subscriber}->provisioning_voip_subscriber
->upn_rewrite_sets_rs->all;
$c->stash->{upn_rw_sets} = \@upn_rewrite_sets;
if($prov_subscriber->profile_id && (
$c->user->roles eq "subscriberadmin" || $c->user->roles eq "subscriber")) {
my @attribute_ids = $prov_subscriber->voip_subscriber_profile->profile_attributes->get_column('attribute_id')->all;
@ -3904,6 +3909,172 @@ sub delete_trusted :Chained('trusted_base') :PathPart('delete') :Args(0) {
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]));
}
sub create_upn_rewrite :Chained('base') :PathPart('preferences/upnrewrite/create') :Args(0) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) {
my ($self, $c) = @_;
my $posted = ($c->request->method eq 'POST');
my $upn_rws_rs = $c->stash->{subscriber}->provisioning_voip_subscriber->upn_rewrite_sets_rs;
my $params = {};
my $form = NGCP::Panel::Form::Subscriber::UpnRewriteSet->new;
$form->process(
posted => $posted,
params => $c->req->params,
);
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c,
form => $form,
fields => {},
back_uri => $c->req->uri,
);
if($posted && $form->validated) {
try {
my $new_upnr_set = $upn_rws_rs->create({
new_cli => $form->values->{new_cli},
upn_rewrite_sources => [
map { { pattern => $_->{pattern} }; } @{ $form->values->{upn_rewrite_sources} },
],
});
my $upnr_pref_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'upn_rewrite_id',
prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber);
$upnr_pref_rs->create({ value => $new_upnr_set->id });
NGCP::Panel::Utils::Message::info(
c => $c,
desc => $c->loc('Successfully created UPN rewrite set'),
);
} catch($e) {
NGCP::Panel::Utils::Message::error(
c => $c,
error => $e,
desc => $c->loc('Failed to create UPN rewrite set'),
);
}
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]));
}
$c->stash(
template => 'subscriber/preferences.tt',
edit_cf_flag => 1,
cf_description => $c->loc('UPN rewrite set'),
cf_form => $form,
);
}
sub upn_rewrite_base :Chained('base') :PathPart('preferences/upnrewrite') :CaptureArgs(1) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) {
my ($self, $c, $rws_id) = @_;
$c->stash->{upn_rws} = $c->stash->{subscriber}->provisioning_voip_subscriber
->upn_rewrite_sets_rs->find($rws_id);
unless($c->stash->{upn_rws}) {
NGCP::Panel::Utils::Message::error(
c => $c,
log => "rewrite set id '$rws_id' not found for subscriber uuid ".$c->stash->{subscriber}->uuid,
desc => $c->loc('Rewrite Set entry not found'),
);
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]));
}
}
sub edit_upn_rewrite :Chained('upn_rewrite_base') :PathPart('edit') {
my ($self, $c) = @_;
$c->detach('/denied_page')
if(($c->user->roles eq "admin" || $c->user->roles eq "reseller") && $c->user->read_only);
my $posted = ($c->request->method eq 'POST');
my $upn_rws = $c->stash->{upn_rws};
my $params = $posted ? {} : {
$upn_rws->get_inflated_columns,
upn_rewrite_sources => [ $upn_rws->upn_rewrite_sources->all ],
};
my $form = NGCP::Panel::Form::Subscriber::UpnRewriteSet->new;
$form->process(
params => $c->req->params,
posted => $posted,
item => $params,
);
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c,
form => $form,
fields => {},
back_uri => $c->req->uri,
);
if($posted && $form->validated) {
try {
if ($upn_rws->new_cli ne $form->values->{new_cli}) {
$upn_rws->update({ new_cli => $form->values->{new_cli}});
}
$upn_rws->upn_rewrite_sources->delete_all;
for my $s (@{ $form->values->{upn_rewrite_sources} }) {
$upn_rws->upn_rewrite_sources->create({
pattern => $s->{pattern},
});
}
NGCP::Panel::Utils::Message::info(
c => $c,
desc => $c->loc('Successfully updated UPN rewrite set'),
);
} catch($e) {
NGCP::Panel::Utils::Message::error(
c => $c,
error => $e,
desc => $c->loc('Failed to update UPN rewrite set'),
);
}
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]));
}
$c->stash(
template => 'subscriber/preferences.tt',
edit_cf_flag => 1,
cf_description => $c->loc('UPN rewrite set'),
cf_form => $form,
);
}
sub delete_upn_rewrite :Chained('upn_rewrite_base') :PathPart('delete') :Args(0) {
my ($self, $c) = @_;
$c->detach('/denied_page')
if(($c->user->roles eq "admin" || $c->user->roles eq "reseller") && $c->user->read_only);
try {
my $upnr_pref_rs = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'upn_rewrite_id',
prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber);
my $upnr_pref = $upnr_pref_rs->find({value => $c->stash->{upn_rws}->id});
if ($upnr_pref) {
$upnr_pref->delete;
} else {
$c->log->warn("UPN rewrite preferences: upn_rewrite_sets and preferences are out of sync!");
}
$c->stash->{upn_rws}->delete;
NGCP::Panel::Utils::Message::info(
c => $c,
data => { $c->stash->{upn_rws} ? $c->stash->{upn_rws}->get_inflated_columns : () },
desc => $c->loc('Successfully deleted UPN rewrite set'),
);
} catch($e) {
NGCP::Panel::Utils::Message::error(
c => $c,
error => $e,
desc => $c->loc('Failed to delete UPN rewrite set.'),
);
}
NGCP::Panel::Utils::Navigation::back_or($c,
$c->uri_for_action('/subscriber/preferences', [$c->req->captures->[0]]));
}
sub ajax_speeddial :Chained('base') :PathPart('preferences/speeddial/ajax') :Args(0) {
my ($self, $c) = @_;

@ -0,0 +1,87 @@
package NGCP::Panel::Form::Subscriber::UpnRewriteSet;
use Sipwise::Base;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler';
with 'NGCP::Panel::Render::RepeatableJs';
use HTML::FormHandler::Widget::Block::Bootstrap;
has '+widget_wrapper' => ( default => 'Bootstrap' );
has_field 'submitid' => ( type => 'Hidden' );
sub build_render_list {return [qw/submitid fields actions/]}
sub build_form_element_class {return [qw/form-horizontal/] }
has_field 'new_cli' => (
type => 'Text',
required => 1,
maxlength => 45,
element_attr => {
rel => ['tooltip'],
title => ['The new CLI to be used as UPN, when one of the patterns matches.'],
},
);
has_field 'upn_rewrite_sources' => (
type => 'Repeatable',
required => 1,
setup_for_js => 1,
do_wrapper => 1,
do_label => 0,
tags => {
controls_div => 1,
},
wrapper_class => [qw/hfh-rep/],
element_attr => {
rel => ['tooltip'],
title => ['An Array of source CLI patterns'],
},
);
has_field 'upn_rewrite_sources.id' => (
type => 'Hidden',
);
has_field 'upn_rewrite_sources.pattern' => (
type => '+NGCP::Panel::Field::Regexp',
maxlength => 45,
required => 1,
wrapper_class => [qw/hfh-rep-field/],
);
has_field 'upn_rewrite_sources.rm' => (
type => 'RmElement',
value => 'Remove',
element_class => [qw/btn btn-primary pull-right/],
);
has_field 'upn_rewrite_sources_add' => (
type => 'AddElement',
repeatable => 'upn_rewrite_sources',
value => 'Add another Pattern',
element_class => [qw/btn btn-primary pull-right/],
);
has_field 'save' => (
type => 'Submit',
value => 'Save',
element_class => [qw/btn btn-primary/],
label => '',
);
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/new_cli upn_rewrite_sources upn_rewrite_sources_add/],
);
has_block 'actions' => (
tag => 'div',
class => [qw/modal-footer/],
render_list => [qw/save/],
);
1;
# vim: set tabstop=4 expandtab:

@ -674,6 +674,66 @@
[% END -%]
[% UNLESS c.user.roles == 'subscriber' || c.user.roles == 'subscriberadmin' -%]
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#preference_groups" href="#collapse_upnr">[% c.loc('UPN Rewrite') %]</a>
</div>
<div class="accordion-body collapse" id="collapse_upnr">
<div class="accordion-inner">
[% IF (c.user.roles == "admin" || c.user.roles == "reseller") && c.user.read_only != 1 -%]
<a class="btn btn-tertiary btn-large" href="[% c.uri_for_action("/subscriber/create_upn_rewrite", [c.req.captures.0]) %]">
<i class="icon-star"></i> [% c.loc('Create') %]
</a>
[% END -%]
<div class="ngcp-separator"></div>
<table class="table table-bordered table-striped table-highlight table-hover" id="preferences_table_upnr">
<thead>
<tr>
<th>[% c.loc('#') %]</th>
<th>[% c.loc('New CLI') %]</th>
<th>[% c.loc('Patterns') %]</th>
[% # one for actions -%]
<th class="ngcp-actions-column"></th>
</tr>
</thead>
<tbody>
[% FOR set IN upn_rw_sets -%]
<tr class="sw_action_row">
<td>
[% set.id %]
</td>
<td>
[% set.new_cli %]
</td>
<td>
[%
FOR s IN set.upn_rewrite_sources.all;
s.pattern _ "<br/>";
END;
%]
</td>
<td class="ngcp-actions-column">
<div class="sw_actions">
[% IF (c.user.roles == "admin" || c.user.roles == "reseller") && c.user.read_only != 1 -%]
<a class="btn btn-primary btn-small" href="[% c.uri_for_action("/subscriber/edit_upn_rewrite", [c.req.captures.0, set.id]) %]"><i class="icon-edit"></i> [% c.loc('Edit') %]</a>
<a class="btn btn-secondary btn-small" href="[% c.uri_for_action("/subscriber/delete_upn_rewrite", [c.req.captures.0, set.id]) %]" data-confirm="Delete"><i class="icon-trash"></i> [% c.loc('Delete') %]</a>
[% END -%]
</div>
</td>
</tr>
[% END %]
</tbody>
</table>
</div>
</div>
</div>
[% END -%]
[%
PROCESS 'helpers/pref_table.tt';

Loading…
Cancel
Save