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/VNDB/Handler/Releases.pm | |
parent | 4582a5dce7c0793fe64806d4cba5ab9d386ea878 (diff) |
chardb: Added Char<->VN linking edit interface
Still somewhat quircky, but it works.
Diffstat (limited to 'lib/VNDB/Handler/Releases.pm')
-rw-r--r-- | lib/VNDB/Handler/Releases.pm | 34 |
1 files changed, 33 insertions, 1 deletions
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; |