From 460ecd825be3dfe3f3da0532d059f31f93102da0 Mon Sep 17 00:00:00 2001 From: Andreas Granig Date: Thu, 28 Feb 2013 15:16:38 +0100 Subject: [PATCH] Add domain handling skeleton. --- lib/NGCP/Panel/Controller/Domain.pm | 124 ++++++++++++++++++ lib/NGCP/Panel/Form/Domain.pm | 42 ++++++ ...ingOverview.pm => AdminBillingOverview.pm} | 6 +- ...lerOverview.pm => AdminPeeringOverview.pm} | 6 +- ...emOverview.pm => AdminResellerOverview.pm} | 6 +- ...lingOverview.pm => AdminSystemOverview.pm} | 6 +- .../Widget/Plugin/ResellerDomainOverview.pm | 28 ++++ share/templates/domain/list.tt | 15 +++ ..._overview.tt => admin_billing_overview.tt} | 0 ..._overview.tt => admin_peering_overview.tt} | 0 ...overview.tt => admin_reseller_overview.tt} | 0 ...m_overview.tt => admin_system_overview.tt} | 0 .../widgets/reseller_domain_overview.tt | 21 +++ 13 files changed, 242 insertions(+), 12 deletions(-) create mode 100644 lib/NGCP/Panel/Controller/Domain.pm create mode 100644 lib/NGCP/Panel/Form/Domain.pm rename lib/NGCP/Panel/Widget/Plugin/{PeeringOverview.pm => AdminBillingOverview.pm} (71%) rename lib/NGCP/Panel/Widget/Plugin/{ResellerOverview.pm => AdminPeeringOverview.pm} (71%) rename lib/NGCP/Panel/Widget/Plugin/{SystemOverview.pm => AdminResellerOverview.pm} (71%) rename lib/NGCP/Panel/Widget/Plugin/{BillingOverview.pm => AdminSystemOverview.pm} (71%) create mode 100644 lib/NGCP/Panel/Widget/Plugin/ResellerDomainOverview.pm create mode 100644 share/templates/domain/list.tt rename share/templates/widgets/{billing_overview.tt => admin_billing_overview.tt} (100%) rename share/templates/widgets/{peering_overview.tt => admin_peering_overview.tt} (100%) rename share/templates/widgets/{reseller_overview.tt => admin_reseller_overview.tt} (100%) rename share/templates/widgets/{system_overview.tt => admin_system_overview.tt} (100%) create mode 100644 share/templates/widgets/reseller_domain_overview.tt diff --git a/lib/NGCP/Panel/Controller/Domain.pm b/lib/NGCP/Panel/Controller/Domain.pm new file mode 100644 index 0000000000..a18231124e --- /dev/null +++ b/lib/NGCP/Panel/Controller/Domain.pm @@ -0,0 +1,124 @@ +package NGCP::Panel::Controller::Domain; +use Moose; +use namespace::autoclean; +use Data::Dumper; + +BEGIN { extends 'Catalyst::Controller'; } + +use NGCP::Panel::Form::Domain; + +=head1 NAME + +NGCP::Panel::Controller::Domain - Catalyst Controller + +=head1 DESCRIPTION + +Catalyst Controller. + +=head1 METHODS + +=cut + +sub list :Chained('/') :PathPart('domain') :CaptureArgs(0) { + my ($self, $c) = @_; + + my $domains = [ + {id => 1, domain => '1.example.org'}, + {id => 2, domain => '2.example.org'}, + {id => 3, domain => '3.example.org'}, + {id => 4, domain => '4.example.org'}, + {id => 5, domain => '5.example.org'}, + {id => 6, domain => '6.example.org'}, + ]; + $c->stash(domains => $domains); + $c->stash(template => 'domain/list.tt'); +} + +sub root :Chained('list') :PathPart('') :Args(0) { + my ($self, $c) = @_; +} + +sub create :Chained('list') :PathPart('create') :Args(0) { + my ($self, $c) = @_; + + my $form = NGCP::Panel::Form::Domain->new; + $form->process( + posted => ($c->request->method eq 'POST'), + params => $c->request->params, + action => $c->uri_for('create'), + ); + if($form->validated) { + $c->flash(messages => [{type => 'success', text => 'Domain successfully created!'}]); + $c->response->redirect($c->uri_for()); + return; + } + + $c->stash(create_flag => 1); + $c->stash(form => $form); +} + +sub search :Chained('list') :PathPart('search') Args(0) { + my ($self, $c) = @_; + + $c->flash(messages => [{type => 'info', text => 'Domain search not implemented!'}]); + $c->response->redirect($c->uri_for()); +} + +sub base :Chained('/domain/list') :PathPart('') :CaptureArgs(1) { + my ($self, $c, $domain_id) = @_; + + unless($domain_id && $domain_id =~ /^\d+$/) { + $c->flash(messages => [{type => 'error', text => 'Invalid domain id detected!'}]); + $c->response->redirect($c->uri_for()); + return; + } + + # TODO: fetch details of domain from model + my @rfilter = grep { $_->{id} == $domain_id } @{ $c->stash->{domains} }; + $c->stash(domain => shift @rfilter); +} + +sub edit :Chained('base') :PathPart('edit') :Args(0) { + my ($self, $c) = @_; + + my $posted = ($c->request->method eq 'POST'); + my $form = NGCP::Panel::Form::Domain->new; + $form->process( + posted => 1, + params => $posted ? $c->request->params : $c->stash->{domain}, + action => $c->uri_for($c->stash->{domain}->{id}, 'edit'), + ); + if($posted && $form->validated) { + $c->flash(messages => [{type => 'success', text => 'Domain successfully changed!'}]); + $c->response->redirect($c->uri_for()); + return; + } + + $c->stash(form => $form); +} + +sub delete :Chained('base') :PathPart('delete') :Args(0) { + my ($self, $c) = @_; + + # $c->model('Provisioning')->domain($c->stash->{domain}->{id})->delete; + $c->flash(messages => [{type => 'info', text => 'Domain delete not implemented!'}]); + $c->response->redirect($c->uri_for()); +} + + +=head1 AUTHOR + +Andreas Granig,,, + +=head1 LICENSE + +This library is free software. You can redistribute it and/or modify +it under the same terms as Perl itself. + +=cut + +__PACKAGE__->meta->make_immutable; + +1; + +# vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Form/Domain.pm b/lib/NGCP/Panel/Form/Domain.pm new file mode 100644 index 0000000000..965c3c1599 --- /dev/null +++ b/lib/NGCP/Panel/Form/Domain.pm @@ -0,0 +1,42 @@ +package NGCP::Panel::Form::Domain; + +use HTML::FormHandler::Moose; +extends 'HTML::FormHandler'; +use Moose::Util::TypeConstraints; + +use HTML::FormHandler::Widget::Block::Bootstrap; + +has '+widget_wrapper' => ( default => 'Bootstrap' ); +sub build_render_list {[qw/fields actions/]} +sub build_form_element_class { [qw/form-horizontal/] } + +has_field 'id' => ( + type => 'Hidden', +); + +has_field 'domain' => ( + type => 'Text', + required => 1, +); + +has_field 'save' => ( + type => 'Submit', + value => 'Save', + element_class => [qw/btn btn-primary/], + label => '', +); + +has_block 'fields' => ( + tag => 'div', + class => [qw/modal-body/], + render_list => [qw/id domain/], +); + +has_block 'actions' => ( + tag => 'div', + class => [qw/modal-footer/], + render_list => [qw/save/], +); + +1; +# vim: set tabstop=4 expandtab: diff --git a/lib/NGCP/Panel/Widget/Plugin/PeeringOverview.pm b/lib/NGCP/Panel/Widget/Plugin/AdminBillingOverview.pm similarity index 71% rename from lib/NGCP/Panel/Widget/Plugin/PeeringOverview.pm rename to lib/NGCP/Panel/Widget/Plugin/AdminBillingOverview.pm index 401b36ee7a..7c8d6525ca 100644 --- a/lib/NGCP/Panel/Widget/Plugin/PeeringOverview.pm +++ b/lib/NGCP/Panel/Widget/Plugin/AdminBillingOverview.pm @@ -1,16 +1,16 @@ -package NGCP::Panel::Widget::Plugin::PeeringOverview; +package NGCP::Panel::Widget::Plugin::AdminBillingOverview; use Moose::Role; has 'template' => ( is => 'ro', isa => 'Str', - default => 'widgets/peering_overview.tt' + default => 'widgets/admin_billing_overview.tt' ); around handle => sub { my ($foo, $self, $c) = @_; - print "++++ PeeringOverview::handle\n"; + print "++++ AdminBillingOverview::handle\n"; return; }; diff --git a/lib/NGCP/Panel/Widget/Plugin/ResellerOverview.pm b/lib/NGCP/Panel/Widget/Plugin/AdminPeeringOverview.pm similarity index 71% rename from lib/NGCP/Panel/Widget/Plugin/ResellerOverview.pm rename to lib/NGCP/Panel/Widget/Plugin/AdminPeeringOverview.pm index beb968cbed..b743ba1143 100644 --- a/lib/NGCP/Panel/Widget/Plugin/ResellerOverview.pm +++ b/lib/NGCP/Panel/Widget/Plugin/AdminPeeringOverview.pm @@ -1,16 +1,16 @@ -package NGCP::Panel::Widget::Plugin::ResellerOverview; +package NGCP::Panel::Widget::Plugin::AdminPeeringOverview; use Moose::Role; has 'template' => ( is => 'ro', isa => 'Str', - default => 'widgets/reseller_overview.tt' + default => 'widgets/admin_peering_overview.tt' ); around handle => sub { my ($foo, $self, $c) = @_; - print "++++ ResellerOverview::handle\n"; + print "++++ AdminPeeringOverview::handle\n"; return; }; diff --git a/lib/NGCP/Panel/Widget/Plugin/SystemOverview.pm b/lib/NGCP/Panel/Widget/Plugin/AdminResellerOverview.pm similarity index 71% rename from lib/NGCP/Panel/Widget/Plugin/SystemOverview.pm rename to lib/NGCP/Panel/Widget/Plugin/AdminResellerOverview.pm index 8bad10fb7c..aaec88c06f 100644 --- a/lib/NGCP/Panel/Widget/Plugin/SystemOverview.pm +++ b/lib/NGCP/Panel/Widget/Plugin/AdminResellerOverview.pm @@ -1,16 +1,16 @@ -package NGCP::Panel::Widget::Plugin::SystemOverview; +package NGCP::Panel::Widget::Plugin::AdminResellerOverview; use Moose::Role; has 'template' => ( is => 'ro', isa => 'Str', - default => 'widgets/system_overview.tt' + default => 'widgets/admin_reseller_overview.tt' ); around handle => sub { my ($foo, $self, $c) = @_; - print "++++ SystemOverview::handle\n"; + print "++++ AdminResellerOverview::handle\n"; return; }; diff --git a/lib/NGCP/Panel/Widget/Plugin/BillingOverview.pm b/lib/NGCP/Panel/Widget/Plugin/AdminSystemOverview.pm similarity index 71% rename from lib/NGCP/Panel/Widget/Plugin/BillingOverview.pm rename to lib/NGCP/Panel/Widget/Plugin/AdminSystemOverview.pm index 75a77ffbef..c441e7f2f3 100644 --- a/lib/NGCP/Panel/Widget/Plugin/BillingOverview.pm +++ b/lib/NGCP/Panel/Widget/Plugin/AdminSystemOverview.pm @@ -1,16 +1,16 @@ -package NGCP::Panel::Widget::Plugin::BillingOverview; +package NGCP::Panel::Widget::Plugin::AdminSystemOverview; use Moose::Role; has 'template' => ( is => 'ro', isa => 'Str', - default => 'widgets/billing_overview.tt' + default => 'widgets/admin_system_overview.tt' ); around handle => sub { my ($foo, $self, $c) = @_; - print "++++ BillingOverview::handle\n"; + print "++++ AdminSystemOverview::handle\n"; return; }; diff --git a/lib/NGCP/Panel/Widget/Plugin/ResellerDomainOverview.pm b/lib/NGCP/Panel/Widget/Plugin/ResellerDomainOverview.pm new file mode 100644 index 0000000000..c1cec148d0 --- /dev/null +++ b/lib/NGCP/Panel/Widget/Plugin/ResellerDomainOverview.pm @@ -0,0 +1,28 @@ +package NGCP::Panel::Widget::Plugin::ResellerDomainOverview; +use Moose::Role; + +has 'template' => ( + is => 'ro', + isa => 'Str', + default => 'widgets/reseller_domain_overview.tt' +); + +around handle => sub { + my ($foo, $self, $c) = @_; + + print "++++ ResellerDomainOverview::handle\n"; + return; +}; + +around filter => sub { + my ($foo, $self, $c) = @_; + + return $self if( + $c->check_user_roles(qw/reseller/) && + ref $c->controller eq 'NGCP::Panel::Controller::Dashboard' + ); + return; +}; + +1; +# vim: set tabstop=4 expandtab: diff --git a/share/templates/domain/list.tt b/share/templates/domain/list.tt new file mode 100644 index 0000000000..4cdc254adb --- /dev/null +++ b/share/templates/domain/list.tt @@ -0,0 +1,15 @@ +[% META title = 'Domains' -%] +[% + helper.name = 'Domain'; + helper.data = domains; + helper.messages = messages; + helper.column_titles = [ '#', 'Domain' ]; + helper.column_fields = [ 'id', 'domain' ]; + + helper.create_flag = create_flag; + helper.edit_object = domain; + helper.form_object = form; + + PROCESS 'helpers/table_form.tt'; +-%] +[% # vim: set tabstop=4 syntax=html expandtab: -%] diff --git a/share/templates/widgets/billing_overview.tt b/share/templates/widgets/admin_billing_overview.tt similarity index 100% rename from share/templates/widgets/billing_overview.tt rename to share/templates/widgets/admin_billing_overview.tt diff --git a/share/templates/widgets/peering_overview.tt b/share/templates/widgets/admin_peering_overview.tt similarity index 100% rename from share/templates/widgets/peering_overview.tt rename to share/templates/widgets/admin_peering_overview.tt diff --git a/share/templates/widgets/reseller_overview.tt b/share/templates/widgets/admin_reseller_overview.tt similarity index 100% rename from share/templates/widgets/reseller_overview.tt rename to share/templates/widgets/admin_reseller_overview.tt diff --git a/share/templates/widgets/system_overview.tt b/share/templates/widgets/admin_system_overview.tt similarity index 100% rename from share/templates/widgets/system_overview.tt rename to share/templates/widgets/admin_system_overview.tt diff --git a/share/templates/widgets/reseller_domain_overview.tt b/share/templates/widgets/reseller_domain_overview.tt new file mode 100644 index 0000000000..2fd4b50f80 --- /dev/null +++ b/share/templates/widgets/reseller_domain_overview.tt @@ -0,0 +1,21 @@ +
+
+
+
Domains
+
+ 7 + Domains +
+
+
+
    +
  • 4674 Accounts
  • +
  • 12456 Subscribers
  • +
+
+
+ Configure +
+
+
+[% # vim: set tabstop=4 syntax=html expandtab: -%]