From aee8feeb01aeb06034d1d05bdf8dbc02a6cea057 Mon Sep 17 00:00:00 2001 From: Andreas Granig Date: Thu, 1 Aug 2013 23:39:21 +0200 Subject: [PATCH] Rework rewrite rules. Add reseller id to rule set. Align to new DT handling. Remove DBIC handling. --- lib/NGCP/Panel/Controller/Rewrite.pm | 215 ++++++++++++------ lib/NGCP/Panel/Form/RewriteRule/AdminSet.pm | 20 ++ .../ResellerSet.pm} | 25 +- .../{RewriteRule.pm => RewriteRule/Rule.pm} | 4 +- share/templates/rewrite/rules_list.tt | 64 ++++-- share/templates/rewrite/set_list.tt | 27 ++- 6 files changed, 230 insertions(+), 125 deletions(-) create mode 100644 lib/NGCP/Panel/Form/RewriteRule/AdminSet.pm rename lib/NGCP/Panel/Form/{RewriteRuleSet.pm => RewriteRule/ResellerSet.pm} (68%) rename lib/NGCP/Panel/Form/{RewriteRule.pm => RewriteRule/Rule.pm} (97%) diff --git a/lib/NGCP/Panel/Controller/Rewrite.pm b/lib/NGCP/Panel/Controller/Rewrite.pm index ae8426d691..cacd0e4893 100644 --- a/lib/NGCP/Panel/Controller/Rewrite.pm +++ b/lib/NGCP/Panel/Controller/Rewrite.pm @@ -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 { diff --git a/lib/NGCP/Panel/Form/RewriteRule/AdminSet.pm b/lib/NGCP/Panel/Form/RewriteRule/AdminSet.pm new file mode 100644 index 0000000000..6093f72821 --- /dev/null +++ b/lib/NGCP/Panel/Form/RewriteRule/AdminSet.pm @@ -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: diff --git a/lib/NGCP/Panel/Form/RewriteRuleSet.pm b/lib/NGCP/Panel/Form/RewriteRule/ResellerSet.pm similarity index 68% rename from lib/NGCP/Panel/Form/RewriteRuleSet.pm rename to lib/NGCP/Panel/Form/RewriteRule/ResellerSet.pm index 7dc9bf7684..90fe7211c3 100644 --- a/lib/NGCP/Panel/Form/RewriteRuleSet.pm +++ b/lib/NGCP/Panel/Form/RewriteRule/ResellerSet.pm @@ -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: diff --git a/lib/NGCP/Panel/Form/RewriteRule.pm b/lib/NGCP/Panel/Form/RewriteRule/Rule.pm similarity index 97% rename from lib/NGCP/Panel/Form/RewriteRule.pm rename to lib/NGCP/Panel/Form/RewriteRule/Rule.pm index 92d637b2bb..41412dc8d3 100644 --- a/lib/NGCP/Panel/Form/RewriteRule.pm +++ b/lib/NGCP/Panel/Form/RewriteRule/Rule.pm @@ -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; diff --git a/share/templates/rewrite/rules_list.tt b/share/templates/rewrite/rules_list.tt index 01bc7dd84c..ae9700cd92 100644 --- a/share/templates/rewrite/rules_list.tt +++ b/share/templates/rewrite/rules_list.tt @@ -2,11 +2,14 @@
- Back + Back + [% back_created = 1 -%] + [% UNLESS c.user.read_only -%] Create Rewrite Rule + [% END -%]
[% IF messages -%] @@ -45,6 +48,7 @@ [% r.replace_pattern %] [% r.description %] + [% UNLESS c.user.read_only -%]
Edit @@ -53,6 +57,7 @@ Delete
+ [% END -%] [% END %] @@ -60,21 +65,48 @@ [% END -%] -

Inbound Rewrite Rules for Caller

- -[% show_rules(m_rules = rules.caller_in) %] - -

Inbound Rewrite Rules for Callee

- -[% show_rules(m_rules = rules.callee_in) %] - -

Outbound Rewrite Rules for Caller

- -[% show_rules(m_rules = rules.caller_out) %] - -

Outbound Rewrite Rules for Callee

- -[% show_rules(m_rules = rules.callee_out) %] +
+
+ +
+
+ [% show_rules(m_rules = rules.caller_in) %] +
+
+
+
+ +
+
+ [% show_rules(m_rules = rules.callee_in) %] +
+
+
+
+ +
+
+ [% show_rules(m_rules = rules.caller_out) %] +
+
+
+
+ +
+
+ [% show_rules(m_rules = rules.callee_out) %] +
+
+
+
[% IF edit_flag || create_flag -%] [% diff --git a/share/templates/rewrite/set_list.tt b/share/templates/rewrite/set_list.tt index dc6717b980..5d2ab01464 100644 --- a/share/templates/rewrite/set_list.tt +++ b/share/templates/rewrite/set_list.tt @@ -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'; -%]