(common.inc.plp)><:
Html({
title => 'words cheat sheet admin',
version => '1.0',
nocache => 1,
raw => <<'EOT',
EOT
});
use List::Util qw( pairs pairkeys );
my $db = eval {
my @dbinfo = (
'DBI:Pg:dbname=sheet;host=localhost', 'sheetadmin', 'fairuse',
) or die "database not configured\n";
require DBIx::Simple;
DBIx::Simple->new(@dbinfo[0..2], {
RaiseError => 1,
pg_enable_utf8 => 1,
});
} or Abort('Database error', 501, $@);
my @wordcols = (
lang => 'Language',
cat => 'Category',
form => 'Translation',
wptitle => 'Wikipedia',
source => 'Image URL',
thumb => 'Convert options',
prio => 'Level',
ref => 'Reference',
);
my ($find) = map {{id => $_}} $fields{id} || $Request || ();
my $row;
if ($find) {
$row = $db->select(word => '*', $find)->hash
or Abort("Word not found", 404);
}
if (exists $get{copy}) {
$row = {%{$row}{ qw(prio lang cat) }};
}
elsif ($ENV{REQUEST_METHOD} eq 'POST') {{
my $replace = $row;
$row = {%post{ pairkeys @wordcols }};
$_ = length ? $_ : undef for values %{$row};
eval {
my %res = (returning => '*');
my $query = $find ? $db->update(word => $row, $find, \%res) :
$db->insert(word => $row, \%res);
$row = $query->hash;
} or do {
Alert("Entry could not be saved", $@);
next;
};
my $imgpath = "data/word/org/$row->{id}.jpg";
if (($row->{source} // '') ne ($replace->{source} // '')) {
# copy changed remote url to local file
unlink $imgpath if -e $imgpath;
if (my $download = $row->{source}) {
require LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->agent('/');
my $status = $ua->mirror($download, $imgpath);
$status->is_success or Alert([
"Source image not found",
"Download from $download
failed: ".$status->status_line,
]);
}
}
elsif ($row->{thumb} ~~ $replace->{thumb}) {
# image and conversion unaltered
$imgpath = undef;
}
my $thumbpath = "data/word/eng/$row->{form}.jpg";
if ($imgpath) {
if (-e $imgpath) {
my @cmds = @{ $row->{thumb} // [] };
@cmds = (
'convert',
-delete => '1--1', -background => 'white',
-gravity => @cmds ? 'northwest' : 'center',
@cmds,
-resize => '300x200^', -extent => '300x200',
'-strip', -quality => '60%', -interlace => 'plane',
$imgpath => $thumbpath
);
my $status = system @cmds;
$status == 0 or Alert([
"Thumbnail image not generated",
"Failed to convert source image, error code ".($status >> 8),
], "@cmds");
}
else {
unlink $thumbpath;
}
}
}}
else {
$row->{prio} //= 1;
$row->{$_} = $get{$_} for keys %get;
}
my $title = $row->{id} ? "entry #$row->{id}" : 'new entry';
:>