Move from mod_perl to being a PSGI app.
[pr0n] / perl / Sesse / pr0n / Select.pm
1 package Sesse::pr0n::Select;
2 use strict;
3 use warnings;
4
5 use Sesse::pr0n::Common qw(error dberror);
6
7 sub handler {
8         my $r = shift;
9         my $dbh = Sesse::pr0n::Common::get_dbh();
10         my ($user, $takenby) = Sesse::pr0n::Common::check_access($r);
11         return Sesse::pr0n::Common::generate_401($r) if (!defined($user));
12
13         my $event = $r->param('event');
14
15         my $res = Plack::Response->new(200);
16         my $io = IO::String->new;
17         Sesse::pr0n::Common::header($r, $io, "Selection results");
18
19         {
20                 # Enable transactions and error raising temporarily
21                 local $dbh->{AutoCommit} = 0;
22                 local $dbh->{RaiseError} = 1;
23
24                 my $filename = $r->param('filename');
25                 my $selected = $r->param('selected');
26                 my $sql_selected = 'f';
27                 if (!defined($selected) || $selected eq '1') {
28                         $sql_selected = 't';
29                 }
30                 $dbh->do('UPDATE images SET selected=? WHERE vhost=? AND event=? AND filename=?', undef, $sql_selected, Sesse::pr0n::Common::get_server_name($r), $event, $filename);
31         }
32
33         $dbh->do('UPDATE last_picture_cache SET last_update=CURRENT_TIMESTAMP WHERE vhost=? AND event=?', undef, Sesse::pr0n::Common::get_server_name($r), $event)
34                 or return dberror($r, "Cache invalidation failed");
35         Sesse::pr0n::Common::purge_cache($r, $res, "/$event/");
36         Sesse::pr0n::Common::footer($r, $io);
37
38         $io->setpos(0);
39         $res->body($io);
40         return $res;
41 }
42
43 1;
44
45