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/index');
40 my ( $self, $c ) = @_;
41 $c->stash(template => 'default.tt2');
42 $c->response->status(410);
49 my $gi = Geo::IP->new(GEOIP_STANDARD);
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 my $sms = $dbh->prepare(q{
99 UPDATE sms SET status = $2, cost = $3
100 ,time = TIMESTAMP WITH TIME ZONE 'epoch' + $4 * INTERVAL '1 second'
104 $sms->execute($c->req->param('apiMsgId')
105 ,$clickatellstatus{$c->req->param('status')}
106 ,$c->req->param('charge')
107 ,$c->req->param('timestamp'));
109 $c->stash(template => 'default.tt2');
113 sub begin : Private {
116 $c->res->header( 'Cache-Control' =>
117 'no-store, no-cache, must-revalidate,'.
118 'post-check=0, pre-check=0, max-age=0'
120 $c->res->header( 'Pragma' => 'no-cache' );
121 $c->res->header( 'Expires' => 'Thu, 01 Jan 1970 00:00:00 GMT' );
124 sub listTargets : Private {
127 my $dbh = $c ->model;
129 my $query = $dbh->prepare(q{SELECT t.id, r.id AS raid, r.tick+c.wave-1 AS landingtick,
130 (released_coords AND old_claim(timestamp)) AS released_coords, coords(x,y,z),c.launched,c.wave,c.joinable
132 JOIN raid_targets t ON c.target = t.id
133 JOIN raids r ON t.raid = r.id
134 JOIN current_planet_stats p ON t.planet = p.id
135 WHERE c.uid = $1 AND r.tick+c.wave > tick() AND r.open AND not r.removed
136 ORDER BY r.tick+c.wave,x,y,z});
137 $query->execute($c->user->id) or die $dbh->errstr;
139 while (my $target = $query->fetchrow_hashref){
140 push @targets, $target;
143 $c->stash(claimedtargets => \@targets);
146 sub listAlliances : Private {
149 push @alliances,{id => -1, name => ''};
150 my $query = $c->model->prepare(q{SELECT id,name FROM alliances ORDER BY LOWER(name)});
152 while (my $ally = $query->fetchrow_hashref){
153 push @alliances,$ally;
155 $c->stash(alliances => \@alliances);
164 my $dbh = $c ->model;
166 $c->stash(dbh => $dbh);
168 $c->stash(sslurl => \&sslurl);
170 $dbh->do(q{SET timezone = 'GMT'});
172 $c->stash(TICK =>$dbh->selectrow_array('SELECT tick()',undef));
173 $c->stash(STICK =>$dbh->selectrow_array('SELECT max(tick) FROM planet_stats',undef));
174 $c->stash->{game}->{tick} = $c->stash->{TICK};
176 if ($c->user_exists){
177 $c->stash(UID => $c->user->id);
179 $c->stash(UID => -4);
183 sub redirect : Private {
185 $c->res->redirect($c->uri_for('/'.$c->session->{referrer}));
188 sub access_denied : Private {
189 my ($self, $c, $action) = @_;
191 $c->stash->{template} = 'access_denied.tt2';
192 $c->res->status(403);
198 Attempt to render a view, if needed.
202 sub end : ActionClass('RenderView') {
205 if ($c->res->status >= 300 && $c->res->status <= 400 ){
209 my $dbh = $c ->model;
211 if (scalar @{ $c->error } ){
212 if ($c->error->[0] =~ m/Can't call method "id" on an undefined value at/){
213 $c->stash->{template} = 'access_denied.tt2';
214 $c->res->status(403);
216 }elsif ($c->error->[0] =~ m/Missing roles: /){
217 $c->stash->{template} = 'access_denied.tt2';
218 $c->res->status(403);
223 if ($c->user_exists){
225 if ($c->check_user_roles(qw/member_menu/)){
226 $fleetupdate = $dbh->selectrow_array(q{
227 SELECT tick FROM fleets WHERE planet = ? AND tick > tick() - 24
228 AND mission = 'Full fleet' AND name IN ('Main','Advanced Unit');
229 },undef,$c->user->planet);
230 $fleetupdate = 0 unless defined $fleetupdate;
233 my ($unread,$newposts) = $dbh->selectrow_array(q{SELECT * FROM unread_posts($1)}
234 ,undef,$c->user->id);
238 name => $c->user->username,
239 css => $c->user->css,
240 newposts => $newposts,
241 unreadposts => $unread
243 $c->stash->{user}->{attacker} = $c->check_user_roles(qw/attack_menu/)
244 && (!$c->check_user_roles(qw/member_menu/)
245 || ($c->user->planet && (($c->stash->{TICK} - $fleetupdate < 24)
246 || $c->check_user_roles(qw/no_fleet_update/)))),
247 $c->forward('listTargets');
249 my $birthdays = $dbh->prepare(q{SELECT username
250 ,date_part('year',age(birthday)) AS age
251 FROM users WHERE birthday IS NOT NULL
252 AND mmdd(birthday) = mmdd(CURRENT_DATE)
255 $c->stash(birthdays => $birthdays->fetchall_arrayref({}));
257 if ($c->res->status == 200 || $c->req->method eq 'GET'){
258 $c->session->{referrer} = $c->req->path;
264 Michael Andreen (harv@ruin.nu)