From f5ce7e9db536a1e7c2ca22f0b2ab1df624cae54d Mon Sep 17 00:00:00 2001
From: Andreas Granig
Date: Fri, 11 Apr 2014 11:30:45 +0200
Subject: [PATCH] MT#6461 Let resellers rebrand their panel
Implement view for resellers to edit their css.
---
lib/NGCP/Panel/Controller/Reseller.pm | 29 +++++--
share/templates/reseller/branding.tt | 75 +++++++++++++++++++
share/templates/reseller/details.tt | 1 +
.../widgets/reseller_topmenu_settings.tt | 1 +
4 files changed, 101 insertions(+), 5 deletions(-)
create mode 100644 share/templates/reseller/branding.tt
diff --git a/lib/NGCP/Panel/Controller/Reseller.pm b/lib/NGCP/Panel/Controller/Reseller.pm
index 8bcd6d09e9..93b4a34c3d 100644
--- a/lib/NGCP/Panel/Controller/Reseller.pm
+++ b/lib/NGCP/Panel/Controller/Reseller.pm
@@ -420,12 +420,25 @@ sub create_defaults :Path('create_defaults') :Args(0) :Does(ACL) :ACLDetachTo('/
return;
}
+sub css :Chained('base') :PathPart('css') :Args(0) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) {
+ my ($self, $c) = @_;
+ $c->stash(template => 'reseller/branding.tt');
+ return;
+}
+
sub edit_branding_css :Chained('base') :PathPart('css/edit') :Args(0) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) {
my ($self, $c) = @_;
$c->detach('/denied_page')
if($c->user->read_only);
- $c->stash(template => 'reseller/details.tt');
+ my $back;
+ if($c->user->roles eq "admin") {
+ $c->stash(template => 'reseller/details.tt');
+ $back = $c->uri_for_action('/reseller/details', $c->req->captures);
+ } else {
+ $c->stash(template => 'reseller/branding.tt');
+ $back = $c->uri_for_action('/reseller/css', $c->req->captures);
+ }
my $reseller = $c->stash->{reseller}->first;
my $branding = $reseller->branding;
@@ -447,7 +460,7 @@ sub edit_branding_css :Chained('base') :PathPart('css/edit') :Args(0) :Does(ACL)
c => $c,
form => $form,
fields => {},
- back_uri => $c->uri_for('/reseller/details', $c->req->captures),
+ back_uri => $back,
);
if($posted && $form->validated) {
@@ -485,13 +498,13 @@ sub edit_branding_css :Chained('base') :PathPart('css/edit') :Args(0) :Does(ACL)
desc => $c->loc('Failed to update reseller branding'),
);
}
- NGCP::Panel::Utils::Navigation::back_or($c, $c->uri_for_action('/reseller/details', $c->req->captures));
+ NGCP::Panel::Utils::Navigation::back_or($c, $back);
}
$c->stash(close_target => $c->uri_for());
$c->stash(branding_form => $form);
$c->stash(branding_edit_flag => 1);
- $c->stash(close_target => $c->uri_for_action('/reseller/details', $c->req->captures));
+ $c->stash(close_target => $back);
return;
}
@@ -515,6 +528,12 @@ sub get_branding_logo :Chained('base') :PathPart('css/logo/download') :Args(0) {
sub delete_branding_logo :Chained('base') :PathPart('css/logo/delete') :Args(0) :Does(ACL) :ACLDetachTo('/denied_page') :AllowedRole(admin) :AllowedRole(reseller) {
my ($self, $c) = @_;
+ my $back;
+ if($c->user->roles eq "admin") {
+ $back = $c->uri_for_action('/reseller/details', $c->req->captures);
+ } else {
+ $back = $c->uri_for_action('/reseller/css', $c->req->captures);
+ }
my $reseller = $c->stash->{reseller}->first;
my $branding = $reseller->branding;
@@ -523,7 +542,7 @@ sub delete_branding_logo :Chained('base') :PathPart('css/logo/delete') :Args(0)
$branding->update({ logo => undef, logo_image_type => undef });
}
- $c->response->redirect($c->uri_for_action('/reseller/details', $c->req->captures));
+ $c->response->redirect($back);
}
sub get_branding_css :Chained('base') :PathPart('css/download') :Args(0) {
diff --git a/share/templates/reseller/branding.tt b/share/templates/reseller/branding.tt
new file mode 100644
index 0000000000..2d0779aee0
--- /dev/null
+++ b/share/templates/reseller/branding.tt
@@ -0,0 +1,75 @@
+[% site_config.title = c.loc('Panel Branding') -%]
+
+
+[% back_created = 1 -%]
+
+
+
+
+ [% FOREACH m IN messages -%]
+
[% m.text %]
+ [% END -%]
+ [% IF reseller.first.status != "active" -%]
+
[% c.loc('Reseller is [_1]', reseller.first.status) %]
+ [% END -%]
+[% messages = [] -%]
+
+
+
+ [% UNLESS c.user.read_only -%]
+
+ Edit Branding
+ [% IF branding.logo -%]
+ Delete Logo
+ [% END -%]
+
+
+ [% END -%]
+
+ [% IF branding.defined -%]
+ [% IF branding.logo.defined -%]
+ Custom Logo
+
+
+ [% c.loc("You can use the logo by adding the following CSS to the Custom CSS below:") %]
+
+#header .brand {
+ background: url([% c.uri_for_action('/reseller/get_branding_logo', c.req.captures) %]) no-repeat 0 0;
+ background-size: 280px 32px;
+}
+
+
+ [% ELSE -%]
+ No logo uploaded.
+ [% END -%]
+
+
+ Custom CSS
+
+
+[% branding.css %]
+
+
+ [% ELSE -%]
+ No branding specified, using standard branding.
+ [% END -%]
+
+[% IF branding_edit_flag == 1 -%]
+[%
+ IF form.has_for_js;
+ form.render_repeatable_js;
+ END;
+ PROCESS "helpers/modal.tt";
+ modal_header(m.edit_flag = branding_edit_flag,
+ m.name = "Reseller Branding");
+ translate_form(branding_form).render;
+ modal_footer();
+ modal_script(m.close_target = close_target);
+-%]
+[% END -%]
+
+[% # vim: set tabstop=4 syntax=html expandtab: -%]
diff --git a/share/templates/reseller/details.tt b/share/templates/reseller/details.tt
index 050adfbc92..5d1829d1a9 100644
--- a/share/templates/reseller/details.tt
+++ b/share/templates/reseller/details.tt
@@ -265,6 +265,7 @@
No branding specified, using standard branding.
[% END -%]
+
diff --git a/share/templates/widgets/reseller_topmenu_settings.tt b/share/templates/widgets/reseller_topmenu_settings.tt
index 1437cec145..98e17be5de 100644
--- a/share/templates/widgets/reseller_topmenu_settings.tt
+++ b/share/templates/widgets/reseller_topmenu_settings.tt
@@ -5,6 +5,7 @@