diff options
author | Yorhel <git@yorhel.nl> | 2011-03-14 13:12:54 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2011-03-14 13:12:54 +0100 |
commit | 17d4f695b114f970c3b3c4c17c4b8915a0356297 (patch) | |
tree | 5e12ab47403fcf7919ebbde2a961c92506331850 /lib | |
parent | 4582a5dce7c0793fe64806d4cba5ab9d386ea878 (diff) |
chardb: Added Char<->VN linking edit interface
Still somewhat quircky, but it works.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/VNDB/DB/Releases.pm | 2 | ||||
-rw-r--r-- | lib/VNDB/Handler/Chars.pm | 14 | ||||
-rw-r--r-- | lib/VNDB/Handler/Releases.pm | 34 | ||||
-rw-r--r-- | lib/VNDB/Handler/Traits.pm | 2 |
4 files changed, 48 insertions, 4 deletions
diff --git a/lib/VNDB/DB/Releases.pm b/lib/VNDB/DB/Releases.pm index 87685ce6..bd2d5bd3 100644 --- a/lib/VNDB/DB/Releases.pm +++ b/lib/VNDB/DB/Releases.pm @@ -24,7 +24,7 @@ sub dbReleaseGet { !$o{id} && !$o{rev} ? ( 'r.hidden = FALSE' => 0 ) : (), $o{id} ? ( 'r.id = ?' => $o{id} ) : (), $o{rev} ? ( 'c.rev = ?' => $o{rev} ) : (), - $o{vid} ? ( 'rv.vid = ?' => $o{vid} ) : (), + $o{vid} ? ( 'rv.vid IN(!l)' => [ ref $o{vid} ? $o{vid} : [$o{vid}] ] ) : (), $o{pid} ? ( 'rp.pid = ?' => $o{pid} ) : (), defined $o{patch} ? ( 'rr.patch = ?' => $o{patch} == 1 ? 1 : 0) : (), defined $o{freeware} ? ( 'rr.freeware = ?' => $o{freeware} == 1 ? 1 : 0) : (), diff --git a/lib/VNDB/Handler/Chars.pm b/lib/VNDB/Handler/Chars.pm index 64e7df2d..fa937915 100644 --- a/lib/VNDB/Handler/Chars.pm +++ b/lib/VNDB/Handler/Chars.pm @@ -141,6 +141,7 @@ sub page { # vns # TODO: handle spoilers! + # TODO: translate! if(@{$r->{vns}}) { my %vns; push @{$vns{$_->{vid}}}, $_ for(sort { !defined($a->{rid})?1:!defined($b->{rid})?-1:$a->{rtitle} cmp $b->{rtitle} } @{$r->{vns}}); @@ -334,7 +335,18 @@ sub edit { ], chare_vns => [ mt('_chare_vns'), - [ input => short => 'vns', name => 'VNs (debug)' ], + [ hidden => short => 'vns' ], + [ static => nolabel => 1, content => sub { + h2 'Selected visual novels'; + table; tbody id => 'vns_tbl'; + Tr id => 'vns_loading'; td colspan => '4', mt('_js_loading'); end; + end; end; + h2 'Add visual novel'; + table; Tr; + td class => 'tc_vnadd'; input id => 'vns_input', type => 'text', class => 'text'; end; + td colspan => 3, ''; + end; end; + }], ]); $self->htmlFooter; } diff --git a/lib/VNDB/Handler/Releases.pm b/lib/VNDB/Handler/Releases.pm index a3ecbd42..159b7c3f 100644 --- a/lib/VNDB/Handler/Releases.pm +++ b/lib/VNDB/Handler/Releases.pm @@ -3,7 +3,7 @@ package VNDB::Handler::Releases; use strict; use warnings; -use TUWF ':html', 'uri_escape'; +use TUWF ':html', ':xml', 'uri_escape'; use VNDB::Func; @@ -13,6 +13,7 @@ TUWF::register( qr{r} => \&browse, qr{r(?:([1-9]\d*)(?:\.([1-9]\d*))?/(edit|copy))} => \&edit, + qr{xml/releases.xml} => \&relxml, ); @@ -590,5 +591,36 @@ sub _fil_compat { } +sub relxml { + my $self = shift; + + my $f = $self->formValidate( + { get => 'v', required => 1, multi => 1, mincount => 1, template => 'int' } + ); + return $self->resNotFound if $f->{_err}; + + my $list = $self->dbReleaseGet(vid => $f->{v}, results => 100, what => 'vn'); + my %vns = map +($_,0), @{$f->{v}}; + for my $r (@$list) { + for my $v (@{$r->{vn}}) { + next if !exists $vns{$v->{vid}}; + $vns{$v->{vid}} = [ $v ] if !$vns{$v->{vid}}; + push @{$vns{$v->{vid}}}, $r; + } + } + $self->resHeader('Content-type' => 'text/xml; charset=UTF-8'); + xml; + tag 'vns'; + for (sort { $a->[0]{title} cmp $b->[0]{title} } values %vns) { + my $v = shift @$_; + tag 'vn', id => $v->{vid}, title => $v->{title}; + tag 'release', id => $_->{id}, lang => join(',', @{$_->{languages}}), $_->{title} + for (@$_); + end; + } + end; +} + + 1; diff --git a/lib/VNDB/Handler/Traits.pm b/lib/VNDB/Handler/Traits.pm index a66721a8..887890b6 100644 --- a/lib/VNDB/Handler/Traits.pm +++ b/lib/VNDB/Handler/Traits.pm @@ -423,7 +423,7 @@ sub traitxml { $self->resHeader('Content-type' => 'text/xml; charset=UTF-8'); xml; - tag 'tags', more => $np ? 'yes' : 'no'; + tag 'traits', more => $np ? 'yes' : 'no'; for(@$list) { tag 'item', id => $_->{id}, meta => $_->{meta} ? 'yes' : 'no', group => $_->{group}||'', groupname => $_->{groupname}||'', state => $_->{state}, $_->{name}; } |