1 package NDWeb::Controller::Root;
5 use parent 'Catalyst::Controller';
12 # Sets the actions in this controller to be registered with no prefix
13 # so they function identically to actions created in MyApp.pm
15 __PACKAGE__->config->{namespace} = '';
19 NDWeb::Controller::Root - Root Controller for NDWeb
23 [enter your description here]
33 sub index : Local Path Args(0) {
34 my ( $self, $c ) = @_;
36 $c->visit('/wiki/main');
40 my ( $self, $c ) = @_;
41 $c->stash(template => 'default.tt2');
42 $c->response->status(410);
49 my $gi = Geo::IP->new("/usr/share/GeoIP/GeoIP.dat");
50 my $country = $gi->country_code_by_addr($c->req->address) || '??';
53 if ($c->req->param('remember')){
54 $c->session_time_to_live( 604800 ); # expire in one week.
57 my $log = $c->model->prepare(q{INSERT INTO session_log
58 (uid,time,ip,country,session,remember)
59 VALUES ($1,NOW(),$2,$3,$4,$5)
61 $log->execute($c->user->id,$c->req->address
62 ,$country,$c->sessionid,$remember);
64 $c->forward('redirect');
66 } elsif ($c->req->method eq 'POST'){
74 $c->delete_session("logout");
75 $c->res->redirect($c->uri_for('index'));
78 my %clickatellstatus = (
79 "001", "Message unknown. The delivering network did not recognise the message type or content.",
80 "002", "Message queued. The message could not be delivered and has been queued for attempted redelivery.",
81 "003", "Delivered. Delivered to the network or gateway (delivered to the recipient).",
82 "004", "Received by recipient. Confirmation of receipt on the handset of the recipient.",
83 "005", "Error with message. There was an error with the message, probably caused by the content of the message itself.",
84 "006", "User cancelled message delivery. Client cancelled the message by setting the validity period, or the message was terminated by an internal mechanism.",
85 "007", "Error delivering message An error occurred delivering the message to the handset.",
86 "008", " OK. Message received by gateway.",
87 "009", "Routing error. The routing gateway or network has had an error routing the message.",
88 "010", "Message expired. Message has expired at the network due to the handset being off, or out of reach.",
89 "011", "Message queued for later delivery. Message has been queued at the Clickatell gateway for delivery at a later time (delayed delivery).",
90 "012", "Out of credit. The message cannot be delivered due to a lack of funds in your account. Please re-purchase credits."
94 sub smsconfirm : Local {
98 return unless $c->req->param('apiMsgId');
100 my $sms = $dbh->prepare(q{
101 UPDATE sms SET status = $2, cost = $3
102 ,time = TIMESTAMP WITH TIME ZONE 'epoch' + $4 * INTERVAL '1 second'
106 $sms->execute($c->req->param('apiMsgId')
107 ,$clickatellstatus{$c->req->param('status')}
108 ,$c->req->param('charge')
109 ,$c->req->param('timestamp'));
111 $c->stash(template => 'default.tt2');
115 sub begin : Private {
118 $c->res->header( 'Cache-Control' =>
119 'no-store, no-cache, must-revalidate,'.
120 'post-check=0, pre-check=0, max-age=0'
122 $c->res->header( 'Pragma' => 'no-cache' );
123 $c->res->header( 'Expires' => 'Thu, 01 Jan 1970 00:00:00 GMT' );
126 sub listTargets : Private {
129 my $dbh = $c ->model;
131 my $query = $dbh->prepare(q{SELECT t.id, r.id AS raid, r.tick+c.wave-1 AS landingtick,
132 (released_coords AND old_claim(timestamp)) AS released_coords, coords(x,y,z),c.launched,c.wave,c.joinable
134 JOIN raid_targets t ON c.target = t.id
135 JOIN raids r ON t.raid = r.id
136 JOIN current_planet_stats p USING (pid)
137 WHERE c.uid = $1 AND r.tick+c.wave > tick() AND r.open AND not r.removed
138 ORDER BY r.tick+c.wave,x,y,z});
139 $query->execute($c->user->id) or die $dbh->errstr;
141 while (my $target = $query->fetchrow_hashref){
142 push @targets, $target;
145 $c->stash(claimedtargets => \@targets);
148 sub listAlliances : Private {
151 push @alliances,{aid => '', alliance => ''};
152 my $query = $c->model->prepare(q{SELECT aid,alliance FROM alliances ORDER BY LOWER(alliance)});
154 while (my $ally = $query->fetchrow_hashref){
155 push @alliances,$ally;
157 $c->stash(alliances => \@alliances);
166 my $dbh = $c ->model;
168 $c->stash(dbh => $dbh);
170 $c->stash(sslurl => \&sslurl);
172 $dbh->do(q{SET timezone = 'GMT'});
174 $c->stash(TICK =>$dbh->selectrow_array('SELECT tick()',undef));
175 $c->stash(STICK =>$dbh->selectrow_array('SELECT max(tick) FROM planet_stats',undef));
176 $c->stash->{game}->{tick} = $c->stash->{TICK};
178 if ($c->user_exists){
179 $c->stash(UID => $c->user->id);
181 $c->stash(UID => -4);
185 sub redirect : Private {
187 $c->res->redirect($c->uri_for('/'.$c->session->{referrer}));
190 sub access_denied : Private {
191 my ($self, $c, $action) = @_;
193 $c->stash->{template} = 'access_denied.tt2';
194 $c->res->status(403);
200 Attempt to render a view, if needed.
204 sub end : ActionClass('RenderView') {
207 if ($c->res->status >= 300 && $c->res->status <= 400 ){
211 my $dbh = $c ->model;
213 if (scalar @{ $c->error } ){
214 if ($c->error->[0] =~ m/Can't call method "id" on an undefined value at/){
215 $c->stash->{template} = 'access_denied.tt2';
216 $c->res->status(403);
218 }elsif ($c->error->[0] =~ m/Missing roles: /){
219 $c->stash->{template} = 'access_denied.tt2';
220 $c->res->status(403);
225 if ($c->user_exists){
227 if ($c->check_user_roles(qw/member_menu/)){
228 $fleetupdate = $dbh->selectrow_array(q{
229 SELECT tick FROM fleets WHERE pid = ? AND tick > tick() - 24
230 AND mission = 'Full fleet' AND name IN ('Main','Advanced Unit');
231 },undef,$c->user->planet);
232 $fleetupdate = 0 unless defined $fleetupdate;
235 my ($unread,$newposts) = $dbh->selectrow_array(q{SELECT * FROM unread_posts($1)}
236 ,undef,$c->user->id);
240 name => $c->user->username,
241 css => $c->user->css,
242 newposts => $newposts,
243 unreadposts => $unread
245 $c->stash->{user}->{attacker} = $c->check_user_roles(qw/attack_menu/)
246 && (!$c->check_user_roles(qw/member_menu/)
247 || ($c->user->planet && (($c->stash->{TICK} - $fleetupdate < 24)
248 || $c->check_user_roles(qw/no_fleet_update/)))),
249 $c->forward('listTargets');
251 my $birthdays = $dbh->prepare(q{SELECT username
252 ,date_part('year',age(birthday)) AS age
253 FROM users WHERE birthday IS NOT NULL
254 AND mmdd(birthday) = mmdd(CURRENT_DATE)
257 $c->stash(birthdays => $birthdays->fetchall_arrayref({}));
259 if ($c->res->status == 200 || $c->req->method eq 'GET'){
260 $c->session->{referrer} = $c->req->path;
266 Michael Andreen (harv@ruin.nu)