From ebe64d35632d7758ec327eb4e191506fc7fc79c6 Mon Sep 17 00:00:00 2001
From: Gerhard Jungwirth <gjungwirth@sipwise.com>
Date: Mon, 30 Sep 2013 12:40:10 +0200
Subject: [PATCH] uri_unescape CDRs

Mantis: 3413
---
 Build.PL                                             |  1 +
 lib/NGCP/Panel/Controller/Subscriber.pm              | 11 ++++++++++-
 lib/NGCP/Panel/View/HTML.pm                          |  9 ++++++++-
 share/templates/widgets/subscriber_calls_overview.tt |  4 ++--
 4 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/Build.PL b/Build.PL
index 1851536623..4c7c31a97f 100644
--- a/Build.PL
+++ b/Build.PL
@@ -66,6 +66,7 @@ my $builder = Local::Module::Build->new(
         'Template' => 0,
         'Text::CSV_XS' => 0,
         'URI::Encode' => 0,
+        'URI::Escape' => 0,
         'UUID' => 0,
         'XML::Mini' => 0,
         'warnings' => 0,
diff --git a/lib/NGCP/Panel/Controller/Subscriber.pm b/lib/NGCP/Panel/Controller/Subscriber.pm
index a6cf4b517d..30685e7745 100644
--- a/lib/NGCP/Panel/Controller/Subscriber.pm
+++ b/lib/NGCP/Panel/Controller/Subscriber.pm
@@ -2,6 +2,7 @@ package NGCP::Panel::Controller::Subscriber;
 use Sipwise::Base;
 BEGIN { extends 'Catalyst::Controller'; }
 use HTML::Entities;
+use URI::Escape qw(uri_unescape);
 use NGCP::Panel::Utils::Navigation;
 use NGCP::Panel::Utils::Contract;
 use NGCP::Panel::Utils::Subscriber;
@@ -2171,7 +2172,15 @@ sub ajax_calls :Chained('master') :PathPart('calls/ajax') :Args(0) {
         destination_user_id => $c->stash->{subscriber}->uuid,
     });
     my $rs = $out_rs->union($in_rs);
-    NGCP::Panel::Utils::Datatables::process($c, $rs, $c->stash->{calls_dt_columns});
+    NGCP::Panel::Utils::Datatables::process(
+        $c, $rs, $c->stash->{calls_dt_columns},
+        sub {
+            my ($result) = @_;
+            my %data = (source_user => uri_unescape($result->source_user),
+                destination_user => uri_unescape($result->destination_user));
+            return %data
+        },
+    );
 
     $c->detach( $c->view("JSON") );
 }
diff --git a/lib/NGCP/Panel/View/HTML.pm b/lib/NGCP/Panel/View/HTML.pm
index 12e888fbd2..2eca35ec76 100644
--- a/lib/NGCP/Panel/View/HTML.pm
+++ b/lib/NGCP/Panel/View/HTML.pm
@@ -1,13 +1,20 @@
 package NGCP::Panel::View::HTML;
 use Sipwise::Base;
 
+use URI::Escape qw/uri_unescape/;
+
 extends 'Catalyst::View::TT';
 
 __PACKAGE__->config(
     TEMPLATE_EXTENSION => '.tt',
     render_die => 1,
     ENCODING => 'UTF-8',
-    WRAPPER => 'wrapper.tt'
+    WRAPPER => 'wrapper.tt',
+    FILTERS => {
+        uri_unescape => sub {
+            URI::Escape::uri_unescape(@_);
+        },
+    },
 );
 
 =head1 NAME
diff --git a/share/templates/widgets/subscriber_calls_overview.tt b/share/templates/widgets/subscriber_calls_overview.tt
index a7fccffe63..a9bf911fcb 100644
--- a/share/templates/widgets/subscriber_calls_overview.tt
+++ b/share/templates/widgets/subscriber_calls_overview.tt
@@ -24,7 +24,7 @@
                                 <i class="icon-circle-arrow-up" style="color:red"></i>
                             [% END -%]
                             </div>
-                            <div class="span8">[% call.destination_user_in %]</div>
+                            <div class="span8">[% call.destination_user_in | uri_unescape %]</div>
                         [% ELSE -%]
                             <div class="span1">
                             [% IF call.call_status == "ok" -%]
@@ -33,7 +33,7 @@
                                 <i class="icon-circle-arrow-down" style="color:red"></i>
                             [% END -%]
                             </div>
-                            <div class="span8">[% call.clir ? "anonymous" : call.source_cli %]</div>
+                            <div class="span8">[% call.clir ? "anonymous" : call.source_cli | uri_unescape %]</div>
                         [% END -%]
                         </div>
                         <div class="row-fluid">