From 4f73672fb80a7f09c132dc4fe27d956030b0bf11 Mon Sep 17 00:00:00 2001 From: Gerhard Jungwirth Date: Mon, 19 Aug 2013 16:42:08 +0200 Subject: [PATCH] Copy rewrite rule set functionality Mantis: 0003135 --- lib/NGCP/Panel/Controller/Rewrite.pm | 57 +++++++++++++++++++++ lib/NGCP/Panel/Form/RewriteRule/CloneSet.pm | 47 +++++++++++++++++ share/templates/rewrite/set_list.tt | 7 ++- 3 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 lib/NGCP/Panel/Form/RewriteRule/CloneSet.pm diff --git a/lib/NGCP/Panel/Controller/Rewrite.pm b/lib/NGCP/Panel/Controller/Rewrite.pm index 6e8f94eadf..c7e102c89e 100644 --- a/lib/NGCP/Panel/Controller/Rewrite.pm +++ b/lib/NGCP/Panel/Controller/Rewrite.pm @@ -5,6 +5,7 @@ BEGIN { extends 'Catalyst::Controller'; } use NGCP::Panel::Form::RewriteRule::AdminSet; use NGCP::Panel::Form::RewriteRule::ResellerSet; +use NGCP::Panel::Form::RewriteRule::CloneSet; use NGCP::Panel::Form::RewriteRule::Rule; use NGCP::Panel::Utils::XMLDispatcher; use NGCP::Panel::Utils::Navigation; @@ -121,6 +122,55 @@ sub set_delete :Chained('set_base') :PathPart('delete') { NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/rewrite')); } +sub set_clone :Chained('set_base') :PathPart('clone') { + my ($self, $c) = @_; + + my $posted = ($c->request->method eq 'POST'); + my $params = { $c->stash->{set_result}->get_inflated_columns }; + $params = $params->merge($c->session->{created_objects}); + my $form = NGCP::Panel::Form::RewriteRule::CloneSet->new; + $form->process( + posted => $posted, + params => $c->request->params, + item => $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_set = $c->stash->{sets_rs}->create({ + %{ $form->values }, + reseller_id => $c->stash->{set_result}->reseller_id, + }); + my @old_rules = $c->stash->{set_result}->voip_rewrite_rules->all; + for my $rule (@old_rules) { + $new_set->voip_rewrite_rules->create({ + match_pattern => $rule->match_pattern, + replace_pattern => $rule->replace_pattern, + description => $rule->description, + direction => $rule->direction, + field => $rule->field, + priority => $rule->priority, + }); + } + + $c->flash(messages => [{type => 'success', text => 'Rewrite rule set successfully cloned'}]); + } catch($e) { + $c->log->error("failed to clone rewrite rule set: $e"); + $c->flash(messages => [{type => 'error', text => 'Failed to clone rewrite rule set'}]); + } + NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for('/rewrite')); + } + + $c->stash(form => $form); + $c->stash(create_flag => 1); + $c->stash(clone_flag => 1); +} + sub set_create :Chained('set_list') :PathPart('create') :Args(0) { my ($self, $c) = @_; @@ -416,6 +466,13 @@ The form used is L. Delete a rewrite rule set determined by L. +=head2 set_clone + +Deep copy a rewrite rule set determined by L. The user can enter +a new name and description. The reseller is not configurable, but set by the +original rewrite rule set. The rewrite rules of the original rwrs are then +cloned and assigned to the new rwrs. + =head2 set_create Show a modal to create a new rewrite rule set using the form diff --git a/lib/NGCP/Panel/Form/RewriteRule/CloneSet.pm b/lib/NGCP/Panel/Form/RewriteRule/CloneSet.pm new file mode 100644 index 0000000000..01ee5a5e53 --- /dev/null +++ b/lib/NGCP/Panel/Form/RewriteRule/CloneSet.pm @@ -0,0 +1,47 @@ +package NGCP::Panel::Form::RewriteRule::CloneSet; + +use HTML::FormHandler::Moose; +extends 'HTML::FormHandler'; +use Moose::Util::TypeConstraints; + +use HTML::FormHandler::Widget::Block::Bootstrap; + +has '+widget_wrapper' => ( default => 'Bootstrap' ); +has_field 'submitid' => ( type => 'Hidden' ); +sub build_render_list {[qw/submitid fields actions/]} +sub build_form_element_class {[qw(form-horizontal)]} + +has_field 'name' => ( + type => 'Text', + required => 1, + label => 'New Name', +); + +has_field 'description' => ( + type => 'Text', + required => 0, + label => 'New Description', +); + +has_field 'clone' => ( + type => 'Submit', + value => 'Clone', + element_class => [qw/btn btn-primary/], + label => '', +); + +has_block 'fields' => ( + tag => 'div', + class => [qw/modal-body/], + render_list => [qw/name description/], +); + +has_block 'actions' => ( + tag => 'div', + class => [qw/modal-footer/], + render_list => [qw/clone/], +); + +1; + +# vim: set tabstop=4 expandtab: diff --git a/share/templates/rewrite/set_list.tt b/share/templates/rewrite/set_list.tt index 99072fdb3f..5734096052 100644 --- a/share/templates/rewrite/set_list.tt +++ b/share/templates/rewrite/set_list.tt @@ -1,6 +1,6 @@ [% META title = 'Rewrite Rule Sets' -%] [% - helper.name = 'Rewrite Rule Sets'; + helper.name = 'Rewrite Rule Set'; helper.messages = messages; helper.dt_columns = set_dt_columns; helper.length_change = 1; @@ -11,11 +11,16 @@ helper.form_object = form; helper.ajax_uri = c.uri_for_action( "/rewrite/set_ajax" ); + IF clone_flag; + helper.name = 'cloned Rewrite Rule Set'; + END; + 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' }, + { name = 'Clone', uri = "/rewrite/'+full.id+'/clone", class = 'btn-small btn-tertiary', icon = 'icon-retweet' }, ]; helper.top_buttons = [ { name = 'Create Rewrite Rule Set', uri = c.uri_for('/rewrite/create'), icon = 'icon-star' },