From fd9aae65ea3de86dfc21e72ca2a2837d4524f5b1 Mon Sep 17 00:00:00 2001 From: Al Beano Date: Mon, 21 Aug 2017 18:44:40 +0100 Subject: [PATCH] Add stylesheet selector to account page --- config.yml | 6 ++++++ dbupdate/4.sql | 2 ++ lib/cyberman.pm | 13 +++++++++---- lib/cyberman/Account.pm | 26 +++++++++++++++++++++++-- public/css/{style.css => cyberpunk.css} | 0 schema.sql | 5 +++-- views/account.tt | 19 ++++++++++++++++++ views/layouts/main.tt | 2 +- 8 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 dbupdate/4.sql rename public/css/{style.css => cyberpunk.css} (100%) diff --git a/config.yml b/config.yml index 490c2b5..0580f30 100644 --- a/config.yml +++ b/config.yml @@ -15,6 +15,12 @@ plugins: driver: 'SQLite' dbname: 'db.sqlite' +stylesheets: + default: "cyberpunk" + available: + - "cyberpunk" + - "light" + tld: 'cyb' reserved_domains: diff --git a/dbupdate/4.sql b/dbupdate/4.sql new file mode 100644 index 0000000..34fddb5 --- /dev/null +++ b/dbupdate/4.sql @@ -0,0 +1,2 @@ +alter table user add column stylesheet text; +update cyberman set dbrev=5; diff --git a/lib/cyberman.pm b/lib/cyberman.pm index 9671362..2a69c46 100644 --- a/lib/cyberman.pm +++ b/lib/cyberman.pm @@ -40,21 +40,26 @@ hook 'before' => sub { my $uid = cookieval("id"); my $token = cookieval("token"); my $auth = 0; - my $email; + my $user; if ($uid && $token) { $auth = get_auth($uid, $token); - $email = database->quick_lookup( + $user = database->quick_select( "user", { "id" => $uid, }, - "email", ); } var auth => $auth; - var email => $email; + var email => $user->{"email"}; var config => config(); + + if (grep {$_ eq $user->{"stylesheet"}} @{ config->{"stylesheets"}->{"available"} }) { + var stylesheet => $user->{"stylesheet"}; + } else { + var stylesheet => config->{"stylesheets"}->{"default"}; + } }; get qr{^/(index)?$} => sub { diff --git a/lib/cyberman/Account.pm b/lib/cyberman/Account.pm index 294966c..e07c0ed 100644 --- a/lib/cyberman/Account.pm +++ b/lib/cyberman/Account.pm @@ -17,6 +17,7 @@ get '/account' => sub { template 'account' => { "user" => $user, + "updated" => param("updated") ? 1 : 0, }; }; @@ -65,6 +66,10 @@ post '/account' => sub { } } + if (!grep {$_ eq param("stylesheet")} @{ config->{"stylesheets"}->{"available"} }) { + $errs{"e_bad_sheet"} = 1; + } + if (scalar(keys %errs) != 0) { return template 'account' => { "user" => $user, @@ -120,17 +125,34 @@ post '/account' => sub { "redir" => "login?pwchange=1", }; } + + database->quick_update ( + "user", + { + "id" => vars->{"auth"}, + }, + { + "stylesheet" => param("stylesheet"), + }, + ); - $user = database->quick_select ( + my $newuser = database->quick_select ( "user", { "id" => vars->{"auth"}, }, ); + # Instant stylesheet update + if ($user->{"stylesheet"} ne $newuser->{"stylesheet"}) { + return template 'redir' => { + "redir" => "account?updated=1", + }; + } + template 'account' => { updated => 1, - user => $user, + user => $newuser, }; }; diff --git a/public/css/style.css b/public/css/cyberpunk.css similarity index 100% rename from public/css/style.css rename to public/css/cyberpunk.css diff --git a/schema.sql b/schema.sql index aa43062..258224c 100644 --- a/schema.sql +++ b/schema.sql @@ -3,7 +3,7 @@ create table cyberman ( id integer primary key, dbrev integer not null ); -insert into cyberman (dbrev) values (4); +insert into cyberman (dbrev) values (5); drop table if exists user; create table user ( @@ -14,7 +14,8 @@ create table user ( active integer not null default 0, conftoken text not null, newemail text, - recoverytoken text + recoverytoken text, + stylesheet text ); drop table if exists session; diff --git a/views/account.tt b/views/account.tt index 9eca399..69821c7 100644 --- a/views/account.tt +++ b/views/account.tt @@ -31,6 +31,9 @@ <% IF e_email_exists %>
  • There is already an account with that email address.
  • <% END %> + <% IF e_bad_sheet %> +
  • The stylesheet selected was invalid.
  • + <% END %> @@ -72,6 +75,22 @@ + + + + + + + +
     ] diff --git a/views/layouts/main.tt b/views/layouts/main.tt index fb75ace..1aa8c47 100644 --- a/views/layouts/main.tt +++ b/views/layouts/main.tt @@ -7,7 +7,7 @@ <% END %> cybNIC - +