Add stylesheet selector to account page

This commit is contained in:
Al Beano 2017-08-21 18:44:40 +01:00
parent 4a459a813d
commit fd9aae65ea
8 changed files with 64 additions and 9 deletions

View File

@ -15,6 +15,12 @@ plugins:
driver: 'SQLite'
dbname: 'db.sqlite'
stylesheets:
default: "cyberpunk"
available:
- "cyberpunk"
- "light"
tld: 'cyb'
reserved_domains:

2
dbupdate/4.sql Normal file
View File

@ -0,0 +1,2 @@
alter table user add column stylesheet text;
update cyberman set dbrev=5;

View File

@ -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 {

View File

@ -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,
};
};

View File

@ -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;

View File

@ -31,6 +31,9 @@
<% IF e_email_exists %>
<li>There is already an account with that email address.</li>
<% END %>
<% IF e_bad_sheet %>
<li>The stylesheet selected was invalid.</li>
<% END %>
</ul>
</div>
</div>
@ -72,6 +75,22 @@
<input type="password" name="npassword2" id="npassword2" />
</td>
</tr>
<tr>
<td>
<label for="stylesheet">Stylesheet name:</label>
</td>
<td>
<select id="stylesheet" name="stylesheet">
<% FOREACH sheet IN vars.config.stylesheets.available %>
<option name="<% sheet | html_entity %>"
<% IF user.stylesheet == sheet %>
selected=selected
<% END %>
><% sheet | html_entity %></option>
<% END %>
</select>
</td>
</tr>
</table>
<br />
[&nbsp;<button class="textButton" action="submit">update</button>&nbsp;]

View File

@ -7,7 +7,7 @@
<meta http-equiv="refresh" content="0;<% redir %>" />
<% END %>
<title>cybNIC</title>
<link rel="stylesheet" type="text/css" href="/css/style.css" />
<link rel="stylesheet" type="text/css" href="/css/<% vars.stylesheet %>.css" />
</head>
<body>
<div class="inner">