summaryrefslogtreecommitdiff
path: root/lib/VNDB
diff options
context:
space:
mode:
authoryorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b>2008-04-29 12:59:28 +0000
committeryorhel <yorhel@1fe2e327-d9db-4752-bcf7-ef0cb4a1748b>2008-04-29 12:59:28 +0000
commit2e533bd16346ec74216415c01a57c7276d608cf8 (patch)
tree680ac1cb7fe15c65a53c9f0bc6b1e4949481118b /lib/VNDB
parent04c26425699a3e01d0e2abe52ad9f763396cd940 (diff)
...another commit...
git-svn-id: svn://vndb.org/vndb@9 1fe2e327-d9db-4752-bcf7-ef0cb4a1748b
Diffstat (limited to 'lib/VNDB')
-rw-r--r--lib/VNDB/Util/DB.pm36
-rw-r--r--lib/VNDB/Util/Tools.pm4
-rw-r--r--lib/VNDB/VN.pm23
3 files changed, 53 insertions, 10 deletions
diff --git a/lib/VNDB/Util/DB.pm b/lib/VNDB/Util/DB.pm
index 3f99aff8..f10f7b67 100644
--- a/lib/VNDB/Util/DB.pm
+++ b/lib/VNDB/Util/DB.pm
@@ -630,10 +630,11 @@ sub DBGetVN { # %options->{ id rev char search order results page what cati cate
);
$_->{c_released} = sprintf '%08d', $_->{c_released} for @$r;
- if($o{what} =~ /(relations|categories)/ && $#$r >= 0) {
+ if($o{what} =~ /(?:relations|categories|anime)/ && $#$r >= 0) {
my %r = map {
$r->[$_]{relations} = [];
$r->[$_]{categories} = [];
+ $r->[$_]{anime} = [];
($r->[$_]{cid}, $_)
} 0..$#$r;
@@ -646,6 +647,16 @@ sub DBGetVN { # %options->{ id rev char search order results page what cati cate
)});
}
+ if($o{what} =~ /anime/) {
+ push(@{$r->[$r{$_->{vid}}]{anime}}, $_) && delete $_->{vid} for (@{$s->DBAll(q|
+ SELECT va.vid, a.*
+ FROM vn_anime va
+ JOIN anime a ON va.aid = a.id
+ WHERE va.vid IN(!l)|,
+ [ keys %r ]
+ )});
+ }
+
if($o{what} =~ /relations/) {
my $rel = $s->DBAll(q|
SELECT rel.vid1, rel.vid2, rel.relation, vr.title
@@ -669,7 +680,7 @@ sub DBGetVN { # %options->{ id rev char search order results page what cati cate
}
-sub DBAddVN { # %options->{ columns in vn_rev + comm + relations }
+sub DBAddVN { # %options->{ columns in vn_rev + comm + relations + categories + anime }
my($s, %o) = @_;
$s->DBExec(q|
@@ -690,7 +701,7 @@ sub DBAddVN { # %options->{ columns in vn_rev + comm + relations }
}
-sub DBEditVN { # id, %options->( columns in vn_rev + comm + relations + categories + uid + causedby }
+sub DBEditVN { # id, %options->( columns in vn_rev + comm + relations + categories + anime + uid + causedby }
my($s, $vid, %o) = @_;
$s->DBExec(q|
@@ -733,6 +744,25 @@ sub _insert_vn_rev {
VALUES (%d, %d, %d)|,
$cid, $_->[1], $_->[0]
) for (@{$o->{relations}});
+
+ if(@{$o->{anime}}) {
+ $s->DBExec(q|
+ INSERT INTO vn_anime (vid, aid)
+ VALUES (%d, %d)|,
+ $cid, $_
+ ) for (@{$o->{anime}});
+
+ # insert unknown anime
+ my $a = $s->DBAll(q|
+ SELECT id FROM anime WHERE id IN(!l)|,
+ $o->{anime});
+ $s->DBExec(q|
+ INSERT INTO anime (id) VALUES (%d)|, $_
+ ) for (grep {
+ my $ia = $_;
+ !(scalar grep $ia == $_->{id}, @$a)
+ } @{$o->{anime}});
+ }
}
diff --git a/lib/VNDB/Util/Tools.pm b/lib/VNDB/Util/Tools.pm
index c2d9268b..f338ad7c 100644
--- a/lib/VNDB/Util/Tools.pm
+++ b/lib/VNDB/Util/Tools.pm
@@ -132,8 +132,8 @@ sub AddDefaultStuff {
sub RunCmd { # cmd
my $s = tie my %s, 'Tie::ShareLite', @VNDB::SHMOPTS;
$s->lock(LOCK_EX);
- $s{queue} = [] if !$s{queue};
- push(@{$s{queue}}, grep !/^-/, $_[1]);
+ my @q = ( ($s{queue} ? @{$s{queue}} : ()), $_[1] );
+ $s{queue} = \@q;
$s->unlock();
}
diff --git a/lib/VNDB/VN.pm b/lib/VNDB/VN.pm
index ea13445b..4732e278 100644
--- a/lib/VNDB/VN.pm
+++ b/lib/VNDB/VN.pm
@@ -24,13 +24,13 @@ sub VNPage {
my $v = $self->DBGetVN(
id => $id,
- what => 'extended relations categories'.($r->{rev} ? ' changes' : ''),
+ what => 'extended relations categories anime'.($r->{rev} ? ' changes' : ''),
$r->{rev} ? ( rev => $r->{rev} ) : ()
)->[0];
return $self->ResNotFound if !$v->{id};
$r->{diff} ||= $v->{prev} if $r->{rev};
- my $c = $r->{diff} && $self->DBGetVN(id => $id, rev => $r->{diff}, what => 'extended changes relations categories')->[0];
+ my $c = $r->{diff} && $self->DBGetVN(id => $id, rev => $r->{diff}, what => 'extended changes relations categories anime')->[0];
$v->{next} = $self->DBGetHist(type => 'v', id => $id, next => $v->{cid}, showhid => 1)->[0]{id} if $r->{rev};
if($page eq 'rg' && $v->{rgraph}) {
@@ -67,7 +67,7 @@ sub VNEdit {
my $rev = $self->FormCheck({ name => 'rev', required => 0, default => 0, template => 'int' })->{rev};
- my $v = $self->DBGetVN(id => $id, what => 'extended changes relations categories', $rev ? ( rev => $rev ) : ())->[0] if $id;
+ my $v = $self->DBGetVN(id => $id, what => 'extended changes relations categories anime', $rev ? ( rev => $rev ) : ())->[0] if $id;
return $self->ResNotFound() if $id && !$v;
return $self->ResDenied if !$self->AuthCan('edit') || ($v->{locked} && !$self->AuthCan('lock'));
@@ -76,6 +76,7 @@ sub VNEdit {
( map { $_ => $v->{$_} } qw| title desc alias img_nsfw length l_wp l_cisv l_vnn | ),
relations => join('|||', map { $_->{relation}.','.$_->{id}.','.$_->{title} } @{$v->{relations}}),
categories => join(',', map { $_->[0].$_->[1] } sort { $a->[0] cmp $b->[0] } @{$v->{categories}}),
+ anime => join(' ', sort { $a <=> $b } map $_->{id}, @{$v->{anime}}),
) : ();
my $frm = {};
@@ -88,18 +89,21 @@ sub VNEdit {
{ name => 'l_wp', required => 0, default => '', maxlength => 150 },
{ name => 'l_cisv', required => 0, default => 0, template => 'int' },
{ name => 'l_vnn', required => 0, default => 0, template => 'int' },
+ { name => 'anime', required => 0, default => '' },
{ name => 'img_nsfw', required => 0 },
{ name => 'categories', required => 0, default => '' },
{ name => 'relations', required => 0, default => 0 },
{ name => 'comm', required => 0, default => '' },
);
$frm->{img_nsfw} = $frm->{img_nsfw} ? 1 : 0;
+ $frm->{anime} = join(' ', sort { $a <=> $b } grep /^[0-9]+$/, split(/\s+/, $frm->{anime})); # re-sort
return $self->ResRedirect('/v'.$id, 'post')
- if $id && !$self->ReqParam('img') && 10 == scalar grep { $b4{$_} eq $frm->{$_} } keys %b4;
+ if $id && !$self->ReqParam('img') && 11 == scalar grep { $b4{$_} eq $frm->{$_} } keys %b4;
my $relations = [ map { /^([0-9]+),([0-9]+)/ && $2 != $id ? ( [ $1, $2 ] ) : () } split /\|\|\|/, $frm->{relations} ];
my $cat = [ map { [ substr($_,0,3), substr($_,3,1) ] } split /,/, $frm->{categories} ];
+ my $anime = [ split / /, $frm->{anime} ];
# upload image
my $imgid = '';
@@ -134,6 +138,7 @@ sub VNEdit {
my %args = (
( map { $_ => $frm->{$_} } qw| title desc alias comm length l_wp l_cisv l_vnn img_nsfw| ),
image => $imgid,
+ anime => $anime,
relations => $relations,
categories => $cat,
);
@@ -149,6 +154,13 @@ sub VNEdit {
my %new = map { $_->[1] => $_->[0] } @$relations;
$self->VNUpdReverse(\%old, \%new, $id, $cid);
}
+ # also regenerate relation graph if the title changes
+ elsif($frm->{title} ne $b4{title}) {
+ $self->RunCmd('relraph '.$id);
+ }
+
+ # check for new anime data
+ $self->RunCmd('anime check') if $frm->{anime} ne $b4{anime};
return $self->ResRedirect('/v'.$id.'?rev='.$cid, 'post');
}
@@ -302,7 +314,7 @@ sub VNUpdReverse { # old, new, id, cid
}
for my $i (keys %upd) {
- my $r = $self->DBGetVN(id => $i, what => 'extended relations categories')->[0];
+ my $r = $self->DBGetVN(id => $i, what => 'extended relations categories anime')->[0];
my @newrel;
$_->{id} != $id && push @newrel, [ $_->{relation}, $_->{id} ]
for (@{$r->{relations}});
@@ -312,6 +324,7 @@ sub VNUpdReverse { # old, new, id, cid
comm => 'Reverse relation update caused by revision '.$cid.' of v'.$id,
causedby => $cid,
uid => 1, # Multi - hardcoded
+ anime => [ map $_->{id}, @{$r->{anime}} ],
( map { $_ => $r->{$_} } qw| title desc alias categories img_nsfw length l_wp l_cisv l_vnn image | )
);
}