Rework rewrite rules.

Add reseller id to rule set.
Align to new DT handling.
Remove DBIC handling.
agranig/1_0_subfix
Andreas Granig 13 years ago
parent 4b956f6e8a
commit aee8feeb01

@ -1,11 +1,11 @@
package NGCP::Panel::Controller::Rewrite;
use Sipwise::Base;
BEGIN { extends 'Catalyst::Controller'; }
use NGCP::Panel::Form::RewriteRuleSet;
use NGCP::Panel::Form::RewriteRule;
use NGCP::Panel::Form::RewriteRule::AdminSet;
use NGCP::Panel::Form::RewriteRule::ResellerSet;
use NGCP::Panel::Form::RewriteRule::Rule;
use NGCP::Panel::Utils::XMLDispatcher;
use NGCP::Panel::Utils::Navigation;
@ -19,6 +19,19 @@ sub auto :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRol
sub set_list :Chained('/') :PathPart('rewrite') :CaptureArgs(0) {
my ( $self, $c ) = @_;
$c->stash->{sets_rs} = $c->model('DB')->resultset('voip_rewrite_rule_sets');
unless($c->user->is_superuser) {
$c->stash->{sets_rs} = $c->stash->{sets_rs}->search({
reseller_id => $c->user->reseller_id
});
}
$c->stash->{set_dt_columns} = NGCP::Panel::Utils::Datatables::set_columns($c, [
{ name => 'id', search => 1, title => '#' },
{ name => 'reseller.name', search => 1, title => 'Reseller' },
{ name => 'name', search => 1, title => 'Name' },
{ name => 'description', search => 1, title => 'Description' },
]);
$c->stash(template => 'rewrite/set_list.tt');
}
@ -28,13 +41,8 @@ sub set_root :Chained('set_list') :PathPart('') :Args(0) {
sub set_ajax :Chained('set_list') :PathPart('ajax') :Args(0) {
my ($self, $c) = @_;
my $resultset = $c->model('DB')->resultset('voip_rewrite_rule_sets');
$c->forward( "/ajax_process_resultset", [$resultset,
["id", "name", "description"],
["name", "description"]]);
my $rs = $c->stash->{sets_rs};
NGCP::Panel::Utils::Datatables::process($c, $rs, $c->stash->{set_dt_columns});
$c->detach( $c->view("JSON") );
}
@ -42,18 +50,14 @@ sub set_base :Chained('set_list') :PathPart('') :CaptureArgs(1) {
my ($self, $c, $set_id) = @_;
unless($set_id && $set_id->is_integer) {
$c->flash(messages => [{type => 'error', text => 'Invalid rewrite rule set id detected!'}]);
$c->response->redirect($c->uri_for());
$c->detach;
return;
$c->flash(messages => [{type => 'error', text => 'Invalid rewrite rule set id detected'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/rewrite'));
}
my $res = $c->model('DB')->resultset('voip_rewrite_rule_sets')->find($set_id);
my $res = $c->stash->{sets_rs}->find($set_id);
unless(defined($res)) {
$c->flash(messages => [{type => 'error', text => 'Rewrite rule set does not exist!'}]);
$c->response->redirect($c->uri_for());
$c->detach;
return;
$c->flash(messages => [{type => 'error', text => 'Rewrite rule set does not exist'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/rewrite'));
}
$c->stash(set_result => $res);
}
@ -62,17 +66,42 @@ sub set_edit :Chained('set_base') :PathPart('edit') {
my ($self, $c) = @_;
my $posted = ($c->request->method eq 'POST');
my $form = NGCP::Panel::Form::RewriteRuleSet->new;
my $params = { $c->stash->{set_result}->get_inflated_columns };
$params->{reseller}{id} = delete $params->{reseller_id};
$params = $params->merge($c->session->{created_objects});
my $form;
if($c->user->is_superuser) {
$form = NGCP::Panel::Form::RewriteRule::AdminSet->new;
} else {
$form = NGCP::Panel::Form::RewriteRule::ResellerSet->new;
}
$form->process(
posted => $posted,
params => $c->request->params,
action => $c->uri_for_action('/rewrite/set_edit'),
item => $c->stash->{set_result},
item => $params,
);
if($form->validated) {
$c->flash(messages => [{type => 'success', text => 'Rewrite Rule Set successfully changed!'}]);
$c->response->redirect($c->uri_for());
return;
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c,
form => $form,
fields => {
'reseller.create' => $c->uri_for('/reseller/create'),
},
back_uri => $c->req->uri,
);
if($posted && $form->validated) {
try {
if($c->user->is_superuser) {
$form->values->{reseller_id} = $form->values->{reseller}{id};
delete $form->values->{reseller};
}
$c->stash->{set_result}->update($form->values);
delete $c->session->{created_objects}->{reseller};
$c->flash(messages => [{type => 'success', text => 'Rewrite rule set successfully updated'}]);
} catch($e) {
$c->log->error("failed to update rewrite rule set: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to update rewrite rule set'}]);
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/rewrite'));
}
$c->stash(form => $form);
@ -84,33 +113,59 @@ sub set_delete :Chained('set_base') :PathPart('delete') {
try {
$c->stash->{set_result}->delete;
$c->flash(messages => [{type => 'success', text => 'Rewrite Rule Set successfully deleted!'}]);
} catch (DBIx::Class::Exception $e) {
$c->flash(messages => [{type => 'error', text => 'Delete failed.'}]);
$c->log->info("Delete failed: " . $e);
};
$c->response->redirect($c->uri_for());
$c->flash(messages => [{type => 'success', text => 'Rewrite rule set successfully deleted'}]);
} catch($e) {
$c->log->info("failed to delete rewrite rule set: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to delete rewrite rule set'}]);
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/rewrite'));
}
sub set_create :Chained('set_list') :PathPart('create') :Args(0) {
my ($self, $c) = @_;
my $form = NGCP::Panel::Form::RewriteRuleSet->new;
my $posted = ($c->request->method eq 'POST');
my $params = {};
$params = $params->merge($c->session->{created_objects});
my $form;
if($c->user->is_superuser) {
$form = NGCP::Panel::Form::RewriteRule::AdminSet->new;
} else {
$form = NGCP::Panel::Form::RewriteRule::ResellerSet->new;
}
$form->process(
posted => ($c->request->method eq 'POST'),
posted => $posted,
params => $c->request->params,
action => $c->uri_for_action('/rewrite/set_create'),
item => $c->model('DB')->resultset('voip_rewrite_rule_sets')->new_result({}),
item => $params,
);
if($form->validated) {
$c->flash(messages => [{type => 'success', text => 'Rewrite Rule Set successfully created!'}]);
$c->response->redirect($c->uri_for_action('/rewrite/set_root'));
return;
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c,
form => $form,
fields => {
'reseller.create' => $c->uri_for('/reseller/create'),
},
back_uri => $c->req->uri,
);
if($posted && $form->validated) {
try {
if($c->user->is_superuser) {
$form->values->{reseller_id} = $form->values->{reseller}{id};
delete $form->values->{reseller};
} else {
$form->values->{reseller_id} = $c->user->reseller_id;
}
$c->stash->{sets_rs}->create($form->values);
delete $c->session->{created_objects}->{reseller};
$c->flash(messages => [{type => 'success', text => 'Rewrite rule set successfully created'}]);
} catch($e) {
$c->log->error("failed to create rewrite rule set: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to create rewrite rule set'}]);
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/rewrite'));
}
$c->stash(close_target => $c->uri_for());
$c->stash(create_flag => 1);
$c->stash(form => $form);
$c->stash(create_flag => 1);
}
sub rules_list :Chained('set_base') :PathPart('rules') :CaptureArgs(0) {
@ -200,18 +255,14 @@ sub rules_base :Chained('rules_list') :PathPart('') :CaptureArgs(1) {
my ($self, $c, $rule_id) = @_;
unless($rule_id && $rule_id->is_integer) {
$c->flash(messages => [{type => 'error', text => 'Invalid rewrite rule id detected!'}]);
$c->response->redirect($c->stash->{rules_uri});
$c->detach;
return;
$c->flash(messages => [{type => 'error', text => 'Invalid rewrite rule id detected'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{rules_uri});
}
my $res = $c->stash->{rules_rs}->find($rule_id);
unless(defined($res)) {
$c->flash(messages => [{type => 'error', text => 'Rewrite rule does not exist!'}]);
$c->response->redirect($c->stash->{rules_uri});
$c->detach;
return;
$c->flash(messages => [{type => 'error', text => 'Rewrite rule does not exist'}]);
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{rules_uri});
}
$c->stash(rule_result => $res);
}
@ -220,18 +271,28 @@ sub rules_edit :Chained('rules_base') :PathPart('edit') {
my ($self, $c) = @_;
my $posted = ($c->request->method eq 'POST');
my $form = NGCP::Panel::Form::RewriteRule->new;
my $form = NGCP::Panel::Form::RewriteRule::Rule->new;
$form->process(
posted => $posted,
params => $c->request->params,
action => $c->uri_for_action('/rewrite/rules_edit', $c->req->captures),
item => $c->stash->{rule_result},
);
if($form->validated) {
$self->_sip_dialplan_reload();
$c->flash(messages => [{type => 'success', text => 'Rewrite Rule successfully changed!'}]);
$c->response->redirect($c->stash->{rules_uri});
return;
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c,
form => $form,
fields => {},
back_uri => $c->req->uri,
);
if($posted && $form->validated) {
try {
$c->stash->{rule_result}->update($form->values);
$self->_sip_dialplan_reload();
$c->flash(messages => [{type => 'success', text => 'Rewrite rule successfully updated'}]);
} catch($e) {
$c->log->error("failed to update rewrite rule: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to update rewrite rule'}]);
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{rules_uri});
}
$c->stash(form => $form);
@ -244,33 +305,43 @@ sub rules_delete :Chained('rules_base') :PathPart('delete') {
try {
$c->stash->{rule_result}->delete;
$self->_sip_dialplan_reload();
$c->flash(messages => [{type => 'success', text => 'Rewrite Rule successfully deleted!'}]);
} catch (DBIx::Class::Exception $e) {
$c->flash(messages => [{type => 'error', text => 'Delete failed.'}]);
$c->log->info("Delete failed: " . $e);
$c->flash(messages => [{type => 'success', text => 'Rewrite rule successfully deleted'}]);
} catch($e) {
$c->log->info("failed to delete rewrite rule: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to delete rewrite rule'}]);
};
$c->response->redirect($c->stash->{rules_uri});
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{rules_uri});
}
sub rules_create :Chained('rules_list') :PathPart('create') :Args(0) {
my ($self, $c) = @_;
my $form = NGCP::Panel::Form::RewriteRule->new;
my $posted = ($c->request->method eq 'POST');
my $form = NGCP::Panel::Form::RewriteRule::Rule->new;
$form->process(
posted => ($c->request->method eq 'POST'),
posted => $posted,
params => $c->request->params,
action => $c->uri_for_action('/rewrite/rules_create', $c->req->captures),
item => $c->stash->{rules_rs}->new_result({}),
);
if($form->validated) {
$self->_sip_dialplan_reload();
$c->flash(messages => [{type => 'success', text => 'Rewrite Rule successfully created!'}]);
$c->response->redirect($c->stash->{rules_uri});
return;
NGCP::Panel::Utils::Navigation::check_form_buttons(
c => $c,
form => $form,
fields => {},
back_uri => $c->req->uri,
);
if($posted && $form->validated) {
try {
$c->stash->{rules_rs}->create($form->values);
$self->_sip_dialplan_reload();
$c->flash(messages => [{type => 'success', text => 'Rewrite rule successfully created'}]);
} catch($e) {
$c->log->error("failed to create rewrite rule: $e");
$c->flash(messages => [{type => 'error', text => 'Failed to create rewrite rule'}]);
}
NGCP::Panel::Utils::Navigation::back_or($c, $c->stash->{rules_uri});
}
$c->stash(create_flag => 1);
$c->stash(form => $form);
$c->stash(create_flag => 1);
}
sub _sip_dialplan_reload {

@ -0,0 +1,20 @@
package NGCP::Panel::Form::RewriteRule::AdminSet;
use HTML::FormHandler::Moose;
extends 'NGCP::Panel::Form::RewriteRule::ResellerSet';
use Moose::Util::TypeConstraints;
has_field 'reseller' => (
type => '+NGCP::Panel::Field::Reseller',
not_nullable => 1,
);
has_block 'fields' => (
tag => 'div',
class => [qw/modal-body/],
render_list => [qw/reseller name description/],
);
1;
# vim: set tabstop=4 expandtab:

@ -1,7 +1,7 @@
package NGCP::Panel::Form::RewriteRuleSet;
package NGCP::Panel::Form::RewriteRule::ResellerSet;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler::Model::DBIC';
extends 'HTML::FormHandler';
use Moose::Util::TypeConstraints;
use HTML::FormHandler::Widget::Block::Bootstrap;
@ -42,25 +42,4 @@ has_block 'actions' => (
1;
=head1 NAME
NGCP::Panel::Form::RewriteRuleSet
=head1 DESCRIPTION
Form to modify a provisioning.rewrite_rule_sets row.
=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:

@ -1,7 +1,7 @@
package NGCP::Panel::Form::RewriteRule;
package NGCP::Panel::Form::RewriteRule::Rule;
use HTML::FormHandler::Moose;
extends 'HTML::FormHandler::Model::DBIC';
extends 'HTML::FormHandler';
use Moose::Util::TypeConstraints;
use HTML::FormHandler::Widget::Block::Bootstrap;

@ -2,11 +2,14 @@
<div class="row">
<span>
<a class="btn btn-primary btn-large" href="[% c.uri_for() %]"><i class="icon-arrow-left"></i> Back</a>
<a class="btn btn-primary btn-large" href="[% c.uri_for('/back') %]"><i class="icon-arrow-left"></i> Back</a>
</span>
[% back_created = 1 -%]
[% UNLESS c.user.read_only -%]
<span>
<a class="btn btn-primary btn-large" href="[% c.uri_for_action('/rewrite/rules_create', [c.req.captures.0]) %]"><i class="icon-star"></i> Create Rewrite Rule</a>
</span>
[% END -%]
</div>
[% IF messages -%]
@ -45,6 +48,7 @@
<td>[% r.replace_pattern %]</td>
<td>[% r.description %]</td>
<td class="ngcp-actions-column">
[% UNLESS c.user.read_only -%]
<div class="sw_actions pull-right">
<a class="btn btn-small btn-primary" href="[% c.uri_for_action('/rewrite/rules_edit',[set_result.id, r.id]) %]">
<i class="icon-edit"></i> Edit
@ -53,6 +57,7 @@
<i class="icon-trash"></i> Delete
</a>
</div>
[% END -%]
</td>
</tr>
[% END %]
@ -60,21 +65,48 @@
</table>
[% END -%]
<h3>Inbound Rewrite Rules for Caller</h3>
[% show_rules(m_rules = rules.caller_in) %]
<h3>Inbound Rewrite Rules for Callee</h3>
[% show_rules(m_rules = rules.callee_in) %]
<h3>Outbound Rewrite Rules for Caller</h3>
[% show_rules(m_rules = rules.caller_out) %]
<h3>Outbound Rewrite Rules for Callee</h3>
[% show_rules(m_rules = rules.callee_out) %]
<div class="accordion" id="rewrite_rules">
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#rewrite_rules" href="#collapse_icaller">Inbound Rewrite Rules for Caller</a>
</div>
<div class="accordion-body collapse" id="collapse_icaller">
<div class="accordion-inner">
[% show_rules(m_rules = rules.caller_in) %]
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#rewrite_rules" href="#collapse_icallee">Inbound Rewrite Rules for Callee</a>
</div>
<div class="accordion-body collapse" id="collapse_icallee">
<div class="accordion-inner">
[% show_rules(m_rules = rules.callee_in) %]
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#rewrite_rules" href="#collapse_ocaller">Outbound Rewrite Rules for Caller</a>
</div>
<div class="accordion-body collapse" id="collapse_ocaller">
<div class="accordion-inner">
[% show_rules(m_rules = rules.caller_out) %]
</div>
</div>
</div>
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#rewrite_rules" href="#collapse_ocallee">Outbound Rewrite Rules for Callee</a>
</div>
<div class="accordion-body collapse" id="collapse_ocallee">
<div class="accordion-inner">
[% show_rules(m_rules = rules.callee_out) %]
</div>
</div>
</div>
</div>
[% IF edit_flag || create_flag -%]
[%

@ -1,26 +1,29 @@
[% META title = 'Rewrite Rule Sets' -%]
[%
helper.name = 'Rewrite Rule Sets';
helper.show_create_button = 1;
helper.messages = messages;
helper.column_titles = [ '#', 'Name', 'Description' ];
helper.column_fields = [ 'id', 'name', 'description' ];
helper.dt_columns = set_dt_columns;
helper.close_target = close_target;
helper.create_flag = create_flag;
helper.edit_flag = edit_flag;
helper.form_object = form;
helper.ajax_uri = c.uri_for_action( "/rewrite/set_ajax" );
helper.base_uri = c.uri_for_action( "/rewrite/set_root" );
helper.dt_buttons = [
{ name = 'Edit', uri = "/rewrite/'+full[\"id\"]+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' },
{ name = 'Delete', uri = "/rewrite/'+full[\"id\"]+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' },
{ name = 'Rules', uri = "/rewrite/'+full[\"id\"]+'/rules", class = 'btn-small btn-tertiary', icon = 'icon-list' },
];
helper.top_buttons = [
{ name = 'Create Rewrite Rule Set', uri = c.uri_for('/rewrite/create'), icon = 'icon-star' },
];
UNLESS c.user.read_only;
helper.dt_buttons = [
{ name = 'Edit', uri = "/rewrite/'+full.id+'/edit", class = 'btn-small btn-primary', icon = 'icon-edit' },
{ name = 'Delete', uri = "/rewrite/'+full.id+'/delete", class = 'btn-small btn-secondary', icon = 'icon-trash' },
{ name = 'Rules', uri = "/rewrite/'+full.id+'/rules", class = 'btn-small btn-tertiary', icon = 'icon-list' },
];
helper.top_buttons = [
{ name = 'Create Rewrite Rule Set', uri = c.uri_for('/rewrite/create'), icon = 'icon-star' },
];
ELSE;
helper.dt_buttons = [
{ name = 'Rules', uri = "/rewrite/'+full.id+'/rules", class = 'btn-small btn-tertiary', icon = 'icon-list' },
];
END;
PROCESS 'helpers/datatables.tt';
-%]

Loading…
Cancel
Save