summaryrefslogtreecommitdiff
path: root/lib
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
parent4582a5dce7c0793fe64806d4cba5ab9d386ea878 (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.pm2
-rw-r--r--lib/VNDB/Handler/Chars.pm14
-rw-r--r--lib/VNDB/Handler/Releases.pm34
-rw-r--r--lib/VNDB/Handler/Traits.pm2
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};
}