summaryrefslogtreecommitdiff
path: root/lib/VNDB/Handler/Releases.pm
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2011-03-14 13:12:54 +0100
committerYorhel <git@yorhel.nl>2011-03-14 13:12:54 +0100
commit17d4f695b114f970c3b3c4c17c4b8915a0356297 (patch)
tree5e12ab47403fcf7919ebbde2a961c92506331850 /lib/VNDB/Handler/Releases.pm
parent4582a5dce7c0793fe64806d4cba5ab9d386ea878 (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.pm34
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;