1 package NDWeb::Controller::Settings;
5 use parent 'Catalyst::Controller';
9 use DateTime::TimeZone;
13 NDWeb::Controller::Settings - Catalyst Controller
28 sub index :Path :Args(0) {
29 my ( $self, $c ) = @_;
32 $c->stash(error => $c->flash->{error});
34 my @stylesheets = ('Default');
35 my $dir = $c->path_to('root/static/css/black.css')->dir;
36 while (my $file = $dir->next){
37 if(!$file->is_dir && $file->basename =~ m{^(\w+)\.css$}){
41 $c->stash(stylesheets => \@stylesheets);
43 my ($birthday,$timezone) = $dbh->selectrow_array(q{
44 SELECT birthday,timezone FROM users WHERE uid = $1
45 },undef,$c->user->id);
46 $c->stash(birthday => $birthday);
48 my @timezone = split m{/},$timezone,2;
49 $c->stash(timezone => \@timezone);
51 my @cat = DateTime::TimeZone->categories;
53 $c->stash(tzcategories => \@cat);
55 my @countries = DateTime::TimeZone->names_in_category($timezone[0]);
56 $c->stash(tzcountries => \@countries);
59 sub changeStylesheet : Local {
60 my ( $self, $c ) = @_;
63 my $query = $dbh->prepare(q{UPDATE users SET css = NULLIF($2,'Default')
66 $query->execute($c->user->id,html_escape $c->req->param('stylesheet'));
68 $c->res->redirect($c->uri_for(''));
71 sub changeBirthday : Local {
72 my ( $self, $c ) = @_;
75 my $query = $dbh->prepare(q{UPDATE users SET birthday = NULLIF($2,'')::date
79 $query->execute($c->user->id,html_escape $c->req->param('birthday'));
82 if ($@ =~ /invalid input syntax for type date/){
83 $c->flash(error => 'Bad syntax for day, use YYYY-MM-DD.');
85 $c->flash(error => $@);
88 $c->res->redirect($c->uri_for(''));
91 sub changeTimezone : Local {
92 my ( $self, $c ) = @_;
95 my $timezone = $c->req->param('timezone');
96 my $query = $dbh->prepare(q{UPDATE users SET timezone = $2 WHERE uid = $1});
98 $dbh->selectrow_array(q{SELECT NOW() AT TIME ZONE $1},undef,$timezone);
99 $query->execute($c->user->id,$timezone );
102 $c->flash(error => $@);
104 $c->res->redirect($c->uri_for(''));
107 sub changePassword : Local {
108 my ( $self, $c ) = @_;
111 my $query = $dbh->prepare(q{UPDATE users SET password = MD5($1)
112 WHERE password = MD5($2) AND uid = $3
114 $query->execute($c->req->param('pass'),$c->req->param('oldpass'),$c->user->id);
116 $c->res->redirect($c->uri_for(''));
122 Michael Andreen (harv@ruin.nu)