diff options
author | Yorhel <git@yorhel.nl> | 2020-01-23 10:22:36 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2020-01-23 10:22:39 +0100 |
commit | 95c14cbfeaf92d29827196912b9c7259c3afb89d (patch) | |
tree | 6a0ce2c17701ca1c5e60e2c9c5372117e53af3a5 /lib/VNDB/Handler/Releases.pm | |
parent | b86e1c7744710099d1511598ece7f5c320cd54da (diff) |
v2rw: Convert release pages
This removes the user list management functionality, I'll reimplement
those in a bit.
Diffstat (limited to 'lib/VNDB/Handler/Releases.pm')
-rw-r--r-- | lib/VNDB/Handler/Releases.pm | 283 |
1 files changed, 1 insertions, 282 deletions
diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm index 4b850e58..589a685b 100644 --- a/lib/VNDB/Handler/Releases.pm +++ b/lib/VNDB/Handler/Releases.pm @@ -3,17 +3,15 @@ package VNDB::Handler::Releases; use strict; use warnings; -use TUWF ':html', ':xml', 'uri_escape', 'xml_escape'; +use TUWF ':html', ':xml', 'uri_escape'; use VNDB::Func; use VNDB::Types; -use VNDB::ExtLinks; use Exporter 'import'; our @EXPORT = ('releaseExtLinks'); TUWF::register( - qr{r([1-9]\d*)(?:\.([1-9]\d*))?} => \&page, qr{(v)([1-9]\d*)/add} => \&edit, qr{r} => \&browse, qr{r(?:([1-9]\d*)(?:\.([1-9]\d*))?/(edit|copy))} @@ -24,285 +22,6 @@ TUWF::register( ); -sub page { - my($self, $rid, $rev) = @_; - - my $method = $rev ? 'dbReleaseGetRev' : 'dbReleaseGet'; - my $r = $self->$method( - id => $rid, - what => 'vn extended links producers platforms media', - $rev ? (rev => $rev) : (), - )->[0]; - return $self->resNotFound if !$r->{id}; - enrich_extlinks r => $r; - - my $metadata = { - 'og:title' => $r->{title}, - 'og:description' => bb2text $r->{notes}, - }; - - $self->htmlHeader(title => $r->{title}, noindex => $rev, metadata => $metadata); - $self->htmlMainTabs('r', $r); - return if $self->htmlHiddenMessage('r', $r); - - if($rev) { - my $prev = $rev && $rev > 1 && $self->dbReleaseGetRev( - id => $rid, rev => $rev-1, - what => 'vn extended links producers platforms media changes' - )->[0]; - $self->htmlRevision('r', $prev, $r, - [ vn => 'Relations', join => '<br />', split => sub { - map sprintf('<a href="/v%d" title="%s">%s</a>', $_->{vid}, $_->{original}||$_->{title}, shorten $_->{title}, 50), @{$_[0]}; - } ], - [ type => 'Type' ], - [ patch => 'Patch', serialize => sub { $_[0] ? 'Yes' : 'No' } ], - [ freeware => 'Freeware', serialize => sub { $_[0] ? 'Yes' : 'No' } ], - [ doujin => 'Doujin', serialize => sub { $_[0] ? 'Yes' : 'No' } ], - [ uncensored => 'Uncensored', serialize => sub { $_[0] ? 'Yes' : 'No' } ], - [ title => 'Title (romaji)', diff => 1 ], - [ original => 'Original title', diff => 1 ], - [ gtin => 'JAN/UPC/EAN', serialize => sub { $_[0]||'[empty]' } ], - [ catalog => 'Catalog number', serialize => sub { $_[0]||'[empty]' } ], - [ languages => 'Language', join => ', ', split => sub { map $LANGUAGE{$_}, @{$_[0]} } ], - [ website => 'Website' ], - [ l_egs => 'ErogameScape', htmlize => sub { $_[0] ? sprintf '<a href="https://erogamescape.dyndns.org/~ap2/ero/toukei_kaiseki/game.php?game=%d">%1$d</a>', $_[0] : '[empty]' } ], - [ l_erotrail => 'ErogeTrailers', htmlize => sub { $_[0] ? sprintf '<a href="http://erogetrailers.com/soft/%d">%1$d</a>', $_[0] : '[empty]' } ], - [ l_steam => 'Steam AppId', htmlize => sub { $_[0] ? sprintf '<a href="https://store.steampowered.com/app/%d/">%1$d</a>', $_[0] : '[empty]' } ], - [ l_dlsite => 'DLsite (jpn)', htmlize => sub { $_[0] ? sprintf '<a href="'.sprintf($self->{dlsite_url}, 'home').'">%1$s</a>', $_[0] : '[empty]' } ], - [ l_dlsiteen => 'DLsite (eng)', htmlize => sub { $_[0] ? sprintf '<a href="'.sprintf($self->{dlsite_url}, 'eng').'">%1$s</a>', $_[0] : '[empty]' } ], - [ l_gog => 'GOG.com', htmlize => sub { $_[0] ? sprintf '<a href="https://www.gog.com/game/%s">%1$s</a>', $_[0] : '[empty]' } ], - [ l_denpa => 'Denpasoft', htmlize => sub { $_[0] ? sprintf qq{<a href="$self->{denpa_url}">%1\$s</a>}, $_[0] : '[empty]' } ], - [ l_jlist => 'J-List', htmlize => sub { $_[0] ? sprintf qq{<a href="$self->{jlist_url}">%1\$s</a>}, $_[0] : '[empty]' } ], - [ l_gyutto => 'Gyutto', htmlize => sub { join ', ', map sprintf('<a href="https://gyutto.com/i/item%d">%1$s</a>', xml_escape $_), sort @{$_[0]} } ], - [ l_digiket => 'Digiket', htmlize => sub { $_[0] ? sprintf '<a href="https://www.digiket.com/work/show/_data/ID=ITM%07d/">%1$d</a>', $_[0] : '[empty]' } ], - [ l_melon => 'Melonbooks', htmlize => sub { $_[0] ? sprintf '<a href="https://www.melonbooks.com/index.php?main_page=product_info&products_id=IT%010d">%1$d</a>', $_[0] : '[empty]' } ], - [ l_mg => 'MangaGamer', htmlize => sub { $_[0] ? sprintf qq{<a href="$self->{mg_r18_url}">%1\$d</a>}, $_[0] : '[empty]' } ], - [ l_getchu => 'Getchu', htmlize => sub { $_[0] ? sprintf '<a href="http://www.getchu.com/soft.phtml?id=%d">%1$d</a>', $_[0] : '[empty]' } ], - [ l_getchudl => 'DL.Getchu', htmlize => sub { $_[0] ? sprintf '<a href="http://dl.getchu.com/i/item%d">%1$d</a>', $_[0] : '[empty]' } ], - [ l_dmm => 'DMM', htmlize => sub { join ', ', map sprintf('<a href="https://%s">%1$s</a>', xml_escape $_), sort @{$_[0]} } ], - [ l_itch => 'Itch.io', htmlize => sub { $_[0] ? sprintf '<a href="https://%s">%1$s</a>', xml_escape $_[0] : '[empty]' } ], - [ l_jastusa => 'JAST USA', htmlize => sub { $_[0] ? sprintf '<a href="https://jastusa.com/%s">%1$s</a>', xml_escape $_[0] : '[empty]' } ], - [ released => 'Release date', htmlize => \&fmtdatestr ], - [ minage => 'Age rating', serialize => \&minage ], - [ notes => 'Notes', diff => qr/[ ,\n\.]/ ], - [ platforms => 'Platforms', join => ', ', split => sub { map $PLATFORM{$_}, @{$_[0]} } ], - [ media => 'Media', join => ', ', split => sub { map fmtmedia($_->{medium}, $_->{qty}), @{$_[0]} } ], - [ resolution => 'Resolution', serialize => sub { $RESOLUTION{$_[0]}{txt}; } ], - [ voiced => 'Voiced', serialize => sub { $VOICED{$_[0]}{txt} } ], - [ ani_story => 'Story animation', serialize => sub { $ANIMATED{$_[0]}{txt} } ], - [ ani_ero => 'Ero animation', serialize => sub { $ANIMATED{$_[0]}{txt} } ], - [ engine => 'Engine' ], - [ producers => 'Producers', join => '<br />', split => sub { - map sprintf('<a href="/p%d" title="%s">%s</a> (%s)', $_->{id}, xml_escape($_->{original}||$_->{name}), xml_escape(shorten($_->{name}, 50)), - join(', ', $_->{developer} ? 'developer' :(), $_->{publisher} ? 'publisher' :()) - ), @{$_[0]}; - } ], - ); - } - - div class => 'mainbox release'; - $self->htmlItemMessage('r', $r); - h1 $r->{title}; - h2 class => 'alttitle', lang_attr($r->{languages}), $r->{original} if $r->{original}; - - _infotable($self, $r); - - if($r->{notes}) { - p class => 'description'; - lit bb2html $r->{notes}; - end; - } - - end; - $self->htmlFooter; -} - - -sub _infotable { - my($self, $r) = @_; - table class => 'stripe'; - - Tr; - td class => 'key', 'Relation'; - td; - for (@{$r->{vn}}) { - a href => "/v$_->{vid}", title => $_->{original}||$_->{title}, shorten $_->{title}, 60; - br if $_ != $r->{vn}[$#{$r->{vn}}]; - } - end; - end; - - Tr; - td 'Title'; - td $r->{title}; - end; - - if($r->{original}) { - Tr; - td 'Original title'; - td lang_attr($r->{languages}), $r->{original}; - end; - } - - Tr; - td 'Type'; - td; - cssicon "rt$r->{type}", $r->{type}; - txt sprintf ' %s%s', $RELEASE_TYPE{$r->{type}}, $r->{patch} ? ', patch' : ''; - end; - end; - - Tr; - td 'Language'; - td; - for (@{$r->{languages}}) { - cssicon "lang $_", $LANGUAGE{$_}; - txt ' '.$LANGUAGE{$_}; - br if $_ ne $r->{languages}[$#{$r->{languages}}]; - } - end; - end; - - Tr; - td 'Publication'; - td join ', ', - $r->{freeware} ? 'Freeware' : 'Non-free', - $r->{patch} ? () : ($r->{doujin} ? 'doujin' : 'commercial'); - end; - - if(@{$r->{platforms}}) { - Tr; - td 'Platform'.(@{$r->{platforms}} == 1 ? '' : 's'); - td; - for(@{$r->{platforms}}) { - cssicon $_, $PLATFORM{$_}; - txt ' '.$PLATFORM{$_}; - br if $_ ne $r->{platforms}[$#{$r->{platforms}}]; - } - end; - end; - } - - if(@{$r->{media}}) { - Tr; - td @{$r->{media}} == 1 ? 'Medium' : 'Media'; - td join ', ', map fmtmedia($_->{medium}, $_->{qty}), @{$r->{media}}; - end; - } - - if($r->{resolution} ne 'unknown') { - Tr; - td 'Resolution'; - td $RESOLUTION{$r->{resolution}}{txt}; - end; - } - - if($r->{voiced}) { - Tr; - td 'Voiced'; - td $VOICED{$r->{voiced}}{txt}; - end; - } - - if($r->{ani_story} || $r->{ani_ero}) { - Tr; - td 'Animation'; - td join ', ', - $r->{ani_story} ? "Story: $ANIMATED{$r->{ani_story}}{txt}" : (), - $r->{ani_ero} ? "Ero scenes: $ANIMATED{$r->{ani_ero}}{txt}" : (); - end; - } - - if(length $r->{engine}) { - Tr; - td 'Engine'; - td; a href => '/r?fil='.fil_serialize({engine => $r->{engine}}), $r->{engine}; end; - end; - } - - Tr; - td 'Released'; - td; - lit fmtdatestr $r->{released}; - end; - end; - - if($r->{minage} >= 0) { - Tr; - td 'Age rating'; - td minage $r->{minage}; - end; - } - - if($r->{minage} == 18) { - Tr; - td 'Censoring'; - td $r->{uncensored} ? 'No optical censoring (e.g. mosaics)' : 'May include optical censoring (e.g. mosaics)'; - end; - } - - for my $t (qw|developer publisher|) { - my @prod = grep $_->{$t}, @{$r->{producers}}; - if(@prod) { - Tr; - td ucfirst($t).(@prod == 1 ? '' : 's'); - td; - for (@prod) { - a href => "/p$_->{id}", title => $_->{original}||$_->{name}, shorten $_->{name}, 60; - br if $_ != $prod[$#prod]; - } - end; - end; - } - } - - if($r->{gtin}) { - Tr; - td gtintype($r->{gtin}) || 'GTIN'; - td $r->{gtin}; - end; - } - - if($r->{catalog}) { - Tr; - td 'Catalog no.'; - td $r->{catalog}; - end; - } - - if($r->{extlinks}->@*) { - Tr; - td 'Links'; - td; - for($r->{extlinks}->@*) { - a href => $_->[1], $_->[0]; - txt ', ' if $_ ne $r->{extlinks}[$#{$r->{extlinks}}]; - } - end; - end; - } - - if($self->authInfo->{id}) { - my $rl = $self->dbRListGet(uid => $self->authInfo->{id}, rid => $r->{id})->[0]; - Tr; - td 'User options'; - td; - Select id => 'listsel', name => $self->authGetCode("/r$r->{id}/list"); - option value => -2, !$rl ? 'not on your list' : "Status: $RLIST_STATUS{$rl->{status}}"; - optgroup label => 'Set status'; - option value => $_, $RLIST_STATUS{$_} - for (keys %RLIST_STATUS); - end; - option value => -1, 'remove from list' if $rl; - end; - end; - end 'tr'; - } - - end 'table'; -} - - # rid = \d -> edit/copy release # rid = 'v' -> add release to VN with id $rev sub edit { |