From 06fc0fa4dd203ee7be1e07dce47d876c47f1acb0 Mon Sep 17 00:00:00 2001 From: Andreas Granig Date: Fri, 20 Sep 2013 14:31:43 +0200 Subject: [PATCH] Fix subscriber login and add basic widgets. --- lib/NGCP/Panel/Controller/Login.pm | 19 ++++--- .../Widget/Plugin/SubscriberCallsOverview.pm | 53 +++++++++++++++++++ .../Widget/Plugin/SubscriberVmOverview.pm | 50 +++++++++++++++++ share/layout/body.tt | 9 +++- .../widgets/subscriber_calls_overview.tt | 51 ++++++++++++++++++ .../widgets/subscriber_vm_overview.tt | 38 +++++++++++++ 6 files changed, 213 insertions(+), 7 deletions(-) create mode 100644 lib/NGCP/Panel/Widget/Plugin/SubscriberCallsOverview.pm create mode 100644 lib/NGCP/Panel/Widget/Plugin/SubscriberVmOverview.pm create mode 100644 share/templates/widgets/subscriber_calls_overview.tt create mode 100644 share/templates/widgets/subscriber_vm_overview.tt diff --git a/lib/NGCP/Panel/Controller/Login.pm b/lib/NGCP/Panel/Controller/Login.pm index 1ba6d104e4..d4d0628931 100644 --- a/lib/NGCP/Panel/Controller/Login.pm +++ b/lib/NGCP/Panel/Controller/Login.pm @@ -77,16 +77,23 @@ sub index :Path Form { $realm); } elsif($realm eq 'subscriber') { # TODO: check for lock status? + my ($u, $d) = split /\@/, $user; + unless($d) { + $d = $c->req->uri->host; + } + my $authrs = $c->model('DB')->resultset('provisioning_voip_subscribers')->search({ + webusername => $u, + webpassword => $pass, + 'domain.domain' => $d, + }, { + join => 'domain', + }); $res = $c->authenticate( { - webusername => $user, + webusername => $u, webpassword => $pass, 'dbix_class' => { - searchargs => [{ - -and => [ - webusername => $user, - ], - }], + resultset => $authrs } }, $realm); diff --git a/lib/NGCP/Panel/Widget/Plugin/SubscriberCallsOverview.pm b/lib/NGCP/Panel/Widget/Plugin/SubscriberCallsOverview.pm new file mode 100644 index 0000000000..8b00d93fbf --- /dev/null +++ b/lib/NGCP/Panel/Widget/Plugin/SubscriberCallsOverview.pm @@ -0,0 +1,53 @@ +package NGCP::Panel::Widget::Plugin::SubscriberCallsOverview; +use Moose::Role; + +has 'template' => ( + is => 'ro', + isa => 'Str', + default => 'widgets/subscriber_calls_overview.tt' +); + +has 'type' => ( + is => 'ro', + isa => 'Str', + default => 'dashboard_widgets', +); + +has 'priority' => ( + is => 'ro', + isa => 'Int', + default => 10, +); + +around handle => sub { + my ($foo, $self, $c) = @_; + + my $out_rs = $c->model('DB')->resultset('cdr')->search({ + source_user_id => $c->user->uuid, + }); + my $in_rs = $c->model('DB')->resultset('cdr')->search({ + destination_user_id => $c->user->uuid, + }); + my $calls_rs = $out_rs->union($in_rs)->search(undef, { + order_by => { -desc => 'me.start_time' }, + })->slice(0, 9); + + $c->stash( + calls => $calls_rs, + ); + return; +}; + +sub filter { + my ($self, $c, $type) = @_; + + return $self if( + $type eq $self->type && + ($c->user_in_realm('subscriber') || $c->user_in_realm('subscriberadmin')) && + ref $c->controller eq 'NGCP::Panel::Controller::Dashboard' + ); + return; +} + +1; +# vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Widget/Plugin/SubscriberVmOverview.pm b/lib/NGCP/Panel/Widget/Plugin/SubscriberVmOverview.pm new file mode 100644 index 0000000000..6ebeaf8b90 --- /dev/null +++ b/lib/NGCP/Panel/Widget/Plugin/SubscriberVmOverview.pm @@ -0,0 +1,50 @@ +package NGCP::Panel::Widget::Plugin::SubscriberVmOverview; +use Moose::Role; + +has 'template' => ( + is => 'ro', + isa => 'Str', + default => 'widgets/subscriber_vm_overview.tt' +); + +has 'type' => ( + is => 'ro', + isa => 'Str', + default => 'dashboard_widgets', +); + +has 'priority' => ( + is => 'ro', + isa => 'Int', + default => 10, +); + +around handle => sub { + my ($foo, $self, $c) = @_; + + my $rs = $c->model('DB')->resultset('voicemail_spool')->search({ + mailboxuser => $c->user->uuid, + dir => { -like => '%/INBOX' }, + }, { + order_by => { -desc => 'me.origtime' }, + })->slice(0, 9); + + $c->stash( + vmails => $rs, + ); + return; +}; + +sub filter { + my ($self, $c, $type) = @_; + + return $self if( + $type eq $self->type && + ($c->user_in_realm('subscriber') || $c->user_in_realm('subscriberadmin')) && + ref $c->controller eq 'NGCP::Panel::Controller::Dashboard' + ); + return; +} + +1; +# vim: set tabstop=4 expandtab: diff --git a/share/layout/body.tt b/share/layout/body.tt index e40527115e..575c306246 100644 --- a/share/layout/body.tt +++ b/share/layout/body.tt @@ -9,7 +9,14 @@
diff --git a/share/templates/widgets/subscriber_calls_overview.tt b/share/templates/widgets/subscriber_calls_overview.tt new file mode 100644 index 0000000000..e76412e9f6 --- /dev/null +++ b/share/templates/widgets/subscriber_calls_overview.tt @@ -0,0 +1,51 @@ +[% USE Math -%] +
+
+
+
Call List
+
+ [% calls.count %] + Recent Calls +
+
+
+
    + [% IF calls.count == 0 -%] +
  • No calls yet
  • + [% ELSE -%] + [% FOR call IN calls.all -%] +
  • +
    + [% IF call.source_user_id == c.user.uuid -%] + + [% IF call.call_status == "ok" -%] + + [% ELSE -%] + + [% END -%] + + [% call.destination_user_in %] + [% ELSE -%] + + [% IF call.call_status == "ok" -%] + + [% ELSE -%] + + [% END -%] + + [% call.clir ? "anonymous" : call.source_cli %] + [% END -%] + [% call.start_time -%] + [% Math.int(call.duration) -%]s +
    +
  • + [% END -%] + [% END -%] +
+
+ +
+
+[% # vim: set tabstop=4 syntax=html expandtab: -%] diff --git a/share/templates/widgets/subscriber_vm_overview.tt b/share/templates/widgets/subscriber_vm_overview.tt new file mode 100644 index 0000000000..bba0cf19d3 --- /dev/null +++ b/share/templates/widgets/subscriber_vm_overview.tt @@ -0,0 +1,38 @@ +[% USE Math -%] +
+
+
+
Voicebox Messages
+
+ [% vmails.count %] + New Messages +
+
+
+
    + [% IF vmails.count == 0 -%] +
  • No new messages
  • + [% ELSE -%] + [% FOR vmail IN vmails.all -%] +
  • +
    + + + + + + [% vmail.callerid -%] + [% vmail.origtime -%] + [% vmail.duration -%]s +
    +
  • + [% END -%] + [% END -%] +
+
+ +
+
+[% # vim: set tabstop=4 syntax=html expandtab: -%]