diff --git a/lib/NGCP/Panel/Controller/Rewrite.pm b/lib/NGCP/Panel/Controller/Rewrite.pm index 21853bc49b..1b4cb2ed5d 100644 --- a/lib/NGCP/Panel/Controller/Rewrite.pm +++ b/lib/NGCP/Panel/Controller/Rewrite.pm @@ -32,7 +32,7 @@ sub set_list :Chained('/') :PathPart('rewrite') :CaptureArgs(0) { { name => 'name', search => 1, title => $c->loc('Name') }, { name => 'description', search => 1, title => $c->loc('Description') }, ]); - + $c->stash(template => 'rewrite/set_list.tt'); } @@ -125,7 +125,7 @@ sub set_edit :Chained('set_base') :PathPart('edit') { sub set_delete :Chained('set_base') :PathPart('delete') { my ($self, $c) = @_; - + try { $c->stash->{set_result}->delete; NGCP::Panel::Utils::Rewrite::sip_dialplan_reload($c); @@ -258,7 +258,7 @@ sub set_create :Chained('set_list') :PathPart('create') :Args(0) { sub rules_list :Chained('set_base') :PathPart('rules') :CaptureArgs(0) { my ( $self, $c ) = @_; - + my $rules_rs = $c->stash->{set_result}->voip_rewrite_rules; $c->stash(rules_rs => $rules_rs); $c->stash(rules_uri => $c->uri_for_action("/rewrite/rules_root", [$c->req->captures->[0]])); @@ -269,11 +269,11 @@ sub rules_list :Chained('set_base') :PathPart('rules') :CaptureArgs(0) { sub rules_root :Chained('rules_list') :PathPart('') :Args(0) { my ($self, $c) = @_; - + my $rules_rs = $c->stash->{rules_rs}; my $param_move = $c->req->params->{move}; my $param_where = $c->req->params->{where}; - + if ($param_move && is_int($param_move) && $param_where && (my $elem = $rules_rs->find($param_move))) { @@ -287,11 +287,18 @@ sub rules_root :Chained('rules_list') :PathPart('') :Args(0) { })->first; try { if ($swap_elem) { - my $tmp_priority = $swap_elem->priority; - $swap_elem->priority($elem->priority); - $elem->priority($tmp_priority); + #3way swap required because trigger relies on natural key of kamailio.dialplan. + my @tmp_priority = ( + $c->stash->{rules_rs}->get_column('priority')->max() + 1, + $swap_elem->priority, + $elem->priority + ); + $swap_elem->priority($tmp_priority[0]); $swap_elem->update; + $elem->priority($tmp_priority[1]); $elem->update; + $swap_elem->priority($tmp_priority[2]); + $swap_elem->update; } elsif($use_next) { my $last_priority = $c->stash->{rules_rs}->get_column('priority')->max() || 49; $elem->priority(int($last_priority) + 1); @@ -310,28 +317,28 @@ sub rules_root :Chained('rules_list') :PathPart('') :Args(0) { ); } } - + my @caller_in = $rules_rs->search({ field => 'caller', direction => 'in', },{ order_by => { -asc => 'priority' }, })->all; - + my @callee_in = $rules_rs->search({ field => 'callee', direction => 'in', },{ order_by => { -asc => 'priority' }, })->all; - + my @caller_out = $rules_rs->search({ field => 'caller', direction => 'out', },{ order_by => { -asc => 'priority' }, })->all; - + my @callee_out = $rules_rs->search({ field => 'callee', direction => 'out', @@ -352,7 +359,7 @@ sub rules_root :Chained('rules_list') :PathPart('') :Args(0) { },{ order_by => { -asc => 'priority' }, })->all; - + for my $row (@caller_in, @callee_in, @caller_out, @callee_out, @caller_lnp, @callee_lnp) { my $mp = $row->match_pattern; my $rp = $row->replace_pattern; @@ -362,7 +369,7 @@ sub rules_root :Chained('rules_list') :PathPart('') :Args(0) { $row->match_pattern($mp); $row->replace_pattern($rp); } - + $c->stash(rules => { caller_in => \@caller_in, callee_in => \@callee_in, @@ -439,7 +446,7 @@ sub rules_edit :Chained('rules_base') :PathPart('edit') { sub rules_delete :Chained('rules_base') :PathPart('delete') { my ($self, $c) = @_; - + try { $c->stash->{rule_result}->delete; NGCP::Panel::Utils::Rewrite::sip_dialplan_reload($c);