1 package Sesse::pr0n::Rotate;
5 use Sesse::pr0n::Common qw(error dberror);
10 my $apr = Apache2::Request->new($r);
11 my $dbh = Sesse::pr0n::Common::get_dbh();
12 my ($user, $takenby) = Sesse::pr0n::Common::check_access($r);
13 if (!defined($user)) {
14 return Apache2::Const::OK;
17 Sesse::pr0n::Common::header($r, "Rotation/deletion results");
20 # Enable transactions and error raising temporarily
21 local $dbh->{AutoCommit} = 0;
22 local $dbh->{RaiseError} = 1;
24 my @params = $apr->param();
28 if ($key =~ /^rot-(\d+)-(90|180|270)$/ && $apr->param($key) eq 'on') {
29 my ($id, $rotval) = ($1,$2);
30 my $fname = Sesse::pr0n::Common::get_disk_location($r, $id);
31 (my $tmpfname = $fname) =~ s/\.jpg$/-tmp.jpg/;
33 system("/usr/bin/jpegtran -rotate $rotval -copy all < '$fname' > '$tmpfname' && mv '$tmpfname' '$fname'") == 0
34 or error($r, "Rotation of $id [/usr/bin/jpegtran -rotate $rotval -copy all < '$fname' > '$tmpfname' && mv '$tmpfname' '$fname'] failed: $!.");
35 $r->print(" <p>Rotated image ID `$id' by $rotval degrees.</p>\n");
37 if ($rotval == 90 || $rotval == 270) {
38 my $q = $dbh->do('UPDATE images SET height=width,width=height WHERE id=?', undef, $id)
39 or dberror($r, "Size clear of $id failed: $!");
41 } elsif ($key =~ /^del-(\d+)$/ && $apr->param($key) eq 'on') {
46 $dbh->do('INSERT INTO deleted_images SELECT * FROM images WHERE id=?',
48 $dbh->do('DELETE FROM images WHERE id=?',
52 # Some error occurred, rollback and bomb out
54 dberror($r, "Transaction aborted because $@");
57 $r->print(" <p>Deleted image `$id'.</p>\n");
62 Sesse::pr0n::Common::footer($r);
64 return Apache2::Const::OK;