--- /dev/null
+ALTER TABLE users ADD COLUMN timezone TEXT NOT NULL DEFAULT 'GMT';
use warnings;
use parent 'Catalyst::Controller';
+use DateTime::TimeZone;
+
=head1 NAME
NDWeb::Controller::JSRPC - Catalyst Controller
$c->forward('/listTargets');
}
+sub tzcountries : Local {
+ my ($self, $c, $cat) = @_;
+
+ my @countries = DateTime::TimeZone->names_in_category($cat);
+ $c->stash(tzcountries => \@countries);
+}
+
sub access_denied : Private {
my ($self, $c) = @_;
$c->stash(template => 'jsrpc/access_denied.tt2');
use NDWeb::Include;
+use DateTime::TimeZone;
+
=head1 NAME
NDWeb::Controller::Settings - Catalyst Controller
}
}
$c->stash(stylesheets => \@stylesheets);
- $c->stash(birthday => $dbh->selectrow_array(q{
- SELECT birthday FROM users WHERE uid = $1
- },undef,$c->user->id)
- );
+
+ my ($birthday,$timezone) = $dbh->selectrow_array(q{
+SELECT birthday,timezone FROM users WHERE uid = $1
+ },undef,$c->user->id);
+ $c->stash(birthday => $birthday);
+
+ my @timezone = split m{/},$timezone,2;
+ $c->stash(timezone => \@timezone);
+
+ my @cat = DateTime::TimeZone->categories;
+ unshift @cat, 'GMT';
+ $c->stash(tzcategories => \@cat);
+
+ my @countries = DateTime::TimeZone->names_in_category($timezone[0]);
+ $c->stash(tzcountries => \@countries);
}
sub changeStylesheet : Local {
$c->res->redirect($c->uri_for(''));
}
+sub changeTimezone : Local {
+ my ( $self, $c ) = @_;
+ my $dbh = $c->model;
+
+ my $timezone = $c->req->param('category');
+ $timezone .= '/' . $c->req->param('country') if $c->req->param('country');
+ my $query = $dbh->prepare(q{UPDATE users SET timezone = $2 WHERE uid = $1});
+ eval{
+ $dbh->selectrow_array(q{SELECT NOW() AT TIME ZONE $1},undef,$timezone);
+ $query->execute($c->user->id,$timezone );
+ };
+ if ($@){
+ $c->flash(error => $@);
+ }
+ $c->res->redirect($c->uri_for(''));
+}
sub changePassword : Local {
my ( $self, $c ) = @_;
--- /dev/null
+
+<countries>
+[% FOR country IN tzcountries %]
+ <country>[% country | html %]</country>
+[% END %]
+</countries>
</p>
</fieldset>
</form>
+<form action="[% c.uri_for('changeTimezone') %]" method="post"><fieldset> <legend>Timezone</legend>
+ <select name="category" id="tzcategory">
+[% FOR cat IN tzcategories %]
+ <option value="[% cat %]" [% IF cat == timezone.0 %]selected[% END %]>[% cat %]</option>
+[% END %]
+ </select>
+ <select name="country" id="tzcountry">
+[% FOR country IN tzcountries %]
+ <option value="[% country %]" [% IF country == timezone.1 %]selected[% END %]>[% country %]</option>
+[% END %]
+ </select>
+ <br><input type="submit" value="Change">
+ <p>Remember that GMT stays the same all year, so if you're in the UK you should pick Europe/London.</p>
+</fieldset></form>
[%- site.stylesheets = ['ui/ui.datepicker.css'] %]
<script type="text/javascript" src="/static/ui/ui.core.min.js"></script>
<script type="text/javascript" src="/static/ui/ui.datepicker.min.js"></script>
yearRange: "-80:+0",
dateFormat: $.datepicker.ATOM,
firstDay: 1,
- showOn: "both",
+ showOn: "both"
+ });
+ $("#tzcategory").change(function(){
+ $.get("/jsrpc/tzcountries/" + $(this).val(),function(xml){
+ $("#tzcountry").empty();
+ $("country",xml).each(function(i){
+ $("#tzcountry").append('<option value="'+$(this).text()+'">'+$(this).text()+'</option>');
+ });
+ });
});
});
</script>